已测试某音(28.4.0), 某茄小说(6.0.5.32)
原理
获取SSL_CTX_set_custom_verify的参数3(回调函数)
void SSL_CTX_set_custom_verify(SSL_CTX *ctx, int mode, enum ssl_verify_result_t (*callback)(SSL *ssl, uint8_t *out_alert)) {
ctx->verify_mode = mode;
ctx->custom_verify_callback = callback;
}
enum ssl_verify_result_t BORINGSSL_ENUM_INT {
ssl_verify_ok,
ssl_verify_invalid,
ssl_verify_retry,
};
代码编写
function main() {
Java.perform(function () {
let SSL_CTX_set_custom_verify = Module.getExportByName('libsscronet.so', 'SSL_CTX_set_custom_verify');
}
}
setImmediate(main);
-
setTimeout(main, 3000);延时执行函数 -
hook系统函数, 监听so加载
function onLoad(name, callback) {
//void* android_dlopen_ext(const char* filename, int flag, const android_dlextinfo* extinfo);//原型
const android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
if (android_dlopen_ext != null) {
Interceptor.attach(android_dlopen_ext, {
onEnter: function (args) {
if (args[0].readCString().indexOf(name) !== -1) {
this.hook = true;
}
},
onLeave: function (retval) {
if (this.hook) {
callback();
}
}
});
}
}
onLoad(soName, () => {
let SSL_CTX_set_custom_verify = Module.getExportByName('libsscronet.so', 'SSL_CTX_set_custom_verify');
if (SSL_CTX_set_custom_verify != null) {
Interceptor.attach(SSL_CTX_set_custom_verify, {
onEnter: function (args) {
Interceptor.attach(args[2], {
onLeave: function (retval) {
if (retval > 0x0) retval.replace(0x0);
}
});
}
});
}
});
效果图
完整代码已经上传至github https://github.com/LanBaiCode/FridaScripts
作者:Slimu
原文:https://www.52pojie.cn/thread-1879263-1-1.html
如侵权请私聊我们删文
原文始发于微信公众号(黑白之道):字节系app通用抓包方案
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论