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

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

发布时间:2019-04-26 15:09:40 所属栏目:建站 来源:JiaYu
导读:副标题#e# 作者:JiaYu 转自公众号:信口杂谈 1. 概述 在 360Netlab 的旧文 《双枪木马的基础设施更新及相应传播方式的分析》 中,提到了 双枪 木马传播过程中的一个恶意驱动程序 kemon.sys ,其中有经过自定义加密的 Ascii 字符串和 Unicode 字符串 100+

于是,我们 Hook 掉指令模拟过程中的 UC_MEM_WRITE 操作,即可获取解密后的字节,并将这些字节手动 Patch 到 IDB 中:

  1. def mem_hook(unicornObject, accessType, memAccessAddress, memAccessSize, memValue, userData): 
  2.     #if accessType == UC.UC_MEM_READ: 
  3.     #    print("Read: ", hex(memAccessAddress), memAccessSize, hex(memValue)) 
  4.     if accessType == UC.UC_MEM_WRITE: 
  5.         #print("Write: ", hex(memAccessAddress), memAccessSize, hex(memValue)) 
  6.         if memAccessSize == 1: 
  7.             idc.PatchByte(memAccessAddress, memValue) 
  8.         elif memAccessSize == 2: 
  9.             idc.PatchWord(memAccessAddress, memValue) 
  10.         elif memAccessSize == 4: 
  11.             idc.PatchDword(memAccessAddress, memValue) 

Patch IDB 的基本操作当然是像前文中 IDAPython 脚本那样,调用 idc.PatchXXX 函数写入 IDB 文件。前面第一个姿势中,Patch IDB 文件,只调用了一个 idc.PatchByte() 函数。其实,idc 库中共有 4 个函数可以 Patch IDB:

  1. idc.PatchByte(): Patch 1 Byte; 
  2. idc.PatchWord(): Patch 2 Bytes; 
  3. idc.PatchDword(): Patch 4 Bytes; 
  4. idc.PatchQword(): Patch 8 Bytes; 

指令模拟器中执行 Patch 的操作,并不只有 PatchByte 这一项。根据我 print 出来的指令模拟过程中写内存操作的细节,可以看到共涉及 3 种 Patch 操作(如下图):1 byte、2 Bytes 和 4 Bytes,所有才有了上面 mem_hook() 函数中的 3 种 memAccessSize。

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

明确并解决了「系统 API Hook」和「捕获指令模拟结果并 Patch IDB」这两点问题,就可以写出准确无误的 IDAPython 脚本了。

3.2.3 Radare2 ESIL 模拟

r2 上也有强大的指令模拟模块,名为 ESIL( Evaluable Strings Intermediate Language):

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

在 r2 上用这个东西来模拟指令解密这一批字符串,就不用像 IDA 中那样还要自己动手写 IDAPython 脚本了,只需要通过 r2 指令配置好几个相关参数即可。下面两张图是在 r2 中通过指令模拟批量解密这些字符串的前后对比:

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

具体操作方法就不细说了,有兴趣的朋友可以自行探索。

4. 总结

文中介绍两种基本方法,在 IDA 中批量解密 双枪 木马传播中间环节的恶意驱动 kemon.sys 中的大量自定义加密字串:Python 实现解密函数和指令模拟解密函数。

原理都很简单,介绍的有点啰嗦,希望把每个关键细节都描述清楚了。

两种方法对应的 IDAPython 脚本,已上传到 Github,以供参考:https://github.com/0xjiayu/decrypt_CypherStr_kemonsys

5. 参考资料

https://en.wikipedia.org/wiki/Caesar_cipher

https://github.com/tmr232/idapython/blob/master/python/idc.py

https://unicorn-engine.org

https://github.com/36hours/idaemu

https://github.com/fireeye/flare-emu

https://github.com/unicorn-engine/unicorn/blob/master/bindings/python/unicorn/unicorn_const.py#L64

【编辑推荐】

  1. 加密101系列:如何构建自己的解密工具
  2. 警方解密个人信息泄露的八种途径
  3. 如何用HT Brute Forcer解密HiddenTear勒索软件?
  4. 不解密识别恶意流量
  5. 维基解密创始人阿桑奇被捕:“天才黑客”到“阶下之囚”
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0

(编辑:PHP编程网 - 湛江站长网)

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