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/

相关文章
|
23小时前
|
缓存 安全 Java
【技术前沿】JAVA网络编程黑科技:URL与URLConnection的创新应用,带你飞越极限!
【6月更文挑战第22天】Java的URL和URLConnection在现代网络编程中扮演关键角色,不仅用于基本HTTP请求,还在微服务(弹性自动化调用)、智能缓存策略、异步处理和安全增强方面展现创新应用。例如,它们支持动态服务发现、HTTP缓存控制、非阻塞I/O和HTTPS加密,助力开发者构建高效、安全的网络解决方案。通过掌握这些技术,可以提升项目性能,应对云计算和大数据时代的挑战。
|
1天前
|
Java
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
|
1天前
|
Java 数据挖掘 开发者
Java网络编程进阶:Socket通信的高级特性与应用
【6月更文挑战第21天】Java Socket通信是分布式应用的基础,涉及高级特性如多路复用(Selector)和零拷贝,提升效率与响应速度。结合NIO和AIO,适用于高并发场景如游戏服务器和实时数据分析。示例展示了基于NIO的多路复用服务器实现。随着技术发展,WebSockets、HTTP/2、QUIC等新协议正变革网络通信,掌握Socket高级特性为应对未来挑战准备。
|
16小时前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
8 0
|
1天前
|
存储 算法 Java
Android 进阶——代码插桩必知必会&ASM7字节码操作
Android 进阶——代码插桩必知必会&ASM7字节码操作
7 0
|
1天前
|
存储 Java 编译器
使用ASM来书写Java代码
使用ASM来书写Java代码
9 0
|
1天前
|
开发工具 Android开发
Android 代码自定义drawble文件实现View圆角背景
Android 代码自定义drawble文件实现View圆角背景
10 0
|
1天前
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
7 0
|
1天前
|
编译器 开发工具 Android开发
java.io.FileNotFoundException: ...my_flutter/.android/include_flutter.groovy
java.io.FileNotFoundException: ...my_flutter/.android/include_flutter.groovy
9 0
|
1天前
|
Java 测试技术 开发者
Java Socket编程实战案例:打造实时通信应用
【6月更文挑战第21天】Java Socket编程用于构建实时通信应用,如简易聊天系统。阻塞式Socket在读写时会阻塞线程,适合入门级应用。非阻塞式Socket(NIO)更高效,适用于高并发场景,允许线程在无数据时立即返回。通过对比两者,可理解实时通信技术的选择关键。示例代码展示了服务器端和客户端的实现。学习Socket编程能为应对未来挑战打下基础。