创建新的 NativeFunction 然后使用它
Create new NativeFunction and use it then
我想知道如何在应用程序使用 openssl 库时允许自签名证书
我看到了禁用证书验证的代码Whosebug questio hyperlink
static int always_true_callback(X509_STORE_CTX *ctx, void *arg)
{
return 1;
}
这是我应该放置这个新方法的方法,它总是 returns 1
但我不知道如何使用 Frida 创建该方法
这样做的正确方法是什么?
有很多方法可以实现您的目标
TL;DR
var SSL_CTX_set_cert_verify_callback = Module.findExportByName('libssl.so', 'SSL_CTX_set_cert_verify_callback');
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
Interceptor.replace(args[1], new NativeCallback((_arg1, _arg2) => {
return 1;
}, 'int', ['pointer', 'pointer']);
},
});
HookSSL_CTX_set_cert_verify_callback
,一旦调用拦截*cb
并替换 return 值。
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
Interceptor.attach(args[1]/* *cb */, {
onLeave: function(retval) {
retval.replace(1);
}
});
},
});
替换字节码
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
// add a condition so you will patch only once
Memory.patchCode(args[1], 64, code => {
const cw = new Arm64Writer(code, { pc: args[1] });
cw.putMovRegU64('x0', 1);
cw.putRet();
cw.flush();
});
},
});
用 CModule 替换函数
const cm = new CModule(`
void ret1(void) {
return 1;
}
`);
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
Interceptor.replace(args[1], cm.ret1);
},
});
我想知道如何在应用程序使用 openssl 库时允许自签名证书
我看到了禁用证书验证的代码Whosebug questio hyperlink
static int always_true_callback(X509_STORE_CTX *ctx, void *arg)
{
return 1;
}
这是我应该放置这个新方法的方法,它总是 returns 1
但我不知道如何使用 Frida 创建该方法
这样做的正确方法是什么?
有很多方法可以实现您的目标
TL;DR
var SSL_CTX_set_cert_verify_callback = Module.findExportByName('libssl.so', 'SSL_CTX_set_cert_verify_callback');
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
Interceptor.replace(args[1], new NativeCallback((_arg1, _arg2) => {
return 1;
}, 'int', ['pointer', 'pointer']);
},
});
HookSSL_CTX_set_cert_verify_callback
,一旦调用拦截*cb
并替换 return 值。
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
Interceptor.attach(args[1]/* *cb */, {
onLeave: function(retval) {
retval.replace(1);
}
});
},
});
替换字节码
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
// add a condition so you will patch only once
Memory.patchCode(args[1], 64, code => {
const cw = new Arm64Writer(code, { pc: args[1] });
cw.putMovRegU64('x0', 1);
cw.putRet();
cw.flush();
});
},
});
用 CModule 替换函数
const cm = new CModule(`
void ret1(void) {
return 1;
}
`);
Interceptor.attach(SSL_CTX_set_cert_verify_callback, {
onEnter: function(args) {
Interceptor.replace(args[1], cm.ret1);
},
});