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/

相关文章
|
8天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
46 2
|
22天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
60 5
|
22天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
48 5
|
23天前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
91 6
|
22天前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
28 2
|
25天前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
22天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
SQL 存储 Java
Java 应用与数据库的关系| 学习笔记
快速学习 Java 应用与数据库的关系。
207 0
Java 应用与数据库的关系| 学习笔记
|
SQL 存储 Java
Java 应用与数据库的关系| 学习笔记
快速学习 Java 应用与数据库的关系。
198 0
Java 应用与数据库的关系| 学习笔记
|
SQL 存储 关系型数据库
Java应用与数据库的关系|学习笔记
快速学习Java应用与数据库的关系
Java应用与数据库的关系|学习笔记