一、静态方法
upx -d
有时候可能会失败,需要切换使用正确的UPX版本。Windows下内置对各UPX版本的第三方图形化界面UPXShell工具,可以方便的切换版本,通过go按钮,可以切换upx加壳版本与脱壳版本


二、动态方法(手脱)
虽然UPX本身可以脱壳,但是UPX是基于加壳后可执行文件内存储的标识来查找并操作的,由于UPX是开源的,软件保护者可以随意修改这些标识,从而导致官方标准版本的UPX脱壳失败。因为UPX中可以改动的地方太多,所以人们在这种情况下一般采用动态脱壳
x86的汇编指令pushad可以轻松将所有寄存器一次性压入栈,UPX使用了这样的方式,被形象的称为“保护现场”,所以将这里的下一步执行后,在esp下硬件读取断点,再次调用就是esp返回的时候,我们直接就可以回到原来的程序执行流
执行过程:
先F8到pushad的下一步,然后在寄存器那边右键ESP,"HW break [ESP]"下硬件断点

设置完成后,F9运行,再次中断到一个地址

本文介绍了两种UPX脱壳方法:静态方法和动态方法(手脱)。静态方法使用UPX命令行工具进行脱壳,可能需要切换UPX版本。动态方法针对UPX标识可能被修改的情况,通过在特定汇编指令处设置硬件断点,实现程序执行流的恢复,最后使用OllyDump插件完成脱壳过程。
最低0.47元/天 解锁文章
7591

被折叠的 条评论
为什么被折叠?



