android proguard自带混淆器 解码混淆的堆栈信息出错

hzy00 发布于 2014/08/20 10:50
阅读 2K+
收藏 0

http://www.cnblogs.com/over140/archive/2011/04/22/2024528.html

根据上面这篇文章做了下代码混淆,然后想试下解码,我的是mac系统,根据上述文章使用

retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

命令解码mapping.txt,结果出错retrace.sh命令未找到(目录已经试过proguard主目录、bin、lib),然后直接把retrace.sh拖进去提示

Usage: java proguard.ReTrace [-verbose] <mapping_file> [<stacktrace_file>]

根据这个命令格式试了下结果又报出

Exception in thread "main" java.lang.NoClassDefFoundError: proguard/ReTrace
Caused by: java.lang.ClassNotFoundException: proguard.ReTrace
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

求教什么情况啊,。。

补充:命令的问题算是解决了

使用命令行java -jar retrace.jar -verbose mapping.txt obfuscated_trace.txt

就OK了,不设置obfuscated_trace.txt的话,就可以直接键盘输入了。然后又有个问题,输入混淆后反编译出来的代码,怎么不会还原呢,还是反编译出来的代码。。而且还有一些其他的问题

最后总结一下希望解答的问题:

1、混淆器怎么设置

//--libs/jar包中的类

-keep class com.squareup.okhttp.*
-keep class com.squareup.okhttp.internal.*
-keep class com.squareup.okhttp.internal.http.*
-libraryjars libs/card.io.jar
-libraryjars libs/cordova-2.9.0.jar
-libraryjars libs/android-support-v4.jar

上述这么设置任何效果都没有啊,我不想混淆jar包中的代码,但是生成的mapping根本没改变。。还是说proguard本来就不会混淆jar包中的东西(但是我在mapping中看到了jar中的类名啊。。)

2、混淆之后apk不正常了,点击按钮没反应,初步考虑是破坏了jar包中的东西,所以才会想不要混淆jar包

3、最后就是之前提到的问题了,为什么retrace反编译得到的混淆代码没效果(反编译得到a.class,直接拷进去解码没效果),是我使用的方式问题么,求教怎么用??

总之就上述三点问题,希望有经验的大神分享分享,也欢迎大家来讨论的说~~

加载中
返回顶部
顶部