免责声明
本次技术分享仅用于逆向技术的交流与学习,请勿用于其他非法用途;技术是把双刃剑,请善用它。
逆向是什么、可以做什么、怎么做
-
简单讲,就是将别人打包好的 apk 进行反编译,得到源码并分析代码逻辑,最终达成自己的目的。
-
可以做的事:
- 修改 smali 文件,使程序达到自己想要的效果,重新编译签名安装,如去广告、自动化操作、电商薅羊毛、单机游戏修改数值、破解付费内容、汉化、抓包等
- 阅读源码,借鉴别人写好的技术实践
- 破解:小组件盒子:www.coolapk.com/apk/io.ifte…
-
怎么做:
- 这是门庞杂的技术活,需要知识的广度、经验、深度
- 需要具体问题,具体分析,有针对性的学习与探索
- 了解打包原理、ARM、Smali汇编语言
- 加固、脱壳
- Xposed、Substrate、Fridad等框架
- 加解密
- 使用好工具## 今日分享涉及工具
-
apktool:反编译工具
- 反编译:
apktool d <apkPath> o <outputPath> - 重新打包:
apktool b <fileDirPath> -o <apkPath> - 安装:
brew install apktool
- 反编译:
-
jadx:支持命令行和图形界面,支持apk、dex、jar、aar等格式的文件查看
-
apksigner:签名工具
-
Charles:抓包工具
- www.charlesproxy.com/
- Android 7 以上抓包 HTTPS ,需要手机 Root 后将证书安装到系统中
- Android 7 以下 HTTPS 直接抓
正题
-
正向编译
- java -> class -> dex -> apk
-
反向编译
- apk -> dex -> smali -> java
-
Smali 是 Android 的 Dalvik 虚拟机所使用的一种 dex 格式的中间语言
-
正题开始,以反编译某瓣App为例:
-
jadx 查看 Java 源码,找到想修改的代码
-
反编译得到 smali 源码:
apktool d douban.apk -o doubancode --only-main-classes -
修改:找到 debug 界面入口并打开
-
将修改后的 smali 源码正向编译成 apk:
apktool b doubancode -o douban_mock1.apk -
重签名:
jarsigner -verbose -keystore keys.jks test.apk key0 -
此时的包不能正常访问接口,因为豆瓣 API 做了签名校验,而我们的新 apk 是用了新的签名,看接口抓包
-
怎么办呢?
-
继续分析代码,修改网络请求中的 apikey
-
来看看新的 apk
-
-
也可以做爬虫等
启发与防范
- 混淆
- 加固
- 加密
- 运行环境监测
- 不写敏感信息或操作到客户端
- App 运行签名验证
- Api 接口签名验证
One More Thing
-
进阶(下次分享):
- 静态调试
- 动态调试
- 脱壳
- NDK你想
- so文件修改