绕过 ins ssl pinning 复现

非逆向专业人士 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,尝试过 fridaobjectionJustTrustMe ,可惜都没能成功。
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 替换成 jzEdit > Patch program > Assemble),下图已修改

vefifier failure

根据原文,修改之后还是会出现 unexpected message ,所以再次搜索 openssl cert verify error ,重复上述过程,下图已修改(jnz 替换成 jz

openssl cert verify error

如果是 arm 平台,上述修改过程可能会遇到问题this processor does not support the assembler

解决方案:安装 keypatch,对于Mac OS 10.13无法按照官网上的步骤build,可以用这个 repoEdit > 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)。在手机上设置好代理之后就是见证奇迹的时刻啦。

ins crack

小结

由于是第一次接触逆向,同时也是第一次使用 ida, 有很多不熟练的地方,且只知其然不知其所以然。这次完全是依葫芦画瓢完成的,并不会分析所需修改的位置。今后还需要多学习一些逆向的原理,举一反三。