微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Android Apk反编译似乎很简单

我只是在乱七八糟我下载了dex2jar http://code.google.com/p/dex2jar/和Java Decompiler JD-GUI http://java.decompiler.free.fr/?q=jdgui

我有自己的apk文件(签名,密封和在Google Play),使用dex2jar使其成为一个jar存储库.

命令行(Windows用户使用.bat,其他人.sh):

d2j-dex2jar.bat -f MyAwesomeApp.apk

我将输出拖放到JD-GUI中,所有的类文件,原始代码重新出现.
我有点吃惊了我的java / Android代码是否暴露? ProGuard如何保护我的apk,如果它可以被反编译和重新生成这么容易?它看起来似乎没有混淆…

提前致谢.

解决方法

混淆器通常简单地将类,方法和字段名称改为没有意义的名称.所以,如果你有“scoreCalculator.computescore(播放器p,匹配m)”,你最终得到“A.zk(F f,R r)”.这类似于Uglify或Closure编译器为javascript做的,除了在javascript中,它是减少源长度.

有可能了解方法的做法,只是更难.

Aslo,Java使用后期绑定(作为DLL或SO文件).所以,不在代码之外的调用(比如java.util,java.lang等..包)不能被模糊化.另外,如果您的代码需要从外部接收呼叫(一个典型的例子,在按钮上注册一个监听器),则该代码不能被模糊化.一个DLL也是一样,你可以清楚地看到需要在DLL外部调用方法名称,并调用其他的DLL.

然而,某个源代码和编译代码间的映射不一定是一对一的.旧的C编译器用于为给定的源指令生成相同的操作码,因此反编译器非常有效.然后,C编译器为结果的操作码添加了许多优化,这些优化使反编译器大部分无效的为[1]

Java在编译时从未实现(很多)优化,因为在不同的平台(包括不同的Android设备)上运行,Java决定在运行时基于运行设备的体系结构和硬件属性,在运行时应用严重的优化(这是“HotSpot”大部分是[2]).

良好的混淆器通常也会重新排序字节码指令,或插入一些无用的指令,或者应用前期的一些优化,使反编译器无法(或更少)能够轻松获取代码.

对于可以读取字节码的人来说,这种技术是无用的,因为如果一个人可以读取汇编代码,任何可能的C混淆都是无用的.

许多破解软件表明,即使使用C或其他滞后功能,即使在固件(考虑iPhone固件)的情况下,逆向工程也是可能的,因为您的代码正在运行的客户端始终是不受信任的,并且总是被篡改.

如果你有非常关键的代码,那么有些东西值得很多钱,别人可能会偷,我建议运行它的服务器端,或验证它的服务器端不知何故.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐