본문 바로가기

리버싱/CodeEngn 문제풀이

CodeEngn basic 10번 문제 풀이

SMALL

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

LIST