x64dbg手脱64位程序upx3.96壳后修复

查看 127|回复 10
作者:dbgcode   
测试系统:Win764
调试软件:x64dbg
下载地址:https://github.com/x64dbg/x64dbg/releases
64位软件:write
64位加壳软件:upx3.96
下载地址:https://github.com/upx/upx/releases
PE工具:studyPE++64
x64dbg手脱64位程序upx3.96壳后修复
现在64的程序越来越多了,正好前几天看了一个坛友发帖求脱upx的壳(64位程序),估计是变种壳,直接用upx -d失败,只能手脱了。
关于IAT修复,强烈建议大家看下锻钢著的“加密解密第4版”,介绍很详细,一本好书,如果此推荐触犯论坛规则,版主可直接删除,也可通知我删除。

依然是入门小白贴,大神请跳过吧。
1、x64dbg熟悉
2、寻找OEP
3、脱壳插件Scylla使用
4、修复异常
一、x64dbg打开后如下,简单介绍,全凭OD一一对应相似功能,如有不对,尽情谅解。



x64dbg.png (418.54 KB, 下载次数: 0)
下载附件
2021-10-27 22:02 上传


如果没有入口点没有停在软件模块,选项-事件后去除系统断点前的选中状态。



x64dbg01.png (72.48 KB, 下载次数: 0)
下载附件
2021-10-27 22:11 上传


系统API断点设置方法,类同OD的Ctrl+N。


x64dbg02.png (109.49 KB, 下载次数: 0)
下载附件
2021-10-27 22:19 上传

二、打开加壳后的64位write.upx3.96(write为Win7系统标配,可下载加壳软件后自制),我们通过ESP定律找到OEP。



x64dbg03.png (213.81 KB, 下载次数: 0)
下载附件
2021-10-28 00:00 上传


直接F9运行,暂停在这里。



x64dbg04.png (54.02 KB, 下载次数: 0)
下载附件
2021-10-28 00:00 上传


F8单步执行到jmp处,再按一次f8就到了软件OEP处。


x64dbg05.png (82.08 KB, 下载次数: 0)
下载附件
2021-10-28 00:06 上传

三、选择插件-scylla,打开dump窗口,此处已经自动获取了OEP,直接点击dump就好。


x64dbg06.png (112.81 KB, 下载次数: 0)
下载附件
2021-10-28 00:46 上传

保存文件后再单击Autosearch,修复IAT。


x64dbg07.png (106.04 KB, 下载次数: 0)
下载附件
2021-10-28 00:46 上传



x64dbg08.png (126.73 KB, 下载次数: 0)
下载附件
2021-10-28 00:46 上传

一般dump数据和修复IAT后正常应该可以打开了,可是爆了异常。


x64dbg09.png (72.82 KB, 下载次数: 0)
下载附件
2021-10-28 00:55 上传

四、异常修复,我们用x64dbg加载write.upx3.96_dump_SCY。


x64dbg10.png (189.86 KB, 下载次数: 0)
下载附件
2021-10-28 01:23 上传

原因知道了,是因为软件的基址不同,软件找不到正常地址而报错,可是64位软件的基址是动态(ASLR机制),每次加载都不同,可是原程序(未加壳的原程序)可以完成自动修改,我看看源程序的基址和我们脱壳软件有啥不同。



x64dbg11.png (252.39 KB, 下载次数: 0)
下载附件
2021-10-28 01:39 上传




x64dbg12.png (92.3 KB, 下载次数: 0)
下载附件
2021-10-28 01:39 上传

解决补丁思路
1、禁用ASLR机制。
2、加入代码实现自动修改基址。
因为我比较懒,打开studyPE++禁用了ASLR机制,这样每次都用默认基址就能正常打开。



x64dbg15.png (109.5 KB, 下载次数: 0)
下载附件
2021-10-28 10:15 上传


总结,软件脱壳后区段看着和原文件有差异,不够完美,也变大了,需要优化。
ASLR机制禁用只是权宜之计,后续需要编写脚本修复,这个留给大神研究。
补充下禁用的ASLR的方法
注册表禁用适与XP:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
"MoveImages"=dword:00000000
XP后用:Enhanced Mitigation Experience Toolkit

单个软件禁用,脱壳常用软件PETools操作
PETools-Tool-PE Edior-Optional Header,修改dll flags为8100.


微软, 下载次数

dbgcode
OP
  

UPX的OEP很好找,一步就到了。
Ctrl+B,搜索0000000000,个数随意,基本在这上面的第一个跳转就能跳到OEP的位置
hszt   


Hmily 发表于 2021-11-3 18:09
ASLR那是重定位没修复导致的,你修复了重定位表就好了。

修复要找到UPX的重定位处,加区块,写代码,改PE头,太麻烦了,本来想在软件空白处加个跳转改下异常地址,可是不具备通用性,也不是动态链接库DLL文件,还是直接禁止方便,坐等大神出教程,改插件,哈哈哈。。。。
basaiyv   

就是重定位没修复,64位的重定位不会
clite   

比较经典的教程,清楚明了,赞一个
dbgcode
OP
  

写的很清晰
54mj   


云在天 发表于 2021-10-28 22:14
UPX的OEP很好找,一步就到了。
Ctrl+B,搜索0000000000,个数随意,基本在这上面的第一个跳转就能跳到OE ...

大神的方式就是高,小白还是笨方式来吧,省心省脑,哈哈哈。。。
wapj152321   

支持一下,非常详细
庞清源   

学习借鉴,学习分享。
doglove   

请问函数有报错怎么办[i]
您需要登录后才可以回帖 登录 | 立即注册

返回顶部