
个人总结的一个vmp脱壳步骤.doc
4页个人总结的一个 VMP 脱壳步骤个人在学习脱 VMP 加壳的过程中总结的一个步骤按照这个步骤,包括 VMP1.6—2.0 在内应该有 70%-80%能脱壳脱不了的也别问我,我也刚开始学习我还想找人问呢想要脱 VMP 的壳,首要工作当然是要找一个强 OD 啦!至于是什么版本的 OD 自己多试验几个,网上大把大把的,一般来说只要加载了你想脱的 VMP 加壳程序不关闭都可以其次就是 StrongOD.dll 这个插件了,现在用的比较多的就是海风月影,同样网上也是大把大把的下载回来后复制到你的 OD 程序所在的文件夹里面的 plugin 里StrongOD 的设置选项搞不懂就全部打钩接下来要做的工作就是搞清楚我们要脱壳的程序编程的语言了,可以用 PEID 或者 fastscanner 查看,如果在这里看不到也可以在 OD 载入以后通过里面的字符串判断了例如 VB 的程序会出现 MSVB----/VC的会出现 MSVC---等等这些都是程序运行所需要的 windows 链接文件做完这些预备工作接下来当然是用 OD 载入文件啦文件载入后在反汇编窗口 CTRL+G 搜索VirtualProtect(注意 V 跟 P 要大写,至于为什么要搜索这个别问我)。
一般来说搜索的结果会出现以下的类似:7C801AE3 E8 75FFFFFF call kernel32.VirtualProtectEx我们在这里下 F2 断点然后 F9 运行到我们下的这个断点接下来我们就要注意观察堆栈窗口了一般来说当我们 F9 运行到我们上面下的断点的时候在堆栈窗口会出现以下类似:0012F66C 00401000 |Address = TradeCen.004010000012F670 000280D1 |Size = 280D1 (164049.)0012F674 00000004 |NewProtect = PAGE_READWRITE0012F678 0012FF98 \pOldProtect = 0012FF98我们要注意观察的就是在接下来我们 F9 运行的时候,ADDRESS 和 NEWPROTECT 这两行的变化按F9-速度别太快,直到 NewProtect 项变为 PAGE_READONLY,这时候程序就释放完毕了0012F66C 0042A000 |Address = TradeCen.0042A0000012F670 000069DE |Size = 69DE (27102.)0012F674 00000002 |NewProtect = PAGE_READONLY0012F678 0012FF98 \pOldProtect = 0012FF98现在可以取消刚才我们下的断点了。
接下来就是找 OEP 了找 OEP 的时候我个人的一个经验就是OEP 一般就在接近上面的 ADDRESS 地址的附近例如上面的地址是 0042A000,我一般就在这个基础上减到 420000 搜索程序的特征段,当然我们也可以直接跳到 401000 开始搜索虽然我们搜索的范围比较大,但是因为我们搜索的是命令序列,所以工作量还不是很大废话不多说,CTRL+G--上面的地址,然后 CTRL+S 查找命令序列命令序列的内容就是我们用查到的编程语言的特征段我们可以在特征段里面选择两三句固定不变的命令查找例如 VC++6.0 的特征段是0046C07B U> 55 push ebp0046C07C 8BEC mov ebp,esp0046C07E 6A FF push -10046C080 68 18064C00 push UltraSna.004C06180046C085 68 F8364700 push UltraSna.004736F80046C08A 64:A1 00000000 mov eax,dword ptr fs:[0]0046C090 50 push eax0046C091 64:8925 00000000 mov dword ptr fs:[0],esp0046C098 83EC 58 sub esp,580046C09B 53 push ebx0046C09C 56 push esi0046C09D 57 push edi我们可以只搜索前三条命令。
找到符合前三条命令的,我们在对照接下来的命令只要命令相符那这个地址八九不离十就是 OEP 了如果在 ADDRESS 地址附近找不到 OEP,那就只好用笨办法,从 401000 开始找吧找到 OEP 地址后,我们在 OEP 处点鼠标右键《此处为新 EIP》 接下来就可以 dump 啦通常选择 OD的 dump 插件脱壳要好点,用 loadpe 脱壳后要么程序不运行要么干脆没脱用 OD 的 dump 插件脱壳的时候,脱壳窗口下面的(重建输入表)项前面的勾一定要去掉,这个也是前辈总结的经验到此脱壳就结束了可以试验一下脱壳后的程序了能运行说明它在 70-80%的范围,不能运行的话那也是我还在学习的内容,大家共同探讨!以下是主要几种编程语言的 OEP 特征段:Borland C++0040163C B> /EB 10 jmp short Borland_.0040164E0040163E |66:623A bound di,dword ptr ds:[edx]00401641 |43 inc ebx00401642 |2B2B sub ebp,dword ptr ds:[ebx]00401644 |48 dec eax00401645 |4F dec edi00401646 |4F dec edi00401647 |4B dec ebx00401648 |90 nop00401649 -|E9 98E04E00 jmp SHELL32.008EF6E60040164E \A1 8BE04E00 mov eax,dword ptr ds:[4EE08B]00401653 C1E0 02 shl eax,200401656 A3 8FE04E00 mov dword ptr ds:[4EE08F],eax0040165B 52 push edx0040165C 6A 00 push 00040165E E8 DFBC0E00 call **********************************************************************************Delphi00458650 D> 55 push ebp00458651 8BEC mov ebp,esp00458653 83C4 F0 add esp,-1000458656 B8 70844500 mov eax,Delphi.004584700045865B E8 00D6FAFF call Delphi.00405C6000458660 A1 58A14500 mov eax,dword ptr ds:[45A158]00458665 8B00 mov eax,dword ptr ds:[eax]00458667 E8 E0E1FFFF call Delphi.0045684C0045866C A1 58A14500 mov eax,dword ptr ds:[45A158]00458671 8B00 mov eax,dword ptr ds:[eax]00458673 BA B0864500 mov edx,Delphi.004586B000458678 E8 DFDDFFFF call Delphi.0045645C0045867D 8B0D 48A24500 mov ecx,dword ptr ds:[45A248] ; Delphi.0045BC0000458683 A1 58A14500 mov eax,dword ptr ds:[45A158]00458688 8B00 mov eax,dword ptr ds:[eax]0045868A 8B15 EC7D4500 mov edx,dword ptr ds:[457DEC] ; Delphi.00457E3800458690 E8 CFE1FFFF call Delphi.0045686400458695 A1 58A14500 mov eax,dword ptr ds:[45A158]0045869A 8B00 mov eax,dword ptr ds:[eax]0045869C E8 43E2FFFF call Delphi.004568E4**********************************************************************************Visual C++ 6.00046C07B U> 55 push ebp0046C07C 8BEC mov ebp,esp0046C07E 6A FF push -10046C080 68 18064C00 push UltraSna.004C06180046C085 68 F8364700 push UltraSna.004736F80046C08A 64:A1 00000000 mov eax,dword ptr fs:[0]0046C090 50 push eax0046C091 64:8925 00000000 mov dword ptr fs:[0],esp0046C098 83EC 58 sub esp,580046C09B 53 push ebx0046C09C 56 push esi0046C09D 57 push edi0046C09E 8965 E8 mov dword ptr ss:[ebp-18],esp0046C0A1 。












