【问题标题】:Create new NativeFunction and use it then创建新的 NativeFunction 然后使用它
【发布时间】:2021-09-21 05:11:51
【问题描述】:

我想知道如何在应用程序使用 openssl 库时允许自签名证书

我看到了禁用证书验证的代码StackOverflow questio hyperlink

static int always_true_callback(X509_STORE_CTX *ctx, void *arg)
{
    return 1;
}

这是我应该放置这个总是返回 1 的新方法的方法

但我不知道如何使用 Frida 创建该方法

这样做的正确方法是什么?

【问题讨论】:

  • 我不确定是否可以在 Frida 中创建函数。您可以做的是将您的 c 代码编译为包含此函数的 .so 库,并使用 Frida 将其加载到进程中。然后你就有了这个功能并使用它。

标签: c++ reverse-engineering frida


【解决方案1】:

有很多方法可以实现你的目标

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']);
  },
});

钩子SSL_CTX_set_cert_verify_callback,一旦它被称为拦截*cb 并替换返回值。

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);
  },
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2016-03-30
    • 2012-04-15
    相关资源
    最近更新 更多