沭阳 发表于 2021-1-19 01:43

开源一个IDA小插件:修复VMP dump导入函数

本帖最后由 沭阳 于 2021-1-19 01:46 编辑

简述:
(菜鸟发帖,不足之处欢迎指正,大佬轻喷。。。。。)
通常我们在静态分析vmp加壳后的程序或者驱动时,都会选择将其跑开然后看dump文件。但是vmp会将某些函数地址进行混淆,所以当我们想看一个函数时,常常会见到如下图所示代码段:


面对上述情况,我之前一般都是默默的打开计算器,人肉去算地址,然后看落在哪个模块上,把对应模块扣出来,改基址,接着根据算出的地址看是哪个对应函数,最后回到dump文件,将名字标上!算一个,两个还能忍,但是当面对无数这样的函数,甚至说你算到最后发现竟然是之前已经标过的函数时,头已经大了。

于是,在经历这样的折磨之后,写了一个IDA小插件,能够帮助我们自动去标这样的函数。其实之前就已经写好了,一直用用修修bug,稳定了一段时间后,效果还行,支持x86与x64的vmp dump。下面简单介绍一下人肉去修和脚本去修的效果。

人肉操作:

以上图七个代代码段流程举例。我们最终目的是想要知道代码段1中sub_FFFFF880010787DE是哪个函数。
跟进sub_FFFFF880010787DE函数后发现几个关键点分别是:
代码段2中的
xchg    rdi,
代码段3中的
push    rdi
代码段6中的
xchg    rdi,
代码段7中的
retn
其实看上述4个关键指令可知,retn指令最终返回到的是rdi所对应的代码处继续执行。所以我们需要去追rdi值是什么。
观察代码段流程,最终得到rdi的表达式如下:
∵ rdi = + 0x1B6D0F9A
∴ rdi = 0xFFFFF80003ED5CA0
得到rdi所代表的真正函数地址后,我们需要看此地址落在哪个模块上,我这边是ntoskrnl模块,将其拿出来,根据此时系统实际情况修改基址,最后跳转到rdi对应的函数名称即可。最后算出结果如下图所示(得到的是ZwReadFile函数):


脚本操作:
从上文人肉操作看起来还是比较麻烦的,需要不断的记和算一些地址,最后还得去找。算多了其实会发现,流程还是比较固定的,关键指令也就是那几条。(整他个十个八个if else,脚本写出还不是谈笑间,听懂掌声!)嘿嘿,多说无益,看下图我按下快捷键后效果:


随着粗犷的日志输出后,发现效果还行。在 Fxxx 一个试一下,看下图:


通过上面两个效果图发现,确实比人肉计算舒服多了,但是需要达到上图的效果,还需要与一个小小的脚本配合。这个脚本就是用来得到模块的导出函数名和导出地址,正是结合这个信息,插件才能找到正确的函数名称并标注。以ntoskrnl模块为例,运行脚本后可得到如下文件信息:


总结:
上述两个脚本项目地址:https://github.com/YanStar/FixVmpDump
代码虽然写的一般,但是从中可以学到如何修vmp dump导入函数、idapython常见的一些函数用法、如何注册ida脚本快捷键等,还是对初学者有所帮助的。有问题欢迎大佬们指出!

Heiye_Hack 发表于 2021-1-19 17:35

不错,感谢分享,收下了

沭阳 发表于 2021-2-2 13:05

本帖最后由 沭阳 于 2021-2-2 13:06 编辑

hszt 发表于 2021-2-2 11:28
有人实际操作过吗,我运行脚本,生成了txt,但是内容是空的   先到入口,dump出文件---拖入ida,运行Get_ ...运行Get_Export_Fun_Name_Addr.py这个脚本实际是将模块的导出函数地址与函数名称导出来,不应该为空啊,可以将程序发来看下

pk8900 发表于 2021-1-19 08:22

这个很有用,不知道是针对特定的VMP版本还是通用的,试试再说。

arg10 发表于 2021-1-19 08:33

谢谢分享。

xieemengxin 发表于 2021-1-19 09:13

谢谢大佬分享mark了

9527kk 发表于 2021-1-19 09:29

非常感谢,已经收藏;

沭阳 发表于 2021-1-19 10:03

pk8900 发表于 2021-1-19 08:22
这个很有用,不知道是针对特定的VMP版本还是通用的,试试再说。

具体vmp版本我没测试。但是写的还是很通用的,只要符合类似于上文所述的算地址流程形式,都是可以的,不行就是bug,欢迎去提:Dweeqw

fangchang819 发表于 2021-1-19 10:40

膜拜大神!

hello_c_world 发表于 2021-1-19 18:30

强无敌,插眼闲下来学习一下!

听风没有雨 发表于 2021-1-19 21:31

插眼学习了
页: [1] 2 3 4 5
查看完整版本: 开源一个IDA小插件:修复VMP dump导入函数