本文使用某App的apk文件对Android App的反编译和加固技术进行了初步分析,后续会进行深入的剖析并进行加固产品的开发,本文涉及的相关工具都能在google上正常下载,同时也能在附件中提到的参考链接中下载。
1. apk文件及相关工具准备
1.1 工具准备
apktool: https://github.com/pqy330/apktool
dex2jar: https://github.com/ufologist/onekey-decompile-apk/tree/master/onekey-decompile-apk/_tools/dex2jar
signapk: https://github.com/maks/aosp-signapk
本文工具打包下载链接: http://download.youkuaiyun.com/download/liushaofang/9372646(供自己以后查阅方便,所以设了5分,没分的可以评论中留下Email,我给发过去)
1.2 App准备
http://app.mi.com/download/120336?ref=search
App原始界面如下所示:
2. apk文件反编译、重打包及重签名
2.1 源代码反编译
用winzip等解压工具解压apk文件得到classes.dex文件
将classes.dex文件拷贝到dex2jar目录并使用dex2jar反编译得到源码文件,反编译命令为:dex2jar.bat classes.dex
反编译得到的反编译结果及文件目录结构如下:
使用jd-gui工具查看反编译得到的jar包源码文件如下:
2.2 apk反编译
通过命令行采用apktool工具对apk文件进行反编译,反编译命令如下。
apktool.bat d com.zhtc.ipark.app.apk
反编译结果如下图所示。
2.3 修改代码重打包
本文仅仅为了测试只是修改了layout中的一部分,要修改AndroidManifest.xml和代码逻辑有了源码也不算太难吧,重打包命令如下。
apktool.bat b com.zhtc.ipark.app
重打包过程中如果遇到
brut.common.BrutException:at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java)等错误,错误截图如下图所示。
可以通过如下方式解决:
尝试将aapt.exe的路径加到属性的Path环境变量中;
尝试分析错误原因针对apk中重打包的错误原因进行处理,本文发现错误是png文件出现错误,因此采用的处理的方式是res\drawable-xhdpi-v4\img.png另存为为PNG文件,并重新用上面的命令进行重打包解决了该问题。重打包结果如下。
重打包的结果是得到一个未签名的apk数据包。
2.4 代码打包之后重签名
重打包后的App是没有签名的App,需要采用签名工具进行签名,签名后才能够在Android终端上进行安装,本文使用的签名工具为signapk,签名命令如下。
java -jar signapk.jar testkey.x509.pem testkey.pk8 com.zhtc.ipark.app.apk com.zhtc.ipark.app.signed.apk
签名得到的apk结果如下图所示。
签名之后安装重打包的apk并运行截图如下所示。
3. apk文件的加固和签名
本文使用的是360加固保进行加固,但是貌似360加固保会在加固的同时插入其他额外的代码,这个还在进一步分析和研究过程中,本文仅仅说明使用360加固保进行加固的过程。加固可以通过 http://jiagu.360.cn/在线完成。加固之后反编译得到的结果如下图所示。
然后使用360Signer进行签名就得到了加固后的APK文件。
4. 第三方加固产品分析及技术研究
第三方加固产品主要包括:
360加固保
爱加密
梆梆加固
APKProtect
娜迦信息
阿里聚安全