社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 6212阅读
  • 3回复

[分享]ida python+od 脚本在恶意代码分析中的简单应用

楼层直达
z3960 
级别: 茶馆馆主
发帖
770593
飞翔币
207694
威望
215657
飞扬币
2511651
信誉值
8

前几天分析恶意代码的时候,样本中的api函数经过了加密处理,需要首先解出api的函数名,然后通过GetProcAddress获取交叉引用看了一下解密函数,发现一共有一千多处调用如果动态调试一个个的解出来,那耗费的时间就太久了,幸好以前看大佬处理过此类问题,思路是先用ida python脚本将所有调用处的参数找出来,然后使用od脚本将所有的字符串跑出来。思路有了,接下来就开始慢慢解决问题了。首先使用XrefsTo函数获取所有解密函数的交叉引用接下来就是怎么找出参数的问题了,通过观察,该解密函数一共有两个参数,都是通过push 入栈所以只需往调用地址向前查找两条push指令,获取后面的操作数就可以了,如下图将代码弄进ida中跑一跑,发现成功找出了参数,接下来就是怎么利用OD脚本将所有字符串跑出来了现在我们需要将od脚本写成类似push 参数  Push 参数  call 解密函数 的形势,就可以解出字符串了。查阅资料可知OD脚本中要执行上述指令,需要将指令写在EXEC/ENDE中间,对当前调试进程,执行EXEC/ENDE中间的指令。即将脚本写成如下形式:通过OD动态调试可知,解密函数执行完之后,结果保存在寄存器eax中,所以在执行上述代码之后,获取eax寄存器的值,这样就可以获得解密的字符串了。所以通过len 指令获取eax寄存器值得长度,接着使用DMA 指令将eax的值保存到文件中确定了od脚本的写法,我们就用ida python获取参数,并将od脚本指令打印保存到一个文件中。如下图在OD中执行刚才保存的脚本文件,我们就可以得到所有解密的字符串了最后通过ida python将字符串注释到相应位置即可得到如下效果:这样分析就很方便了。代码水平很差,python写的着实烂。。各位大佬见谅。。。
本帖最近评分记录: 1 条评分 飞扬币 +50
爱我中华 飞扬币 +50 2022-02-09 您的帖子很精彩,感谢您的付出!
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 茶馆馆主
发帖
564135
飞翔币
199311
威望
3696
飞扬币
2872052
信誉值
0

只看该作者 1 发表于: 2022-02-09
学习了
级别: 超级版主
发帖
837915
飞翔币
228850
威望
224673
飞扬币
2469441
信誉值
0

只看该作者 2 发表于: 2022-02-10
来看一下
级别: 超级版主
发帖
837915
飞翔币
228850
威望
224673
飞扬币
2469441
信誉值
0

只看该作者 3 发表于: 2022-02-10
不错,了解了