코드엔진 5번 문제
이 프로그램의 등록키는 무엇인가
한줄씩 실행해보기
한줄씩 실행시켜보면 004412BC 주소에서 메시지 박스가 호출되는 것을 알 수 있다. 위에 칸에 123을 입력하고 아래 칸에 456을 입력해보았더니 잘못되었다는 메시지가 출력되었다.
그 다음줄 실행
다음줄을 실행하였더니 서브루틴함수로 들어가졌다. 코드가 끝인 것 같다.
그래서 오른쪽 마우스 클릭 -> Search for -> All referenced text strings 를 통해 이동해보겠다.
All referenced text strings 실행시킨 상태
All referenced text strings 중에서 아까 오류메시지가 뜬 부분을 찾아 이동할 것이다. 더블클릭하면 그 부분 위치를 볼 수 있다.
wrong Serial, try again! 문자열이 입력된 부분으로 이동
wrong Serial, try again! 이 입력된 부분으로 이동했다. 코드들을 하나 하나 다 읽어보는 건 비효율적이라고 생각해 이 함수 시작 부분에 BP(breakpoint)를 걸어주겠다.
함수 시작 부분에 BP 걸기
이제 F9를 이용해 BP 부분 전까지 실행시켜주겠다.
한줄씩 실행(F8)
나는 '123'과 '456' 이라는 값을 입력을 해줬기 때문에 "No Name entered" "Enter a Name!" 문자열을 점프된다. 아래로 쭉 한줄씩 실행시켜보겠다.
레지스터 값에 주목해주세요
00440F2C 주소를 실행시키자 EAX 레지스터에 내가 입력한 값 '123' 이 들어간 것을 확인 할 수 있다. 계속 한줄씩 실행시켜보겠다.
레지스터 값에 주목해주세요
00440F2F 주소를 실행시키자 EDX 레지스터에 파일에 입력 되어있던 아스키 값이 들어간 것을 확인할 수 있다. 다시 한줄씩 실행시켜보겠다.
0044F39 주소 실행시키기
JNZ 명령어를 따라 00440F8C 주소로 이동
JNZ 명령어는 제로 플래그가 0이거나 앞의 연산 결과가 0이 아니면 점프하는 명령어이다. 따라서 0040F34 주소의 CALL 명령어가 부르는 주소에는 등록키 값과 사용자가 입력한 값을 비교하는 함수가 들어있다는 것을 추측할 수 있다. 제로 플래그 값을 1로 바꿔 다시 실행해보겠다.
0040F39 주소의 제로 플래그 값을 1로 바꾸고 한줄씩 실행한 상태
00440F49 주소를 실행시키자 EAX 레지스터에 내가 입력한 값 '456' 이 들어간 것을 확인 할 수 있다. 계속 한줄씩 실행시켜보겠다.
레지스터 값에 주목해주세요
00440F4C 주소를 실행시키자 EDX 레지스터에 파일에 입력 되어있던 아스키 값이 들어간 것을 확인 할 수 있다. 다시 한줄씩 실행시켜보겠다.
00440FE56 주소 실행시키기
JNZ 명령어를 따라 00440F72 주소로 이동
위 설명과 같이 제로플래그 값이 0이기에 00440F72 주소로 이동한 것을 알 수 있다.
내가 입력한 '123' 값과 파일에 입력되어있던 'Registered User' 를 비교하여 메시지 창을 불러오고 '456' 값과 파일에 입력되어있던 'GFX-754-IER-954' 를 비교하여 메시지 창을 불러온다는 것을 알았다.
성공!!!!
따라서 답은 'Registered User','GFX-754-IER-954' 문자열이다.
코드엔진 6번 문제
Unpack을 한 후 Serial을 찾으시오.
정답인증은 OEP + Serial
-OEP란? : ORIGINAL ENTRY POINT. 디버깅을 하면 UNPACKING이 되고 원래 파일이 나오는데 그 원래 파일의 엔트리 포인트. PUSHAD-POPAD 후 있는 점프문이 OEP로 가는 코드인 경우가 많다.
먼저 PUSHAD 찾고, 그 다음 POPAD 찾기
POPAD 아래 보니 JMP 00401360이 있다. 즉, OEP는 00401360이다.
그 다음, 00429A48에 브레이크포인트를 걸고 실행(F9) 후, F7로 들어가기.
Search for > all intermodular calls로 들어가 함수를 살펴보니 문자열을 가져오는 함수 GetDigItemTextA 함수 발견
더블클릭해서 들어가보니 프로그램을 실행하면 나왔던 “wrong serial!!” 문자열도 발견 가능했다.
조금 더 위에 살펴보니 “you got it” 문자열도 있는데 이게 아마 성공하면 뜨는 메시지일 것이다. 더 위를 살펴보니 TEST 명령어와 아스키코드 AD46DFS547이 있다.
정답이라는 창이 나왔다. 즉 SERIAL번호는 AD46DFS547 다.
'2. Reversing (리버싱) > 1) Write UP' 카테고리의 다른 글
[2021.10.09] CodeEngn Basic RCE L07, L08, L09, L10 풀이 (0) | 2021.10.09 |
---|---|
[2021.09.25] abex crackme 5, PE파일 (0) | 2021.10.04 |
[2021.09.18] CodeEngn Basic RCE L03, L04 풀이 (1) | 2021.09.18 |
[2021.05.22] CodeEngn Advanced / xcz.kr & 교재 7장 (0) | 2021.05.22 |
[2021.05.15] reversing.kr , suninatas, xcz & 교재 6장(dll), 8장 (0) | 2021.05.15 |