Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
[ 그림 10 ]<br />
가장 먼저 보이는 명령어가 PUSHAD 명령어입니다. 해당 명령어는 아래 그림에 나와있는<br />
8개의 레지스터 값을 EAX부터 차례로 스택에 넣으라는 명령어입니다.<br />
[ 그림 11 ]<br />
왜 레지스터의 값을 전부 스택에 넣는 것일까요?? 그것은 현재 상태의 레지스터 값을 저장<br />
해 놨다가 압축이 풀린 코드에서 해당 레지스터 값을 불러서 사용하기 때문입니다. 그러면<br />
분명히 해당 레지스터 값들을 스택에서 다시 레지스터로 불러오는 POPAD명령어가 있을 것<br />
입니다. 그 부분이 어디인지 찾아보도록 하겠습니다. 처음에 PUSHAD를 실행 시켜 줍니다.<br />
그 다음에 그때 설정 된 ESP에 접근하면 멈추게 하는 “Hardware, on access” 하드웨어<br />
브레이크포인트를 걸어줍니다. 그 다음에 F9를 눌러서 실행을 시켜주면<br />
[ 그림 12 ]<br />
위와 같은 상태로 멈추게 됩니다. 코드를 보니 POPAD가 존재하는 것을 확인할 수 있습니<br />
다. 가장 아래 있는 JMP문까지 실행을 시켜주면 OEP로 갈 수 있습니다. JMP문을 실행 시<br />
킨 후의 코드를 봐보겠습니다.<br />
[ 그림 13 ]<br />
제대로 된 OEP를 찾은 것 같습니다. 만약 아니라면 언패킹 한 후 실행 시킬 때 오류가 나<br />
겠죠?? 이제 저 부분에 덤프를 떠줍니다.<br />
- 8 -