문제
OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오.
정답인증은 OEP + OPCODE
EX) 00400000EB03


10.exe를 ollydbg에 올려보니 위와 같은 메시지가 떴다.
아마 파일이 수정되어 OEP가 코드 바깥에 있어서 실행이 제대로 안 되는 것 같다.

일단 실행을 시켜보니 PUSHAD가 있었다.
CTRL + F로 command 검색을 해보니 POPAD도 존재했다.
이를 바탕으로 패킹이 되어 있다는 것을 알아낼 수 있었다.
UPX로 패킹 된 게 아니라, 어떤 걸로 패킹되었는지 알아보기 위해 PEiD에 넣어보았다.

넣어보았더니 ASPack으로 패킹되어 있는 것을 확인할 수 있었다.
ASPack 언패킹을 수행하기 위해 찾아보던 중, 아래의 글을 발견하였다.
ASPACK unpacking
문제를 풀다가 Aspack을 처음 접해서 해당 공부 내용을 남기고자 블로깅을 진행한다. 0x00. Packer 패커란 실행 파일 압축기를 의미한다, 정확한 명칭은 Run_Time Packer다. '실행 압축'이란 실행 파일에
duwjdtn11.tistory.com
위 글을 바탕으로 분석을 진행하였다.

우선 POPAD를 검색하여 찾은 후, RETN에 BP를 찍었다.
그런 다음 프로그램을 실행시키고, BP에서 F8을 눌러 OEP로 이동하였다.

이동된 주소는 00445834로, OEP가 00445834임을 알 수 있다.
이후 Ctrl + A를 이용하여 패킹된 코드를 다시 정렬해주었다.

정렬이 완료되면 화면이 위처럼 바뀐다.
오른쪽 마우스 - Search for - All referenced text strings를 눌러 문자열을 뽑아보았다.

그랬더니 위와 같은 성공 구문을 발견할 수 있었고, 해당 위치로 이동했다.

이동해보니 바로 위에 JNZ가 있었고, 이 opcode와 위에서 구한 OEP 값을 더하여 입력하였더니 문제가 풀리게 되었다.
'Wargame > CodeEngn' 카테고리의 다른 글
CodeEngn Basic RCE L12 (0) | 2021.05.16 |
---|---|
CodeEngn Basic RCE L11 (0) | 2021.05.16 |
CodeEngn Basic RCE L09 (0) | 2021.05.10 |
CodeEngn Basic RCE L08 (0) | 2021.05.10 |
CodeEngn Basic RCE L07 (0) | 2021.05.10 |