怎么调试有Hook的DLL样本

样本hash:5BBEFA25D955C4C5737A8C665AE48F1A

该样本VT和微步在线都能得到,属于parite家族,使用了多态变形技术进行躲避传统杀毒软件的特征码查杀。查壳发现有UPX壳,这个样本让我比较新奇的是,在你脱壳的时候就将恶意行为做完了,以开启全局钩子的方式将恶意DLL文件注入到多个进程,在注入DLL对进程进行判断,如果不是explorer则退出,并开启线程,对计算机中其他文件进行感染,即使将钩子卸载也无济于事。

这里我只是简单记录下学习过程,不对感染行为做分析(主要自己太菜,新线程是断不下来)。拿到样本,第一步先查壳,如图,显示是upx压缩壳。

既然是UPX壳,那么就使用ESP定律,一脱到底。使用OD载入,发现找不到pushxx,那就单步吧。

使用单步法找OEP,虽然笨,好用(哈哈哈),单步就发现问题了,估计是为了防止杀软的特征码查杀,它对样本进行动态解密。

解密之后:

是不是很有意思,单步进去,然后进第一个call,可以看到一抹多的LoadLibraryA和GetProcAddress函数,这是壳代码无疑了。

然后进第二个call,查询注册表的,没意思。

进第三个call,这个就有意思了。先获取样本模块,在拿到句柄,获取temp的路径,然后向temp路径解密写入一个temp文件,这个temp文件是一个dll文件,大小为173kb,名字随机。

然后将写入temp的完整路径作为参数传进第四个call,跟进去看。啥?LoadLibraryA,它居然加载了这个temp(实际为dll),然后GetProcAddress获取导出函数Initiate并执行它。

跟进Initiate函数,打开互斥体,关键在于它建立了一个全局钩子。

执行完SetWindowsHookExA函数,使用PCHunter32查看,下钩成功。

然后继续单步,最后会看到pushad,ESP定律脱壳就行了,不是重点,不做解释。

既然是一个dll文件,肯定要有载体加载它,那么调试这个dll,需要找一个载体,那就使用Notepad++吧,将其改名为explorer.exe(为什么要改呢?你分析dll就知道了)。其次,既然我选择的是记事本方式加载它,为了加载成功,我将SetWindowsHookExA函数的1参idHook的值改为2,为啥,查msdn呗。(挂钩键盘更方便我们调试)

改之前:

改之后:

运行挂钩函数后,用PCHunter32看看挂成功没,然后去改Notepad++名字:

改好之后将Notepad++用OD打开,然后F9运行起来,再更改调试设置,中断于新模块。

此时程序是运行起来的,当你往Notepad++输入任何东西时,程序马上断下来,并显示新模块。

可以看到模块入口点为02501B90,CTRL+G跳转到这个地址,F2下断。

此时样本释放的dll已经被我们加载了,可以愉快的调试了。但是,你会发现这个temp文件加了UPX壳,使用IDA时,你得先脱壳,来吧,继续脱壳。

为什么我还说这个呢,因为这个UPX壳的OEP是真奇怪,第一次见,顺带记录一下吧!

JMP为OEP,惊悚,刺激!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值