0x0102

[CodeEngn] Basic RCE L10 본문

Write Up/CodeEngn

[CodeEngn] Basic RCE L10

jxx_yxjx 2022. 11. 1. 19:58

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

먼저 PEiD에 해당 파일을 열어서 패킹 상황을 살펴본다.

ASPack 형태로 패킹되어 있는 것을 확인할 수 있다.

구글링을 통해 ASPack 형태는 PUSHAD -> 복호화 코드 실행 -> POPAD -> Return 0C -> OEP 값 PUSH -> Return으로 OEP 주소로 이동하는 특징이 있다는 것을 알아냈다.

따라서 파일을 따로 언패킹하지 않고 바로 디버거에서 살펴보았다.

먼저 우클릭 -> search for -> find all commands로 popad를 검색해보았다.

그러나 검색 결과가 너무 많아서, RETN0c로 검색해보았다.

이후 다음 주소로 들어가서 break point를 찍고 다시 실행해보았다.

bp를 찍고 bp 전까지 실행시키면 하단에 PUSH 명령어가 PUSH (OEP) 로 바뀌게 된다.

RETN 0C 이후 주소, Push (OEP)를 발견했다. 00445834

이후 opcode를 추가로 알아내야하므로 다시 RETN 0C로 돌아가 F8키를 통해 진행하며 힌트를 찾아보았다.

실행을 시키며 찾다보니 하단의 사진과 같이 성공했을 때 출력될 아스키 값을 확인할 수 있었다.

등록 성공 주소는 찾았으므로, 상단에 조건 분기문이 있는지 더 살펴본다.

004454D4 주소를 보니 JNZ 분기문이 있는 것을 확인할 수 있었다.

분기문에 따라 등록의 성공과 실패가 갈리는 것으로 보인다.

따라서 이 분기점의 opcode는 7555이다.

정답은  OEP + OPCODE 즉,  00445834+7555 = 004458347555이다.

 

'Write Up > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L12  (0) 2022.11.03
[CodeEngn] Basic RCE L11  (0) 2022.11.03
[CodeEngn] Basic RCE L09  (0) 2022.11.01
[DownUnderCtf 2022] rev - Clikcy  (0) 2022.09.30
[CodeEngn] Basic RCE L07  (0) 2022.09.29