关于反编译工具的概述
发表于:
2015-10-17 19:54
10527
本文主要是对反编译工具的说明,这些工具大部分是开源的。
一、dex反编译
主要有jadx、dad和jeb。
jadx
有进行控制流分析,反编译效果还不错,强烈推荐。
dad
是androguard自带的,虽然也有进行控制流分析,但反编译效果好像不太好,不推荐。
jeb
不开源,听说要1000刀,好贵,都可以买ida了,粗略看了下1.5版本,感觉反编译效果不是很好。尽管它有导出api供使用,还是觉得太贵了,2.0版本反编译效果未知。好像有很多人推荐使用。
二、java反编译
这个工具就多了,这里主要对jd-gui、procyon和cfr进行说明。
jd-gui
不开源,但由于它只是进行模式匹配,并没有进行控制流分析,对dex2jar转化而成的jar就悲剧了,因为dex基本块的前驱块不一定在前面,同理后继块不一定在后面。而且它处理异常时有问题,还有分析连续两个以上的相同类型的static变量也有问题,所以它经常在有异常的函数和cinit构造函数反编译出错,也没有进行类型推断,还不支持java8特性,所以对dex2jar转化而成的jar不推荐使用jd-gui。
procyon
应该是最好的反编译工具了,有进行控制流分析,有进行类型推断,也支持java8特性,但由于它有大量的类封装,反编译速度比较慢,占用内存也多,它对变量分析有些问题,强烈推荐。
cfr
还不错,感觉比procyon差点。注意虽然它没有开源,但它也没有进行混淆,可以反编译出源码。
三、lua反编译
反编译工具有unluac和luadec。
unluac
当程序有调试符号时,它是最好的选择,但它并没有进行变量分析,反编译没有调试符号的程序有问题。
luadec
有进行变量分析,但少了很多模式匹配,很容易出错,最好和unluac结合使用。
四、luajit反编译
反编译工具为ljd,未测试。
五、javascript反编译
javascript有v8、javascript-core、spidermonkey三种开源实现。v8没有使用字节码,好像不用反编译,javascript-core未发现反编译工具,spidermonkey早期版本官方自带反编译,新版本未提供。
六、python反编译
主要是uncompyle2,支持2.5-2.7版本。
七、c#反编译
工具也很多,这里对Reflector和ilspy进行说明。
Reflector
使用最为普及,非常强大,还支持插件,不开源。推荐使用。
ilspy
还不错,procyon就是基于它改写而成。
八、其它语言
比如erlang、php、ruby、perl、actionscript等,未关注。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)