首页
社区
课程
招聘
[原创]IDA + Debug 插件 实现64Bit Exe脱壳
发表于: 2011-7-19 14:10 30560

[原创]IDA + Debug 插件 实现64Bit Exe脱壳

obaby 活跃值
20
2011-7-19 14:10
30560

IDA + Debug 插件 实现64Bit Exe脱壳
By :obaby
对于64位的可执行程序已经搞了好长一段时间了,但是却一直没有写点什么东西。前面的两篇文章仅仅是单纯的翻译,个人认为不管是32位还是64位的程序脱壳只要能到达程序的OEP就可以了。现在支持64位加壳的程序貌似也不多,这里以mpress压缩的64位系统下的64位notepad为例进行简单的演示。
在《IDA + Bochs 调试器插件进行PE+ 格式DLL脱壳 》一问中提到了可以使用bochs调试器进行DLL文件脱壳。但是却没有办法进行64位EXE文件调试,启动调试之后由于代码完全识别错误,因为会出现异常导致无法调试。
要想调试64位可执行程序目前只有通过远程调试的方式,使用Windbg插件同样是无法进行调试的。但是用windbg调试时将会提示如图1所示的信息:

图1
而直接运行dbgsrv启动的其实是和ida内置的远程调试插件差不多的一个服务。命令行参数如图02所示。

图2
因而在实际的调试过程中还是一个远程调试模式。至于具体的用法感兴趣的可以看下windbg的帮助文件,里面有详细的介绍。
这里就直接以IDA的远程调试程序进行吧,由于是本机调试,并且本地系统是64bit win7所示直接运行win64_remotex64.exe启动调试器即可,启动之后界面如图3所示。

图3
在IDA中将调试器设置为Remote Win32 Debugger,入股4所示。

图4
此时就可以F9运行程序了,由于这里没有配置调试器选项因而在启动的时候会出现一些提示信息,全部点掉之后将会打开如图5所示的进程调试设置窗口,在Hostname中输入本机IP地址,端口中输入服务器监听的调试端口。如果服务器不再本地则直接输入服务器的IP,通过这种方式可以在32位系统上进行64位程序的调试,这不是本文的重点就不再介绍了。

图5
在启动之前最好在程序的入口点设置一个断点,否则程序就会直接启动了。启动之后将会停留在如下的代码处(已经设置断点)

图6
F8单步执行到如下代码处之后一切就比较明朗了。

图7
往下看可以看到一个跳转到不知道什么地方的jmp跳转,对于压缩壳比较熟悉的应该知道这个就是跳转到入口点的Jmp了。

图8
其实使用ida进行调试的最大的好处就是看到的代码会比较直观,程序的流程一目了然。而这些代码如果在od中查看的话可能直接单步调试的话会更好一些。
直接在0000000100035E66 jmp     near ptr unk_10000B770,一行设置断点然后F9运行即可。其实通过后面的地址也可以知道跳转到的地址IDA分析失败了,因而会显示unk前缀,如果跳转到这个地址看到的应该是一片乱码,如图9所示。

图9
这是因为程序自身的代码还没有解压,所以看到的是一片空白的区域。直接F9执行到0000000100035E66 jmp     near ptr unk_10000B770一行之后再进行F8单步一次就到达了程序的原始OEP了,如图10

图10
到这里就可以进行脱壳了,需要注意的是这里原来已经熟悉的32位的脱壳工具都不再适用了,需要使用64位的工具。运行CHimpREC 64,程序界面如图11所示。

图11
在附加进程中选择Notepad.exe,选择之后首先要执行dump进行转存,这个比较简单一些。将内存镜像保存为exe即可。最后就是IAT的修复了,这里与32位系统的操作基本一致。
可以先点击IAT auto search,如果查找成功将会出现如图12所示的提示信息。

图12
然后点击Get Imports获取输入表。

图13
点击show invalid去掉或者修复无效的函数,最后fix dump即可。脱壳之后的程序比原始程序稍微大了一点。

图14
但是程序正常运行还是没有问题的的。呵呵。说实话本文没什么技术含量,让大家见笑了。

pdf版本以及相关工具下载:
PDF and Mpress.rar


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
好文啊,顶楼主
2011-7-19 14:15
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
求lz头像出处
2011-7-19 14:18
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
天天来**啊
2011-7-19 20:19
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
下载学习了。
2011-7-20 09:12
0
雪    币: 156
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主,你的Debug插件,可否共享下啊。找不到。先谢谢了。
2012-4-28 15:15
0
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
win7 x64如果是装在VMWare里,用win32_remote.exe开启IDA远程调试服务
2012-5-25 16:34
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错感谢
2012-7-13 00:42
0
雪    币: 1579
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
真的不错哦,牛,IDA一直不太会用,来想楼主学习了
2012-7-13 06:24
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
10
mark     
2012-7-13 08:20
0
雪    币: 4902
活跃值: (130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
来学习了哈。。
2012-7-13 10:58
0
雪    币: 1579
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
兄弟你也是牛人啊,4个太阳了,我晕,Kx还这么多,佩服,混了这么多年,技术也肯定很不错吧。
2012-7-17 20:36
0
雪    币: 1489
活跃值: (1053)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
不错的64位小教程。谢谢LZ
2012-7-17 22:34
0
雪    币: 2
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark~~~~~~~~
2012-7-18 04:15
0
雪    币: 66
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我之前还不知道怎么用本机调试程序的呢,受教了
2012-8-14 16:42
0
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
16
谢谢楼主 如果是64位的dll 该怎么办呢? 写个64为的load程序 然后调试load程序 使其完成解码 但是iat应该是个问题
2012-8-14 17:37
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好文章,谢谢楼主分享。
2012-8-15 09:41
0
雪    币: 68
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark,学习了
2012-8-15 11:53
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
直接在0000000100035E66 jmp     near ptr unk_10000B770,一行设置断点然后F9运行即可
这句是经典之作啊
评论来自 淘宝店铺转让
评论来自 淘宝店铺转让
2012-9-1 07:31
0
雪    币: 16420
活跃值: (1670)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
上边的压缩包 里边的全部记事本程序不能打开
10 64
2018-9-8 20:58
0
游客
登录 | 注册 方可回帖
返回
//