Android抓包 - Okhttp混淆导致Hook工具失效

Android抓包 - Okhttp混淆导致Hook工具失效

本文部分内容参考 loco 大佬的文章,同时借用loco大佬文章中的2个APP(有无混淆)。

微信公众号: yeshengit

这篇文章的主要目的是介绍使用Frida来处理APP没使用Android自带的HTTP客户端进行请求,且对HTTP客户端进行了混淆,导致JustTrustMe失效的问题。


首先,我们先看下该样例应用的源码,该应用做的事情就是访问百度,我们看到下图第41行,我们这边配置的证书哈希是随机的,因此无论我们如何访问,请求都是会失效的。

在这里插入图片描述

开始前,我先说下测试机的环境:

雷电模拟器3.76,Android 5.1.1,开启Root,安装且激活了Xposed,同时激活了TrustMePlus

在这里插入图片描述

让我们运行一下,没有开混淆的APP,点击发送请求。这边提示请求成功

在这里插入图片描述

那么我们再来试试开了混淆的应用。提示证书验证失败

在这里插入图片描述

为什么会出现这种情况呢,我们可以将这2个应用使用jadx反编译,我们可以看看区别

在这里插入图片描述

可以看到,左为无混淆,右为混淆,插件还是十分明显的,此时我们再去看看JustTrustMe的源码。

下面我给JustTrustMe的几个关键点进行了标注,同时加了点注释。其实它主要的操作就是替换了check方法.

Okhttp 2.5 check 方法返回 True

在这里插入图片描述

Okhttp 3.x check 方法返回 null

在这里插入图片描述

分析到这里,我们可以使用Frida来写点代码来测试测试

jsscript.js文件代码:

if(Java.available){
    Java.perform(function(){
        var Pinner = Java.use("okhttp3.CertificatePinner");
        send("okHTTP 3.x Found");
        Pinner.check.overload('java.lang.String', 'java.util.List').implementation = function(a,b){
            send("Hook CertificatePinner.check success!")
            return null;
        };
    });
}

Hook.py代码:

import frida, sys
jsCode = ""
with open("jsscript.js","r",encoding='utf-8') as f:
	jsCode = f.read()
def message(message, data):
    if message["type"] == 'send':
        print(u"[*] {0}".format(message['payload']))
    else:
        print(message)
process = frida.get_remote_device().attach("com.loco.example.OkHttp3SSLPinning")
script= process.create_script(jsCode)
script.on("message", message)
script.load()
sys.stdin.read()


注意:Frida在模拟器上运行不太稳定,现在测试环境为 nexus5 (6.0.1),Root,未安全Xposed模块

运行下Frida脚本,看看

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

至此,无混淆的版本已经搞定了抓包问题,那么我们再来试试混淆版本。

在这里插入图片描述

混淆后的jsscript.js:

if(Java.available){
    Java.perform(function(){
        var Pinner = Java.use("d.k");
        send("okHTTP 3.x Found");
        Pinner.a.overload('java.lang.String', 'java.util.List').implementation = function(a,b){
            send("Hook CertificatePinner.check")
            return null;
        };
    });
}

于是乎

在这里插入图片描述

至此,全篇终!!!

SSL ping APK下载地址:

链接:https://pan.baidu.com/s/1vIw40alQG7K1wNkmzmAkgw
提取码:as7g


参考

DroidSSLUnpinning: https://github.com/WooyunDota/DroidSSLUnpinning/blob/master/ObjectionUnpinningPlus/hooks.js

JustTrustMe: https://github.com/Fuzion24/JustTrustMe

tps://github.com/WooyunDota/DroidSSLUnpinning/blob/master/ObjectionUnpinningPlus/hooks.js

JustTrustMe: https://github.com/Fuzion24/JustTrustMe

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值