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

java – Android Apk反编译似乎很简单,第1张

概述我只是在乱七八糟我下载了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): 我只是在乱七八糟我下载了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固件)的情况下,逆向工程也是可能的,因为您的代码正在运行的客户端始终是不受信任的,并且总是被篡改.

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

总结

以上是内存溢出为你收集整理的java – Android Apk反编译似乎很简单全部内容,希望文章能够帮你解决java – Android Apk反编译似乎很简单所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存