CodeEngn basic 10번 문제
OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오.
정답인증은 OEP + OPCODE
EX) 00400000EB03
OEP를 구하라고 한 것을 보니 패킹이 되어있을 거 같다.
Exeinfo PE 프로그램을 사용하여 보니 Aspack으로 패킹되어있는 것을 알 수 있다.
Aspack을 푸는 툴을 가지고 있지 않기 때문에 수동으로 unpacking을 해야겠다.
Aspack은 UPX와 비슷하게 처음에 PUSHAD를 통해 레지스터의 값을 넣고 디코딩 한 후 POPAD를 한다.
hardware breakpoint를 걸고 실행 하여
OEP를 찾았다. PUSH 00445834 하고 RETN을 하는 것을 보니 00445834이 OEP인 것을 알 수 있다.
이제 덤프창으로 넘어간다.
덤프창에 OEP를 입력한다. 단 ImageBase를 뺀 값을 입력한다. 덤프버튼을 눌러 새로 저장한다.
ImportREC 프로그램을 들어가 OEP를 입력하고 AutoSearch를 누른 후 Size를 1000으로 한 후 Get Import를 한다.
그후 Fix Dump를 눌러 아까 덤프시킨 문제를 클릭하여 덮어씌운다.
그러면 수동 언패킹을 한 것을 볼 수 있다.
수동 언패킹한 문제를 올리디버거로 연다.
올리디버거로 열어서 Registered ... well done!이라는 성공구문을 찾았다.
성공구문 위에 분기점을 찾았다. 성공으로 가는 분기점의 OPCODE는 75 55 인것을 알 수 있다.
즉, OEP는 00445834이고 성공으로 가는 분기점의 OPCODE는 75 55 이다.
답 : 004458347555
'리버싱 > CodeEngn 문제풀이' 카테고리의 다른 글
CodeEngn basic 12번 문제 풀이 (0) | 2020.08.19 |
---|---|
CodeEngn basic 11번 문제 풀이 (0) | 2020.08.16 |
CodeEngn basic 9번 문제 풀이 (0) | 2020.08.13 |
CodeEngn basic 8번 문제 풀이 (0) | 2020.08.11 |
CodeEngn basic 7번 문제 풀이 (0) | 2020.08.10 |