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文件结构应该如下:
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官方文档。
分享到:
相关推荐
本文将详细讲解如何在Java Android应用中执行脚本代码。 首先,我们要知道Android系统本身并不直接支持运行任意类型的脚本,但可以通过以下几种方式来实现: 1. **JavaScript与Android交互**: - **WebView**: ...
在Android应用开发中,有时我们需要对已有的APK文件进行逆向工程,以查看其内部实现,例如查找安全漏洞、学习代码结构或者调试问题。"android反编译看java代码工具"就是这样的一个实用工具,它能帮助开发者将APK中的...
在Android逆向工程中,Java代码基础扮演着至关重要的角色,因为大部分的Android应用都是用Java语言编写的。本文将深入探讨Java代码基础在Android逆向中的应用,并结合"Android逆向-java代码基础(4)"这个主题进行...
本资料包"android应用java源码"提供了对这些核心系统应用的源代码访问,这对于开发者深入理解Android系统的内部工作原理,以及如何优化和自定义应用程序具有极大的价值。 1. **Android SDK与Java源码关系**: ...
在Android应用开发中,遵循一定的编码规范至关重要,它不仅可以提高代码的可读性和可维护性,还能提升团队协作效率。Android Studio作为Google官方推荐的Android集成开发环境,提供了丰富的工具来支持开发者的规范化...
《Android扫雷程序Java源代码解析》 ...通过分析和理解这个程序的源代码,不仅可以提升Android应用开发技能,也能加深对Java编程的理解,对于想要在移动开发领域深入发展的程序员来说,这是一个不可多得的学习资源。
本教程将深入讲解如何在Java代码中直接编写布局以及如何引入XML布局。这两种方法各有优缺点,适用于不同的场景。 首先,让我们探讨在Java中直接编写布局。这种方式通常被称为动态布局,它允许开发者在运行时创建和...
源代码中可能包含了多个类,如MainActivity、ChessBoard、ChessPiece等。MainActivity作为主入口,负责启动和管理游戏流程;ChessBoard类则可能负责棋盘的逻辑,包括棋盘的初始化、判断落子合法性以及检查胜负条件;...
【Android登录注册服务端代码JAVA】是一个关于构建Android应用程序服务端的重要知识点,主要涉及的是Java编程语言和Eclipse开发环境。在Android应用开发中,服务端通常负责处理客户端(即Android设备)的数据交互,...
这个静态方法可以从 Java 代码中直接调用,而不需要使用 JNI 接口函数。 这是 C++ 语言编写的 JNI 接口函数,用于在 Java 层调用本地方法。这个接口函数的作用是创建新线程,并在新线程中调用 callJavaStaticMethod...
Qt提供Android应用中写Java代码的功能。这就像人们用Android Studio(或者Eclipse等)开发Android应用程序时可用写C++程序一样。默认情况下,Qt只能用Qt提供的模块(大多数情况下已经够用了)写C++程序。但是,在...
7个经典Android应用程序实例源代码.rar Android 培训示例大全--18个单项功能实例源码.rar Android 小项目开发示例20个通用具体应用程序实例源码.rar Android 文件下载功能Java多线程下载功能的例子实例源码.rar ...
在Android逆向工程中,Java代码基础是至关重要的。这篇博客和相关文件旨在帮助开发者和安全研究人员理解如何分析和理解Android应用中的Java源代码。在Android系统中,应用程序主要是用Java语言编写的,然后通过Java...
Java代码和Smali代码是两种不同的编程语言,它们在Android应用开发中扮演着不同角色。Java是高级语言,而Smali是Dalvik虚拟机(DVM)的汇编语言,通常用于逆向工程和安全分析。这个“Java代码直接转化成Smali代码...
本文将详细探讨如何在Android应用程序中实现自动检查并下载新版本的代码逻辑,以达到无缝更新的效果。 首先,我们需要一个服务(Service)来执行后台的更新检查。这个服务会在合适的时机(例如应用启动时或网络连接...
本篇文章将深入探讨Java代码在Android应用中的角色以及如何在逆向工程中利用这些基础知识。 首先,Java是Android开发的主要语言,它为开发者提供了丰富的类库和API来构建功能丰富的应用。逆向工程师在分析这些应用...
- **App Framework**:包括四大组件(Activity, Service, BroadcastReceiver, ContentProvider)的实现细节,是开发者深入了解Android应用程序运行机制的重要参考。 - **Android UI**:Android的视图系统(View ...
源代码中会包含各种Java类、方法、变量和控制结构,这些都是构建应用程序的基础。你需要了解类的继承、封装和多态性,以及如何使用接口和异常处理。此外,还要熟悉Android SDK中的特定Java库,如Android系统服务和...
1. **junit**: 这是单元测试框架Junit的相关源代码,用于编写和执行针对Java代码的测试。在Android开发中,进行单元测试可以确保代码的质量和功能的正确性。 2. **META-INF**: 此目录下的文件包含了关于Java类库的...