IDA F5 增强插件,还我源代码(一)

一、目标

许多年以后,面对IDA的F5,奋飞将会想起,老李老板甩给他一本80×86汇编的那个遥远的下午。

时代的车轮呼啸而过,瑞士的同行给我们上了一课,ollvm一下,你妈都认不出来你了。

Current file loaded 中选择配置文件 default_instruction_only.json

然后点击 ”Start“ 按钮,再 F5一下, 见证奇迹的时刻来了。

明明白白的查看各个成熟度的微码,方便你夹私货。

D810分析

Microcode聊完了,我们再聊聊D810小甜甜的原理。

D810主要做了两步,一步是指令替换

  • (x + y) – 2 * (x & y)
  • (x + y) – 2 * (y & x)
  • (x – 2 * (x & y)) + y
  • (~x | ~y) | (x ^ y)
  • ((2 * (x | x)) – (x ^ x))

混淆后的代码里面有大量这种模式的代码,只要用点小学数学知识,我们就能换算出

  • (x + y) – 2 * (x & y) == x ^ y
  • (~x | ~y) | (x ^ y) == ~(x & y)

然后把对应的代码替换掉不就行了/p>

在 d810/ast.py 中用 AstNode 对象来表示一个算式

比如 x+y 用 AstNode表示就是

这样抽象出来之后,你从 d810/optimizers/instructions/pattern_matching 下面就可以翻到一堆指令替换的代码了。

D810做的第二步,是流程重组,类似我们之前 http://91fans.com.cn/post/disollvmone/ 分析的那样,找到 主分发器和真实块,然后重组正确的流程。

这一步的实现在 d810/optimizers/flow 里面

动手吧

说那那么多,我们来动手给d810再加点料。

刚才分析的 obfucated_full_example 还不是很帅,

这行代码看上去应该也是可以优化的

在 d810_logspattern_guess.log 的日志里面,他有提示我们 (~((x_0 – 5)) | (x_0 ^ 5)) 这一步是可以优化的。

小学数学登场

飞哥,我小学数学是体育老师教的,你会不会骗我/p>

说好的信任呢来吧, 介绍一位新朋友 https://github.com/quarkslab/arybo

专治小学数学不服

再看看增强plus的结果:

如果把出类拔萃定义为成功,那么大多数人注定无所建树;如果把比昨天进步一点点当成目标,那么我们每天都有机会宣布自己获得了一次小胜利

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月11日
下一篇 2021年6月11日

相关推荐