ps:国庆快乐~~
前段时间公司安全组进行测试时,测的是我临时给测试的包,没有做混淆和加固,结果高危中危直接爆发。。。以前发apk包都是加固后再发的,也就android刚兴起时玩过反编译,都没注意这一块,然后看了一下他们反编译的方法,就是最通用的这种,顺便写篇文章记录下,以备不时查料之需。
通过反编译我们能做什么
- 反编译dex文件,可以直接暴露代码源码
- 反编译资源文件,然后修改文件后重新签名,得到新的app仍能使用
如何反编译
首先下载几个工具
ps:文章最底部提供统一下载路径
- dex2jar-2.0用于反编译dex为jar,然后使用jd-gui看源码
- 将apk解压,
image
其中的class.dex文件拷贝到dex2jar的目录下,然后使用命令行cmd执行d2j-dex2jar.bat classes.dex
,生成对应的jar文件,
image
使用jd-gui直接打开jar,查看源码
image
-
apktool反编译资源文件
首先我在本地F盘下新建了个apktool文件夹(下面有用到)。
- 第一步,就是要让我们下载apktool.bat,把鼠标移至wrapper script上,然后右击,链接另存为…把下载来的文件放到D:\apktools,记得名字要改成apktool.bat;如果你直接点开的,也不用方,复制浏览器的内容就行,在D:\apktools目录下新建文本,复制到里面,然后重命名为apktool.bat就行了。 image
- 第二步,下载apktool.jar文件,点击find newest here,跳到下载页,我们能尽量下载最新版本,旧版本可能不能用(目前百度出来的反编译博文很多都提供apktool.jar下载,但是由于版本太旧,无法反编译),我这里下载最新版本apktool_x.x.x.jar,也把该文件刚到apktool文件夹下。
- 第三步:把你下载来的jar文件(笔者下载的最新版本apktool_2.3.1.jar)重新命名为:apktool.jar。
- 第四步:官网建议你把apktool.bat、apktool.jar放到C盘的Windows下,但是我没有,我是放在F盘的apktool文件夹下,为什么不能按着官网的步骤来呢,请看第5步。
- 第五步:按官网的意思是如果你没把apktool.bat、apktool.jar放到C盘的Windows下,就需要我们自行配置环境变量,因为如此,所以我需要自己配置环境变量,在系统环境变量path中加入D:\apktools
- 接下来,输入cmd调出命令行窗口,把apk文件拷贝到apktool目录下,执行
apktool d appxxxxxxx.apk
,得到对应的反编译后的文件夹,里面能看到所有的资源
image
image
重新打包并签名
cmd运行apktool b xxxxx -o other.apk
,其中xxxxx是指apktool反编译出来的包文件夹,other.apk是打包后的apk名称,这样可以打包出一个未签名的apk,然后通过命名或者三方工具签名,我这里使用的是爱加密的签名工具http://www.ijiami.cn/apply/Sign,傻瓜式操作
如何防止
- 开启代码混淆,切记,此混淆只不过是开启了代码混淆哦,资源文件还是洗白白的在那儿~~
混淆的高级玩法,带你把Apk混淆成中文语言代码http://www.520monkey.com/archives/992
- 开启资源文件混淆。其实和代码混淆原理是一样的,可以使用微信的AndResGuardhttps://blog.csdn.net/oYuDaBaJiao/article/details/77099051 进行资源混淆
- 验证包完整性
- 使用第三方加固,像爱加密和360加固,至于想自己上手加固的话,推荐看一下Android中的Apk的加固(加壳)原理解析和实现https://blog.csdn.net/jiangwei0910410003/article/details/48415225
github下载地址
https://github.com/apkcore/tools/tree/master/%E5%8F%8D%E7%BC%96%E8%AF%91
参考1
参考2
End
下面的是我的公众号,欢迎大家关注我。
Apkcore.jpg
网友评论