Android应用中如何保护JAVA代码

简介: Android应用中如何保护JAVA代码

Android应用中如何保护JAVA代码


Java Classes字节码的反编译太容易了,有很多功能强大的反编译利器可以轻松的将Java字节码


反转为源代码,但是android中普通.apk文件可以轻松的被反编译为Java源代码吗?


答案是当然可以,而且是相当的轻松,具体步骤如下:


1.       选择你要反编译的.apk文件, 如果它在你的Android手机里面怎么办


         参考这里 –>http://blog.csdn.net/jia20003/article/details/5293958


2.       本质上.apk文件只是zip格式的压缩文件,因此你可以用WinZip,一个比较好用的工具是7-zip


         打开.apk文件,网上可以download到7-zip


3.       网上随便找了一个android的应用,打开apk文件结构应该如下:


                  0_13139939147Hvq.png


         res文件里面放置都是主要包括layout,drawable等子文件夹已经里面的xml文件


         META-INF主要记录资源列表和各自对应的二十字节SHA1-Digest的Key用来保护.apk文件,


        不能通过非build修改和内容替换。最感兴趣的应该是classes.dex文件,这个就是我们要反编译的对象。


4.       把classes.dex文件copy到本地,使用google提供的开源工具dex2jar


         在windows命令行中输入如下:dex2jar.batxxx.apk 成功执行以后你就发现多了一个对应apk


         文件的jar文件


5.       然后从jar文件到java源代码,相信没有人觉得是难事了。



看到自己辛辛苦苦开发出来的Android应用如此快的被别人反编译和copy源代码,相信很多开发者要吐血了,不过只要我们稍微加点改变,想要这么轻松的读懂classes.dex文件反编译出来的文件也许就没那么容易了,基于Java的代码混淆器ProGuard已经通过了对Android中Java应用的代码保护,而且google已经把它集成在android的开发环境中,但是很多时候都被大家无视!


第一步:启用ProGuard


找到android项目default.properties文件在里面加入proguard.config=proguard.cfg


第二步:配置ProGuard


有时候ProGuard会根据情况remove掉一些它认为没有用的class而实际上这些class仍然被使用,这些情况包括以下几种:


    - Class只在AndroidManifest.xml文件中被引用


   - 通过JNI的方法调用


   - 通过反射动态被引用的方法和域值


当你得到ClassNotFoundException之类的错误的时候,你就应该意识到要自己配置了:


-keep public class <myclass> 更多的参数选项可以参考ProGuard官方文档。



参考引用:


http://developer.android.com/guide/developing/tools/proguard.html


http://code.google.com/p/dex2jar/

相关文章
|
11天前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
125 3
|
13天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
69 8
|
15天前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
243 94
|
15天前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
22天前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
163 3
|
25天前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
165 3
|
25天前
|
Java
怎么用Java 代码示例来展示继承的实现
本文通过Java代码示例展示继承机制:Animal为父类,Cat和Dog继承其属性与方法,并实现构造函数调用、方法重写与特有功能扩展,体现代码复用与多态特性。
69 4
|
26天前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
238 0
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
425 1
|
Java BI API
在Java代码中打日志需要注意什么?
日志是什么?日志是你在代码运行时打印出来的一些数据和记录,是快速排查问题的好帮手,是撕逼和甩锅的利器!
798 0

热门文章

最新文章