某apk算法逆向分析过程
对某app抓包时发现所有请求都进行了加密,便对加密算法简单分析了下。
0x00
在之前的app算法分析中都喜欢从登录处开始入手,但这次因为安装在模拟器 的 app 点登录后直接崩溃, so ,换了个入口点。 很 多 app 最终调用的算法函数名称存在 encrypt 、 decrypt 关键字, 用 jadx 反编译 apk , 全局搜索 关键字 "decrypt" 。
打开 SecurityCryptor 类,看到调用了 动态链接库 ( lib sgmain.so) 进行加密, 关键加 密算法应该就在这里了。
看起来似乎很顺利,记录下在这之前的曲折过程。
0x01
一开始莫名 的搜索了 “ decode ” 关键字。
看到了 DES 关键词 ,打开查看挺像是加解密函数。
搜索哪处调用了 util.y 函数
进一步追踪
加密函数 y.a(str,str2) 具有不同的参数,利用 xposed hook 加密函数 y .a(str,str2) 。
在意见反馈提交信息后并没有看到 hook 日志,也就是说思路错了,这函数不是 最终调用的加密函数。 倒是在 logcat中看到 url after encode 信息。
全局搜索 logcat 信息
关键函数部分 jadx 反编译不出来。
查看 smali 代码后有点 吃力, 使用 smali 动态调式分析。
0x03
smali 动态调试
对 app 进行二次打包,修改AndroidManifest.xml 中 application ,添加 android:debuggable="true" , 重新打包后发现 apk 对签名做了校验,网络通讯功能无法使用。
比较方便的方法 :
• 安装 xposed框架(需要 root ,刷第三方 recovery ),之后安装 xinstaller 模 块 , 设 置 xinstaller 启 动专 家模式,在其他 设 置中开启 “ 调试应用 ”
• 用模 拟 器 进 行 调试 , ro.debuggable默 认为 1 ,不需要二次 打 包。
Android Studio 动态调试 Smali
下载 Android Studio 插件 smalidea - 0.05.zip , 下载地址 : https://bitbucket.org/JesusFr...
安装 smalidea
- 打开 Android Studio ,按 Alt+Ctrl+S 打开设置界面,点击 Preferences —— Plugins —— Install plugin from disk... —— 选择下载好的smalidea - 0.05.zip 。
- 重启 Android Studio 。
反编译 apk 用 apktool 反编译 apk , 将反编译好的工程导入 Android Studio , 导入完 Android studio 提示有个警告,如下图所示,点击Configure 。
在终端运行 ,开启 app 调试模式
adb shell am start - D - n com.bbk.appstore/.ui.AppStore
模拟器如下图所示的话说明成功 。
回到 android studio处,已经自动帮我们构建 好了调试环境,打开 smali ,找到 前面的关键函数处 下断点。
开始调试
在右下角的 Watches 窗口 可以添加变量, 查看各个寄存器的值,然后按下 f8 单 步运行这个 apk ,找到具体的加密函数,看 它到底是怎么加密流量的:
后续调试发现程序 调用了一个动态链接库进行加密,然后把加密结果再传递出来, 又 回到了开头 , 下面使用 Brida 调用 lib sgmain.so 的加解密函数,方便测试。
0x04 Brida
Brida 是一款Burp Suite 扩展,作为一座桥梁连接着 Burp Suite 以及 Frida , 以帮助用户修改应用程序与后端服务器之间的通信数据为己任。在分析移动端应 用时遇到应用使用随机密钥式对称加密,如果不知道其使用的密钥就无法篡改其 通信数据,通过Burp 也就无法对所有的交换数据进行更改了,于是 Brida 就这 样出现在我们视野中。
参考: https://www.anquanke.com/post/ id/86567
配置好 Frida 好后,启动 Brida 。
Brida 脚本代码如下:
burp 中使用右键调用 contextcustom2 对请求参数解密
0x05 后续
使用 Brida 插件,省去了分析 so 文件加密算法的时间 ,我们可以直接调用应 用中的方法,来对数据进行加 / 解密 ,而不用去逆向对应的方法。 为了更深入的分析 Android NDK 逆向 ,后续会 使用 IDA 动态调试 so 文件,进一步练手 。
开了一个新群,期待感兴趣的小伙伴加入进来,一起学习交流解决问题,吹水广告勿扰