Never Stop Running
[CodeEngn] BASIC 06 본문
* 리버싱 공부를 위한 문제풀이로
정답을 찾는 것과는 조금 다를 수 있습니다.
[CodeEngn] BASIC 06
문제 풀이 환경 |
Windows 10 / Intel / x32dbg / UPX |
문제 URL |
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