首页 网络安全 安全学院 查看内容

利用ESP定律脱 UPX 0.89.6 - 1.02 / 1.05 - 1.24 壳实例

2009-8-9 11:35 641 0

摘要: 利用ESP定律不仅使得脱压缩壳变得非常简单,而且可以应付不少加密壳。简单地说,ESP定律就是利用了堆栈平衡的原理。可以把壳假设为一个子程序,当壳把代码解压前和解压后,必须要做的是遵循堆栈平衡的原理。让...
关键词: nbsp empty FFFFFFFF 0.0 地址 定律 脱壳 ESP 程序 Crackme

利用ESP定律不仅使得脱压缩壳变得非常简单,而且可以应付不少加密壳。简单地说,ESP定律就是利用了堆栈平衡的原理。可以把壳假设为一个子程序,当壳把代码解压前和解压后,必须要做的是遵循堆栈平衡的原理。让ESP执行到OEP时,使ESP和壳初始入栈时的ESP相一致。ESP定律的使用方法:载入加壳程序,当ESP中的值第一次改变时记下这个值。对这个值下的硬件访问断点,运行程序后,一般的压缩壳都会停在待转向OEP的那条语句上。利用ESP定律脱 UPX 0.89.6 - 1.02 / 1.05 - 1.24 壳实例1.OllyDbg打开加了UPX壳的Crackme.exe地址          HEX数据          反汇编          注释00457B40          60          PUSHAD          程序的入口点寄存器 ( FFU )EAX 00000000ECX 0012FFB0EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 7FFDD000ESP 0012FFC4EBP 0012FFF0ESI FFFFFFFFEDI 7C930738 ntdll.7C930738EIP 00457B40 Crackme.<模块入口点>C 0 ES 0023 32位 0(FFFFFFFF)P 1 CS 001B 32位 0(FFFFFFFF)A 0 SS 0023 32位 0(FFFFFFFF)Z 1 DS 0023 32位 0(FFFFFFFF)S 0 FS 003B 32位 7FFDF000(FFF)T 0 GS 0000 NULLD 0O 0 LastErr ERROR_SUCCESS (00000000)EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)ST0 empty -UNORM BCE0 01050104 00000000ST1 empty 0.0ST2 empty 0.0ST3 empty 0.0ST4 empty 0.0ST5 empty 0.0ST6 empty 0.0ST7 empty 0.0               3 2 1 0      E S P U O Z D IFST 0000 Cond 0 0 0 0 Err 0 0 0 0 0 0 0 0 (GT)FCW 027F Prec NEAR,53 掩码    1 1 1 1 1 12.按F8键单步运行到第二句地址          HEX数据          反汇编00457B41          BE 00B04300          MOV ESI,Crackme.0043B000发现ESP寄存器中的值发生变化 -- 变为0012FFA4 ( 硬件不同 - 此值可能不相同 )EAX 00000000ECX 0012FFB0EDX 7C92EB94 ntdll.KiFastSystemCallRetEBX 7FFDD000ESP 0012FFA4EBP 0012FFF0ESI FFFFFFFFEDI 7C930738 ntdll.7C930738EIP 00457B41 Crackme.00457B41C 0 ES 0023 32位 0(FFFFFFFF)P 1 CS 001B 32位 0(FFFFFFFF)A 0 SS 0023 32位 0(FFFFFFFF)Z 1 DS 0023 32位 0(FFFFFFFF)S 0 FS 003B 32位 7FFDF000(FFF)T 0 GS 0000 NULLD 0O 0 LastErr ERROR_SUCCESS (00000000)EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)ST0 empty -UNORM BCE0 01050104 00000000ST1 empty 0.0ST2 empty 0.0ST3 empty 0.0ST4 empty 0.0ST5 empty 0.0ST6 empty 0.0ST7 empty 0.0               3 2 1 0      E S P U O Z D IFST 0000 Cond 0 0 0 0 Err 0 0 0 0 0 0 0 0 (GT)FCW 027F Prec NEAR,53 掩码    1 1 1 1 1 13.HR 地址 -- 设置硬件访问断点在命令行输入 hr 0012FFA4[ Enter... ]然后按F9键调用程序运行,可以发现已经来到了 00457C65 - E9 D295FAFF     JMP Crackme.0040123C 地址处,这正好是跳向OEP的那条指令Jmp语句,再按F8键跳向0040123C地址处。4:对其右键,选择“用OllyDump脱壳调试进程”,起始地址一般都是400000,文件大小自动识别即可。入口点地址也自动定位到了程序OEP的偏移地址123C处,代码起始RVA和数据起始也按默认识别的就可以。5:勾选下面的重建输入表,OllyDump会自动修复引入表。一般选择方式1,如果方式1脱壳后修复的效果不理想,可以尝试方式2,不过最好还是用专业的 Import REConstructor 修复最好。6:单击“脱壳”按钮用PEiD扫描一下,检测到程序是用 Microsoft Visual Basic 5.0 / 6.0 编写的。[ Finish... ]可以看出,ESP定律的效果是非常明显的,熟练掌握ESP定律对于手动脱壳是非常有用的。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部