Android 接口破解实践

记一下这段时间破解 app 接口的心得吧。

获取 apk 文件

如果是系统 app,无需 root 权限即可在 system/app、system/partner-app、system/priv-app 下取到。

apk 文件处理

如果是系统 app,那么取出来的 apk 会是进行过 odex 优化过的,需要把 odex 合入 apk。

可以参考Android反编译odex然后重新打包

反编译 Java

工具

  1. jadx
https://github.com/skylot/jadx
使用 “control + T” 快捷键,利用类结构快速定位调用关系
  2. JD-GUI、Luyten 等
感觉都不如 jadx 反编的效果好
  3. http://www.javadecompilers.com/
在线反编译,非常不错。jadx 反编错误的时候可以试试这个

抓包

使用 Charles 等工具获取接口的网络请求包,筛选有特点的字符串。

定位

  1. 搜索
在 jadx 中搜索抓包中筛选出的字符串,寻找网络请求拼接的地方。
  2. 查找 Service
如果是通过 AIDL Service 对外提供服务的,那么可以从 AIDL 的 Binder 处快速定位接口信息。

解密

  1. 分析使用的 HTTP 库
大部分代码混淆过后很难查看,可以先确认下使用的 HTTP 库,去除 HTTP 库内部的逻辑干扰。可以 Google 有特点的字符串来搜索是哪个库。
  2. 加密方法
可以直接复制 jadx 反编译的结果。
  3. 加密密钥
藏在 Java 代码中的很好找,如果藏在 so 包中就需要模拟调用 so 包中的接口了。

密钥

  1. 新建一个 AndroidStudio 项目
保持和破解对象的包名一致。
  2. 引入破解对象中的 so 文件
  3. 复制 jadx 反编后 load jni 的类
  4. 模拟调用,获取结果
  5. 如果 so 包中没有加入“签名校验”,或只是简单校验了包名等可以伪装的信息,就可以获取密钥了。
  6. 如果 so 包中加入了“签名校验”,需要用 ida pro 反编 so 包具体分析了,请参考参考链接2。

参考链接

  1. Android逆向之旅—Android应用的安全的攻防之战
  2. 逆向札记-利用IDA简单过so签名校验

Android 接口破解实践》上有1条评论

发表评论