您的位置:首页 > 移动开发 > Android开发

android加固apk包,并防止apk被二次打包

2015-05-20 02:04 323 查看

正文从编号开始

注: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.将你自己的项目打包,生成xxx.apk,将apk解压缩(更改后缀名apk为zip即可解压)

把里面的classes.dex和META-INF\CERT.RSA(若RSA文件不是该名字,请务必手动改成CERT.RSA)复制到该文件夹下的tool目录下()
2.右键编辑1st.bat,修改dx命令所在的目录,dx命令在android-sdk\build-tools\x.x.x\下(按照我的路径改就好了)
3.首先运行1st.bat,会生成一个dex.jar
4.然后运行2nd.bat,会生成一个_rf.dat文件
5.接着运行3rd.bat,会生成一个tmpsign.bin
6.最后运行4th.bat,会生成一个sign.bin
7.打开eclipse,导入该文件夹下的androidEn项目(该项目为我测试通过的项目,里面的dex已加密,签名用的是debug版的签名(不同机器的签名不同,请按上面步骤换成自己的签名测试),可以运行下看效果(因为签名不一样,应该会直接停止运行。))
8.替换assets,res目录和AnroidMainfest.xml文件为你自己项目里的文件,合并libs文件夹,删除原项目的jar引用包
9.把刚才生成的_rf.dat,sign.bin文件放到assets目录下面
10.修改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>
11.运行项目,在手机上查看效果
12.若对以上步骤有疑问,或者项目无法运行、亦或想知道具体原理,可以加QQ群(群号296733909),亦或加我QQ(546551349)深入讨论交流。

原理简述:利用dexclassloader加载dex文件。用C或C++写dex文件的加密解密,利用jni,在C,C++代码里写dexclassloader的加载和运行,其中还涉及到反射问题等,想知道详细思路可以加群(296733909),亦或加我QQ(546551349)讨论。

百度关键字:dexclassloader,jni

(觉得不错的话,欢迎转载哦!!转载请注明出处就好啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息