CodeEngn Basic RCE L09을 바탕으로 설명하겠다.
09.exe를 unpack한 다음 실행시켜보면, 정상적으로 실행이 되지 않는다.
이러면 보통 StolenByte가 복구되지 않아서 프로그램이 동작하지 않는 것이다.
StolenByte란 원래 프로그램의 코드 윗부분을 위치를 upx1으로 이동시켜서 upx0에 덤프되지 않는 코드를 말한다.
popad
와 jmp oep
사이에 연속된 push gadget이 StolenByte라고 생각하면 된다. 따라서 unpacking한 프로그램 윗부분에 다음 gadget을 추가하여 dump를 떠야 한다.
dump 과정은 ollydbg에서 진행하는 법을 몰라 x32dbg 프로그램에서 진행하였다.
다음과 같이 추가를 해주고 OEP를 0x401000으로 바꿔주어야 한다.
플러그인 > scylla를 실행한다. IAT autosearch
, Get Imports
, Dump
를 차례대로 클릭하면 dump된 프로그램이 생긴다.
아마 프로그램을 실행해보면,
다음과 같이 오류가 난다. 그 이유는 IAT(Import Address Table)가 복구되지 않아서 그렇다. 위의 Scylla의 Fix Dump
로 프로그램을 불러오면 _SCY가 붙은 파일이 생성되며 이는 덤프가 완료된 것이다.
'Reversing' 카테고리의 다른 글
angr - (2) Claripy (0) | 2020.04.28 |
---|---|
angr - (1) Introduction (0) | 2020.04.27 |
IDA binary patch (0) | 2020.04.23 |
OEP (0) | 2020.03.21 |
UPX packing & unpacking (0) | 2020.03.21 |