已测试某音(28.4.0), 某茄小说(6.0.5.32)
获取SSL_CTX_set_custom_verify
的参数3(回调函数)

让回调函数的返回值保持为0, 即ssl_verify_ok即可
首先获取一下SSL_CTX_set_custom_verify
spwan模式启动下应用frida -U -f com.ss.xxx.xxx.aweme -l byteDance.js
注入后提示报错: Error: unable to find module 'libsscronet.so'
很明显, 问题的原因在于注入的时机过早, so还没有加载进来, 解决办法有2个:
当监听到so被加载时进行hook操作, hook到SSL_CTX_set_custom_verify
后, 获取参数3并hook它, 让此函数执行完成后的返回值保持为0即可


完整代码已经上传至github
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;
}
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,
};
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);
function main() {
Java.perform(function () {
let SSL_CTX_set_custom_verify
=
Module.getExportByName(
'libsscronet.so'
,
'SSL_CTX_set_custom_verify'
);
}
}
setImmediate(main);
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
);
}
});
}
});
}
});
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) {
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2024-1-11 12:31
被墨穹呢编辑
,原因: