自制反汇编逆向分析工具

本篇介绍我自己在逆向分析过程,针对AT&T反汇编的函数逆向分析的自制辅助工具。

当分析工作要消耗巨大的时间和体力精力脑力时,花时间去制订满足适合自己工作流程的工具是十分必要的。

我逆向分析的目的不是为了破解,或是看别人的界面程序的布局,而是想深入apple提供的库或编程框架,逆向分析的库的设计,当然必须要有一定量的函数逆向伪代码来分析。

在一个函数的组成当中,跳转逻辑占据了相当的份量,包括分支和循环,还有尾调用。当一个函数的代码段超过500B以上,有些函数2K~7K时,有一个图可以反映出函数整体的分支循环情况作为辅助参考,就很有必要。另外在手工逆向分析一个函数前,能生成一个包含循环跳转和函数调用的伪代码框架也十分有帮助。

 

虽然主业是C/C++/OC,但是不是凡事都应用C++。我选用bash来作反汇编代码的归类划分,html5的canvas作为显示。canvas库的api和iOS SDK/coregraphics的api的几乎一样。bash和html5都可以与平台不相关。

 

思路大概分为:

1.用lldb或gdb对函数反汇编出汇编代码。

2.通过bash的grep,gawk,sed等文本处理工具,将汇编代码分类成几个文件(文本数据库,有一定的制表格式,相当于一条有fields的recored),例如跳转相关的代码划分到一个文件。

3a.通过浏览器javascript加载上面划分好的文本数据库,借用canvas绘制出分布图。

3b.通过bash从文本数据库中合并代码,生成伪代码框架。

 

工具的效果图如下:

最左边是坐标,指示了代码段中相对于函数入口的偏移量。

右侧的长方形柱条,表示代码段。

长方柱左侧边上的直角连线表示有条件的向前跳转。也就是通常的if分支。

长方柱右侧边上的直角连线表示有条件的向后跳转,也就是跳转回前面,也意味着循环 loop, for, do while。

长方柱内的垂直线代表着函数体内无条件跳转。向前的话很大可能是else分支,向后的话则可能是continue,或者for或while的结尾。

长方柱内的水平线代表着发生函数调用的位置。

 

接着就是利用bash生成基本的循环和调用的逆向代码框架,图如下:

 

最后谢谢路过的你观看。

后面还会介绍自己在逆向分析过程制作的工具,以及逆向分析出的结果。

 

第二版,反汇编代码对应图。

第三版,将反汇编代码条件分支跳转分支逆向生成C++文件。

第四版,添加逆向分析策略,如果一个函数的反汇编代码包含许多无条件跳转指令,用内联策略来逆向出c++代码分支结构。

第五版(一),显示选定的条件指令与其它条件分支的关系。

第五版(二),寄存器访问调配图,包括栈空间的调配情况。

posted on 2016-03-24 17:08  bbqz007  阅读(2948)  评论(0编辑  收藏  举报