何谓逆向工程?所谓逆向工程就是分析编译之后的二进制文件,并且依据分析出的程序架构重写全部代码。

逆向工程有什么好处?软件开发是一个逐步求精的过程,一款成熟的软件需要许多人付出艰辛的努力不断的测试,这是一个耗费大量时间与金钱的过程,而逆向工程可以直接分析稳定运行的成熟的软件,写出源代码,在此基础上二次开发,从而降低开发成本与风险。


以逆向某著名即时通讯软件(手机J2ME版)为例,需要做的准备工作如下:


一:知识准备


必须熟悉Java虚拟机指令。用IDA工具反编译之后的代码以虚拟机指令码显示,所以必须要知道指令的具体含义。参考文档:http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html


二:工具准备


主要使用3种工具,它们是DJ Java Decompiler, IDA, Eclipse。


使用DJ Java Decompiler完成初步的反编译,此工具依据class文件生成java文件,不过,遇到逻辑稍微复杂一点的代码,它就无能力了,这时候就要用到IDA。IDA是一款非常强大的反编译工具,可以用流程图的方式显示反编译之后的指令。



做好以上准备之后就可以开始工作了,先使用DJ Java Decompiler分析整个jar包,自动生成java代码文件,生成的代码文件有许多错误,在总共323个类文件中,有137个类文件有错误。DJ Java Decompiler已经完成了它的使命,下面该Eclipse和IDA出场了,在Eclipse中新建立一个Eclipse Me工程,把生成的java类文件复制到该工程所在文件夹中的src目录中,编译工程,以便让Eclipse检测到有错误的类。使用IDA逐个分析有错误的类,手工重写代码,当全部错误更正之后,再开始分析每行代码的含义。由于代码已经被混淆过,生成的类,字段,方法全是以a,b,c字母表示,需要对每个类,字段,方法赋予有意义的名称。在此示例中,字符串资源有655个,颜色值有104个,为此还要在Excel编写脚本,以便辅助分析源代码(未完待续)。