最近有大量jar包需要反编译后使用,但是由于jar包中的类被混淆过了,直接反编译以后的里面所有的变量都是一个名字。所以这里介绍一个反混淆神器:CRF。
不知道是不是官网的链接:http://www.benf.org/other/cfr/
我把这个神器上传到了站里,大家可以随意取用:https://files.cnblogs.com/files/somefuture/cfr-1.5.7z (站里不能上传Jar文件,所以我压缩了一下)
用法相当简单,这是一个可执行jar包,把要反编译的jar传为参数即可。比如我要反编译的jar是aaa-bbb.1.0.jar,所在位置是~/lib下面,则运行
java -jar cfr-1.5.jar ~/lib/aaa-bbb.1.0.jar
就能在控制台看到输出了。
当然我们可以重定向到文件:
java -jar cfr-1.5.jar ~/lib/aaa-bbb.1.0.jar >> dec.txt
所有的类都是在同一个文件里,我也不知道有啥方法可以直接生成多个Java文件。
上面这样运行后并没有反混淆,里面的变量名字依然一样。我们需要多加一个参数:
--renamedupmembers true
望文生义都能知道参数的意思是把重名的变量改个名:
java -jar cfr-1.5.jar ~/lib/aaa-bbb.1.0.jar --renamedupmembers true >> dec.txt
所以这样就可以了。
接下来是最后一个问题:这样反编译的结果中,所有的中文都被转为unicode了,如何解决呢?可以增加一个参数:
--hideutf false