Создайте новую NativeFunction и затем используйте ее

Мне интересно, как я могу разрешить самоподписанные сертификаты, когда приложение использует библиотеку openssl

Я видел этот код, который отключает проверку сертификата гиперссылка на запрос StackOverflow

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

Это метод, в который я должен поместить этот новый метод, который всегда возвращает 1  введите описание изображения здесь

Но я не знаю, как я могу создать этот метод с помощью Фриды.

Как правильно это сделать?


person Kaspek    schedule 11.07.2021    source источник
comment
Не уверен, можно ли в Фриде создавать функции. Что вы можете сделать, так это скомпилировать свой код c в библиотеку .so, которая содержит эту функцию, и использовать Frida для ее загрузки в процесс. Тогда у вас есть функция и вы ее используете.   -  person Robert    schedule 12.07.2021


Ответы (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);
  },
});
person whoopdedoo    schedule 14.07.2021