Never Stop Running

[CodeEngn] BASIC 06 본문

Training/Codeengn

[CodeEngn] BASIC 06

Gyoran 2018. 9. 24. 08:58

리버싱 공부를 위한 문제풀이로

정답을 찾는 것과는 조금 다를 수 있습니다.

[CodeEngn] BASIC 06


문제 풀이 환경

Windows 10 / Intel / x32dbg / UPX

 문제 URL

https://www.codeengn.com/challenges/basic/06


BASIC 6번 문제.

문제는 OEP와 Serial을 찾는 것이다.

OEP란 Original Entry Point를 말한다. 패킹된 파일을 실행할 때 자동적으로 시스템 내부에서 언패킹을 한다. 언패킹이 끝나면 복구한 원본코드를 동작시켜야 하는데 이 원본코드의 Entry Point를 OEP라고 한다.



먼저 파일을 열어 메모리 맵을 보니 UPX로 패킹되었다는 것을 확인할 수 있다.


PUSHAD 코드를 확인했다.


PUSHAD 코드를 지나니 오른쪽 하단에 보이는 것처럼 8개의 레지스터 값이 저장되는 것을 확인할 수 있다.


이 값에 Break Point를 건다. 하드웨어 엑세스 DWORD로 걸면 된다.


그리고 F9를 이용하여 실행시키면 POPAD 명령어가 지난 후 프로그램이 정지한다. 그리고 그 밑에는 점프문이 두개 있는데 자연스럽게 F8을 눌러 내려가면 맨 밑의 JMP문으로 간다는 것을 확인할 수 있다.


이 점프문에서 F7을 눌러 내부 원본 코드를 볼 수도 있고, 그냥 밖에서 보아도 OEP 주소가 [00401360]인 것을 확인할 수 있다.


JMP문 안으로 들어간다. 여기서 [다음을 찾기] - [현재 모듈] - [문자열 참조]를 하면 바로 맨 위에 Serial값이 나온다.

'Training > Codeengn' 카테고리의 다른 글

[CodeEngn] BASIC 08  (0) 2018.09.24
[CodeEngn] BASIC 07  (0) 2018.09.24
[CodeEngn] BASIC 05  (0) 2018.09.24
[CodeEngn] BASIC 04  (0) 2018.09.24
[CodeEngn] BASIC 03  (2) 2018.09.24
Comments