flutter案例抓包-猿人学app
zsk Lv4

这是猿人学App第七题flutter案例
直接抓包看一下,直接抓不到。关闭抓包就正常

image

既然说了是flutter,可以参考这两篇文章

文章里面也说了Flutter是Google使用Dart语言开发的移动应用开发框架,由于Dart使用Mozilla的NSS库生成并编译自己的Keystore,导致我们就不能通过将代理CA添加到系统CA存储来绕过SSL验证。为了解决这个问题,就必需要研究libflutter.so。

写脚本,在运行时将返回函数改为true即可绕过证书链检查实现抓包。
文章内容各位就自己看,我们直接上手
解压apk,用ida打开libflutter.so
在ida中的strings搜索字符串ssl_client

image
跟进去可以找到并定位函数为sub_393DA4,也可以按x看它的引用,也是函数sub_393DA4,跟进去

image

image

找到ssl_client的引用位置,往上找到函数sub_393DA4头部字节定位,

image

针对64位flutter.so的hook代码示例如下,地址不再需要+1。把上面的头部字节替换到pattern里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function hook_ssl_verify_result(address) {
Interceptor.attach(address, {
onEnter: function (args) {
console.log("Disabling SSL validation")
},
onLeave: function (retval) {
console.log("Retval: " + retval);
retval.replace(0x1);
}
});
}

function hookFlutter() {
var m = Process.findModuleByName("libflutter.so");
var pattern = "FF C3 01 D1 FD 7B 01 A9 FC 6F 02 A9 FA 67 03 A9 F8 5F 04 A9 F6 57 05 A9 F4 4F 06 A9 08 0A 80 52";
var res = Memory.scan(m.base, m.size, pattern, {
onMatch: function (address, size) {
console.log('[+] ssl_verify_result found at: ' + address.toString());
hook_ssl_verify_result(address);
},
onError: function (reason) {
console.log('[!] There was an error scanning memory');
},
onComplete: function () {
console.log("All done")
}
});
}

开启脚本后,抓包就正常了

image

 评论