6.6 KiB
Frida 教程 1
从零开始学习 AWS 黑客攻击直到成为英雄,通过 htARTE (HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果您想在 HackTricks 中看到您的公司广告 或 下载 HackTricks 的 PDF,请查看 订阅计划!
- 获取 官方 PEASS & HackTricks 商品
- 发现 PEASS 家族,我们独家的 NFTs 集合
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上 关注 我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。
如果您对 黑客职业 感兴趣,并且想要黑入不可黑的系统 - 我们正在招聘!(需要流利的波兰语书写和口语)。
{% embed url="https://www.stmcyber.com/careers" %}
来自:https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1
APK:https://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 -U --no-pause -l hookN.js -f infosecadventures.fridademo
Hook 1 - 布尔绕过
在这里,您可以看到如何从类 infosecadventures.fridademo.utils.PinUtil 中挂钩一个布尔方法(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 钩住了方法。但是,如果有多个同名方法,您将需要指定您想要钩住的方法,指出参数的类型。
您可以在下一个教程中看到这一点。
如果您对黑客职业感兴趣,并且想要黑掉不可黑的 - 我们正在招聘!(需要流利的波兰语书写和口语)。
{% embed url="https://www.stmcyber.com/careers" %}
通过 htARTE (HackTricks AWS Red Team Expert)从零开始学习AWS黑客攻击!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方的PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。