#前言
一晃两个多月过去了,眼瞅着网站一直没更新,有点对不起这买来的两个域名,最近把xxhong.com给收了,我可是惦记了好几个月,就等着它过注册保护期
“ 这站长一定是个假的技术狗 ”
今天要跟大家聊聊Android应用的反编译
FBI WARNING
本博文仅供学习交流请勿用于非法用途,后果自负
#工具
- apktool
反编译和回编的主要工具,但是反编译后的代码是Smali语言! - jadx
可直接查看APK源码,而且是Java! - smalidea(Android Studio插件)
利用此插件可方便地分析Smali,而且可调试!
#步骤
1. 反编译
运行命令
如果顺利的话,会输出一堆如下信息
所有文件默认都在应用同名文件夹中,我们需要关注里面的:
- AndroidManifest.xml 应用配置文件
- smali 源码目录
- res 资源目录
2. 初步回编
运行命令
如果顺利的话,会输出一堆信息
回编比较常见的几个错误及修复方法:
- 图片格式错误,修改相应图片
- 资源id找不到,实际是res/values/public.xml里面的id顺序不对,修改之
3. 分析及修改
这个时候你有两个选择:
功能性分析及修改
你可以替换或修改res中的资源,修改smali代码tips:
1.修改AndroidManifest.xml中的debuggable属性为true;
2.在关键代码处插入日志打印,俗称插桩;
3.利用smalidea插件在Android Studio中调试smali代码代码级分析及修改
使用jadx打开APK,然后选择保存,这时java代码就保存下来了,再利用前面apktool反编译出来的其他文件,你就可以在IDE中重新创建一个同名应用了。
这种方式的好处是,你已经有了一份这个应用的源码,不过困难之处在于如果应用代码混淆了,你得到的源码比较难看懂,而且在IDE中会报各种语法错误,这些是需要你慢慢解决的问题。
4. 打包回编
基于smali的修改,请查看步骤2
基于代码级的修改及分析,可直接利用IDE
最后别忘了给应用签名
#然而
当你从应用市场下载了一个APK,漏出邪恶的笑容准备反编译的时候,你很可能没法用上述的方法来反编译,因为APP加壳了,这时候你需要学习另外一种技术—脱壳(就不给链接)