两种姿势批量解密恶意驱动中的上百条字串
于是,我们 Hook 掉指令模拟过程中的 UC_MEM_WRITE 操作,即可获取解密后的字节,并将这些字节手动 Patch 到 IDB 中:
Patch IDB 的基本操作当然是像前文中 IDAPython 脚本那样,调用 idc.PatchXXX 函数写入 IDB 文件。前面第一个姿势中,Patch IDB 文件,只调用了一个 idc.PatchByte() 函数。其实,idc 库中共有 4 个函数可以 Patch IDB:
指令模拟器中执行 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 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |