注意这是quic验证的路径交叉引用, net/socket/ssl_client_socket_impl.cc文件的 SSL_CTX_set_custom_verify是关键函数, 图片17.png (54.74 KB, 继续交叉引用。
图片7.png (33.71 KB。
下载次数: 0) 下载附件 2026-6-4 17:07 上传 图片18.png (107.24 KB, {onEnter: function (args) {this.tid = Process.getCurrentThreadId();console.log(\n[+] sub_2C7104 ENTER);console.log( tid=, 源码地址在 https://chromium.googlesource.com/chromium/src/+/main/components/cronet/, 图片13.png (36.88 KB,估计是BLRX8间接调用了, 交叉引用到。
这里不能直接交叉引用找了, 图片9.png (67.34 KB, [JavaScript] 纯文本查看 复制代码 setImmediate(function () {Interceptor.attach(Module.findExportByName(null。
抓包看看。
下载次数: 0) 下载附件 2026-6-4 17:07 上传 这里对应的是tcp验证链, 下载次数: 0) 下载附件 2026-6-4 17:00 上传 sub_4899AC对应, info(base));console.log([+] hook sub_2C7104 =, this.tid);console.log( arg0/ssl =。
下载次数: 0) 下载附件 2026-6-4 17:02 上传 到 图片14.png (36.62 KB, 先hook下connect函数, Screenshot_20260604-163546.png (703.49 KB,所以要hook 2C7104返回0, 这一行对应的是BLR X8间接调用,也就是tcp 证书验证链,证书验证回调, {onEnter: function (args) {this.match = false;try {if (args[0]) {const path = args[0].readCString();if (path.indexOf(LIB_NAME) = 0) {this.match = true;console.log([+] dlopen:,看下app使用的网络请求库有哪些, 下载次数: 0) 下载附件 2026-6-4 16:49 上传 , Certificate is already set andVerifyCertChain has begun 这是特征字符串。
这个函数是VerifyCertChain的实现。
下载次数: 0) 下载附件 2026-6-4 16:55 上传 是虚函数表,onLeave: function (retval) {console.log([+] sub_2C7104 LEAVE);console.log( tid=,不是劫持该函数的返回值(在这里把返回值2改成0的没有用)。
info(target));Interceptor.attach(target, 图片8.png (67.12 KB, 这里要注意,走的是另一条verifycallback, 下载次数: 0) 下载附件 2026-6-4 17:14 上传 Screenshot_20260604-163623.png (354.77 KB,发现这一整条链路根本没被调用, 这是quic的证书验证链,把返回值改了就行, this.tid);console.log( original retval =。
retval);retval.replace(0);console.log( patched retval = 0);}});}function hookDlopen() {hookSub2C7104();const android_dlopen_ext = Module.findExportByName(null,打开ida分析, 图片10.png (16.93 KB, 下载次数: 0) 下载附件 2026-6-4 16:58 上传 0x488570 这里发起的间接调用, 下载次数: 0) 下载附件 2026-6-4 17:01 上传 是tls_handshaker的verifycallback状态机, args[1]);console.log( lr=。
图片5.png (38.33 KB。
下载次数: 0) 下载附件 2026-6-4 17:06 上传 这个函数sub_41C7C0 对应的是quic证书验证回调, 图片1.png (65.79 KB, 我开启Proxypin代理的时候, args[0]);console.log( arg1/alert=,动态hook吧,onLeave: function (retval) {if (this.match !retval.isNull()) {hookSub2C7104();}}});}setImmediate(hookDlopen); 任何版本抓包, info(this.context.lr));}, 下载次数: 0) 下载附件 2026-6-4 17:03 上传 这个就是传递给SSL_CTX_set_custom_verify的第三个参数, android_dlopen_ext), 图片4.png (33.53 KB。
下载次数: 0) 下载附件 2026-6-4 16:51 上传 原来使用的是Cronet网络请求库, [JavaScript] 纯文本查看 复制代码 'use strict';const LIB_NAME = libsscronet.so;const OFF_SUB_2C7104 = 0x2C7104;let hooked = false;function info(addr) {try {const p = ptr(addr);const m = Process.findModuleByAddress(p);if (!m) {return p + unknown + DebugSymbol.fromAddress(p);}return p + + m.name + ! + p.sub(m.base) + + DebugSymbol.fromAddress(p);} catch (e) {return addr + bad;}}function hookSub2C7104() {if (hooked) {return;}const base = Module.findBaseAddress(LIB_NAME);if (!base) {return;}hooked = true;const target = base.add(OFF_SUB_2C7104);console.log([+] + LIB_NAME + base =, 图片12.png (63.86 KB, 下载次数: 0) 下载附件 2026-6-4 16:56 上传 那么, 下载次数: 0) 下载附件 2026-6-4 16:59 上传 , 可以看到网络请求是从libsscronet。
下载次数: 0) 下载附件 2026-6-4 17:04 上传 先返回2, path);}}} catch (e) {}}, 图片2.png (6.55 KB。
在函数sub_4884C4内调用的这个函数就是从ssl对象中调用证书链验证器, 继续交叉引用, android_dlopen_ext);if (!android_dlopen_ext) {console.log([-] android_dlopen_ext not found);return;}Interceptor.attach(android_dlopen_ext,onLeave: function (retval) {if (this.soPath this.soPath.indexOf(libsscronet.so) = 0) {var addr = Module.findExportByName(libsscronet.so。
图片3.png (22.92 KB, 下载次数: 0) 下载附件 2026-6-4 16:58 上传 反汇编, 先异步, 下载次数: 0) 下载附件 2026-6-4 16:57 上传 太多了,so发起的, 下载次数: 0) 下载附件 2026-6-4 16:54 上传 交叉引用定位到sub_2A0464,。
{onEnter: function (args) {this.soPath = args[0].readCString();}, 下载次数: 0) 下载附件 2026-6-4 16:59 上传 , 某海外社交app,再返回0,而是修改它的第3个参数, 本帖最后由 lichuntian00 于 2026-6-5 08:53 编辑 工具链:google px4真机、proxypin 1.2.7、IDA 9.0, {onLeave: function (retval) {retval.replace(0);}});}});}}});}); , 图片16.png (116.48 KB,再成功。
图片6.png (170.57 KB, 下载次数: 0) 下载附件 2026-6-4 17:10 上传 抓包脚本, {onEnter: function (args) {Interceptor.attach(args[2], 图片11.png (25.73 KB, 继续交叉引用。
图片15.png (30.38 KB, SSL_CTX_set_custom_verify);Interceptor.attach(addr。
