加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

两种姿势批量解密恶意驱动中的上百条字串

发布时间:2019-04-26 06:05:14 所属栏目:建站 来源:JiaYu
导读:作者:JiaYu 转自公家号:信口杂谈 1. 概述 在 360Netlab 的旧文 《双枪木马的基本办法更新及响应撒播方法的说明》 中,提到了 双枪 木马撒播进程中的一个恶意驱动措施 kemon.sys ,个中有颠末自界说加密的 Ascii 字符串和 Unicode 字符串 100+ 条: 这在

以是,要天生 Unicode 名目标字串,必要先用 idc.SetLongPrm() 函数配置一下字符串范例。个中 idc.INF_STRTYPE 即代表字符串范例的常量,在 idc 库中的界说如下:

两种姿势批量解密恶意驱动中的上百条字串

用 Python 实现相识密函数之后,怎样模仿这一波解密进程把这 100+ 条字串依次解密呢?这里可以团结 IDA 中的 xrefs 和 idc.PrevHead() 函数来实现:

  1. 先通过 xrefs 找到挪用两个解密函数的位置;
  2. 再通过 idc.PrevHead() 定位到两个解密函数的参数地点,并理会出参数的值;
  3. 执行解密函数,将解密后的明笔墨串写回 IDB 并 MakeStr。

3.2 姿势 2——指令模仿

这个样本中的字串解密算法并不伟大,以是可以轻松写出 Python 版本,并直接用 IDAPython 剧本在 IDA 中将其批量解密。那假如字串解密算法较量伟大,用 Python 实现一版显得吃力呢?

这时不妨思量一下指令模仿器。

近几年,Unicorn 作为新一代指令模仿器在业界大火。基于 Unicorn 的 IDA 指令模仿插件也不绝被开拓出来,好比简便的 IdaEmu 和 FireEye 开拓的成果强盛的 Flare-Emu。指令模仿器可以模仿执行一段汇编指令,而 IDA 中的指令模仿插件可以在 IDA 中模仿执行指定的指令片断(必要手动指定起始指令地点和竣事指令地点,并配置相干寄存器的初始状态)。这样一来,我们就可以在 IDA 中,操作指令模仿插件来模仿执行上面的批量解密指令,解密字串的汇编指令模仿执行竣事,字串也就天然都给解密了。

本文 Case 的指令模仿姿势基于 Flare-Emu。

不外,这个姿势必要留意两点题目:

  1. 指令模仿器无法模仿体系 API ,假如解密函数中有挪用体系 API 的操纵,那指令模仿这个姿势就要费老劲了。
  2. 所谓模仿指令执行,真的只是模仿,而不会修改 IDA 中的任何数据。这样一来,必要本身把指令模仿器执行竣事后的明笔墨串 Patch 到 IDB 文件中,这样才气在 IDA 中看到明笔墨串。

3.2.1 hook api

第 1 点题目,IdaEmu 中必要本身实现相干 API 的成果,并对指令片断中响应的 API 举办 Hook,才气顺遂模仿。好比下图示例中,指令片断里挪用了 _printf 函数,那么就必要我们手动实现 _printf 的成果并 Hook 掉指令片断中的 _printf 才行:

两种姿势批量解密恶意驱动中的上百条字串

而 Flare-Emu 就做的更利便了,他们直接在框架中实现了一些基本的体系 API,而不消本技艺动实现并举办 Hook 操纵:

两种姿势批量解密恶意驱动中的上百条字串

之以是提这么个题目,是由于这个 kemon.sys 样本中的批量解密字串的进程中,涉及了对 memcpy 函数的挪用:

两种姿势批量解密恶意驱动中的上百条字串

这样一来,直接用 Flare-Emu 来模仿执行应该是个更便捷的选项。

3.2.2 Patch IDB

第 2 点题目,将模仿功效写回 IDB 文件,在 IDA 中表现。

主要题目是怎样获模仿执行乐成后的功效——明笔墨符串。前面描写字串解密算法时说过,解密后的字节(Byte)会直接替代密文中的特定字节,把密文的前 dataLen 个字节解密出来,就是明笔墨串。这个字节替代的操纵,着实对应 Unicorn 指令模仿器中界说的 MEM_WRITE 操纵,即写内存,并且,字串解密进程中也只有这个字串替代操纵会写内存 。刚好,Flare-Emu 中提供了一个 memAccessHook() 接口(如下图),可以 Hook 多种内存操纵:

  1. memAccessHook can be a function you define to be called whenever memory is accessed for reading or writing. It has the following prototype: memAccessHook(unicornObject, accessType, memAccessAddress, memAccessSize, memValue, userData). 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读