吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9463|回复: 27
收起左侧

[原创] x64dbg手脱64位程序upx3.96壳后修复

  [复制链接]
dbgcode 发表于 2021-10-28 10:26
本帖最后由 dbgcode 于 2021-10-29 18:26 编辑

测试系统: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

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

系统API断点设置方法,类同OD的Ctrl+N。
x64dbg02.png
二、打开加壳后的64位write.upx3.96(write为Win7系统标配,可下载加壳软件后自制),我们通过ESP定律找到OEP。
x64dbg03.png

直接F9运行,暂停在这里。
x64dbg04.png
F8单步执行到jmp处,再按一次f8就到了软件OEP处。
x64dbg05.png
三、选择插件-scylla,打开dump窗口,此处已经自动获取了OEP,直接点击dump就好。
x64dbg06.png
保存文件后再单击Autosearch,修复IAT。

x64dbg07.png
x64dbg08.png
一般dump数据和修复IAT后正常应该可以打开了,可是爆了异常。
x64dbg09.png
四、异常修复,我们用x64dbg加载write.upx3.96_dump_SCY。
x64dbg10.png
原因知道了,是因为软件的基址不同,软件找不到正常地址而报错,可是64位软件的基址是动态(ASLR机制),每次加载都不同,可是原程序(未加壳的原程序)可以完成自动修改,我看看源程序的基址和我们脱壳软件有啥不同。
x64dbg11.png

x64dbg12.png

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


总结,软件脱壳后区段看着和原文件有差异,不够完美,也变大了,需要优化。
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.














免费评分

参与人数 14吾爱币 +19 热心值 +13 收起 理由
cxl + 1 + 1 我很赞同!
pl3000 + 1 + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
熊布拉吉 + 1 + 1 用心讨论,共获提升!
KingXL + 1 + 1 好详细得备注,爱了。
ContacNt + 1 我很赞同!
bailemenmlbj + 1 + 1 谢谢@Thanks!
wapj152321 + 1 + 1 谢谢@Thanks!
冥界3大法王 + 1 编剧辛苦,剧情不错,期待下集!法王一游。
clite + 1 + 1 我很赞同!
-yuy- + 1 + 1 谢谢@Thanks!
swjia + 1 + 1 很用心
阳仔丶 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Me祝 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

云在天 发表于 2021-10-28 22:14
UPX的OEP很好找,一步就到了。

Ctrl+B,搜索0000000000,个数随意,基本在这上面的第一个跳转就能跳到OEP的位置
 楼主| dbgcode 发表于 2021-11-3 20:19
Hmily 发表于 2021-11-3 18:09
ASLR那是重定位没修复导致的,你修复了重定位表就好了。

修复要找到UPX的重定位处,加区块,写代码,改PE头,太麻烦了,本来想在软件空白处加个跳转改下异常地址,可是不具备通用性,也不是动态链接库DLL文件,还是直接禁止方便,坐等大神出教程,改插件,哈哈哈。。。。
hszt 发表于 2021-10-28 13:51
basaiyv 发表于 2021-10-28 16:01
比较经典的教程,清楚明了,赞一个
clite 发表于 2021-10-28 19:36
写的很清晰
 楼主| dbgcode 发表于 2021-10-28 23:28
云在天 发表于 2021-10-28 22:14
UPX的OEP很好找,一步就到了。

Ctrl+B,搜索0000000000,个数随意,基本在这上面的第一个跳转就能跳到OE ...

大神的方式就是高,小白还是笨方式来吧,省心省脑,哈哈哈。。。
54mj 发表于 2021-10-29 07:11
支持一下,非常详细
wapj152321 发表于 2021-10-29 08:45
学习借鉴,学习分享。
庞清源 发表于 2021-10-29 13:35
请问函数有报错怎么办
doglove 发表于 2021-10-29 16:26
好贴,  我研究一下            。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表