Frida Tutorial 1

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

漏洞赏金提示注册 Intigriti,这是一家由黑客创建的高级 漏洞赏金平台!立即加入我们 https://go.intigriti.com/hacktricks,开始赚取高达 $100,000 的赏金!

这是帖子的摘要https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1 APKhttps://github.com/t0thkr1s/frida-demo/releases 源代码https://github.com/t0thkr1s/frida-demo

Python

Frida 允许您在运行应用程序的函数中 插入 JavaScript 代码。但您可以使用 python调用 钩子,甚至与 钩子 进行 交互

这是一个简单的 python 脚本,您可以在本教程中的所有示例中使用:

#hooking.py
import frida, sys

with open(sys.argv[1], 'r') as f:
jscode = f.read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
script.load()
sys.stdin.read()

调用脚本:

python hooking.py <hookN.js>

了解如何使用Python与Frida是很有用的,但对于这些示例,您也可以直接调用Frida使用命令行frida工具:

frida -U --no-pause -l hookN.js -f infosecadventures.fridademo

Hook 1 - 布尔值绕过

在这里,您可以看到如何从类_infosecadventures.fridademo.utils.PinUtil_中hook一个布尔值方法(checkPin

//hook1.js
Java.perform(function() {
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil");
MainActivity.checkPin.implementation = function(pin){
console.log("[ + ] PIN check successfully bypassed!")
return true;
}
});
python hooking.py hook1.js

Hook 2 - 函数暴力破解

非静态函数

如果要调用类的非静态函数,首先需要一个实例。然后,您可以使用该实例来调用函数。 为此,您可以查找现有实例并使用它:

Java.perform(function() {
console.log("[ * ] Starting PIN Brute-force, please wait...");
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function(instance) {
console.log("[ * ] Instance found in memory: " + instance);
for(var i = 1000; i < 9999; i++){
if(instance.checkPin(i + "") == true){
console.log("[ + ] Found correct PIN: " + i);
break;
}
}
},
onComplete: function() { }
});
});

静态函数

如果函数是静态的,你可以直接调用它:

//hook2.js
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil");

for(var i=1000; i < 9999; i++)
{
if(PinUtil.checkPin(i+"") == true){
console.log("[ + ] Found correct PIN: " + i);
}
}
});

Hook 3 - 检索参数和返回值

您可以钩住一个函数,并让它打印传递的参数值和返回值的值:

//hook3.js
Java.perform(function() {
console.log("[ * ] Starting implementation override...")

var EncryptionUtil = Java.use("infosecadventures.fridademo.utils.EncryptionUtil");
EncryptionUtil.encrypt.implementation = function(key, value){
console.log("Key: " + key);
console.log("Value: " + value);
var encrypted_ret = this.encrypt(key, value); //Call the original function
console.log("Encrypted value: " + encrypted_ret);
return encrypted_ret;
}
});

重要

在本教程中,您使用方法的名称和 .implementation 钩住了方法。但是,如果有多个具有相同名称的方法,您将需要指定要钩住的方法,并指示参数的类型

您可以在下一个教程中看到。

漏洞赏金提示注册Intigriti,这是一家由黑客创建的高级漏洞赏金平台!立即加入我们,访问https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

最后更新于