手脱UPX壳--x64dbg为例
原理
upx壳压缩过程:
1.在程序的开头或者其他合适的地方插入一段代码
2.将程序的其他地方压缩,顺带起到混淆作用
解压缩过程:
upx壳在程序执行时实时解压,原理如下
1 |
|
实操
1 |
|
一个简单样例加个壳: upx 1.exe
x64dbg进入
可以看到系统断点,f9运行至断点处
f7步进完压栈内容至lea指令处,找到rsp对应位置下硬件断点
字节影响不大
然后f9可以看到pop和1.exe程序对应的函数调用,中间的jne循环用于补齐缺失的栈段空间
下断点运行至该处然后步进
可以看到进入源程序内部了,使用自带插件Scylla dump(丢弃;脱壳 )
1.IAT自动搜索/IAT Autosearch; 2. 获取导入/Get Imports; 3.删除红叉所在行; 4.转储/Dump;
5.修复转储/Fix Dump 选择dump的文件即可
总结
push过程的栈内容用于解压代码,下断点跟踪栈内容至pop指令下方找到程序函数调用确定程序入口点再插件记录脱壳即可
手脱UPX壳--x64dbg为例
https://alenirving.github.io/2025/07/05/手脱UPX壳--x64dbg为例/