非逆向专业人士 Correct me if I am wrong!
受 Github 项目启发,本次复现主要参考 How to bypass Instagram SSL Pinning on Android
patch 过的 .so 文件
工具
- Macbook pro (Mac OS 10.13)
- 夜神模拟器(安卓5.1)和红米4(需要root权限)
- ida
- Burp Suite 社区版
Ins 版本 78
之前一直苦于绕过F家的ssl pinning,尝试过 frida、objection、JustTrustMe ,可惜都没能成功。
而 Github 项目 中的 Ins 版本略老,无法满足需求。幸运的是,无意中发现了 How to bypass Instagram SSL Pinning on Android ,折腾几个小时居然成功了。
下面进入正题
这里主要夜神模拟器(x86)过程,红米4(arm)类似。对于 arm,ida 需要安装 keypatch 后面会提
查看架构 adb shell getprop ro.product.cpu.abi
首先至少启动instagram一次,确保 /data/data/com.instagram.android/lib-zstd/ 目录下 libliger.so 已存在
输入以下命令
adb connect 127.0.0.1:62001
(127.0.0.1:62001 是夜神模拟器的默认 ip 和端口号,如果使用真机可跳过)adb push libliger.so /data/data/com.instagram.android/lib-zstd/libliger.so
拿到 libliger.so 之后,用ida打开。接着打开 View > Open Subviews > Strings ,在窗口中搜索(Search) verifier failure , 让后双击 verifier failure ,然后右击 aVerifierFailur 选择 List cross refferences to ,并进入 Graph View(Text View 按空格即可)可以分析程序执行流程。
这里我需要把 jnz 替换成 jz (Edit > Patch program > Assemble),下图已修改
根据原文,修改之后还是会出现 unexpected message ,所以再次搜索 openssl cert verify error ,重复上述过程,下图已修改(jnz 替换成 jz)
如果是 arm 平台,上述修改过程可能会遇到问题 “this processor does not support the assembler“
解决方案:安装 keypatch,对于Mac OS 10.13无法按照官网上的步骤build,可以用这个 repo。Edit > Patch program > Assemble => Edit > Keypatch > Pacher 即可完成代码修改。
接下来,Edit > Patch program > Apply patches to input file 生成patch过后 .so 文件。用下面这个命令覆盖原来的 .so 文件。
adb push libliger.so /data/data/com.instagram.android/lib-zstd/libliger.so
本人平时也习惯用 Charles,不过这里如果用Charles会出现 “unknown cipher suite” 。所以这里用 Burp Suite 来抓包 (需要用高版本 JDK, 不然也会出现 unknown cipher suite),当然这里要确保手机或模拟器上已安装好 Burp Suite 证书 (通过 java -jar burpsuite_community.jar
打开 Burp Suite)。在手机上设置好代理之后就是见证奇迹的时刻啦。
小结
由于是第一次接触逆向,同时也是第一次使用 ida, 有很多不熟练的地方,且只知其然不知其所以然。这次完全是依葫芦画瓢完成的,并不会分析所需修改的位置。今后还需要多学习一些逆向的原理,举一反三。