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官方文档。
参考引用:
http://developer.android.com/guide/developing/tools/proguard.html
http://code.google.com/p/dex2jar/
Android应用中如何保护JAVA代码相关推荐
- android开发使用c+_如何在Android项目中开始使用C ++代码
android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...
- 常见的5种方式看保护java代码(java混淆器)
在java代码中往往包含着一些非常敏感的信息,有些关系到开发者的利益,有些可能因为使用环境不同而关系到软件用户的利益,于是,java程序是赤膊上阵还是全副武装这个现实问题就摆在了java开发人员的面前 ...
- Android Studio中打开R.java文件的方法
1 R.java文件简介 Android Studio中的R.java文件自动收录当前应用中所有的资源,并根据这些资源建立响应的ID,可以把R.java当成Android应用的资源字典.R.java文 ...
- 【unity】与Android Activity交互并调用JAVA代码传递参数
http://www.xuanyusong.com/archives/667 Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以 ...
- android studio 中怎么写aspectj代码,Android Studio 使用 AspectJ 实践AOP
Android Studio 官方暂时不支持aspectJ,不过这里用的一款gradle插件 aspectjx 配置在project的build.gradle里配置插件dependencies { c ...
- matlab中调用java代码_Matlab中调用第三方Java代码
在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...
- Android Studio编写运行测试纯java代码可带main()函数
问题 小伙伴们在做安卓项目的时候,是不是有时候会忘记某些api的使用方法,不太确定他们的结果是怎样的,需要写一些测试代码,验证看看我们的写法是否正确.刚开始的时候我是在页面上写一个Button,添加点 ...
- java将图片放进mysql中_在java代码中怎么从服务器上把图片拿来放到数据库里
展开全部 看你用的是么数据库,一般是读取后转e68a84e8a2ad3231313335323631343130323136353331333431346430成二进制blob格式存入数据库的BLOB ...
- android系统模拟麦克风,在Android模拟器中使用麦克风(Java Android初学者)
在 Android模拟器中使用麦克风的 I READ HERE可能是可能的,所以我决定尝试一下(尽管 THIS QUESTION的答案说它不可能) 我复制/粘贴了 ANDROID DEVELOPERS ...
最新文章
- 【 全干货 】5 分钟带你看懂 Docker !
- Powershell记录2
- Zookeeper简介/快速入门——特别详细
- ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?
- php 获得当月时间戳,php获取当前月与上个月月初及月末时间戳的方法
- menuetos oracle,使用DistroTest服务免费在线测试Linux和Unix操作系统
- 风起云涌时,亦是光芒四射时 | LiveVideoStackCon 2020线上峰会日程全公开
- python多进程打印字符,加锁(Lock加锁)
- [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit
- rgb红色范围_【论文阅读18】RGB-D Object-Oriented Semantic Mapping
- Windows Phone(wp7)系统长按的秘密
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- 单片机c语言三角波采样点,单片机课程设计---信号发生器.doc
- 飞驴更新纪录,一定超过他。
- 桌面计算机里没有桌面显示不出来怎么办,电脑桌面显示不出来图标 所有软件都可以正常工作 怎么解决?...
- 一文读懂图像局部特征点检测算法!
- linux find查找时间段文件,查找某个时间段的文件和find命令
- Ubuntu 18.04 安装后的美化与软件安装
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 基于tkinter+win32+pynput实现python的QQ微信刷屏(比某些文章稍微高级一点)
热门文章
- 遇到一个由于事务控制不当造成错误的Bug
- Loj #3111. 「SDOI2019」染色
- 加密软件究竟有哪些作用呢?
- 基于JWT(Json Web Token)的ASP.NET Web API授权方式
- IOS 开发之-- textfield和textview,return键的改变,点击return键
- centos 6.8 64B mini origin vm file
- Tomcat虚拟目录配置
- .NET防SQL注入方法
- vue this.$router.push()传参
- 在Fabric ChainCode中导入第三方包(以状态机为例)