两种姿势批量解密恶意驱动中的上百条字串
以是,要天生 Unicode 名目标字串,必要先用 idc.SetLongPrm() 函数配置一下字符串范例。个中 idc.INF_STRTYPE 即代表字符串范例的常量,在 idc 库中的界说如下: ![]() 用 Python 实现相识密函数之后,怎样模仿这一波解密进程把这 100+ 条字串依次解密呢?这里可以团结 IDA 中的 xrefs 和 idc.PrevHead() 函数来实现:
3.2 姿势 2——指令模仿 这个样本中的字串解密算法并不伟大,以是可以轻松写出 Python 版本,并直接用 IDAPython 剧本在 IDA 中将其批量解密。那假如字串解密算法较量伟大,用 Python 实现一版显得吃力呢? 这时不妨思量一下指令模仿器。 近几年,Unicorn 作为新一代指令模仿器在业界大火。基于 Unicorn 的 IDA 指令模仿插件也不绝被开拓出来,好比简便的 IdaEmu 和 FireEye 开拓的成果强盛的 Flare-Emu。指令模仿器可以模仿执行一段汇编指令,而 IDA 中的指令模仿插件可以在 IDA 中模仿执行指定的指令片断(必要手动指定起始指令地点和竣事指令地点,并配置相干寄存器的初始状态)。这样一来,我们就可以在 IDA 中,操作指令模仿插件来模仿执行上面的批量解密指令,解密字串的汇编指令模仿执行竣事,字串也就天然都给解密了。 本文 Case 的指令模仿姿势基于 Flare-Emu。 不外,这个姿势必要留意两点题目:
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 多种内存操纵:
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |