본문 바로가기

CodeEngn

[CodeEngn]코드엔진 Advance RCE L06 문제: 남은 군생활은 몇일 인가 정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 올리디버거를 열어보니, 패킹되어있을 확률이 있다는 것을 알았다. PEiD를 통해 패킹되어있음을 확인했다. upx를 언패킹해준다. 언패킹한 파일의 올리디버거를 연다. ollydbg를 통해 text를 확인해보니 AutoIt이 사용되었음을 확인할 수 있다. 또 밑을 보니, C++로 작성되었음을 확인했다. 디컴파일러로 풀 수 있을 것 같다는 생각을 했다. 따라서 AutoIt의 decompiler인 Exe2Aut를 사용했다. 군 생활이 790임을 확인했다. 더보기
[CodeEngn]코드엔진 advance RCE L03 시리얼 문제이다. DialogBoxParamA함수와 관련한 작업이다. 함수를 확인해보니, getDigitItem이 중요할 듯 하다. bp를 걸어주고 진행해봐야겠다. 앞의 bp에서 진행되지 않길래 지우고 그 뒤에 있던 bp로 가봤다. 이 창이 뜸을 확인했다. 난 check가 안 돼서 뭐지 싶었는데 tap+enter를 누르니까 갑자기 결과가 나타났다 근데 진행이 잘 안 돼서 확인해봤는데, CMP EAX,0x3인 것을 보니, 문자열이 3자리 이상이면 바로 종료함을 확인했다. CodeEngn은 8자리이니까 8로 수정해본다. 8로 수정. 수정후 바로 시작 드디어 정상적으로 넘어간다 아까 입력했던 abcde가 보이고 3265754874랑 비교함을 확인했다. 정답과 내가 입력한 값을 비교함을 확인했다. 더보기
[codeengn]코드엔진 Advance RCE L01 문제: 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 ollydbg로 열어보려고 했는데 encrypt되어있다고 한다. PEiD로 보니, UPX로 패킹되어있음을 알 수 있다. cmd창에서 upx로 언패킹해주었다. 이제 ollydbg로 열어보도록 한다. ollydbg로 잘 열림을 확인했다. 종료에 대한 문제이므로 search for - intermodular calls를 확인한다. 시간과 관련 있는 문제이므로, timeGetTime에 set breakpoin on every~를 해준다. bp건 곳으로 가니까 이 부분이 나오고 그다음 bp로 가면 프로그램이 꺼져버린다. time 관련하여 연산하는 걸 찾아봐야 할 듯 하다. 일단 CALL EDI부분은 time.. 더보기
[CodeEngn]코드엔진 Basic RCE L20 문제: 이 프로그램은 Key파일을 필요로 하는 프로그램이다. 'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가 Ex) 41424344454647 (정답이 여러개 있는 문제로 인증시 맞지 않다고 나올 경우 Contact로 연락주시면 확인 해드리겠습니다) 일단 CRACKME3.KEY 라는 파일이 필요한 듯 하다. 그리고 그 key 파일이 18(12)만큼의 바이트가 있는지 확인하는 듯 하다. 이렇게 저장을 하고 실행해보니 잘 읽음을 확인했다. 다음과 같은 알고리즘이 나왔다. ESI와 BL값을 세팅함을 확인할 수 있었다. - BL에 0x41 값 저장 - ESI의 1byte를 AL 레지스터에 저장 - AL과 BL를 XOR하고 AL에.. 더보기
[codeengn]코드엔진 Basic RCE L19 문제: 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 밀리세컨드에 대한 내용이므로 call을 확인하면 될 것이다. 이 파일을 Ollydbg로 열어 Search for->All intermodular calls를 확인한다. 맨 위로 올라가면 된다. 그럼 시간에 대한 함수가 있는데 이러한 모든 함수에 BP를 건다. 좀 내려보니까 isDebuggerPresent 함수가 보인다. 뭔가 단서가 있을 듯 하여 BP를 걸어주었다. isDebugger가 있는 곳으로 이동해 JNE가 있어서 JE로 바꿔봤다. -> JE로 바꿨는데 이게 꺼지는 지름길이었다. 일단 JNE로 다시 바꾸고, timeGetTime함수가 있는 곳으로 이동했다. 바로 밑에 CMP가 있다. 조금 수상쩍지만 그냥 진행해본다. 좀 내려가다보면 여기로 오는.. 더보기
[CodeEngn]코드엔진 basic RCE L16 문제: Name이 CodeEngn일때 Serial을 구하시오 ollydbg로 16번을 열어보니 잘 열린다. 패킹은 안 되어있는 듯 하다. 일단 문자열을 확인해본다. 'Good Job!'이 있는 곳으로 간다. Good Job이 있는 부분 위를 보니, CMP가 있는 곳이 딱 하나가 있다. 이 부분을 breakpoint건다. EAX와 PTR SS:[EBP-0x3C]를 비교해야 하기 때문에, 이 부분까지 다시 실행해, EAX와 EBP를 알아내도록 한다. 확인해보니 EAX는 내가 입력한 PW의 16진수, EBP는 0070FF28임을 확인했다. PTR SS:[EBP-0x3C] 값을 알아내야 하기 때문에 위에서 -3C를 해줘야 한다. 나는 그냥 계산기로 연산을 해주었다. 그럼 70FEEC가 나온다. 이제 이 주소의 .. 더보기
[CodeEngn]코드엔진 Basic RCE L15 문제: Name이 CodeEngn일때 Serial을 구하시오 저번에 푼 문제와 비슷한 듯 하다. 일단 ollydbg로 열어본다. 일단 ollydbg에서 그냥 열리는 것을 보아, 패킹은 되어있지 않다. text strings를 확인해본다. 거의 맨 밑으로 가보니 이렇게 Cracked, Try again이 나온다. 이 부분으로 이동해본다. PTR DS:[0x45B844]와 EAX를 비교함을 확인할 수 있다. 여기서 PTR DS:[주소]는 이 주소에 저장된 값을 뜻한다. 온 김에, 그 주소에 있는 값을 알아보고자 한다. Follow in Dump - Memory address를 누른다. 그럼 60 61 00 00 이 나오는데, 이는 리틀엔디안으로 표기되어 있다. 따라서 00 00 61 60 으로 보면 된다.(.. 더보기
[CodeEngn]코드엔진 basic RCE L14 문제: Name이 CodeEngn 일때 Serial을 구하시오 (이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) Ex) 11111 bruteforce에 관한 문제인 듯 하다. 프로그램을 일단 실행해보니 이렇게 나옴을 확인할 수 있다. ollydbg로 열어보니 패킹되어있을 수 있다고 한다. PEiD를 통해 패킹여부를 확인해본다. UPX로 패킹되어있음을 확인했다. UPX를 통해 언패킹한다. 난 14.exe를 un_14.exe에 저장해주었다. 이제 파일을 올리디버거로 열어준다. 문자열을 확인해보니(Search for- ~text strings) Good job이 있다. 저쪽으로 이동해본다. 보니, Good Job으로 가려면 저기 빨간색체크 표.. 더보기