前面一章讲述了一个简单的 exe 智能反汇编引擎推导实现方法,但是实际操作要比上文要困难的多,
其中涉及很多烦琐的细节, 这里不进行进一步的讨论。
现在公认静态分析比较强的工具是  ida, 它有的智能反汇编和灵活的人工参与方式都是同类软件没法相比的。

这里讨论就是利用其强大的反汇编引擎,做一个把  ida 的汇编结果直接输出为可利用性极高的 obj 文件,
减轻逆向成本( ida 的插件机制和很丰富的接口提供实现的可能)。

通常逆向代码的过程,首要找到感兴趣关键代码段,然后摸清其具体的意图(大多这个时候是不知道或不用知道其实现方法,
只要明白其最终的实现目的即可),然后一行一行的稍加修改引到自己的代码中(这个过程主要是汇编码), 更加有难度就是
将其还原为高级语言, 在把其引入自己代码中的时候,这个过程需要发很多时间进行修改和调试,此时也是了解其 Why 时候。

我先说一下,这个工具的主要就是免掉上面所述的第二步,只要结合  ida, 如果有必要,为你想要的函数或过程和全局数据
起个起意义的符号名即可。工具将根据  ida 提供的 name list 和 xref list, 来拆解所有你想要的“符号”(下面所说的符号,
即是函数也是数据,这也是连接器要使用的唯一概念)的关联关系。
按照 coff obj 文件格式,把符号按其属性归类,并且每个分配唯一的索引。
先把符号定义写到所属的节中,按照  ida 提供的引用关系,把每个符号的引用项清零(这里你可能听不太懂,有空想个更好的表达),
将其引用的符号的索引写到节的符号引用表中,最后把所有的符号名和其索引,所在节的索引,符号类型(extern or static ..)
写到全局符号定义表中(详细 coff 细节可以参看 slinker, obj2asm)

关于 obj 的使用,不用我在说了(可以直接链接,或用 lib.exe 转换为 lib 文件,这样别人的代码就和你骨肉不分了)。
突然想到一点,对有符号文件的可执行文件(比如 ms, 因为其符号名很有意义哦),那么转换出的 obj 可利用性将更高呵呵。

表达能力有限,xx 理论的东西就是这些下面将进行具体编码操作了。
希望出来后,有一点作用 -_-!!。