1. 序言
运用Frida辅助分析某个XX牛的登录算法,需要先了解什么是Frida以及Frida的基本用法。本文将主要介绍这些内容。
2. Frida是什么
Frida是一款针对移动设备,桌面操作系统进行的动态插桩工具。它能够让我们直接在运行中的应用程序中执行JavaScript脚本,在执行过程中可以实现一系列的hook、反调试等操作,从而达到辅助分析的目的。
2.1 安装Frida
要在自己的电脑上安装Frida,需要先安装Python以及一些其他依赖库。
pip install frida
安装完成后,就可以开始使用Frida对运行中的应用进行hook操作。
3. Frida的基本使用
在使用Frida进行hook操作之前,需要安装一款叫做frida-tools的辅助工具,安装方法如下:
npm install frida-tools
3.1 查看应用已加载的模块
要查看应用程序中已加载的模块,可以运行下面的命令:
frida -U -l modules.js [app_bundle_id]
其中,[app_bundle_id]代表要hook的应用程序的唯一标识(例如com.xx牛)。接下来,就可以看到应用程序中已加载的模块列表了。
3.2 监听函数
要在运行中的应用程序中监听函数的调用,可以使用Frida提供的Interceptor API。例如,如果要监听某个函数的调用,可以运行下面的代码:
Interceptor.attach(Module.findExportByName(null, "function_name"), {
onEnter: function(args) {
console.log("function_name is called");
},
onLeave: function(retval) {
console.log("function_name is returned with value: " + retval);
}
});
这样,在应用程序中调用该函数时,就会打印相关信息到控制台上。
4. Frida辅助分析xx牛的登录算法
有了上述基础知识,我们来看一下如何使用Frida对xx牛的登录算法进行辅助分析。我们知道,xx牛的登录算法主要是基于RSA加密实现的,因此,我们可以查看xx牛已加载的模块中是否存在RSA相关的函数,以此确认加密算法的具体实现。
import frida
session = frida.get_usb_device().attach("com.xx牛")
script = session.create_script("""
console.log(JSON.stringify(Module.enumerateExportsSync('libname.so')));
""")
script.load()
运行上述代码,可以查看到运行中的xx牛应用程序中已加载的所有模块及其中导出的所有函数。我们可以根据这些信息,找到实现加密算法的具体函数,然后使用Frida进行hook,以确认RSA加密算法的具体实现方法。
4.1 Hook RSA加密函数
我们可以使用Frida提供的Interceptor API,来监听xx牛应用程序中实现RSA加密算法的函数。
Interceptor.attach(Module.findExportByName(null, "rsa_encrypt"), {
onEnter: function(args) {
console.log("RSA Encrypted:");
console.log(hexdump(args[0]));
console.log("Public Key:");
console.log(hexdump(args[1]));
console.log("Encrypt Length:");
console.log(args[2].toInt32());
},
onLeave: function(retval) {
console.log("RSA Encrypted Result:");
console.log(hexdump(retval));
}
});
运行上述代码,就可以监听到xx牛应用程序中的RSA加密函数并打印参数信息及返回值信息了。
4.2 Hook 登录函数
在确认RSA加密算法的具体实现方法后,我们可以来hook登录函数以获取用户名和密码,可以使用Script API监听xx牛的登录函数,获取相关参数信息。
function hook_login() {
Interceptor.attach(Module.findExportByName(null, "login"), {
onEnter: function(args) {
console.log("Account: " + Memory.readCString(args[0],64));
console.log("Password: " + Memory.readCString(args[1],64));
console.log("Imei: " + Memory.readCString(args[2],20));
console.log("Version: " + Memory.readCString(args[3],64));
this.temp_buf = Memory.alloc(0x1000);
Memory.writeUtf8String(this.temp_buf, "hooked_username");
args[0] = this.temp_buf;
},
onLeave: function(retval) {}
});
}
hook_login();
上述代码将hook xx牛应用程序中的登录函数,并打印用户的账户名和密码,分别对应args[0]和args[1]参数。另外,通过Memory.writeUtf8String函数,我们可以将账户名更改为hooked_username。这样,登录时就能成功绕过账户名的校验了。
5. 总结
通过Frida辅助分析xx牛的登录算法,本文给大家介绍了Frida的基本概念及使用方法。在Frida的帮助下,我们能够快速、高效地进行安全性测试,并发现应用程序中潜在的安全漏洞。