正文从编号开始
注:QQ群号 296733909
(背景介绍之类的跳过就好啦)开发android应用肯定免不了需要写java代码,然而用java写的应用并不安全,可以用android逆向助手之类的工具,很容易的反编译apk包,查看到该apk包的源代码,于是便有了混淆工具来混淆java代码。即便是混淆了,也不安全,混淆使你的代码变得难懂,但终究还是能读懂,而且混淆并不是那么容易的事,还要写文件来保证哪些需要混淆,哪些不需要混淆。
通过了解android的一些原理,可以知道安卓打包以后会生成一个classes.dex文件,而反编译工具反编译的就是此文件.于是只要把该文件加密即可。
爱加密是个不错的网站,把apk包传上去,他们会帮你加密apk包,等个1分钟到5天左右,如果通过了安全检测,就帮你加密好了,然后你下载下来,用反编译工具反编译之,你会发现原来的dex文件没有了,而在assets目录下多了一个ijiami,dat文件,此文件其实就是被加密过的dex。
然而你把包上传了,你总会担心些什么,是吧。而且加密所需时间不定,晚上传的包可能第二天才能看到结果,周末传的包可能周一才能看到结果。而且还要对你上传的包做安全检测,万一你的包。。。嗯,所以我们自己来加密吧。
(正文来啦)
我自己写了一个加密方法来加密dex文件,一起来试试看吧。
加密所需要的工具在百度网盘,地址:http://pan.baidu.com/s/1eQzssKE
1.运行你自己的项目,将bin目录下的生成的classes.dex复制到该文件夹下的tool目录下(当然你也可以解压apk包,取出class.dex文件拿来用)
2.右键编辑first.bat,修改dx命令所在的目录,dx命令在android-sdk\build-tools\x.x.x\下(照着我的路径改自己的路径就好了)
3.首先运行first.bat,会生成一个dex.jar
4.然后运行second.bat,会生成一个_rf.dat文件
5.打开eclipse,导入该文件夹下的androidEn项目(该项目为我测试通过的项目,里面的dex已加密,可以运行下看效果)
6.替换assets,res目录和AnroidMainfest.xml文件为你自己项目里的文件,合并libs文件夹,删除原项目的jar引用包
7.把刚才生成的_rf.dat文件放到assets目录下面
8.修改AnroidMainfest.xml文件,修改后如下:
<?xml version="1.0" encoding="utf-8"?> ... <application ... android:name="com.shell.AppApplication"> <meta-data android:name="TO_RUN_ACTIVITY" android:value="android.app.Application"/> <!-- 上面两行为需添加的行,其中com.shell.AppApplication为加密后程序的入口,不得更改 TO_RUN_ACTIVITY的值默认为android.app.Application,一般情况下也不用更改 如果你有自己的Application,则修改value的值,如com.example.MyApplication 当然你也可以把value的值修改为将启动的activity的值,如com.example.YourActivity --!> <activity ... </activity> </application> ... </manifest>
9.运行项目,在手机上查看效果
10.若对以上步骤有疑问,或者项目无法运行、亦或想知道具体原理,可以加QQ群(群号296733909),询问相关人员,获取加密的源码自行研究。
原理简述:利用dexclassloader加载dex文件。用C或C++写dex文件的加密解密,利用jni,在C,C++代码里写dexclassloader的加载和运行,其中还涉及到反射问题等,想知道详细思路可以加群(296733909)讨论。
百度关键字:dexclassloader,jni
(觉得不错的话,欢迎转载哦!!转载请注明出处就好啦!)