이 문제의 실행 파일은 UPX로 패킹되어 있다.
UPX로 패킹된 프로그램은 실행되는 순간에 압축된 코드를 압축 해제 코드를 이용해 첫 번째 섹션에 푼다.
이때 압축된 코드와 압축 해제 코드는 두 번째 섹션에 있고, 첫 번째 섹션은 압축 해제된 코드가 저장될 영역이다.
언패킹을 해야 디버거로 열었을 때 원래의 코드를 바로 확인할 수 있는데
언패킹을 하지 않고 디버거에서 OEP 코드로 갈 수 있기 때문에 바로 디버거에서 열어 코드의 맨 끝으로 가면 OEP로 점프하는 부분이 있을 것이다.
위의 사진 2장은 패킹이 되어 있는 채로 디버거에 올렸을 때의 모습이다.
UPX로 패킹된 파일을 디버거로 확인했을 때 확인할 수 있는 특징 중 하나는 EP 코드가 PUSHAD와 POPAD로 둘러싸여 있다는 것이다.
그리고 POPAD 명령어 바로 다음 명령어로 JMP가 오는데 이 JMP 하는 부분이 OEP 이다.
그러므로 POPAD 뒤에 오는 JMP 명령어에 BP를 걸고 실행하면 OEP 부분으로 점프할 수 있다.
F8을 눌러 진행하다보면 PUSHAD는 위의 사진과 같이 455BB0 주소에서 볼 수 있고
스크롤을 쭉 내리면 455D06 주소에서 popad 주소를 확인할 수 있다.
popad 명령어 바로 다음 명령어인 jmp 441270 명령어를 따라가면 OEP를 만날 수 있다.
위의 사진에서와 같이 441270 주소가 OEP 부분이다.
여기서부터 분석을 하면 된다.
풀이
위의 방법대로 패킹된 파일 자체를 디버거로 열어 OEP를 찾아가서 분석해도 되지만, 조금 더 간단한 방법으로 풀었다.
패킹된 파일은 파일이 실행될 때 압축 해제하여 실행한다는 점이 있다.
그렇다면 패킹된 파일을 디버거로 연 뒤 F9 키로 Serial Key 값을 입력받는 창이 뜨게 한 상태에서 디버거 내의 문자열 찾기 기능을 이용하면 된다.
디버거에서 F9키로 Serial Key 값을 입력받는 창이 뜨게 한 상태에서 문자열 찾기 기능을 이용하면 위와 같이 문자열들이 나오는데 그 중 "Enter a Serial!" 문자열과 "CrackMe cracked successfully" 문자열 사이에 있는 ""Registered User" 문자열과 "GFX-754-IER-954" 문자열이 답이다.
'전쟁 > codeengn' 카테고리의 다른 글
[codeengn] Basic RCE 07 (0) | 2022.07.28 |
---|---|
[codeengn] Basic RCE 06 (0) | 2022.07.28 |
[codeengn] Basic RCE 04 (0) | 2022.07.24 |
[codeengn] Basic RCE 03 (0) | 2022.07.24 |
[codeengn] Basic RCE 02 (0) | 2022.07.24 |