一、frida教程文档
frida教程文档是学习frida框架的重要指南,提供了丰富的例子和详细的解释。在学习frida框架之前,我们需要学会如何查阅文档。
首先需要了解frida文档的结构。frida文档的主要部分分为两个部分:API参考和教程。在API参考中,我们可以查阅frida的API和模块以及对应的方法。在教程中,我们可以学习frida的一些使用技巧和应用示例。
例如,我们需要查找frida的spawn函数的使用说明。首先进入frida官网的文档页面 https://frida.re/docs/home/ ,在左侧导航栏选择API Reference,然后选择frida.core模块,在该模块中我们就可以找到spawn函数,并获取使用说明。
import frida
def on_message(message, data):
print("[*] message:", message)
pid = frida.spawn("com.example.app")
session = frida.attach(pid)
script = session.create_script("console.log('hello world')")
script.on('message', on_message)
script.load()
# 这里需要利用frida的js函数OnLeave截获spawn的返回值
p = session.create_script("""
Interceptor.attach(Module.findExportByName(null, "spawn"), {
onLeave: function(retval) {
console.log("spawn retval: " + retval)
}
})
""")
p.load()
frida.resume(pid)
二、frida js教程
在使用frida开发的过程中,我们最常使用的是JavaScript语言。在frida中,我们可以使用JavaScript语言直接进行代码注入。因此,学习frida框架必须掌握JavaScript语言的基础知识,同时可以深入学习JavaScript语言的高级特性。
例如,我们可以通过JavaScript来完成动态Hook。在Hooking中,我们可以通过JavaScript函数来代替原有函数被调用,从而实现动态替换的目的。
function hook_native_function() {
const libaddress = Module.findBaseAddress("libnative-lib.so");
Interceptor.attach(Module.findExportByName("libnative-lib.so", "_Z11testMethodv"), {
onEnter: function (args) {
console.log("Entered " + libaddress);
// 原native函数
console.log("Original function arguments: " + args[0] + "," + args[1] + "," + args[2]);
// 修改native函数的参数
args[0] = ptr("0x123456");
args[1] = ptr("0x7890AB");
args[2] = ptr("0xCDEF12");
console.log("args[0]: ", args[0], args[0].readCString());
console.log("args[1]: ", args[1], args[1].readCString());
console.log("args[2]: ", args[2], args[2].readCString());
},
onLeave: function (retval) {
console.log("Returning" + retval);
}
});
}
三、frida教程 百度网盘
Google Drive 是美国 Google 公司推出的一项云存储服务,所有设备用户都可以获得15GB的免费存储空间,可以进行文件备份、同步和分享等操作。
对于学习frida框架开发的课程教学,我们可以在百度网盘中找到对应的视频课程,加快我们学习的效率。
例如,《frida框架编程》视频课程,介绍了使用frida框架进行动态调试的操作技巧、frida命令行的操作使用以及frida框架的实际案例分析,涵盖了frida框架的基础教学和应用实用内容。
链接:https://pan.baidu.com/s/1bG3DlYOydTOy8EHfF8mKwA
提取码:rpg8
复制这段内容后打开百度网盘手机App,操作更方便哦
四、frida框架教程
在frida框架教程的内容中,我们主要学习frida框架的基础原理和使用,以及对frida检测的一些方法、技巧。
例如,我们可以通过frida框架来实现脱壳操作。在Android手机中使用的apk文件是经过加密处理的,无法直接反编译或保存,但我们可以通过使用frida框架进行动态调试,获取apk解密后的文件,从而进行反编译。
$ frida -U -f com.example.app --no-pause -l dump_memory.js
然后新建一个dump_memory.js文件,输入如下代码:
var startdump = false;
var enddump = false;
var offset = 0;
var filename = "/data/data/com.example.app/dump_data.bin";
var fd = new File(filename,"wb+");
console.log("Dump Data Start……\n");
Interceptor.attach(Module.findExportByName(null,"madvise"),{
onEnter: function(args){
if(startdump){
var addr = parseInt(ptr(args[0]));
var size = parseInt(ptr(args[1]));
if(offset==0){
console.log("Virtual Address: "+addr.toString(16));
}
offset += size;
}
},
onLeave: function(retval){
}
});
Interceptor.attach(Module.findExportByName(null,"syscall"),{
onEnter: function(args){
if(startdump){
var R0 = parseInt(ptr(args[0]));
if(R0 == 4){
var fd = parseInt(ptr(args[1]));
var bufferptr = parseInt(ptr(args[2]));
var bytecount = parseInt(ptr(args[3]));
var data = Memory.readByteArray(bufferptr,bytecount);
send({
"type": 1,
"data": [fd,data,bytecount]
});
}
}
},
onLeave: function(retval){
}
});
Java.perform(function(){
// android.os.MemoryFile
var MemoryFile = Java.use("android.os.MemoryFile");
MemoryFile.write.overload('java.io.FileDescriptor','long','int','android.os.Handler','android.os.ParcelFileDescriptor','int').implementation=function(a,b,c,d,e,f){
console.log("MemoryFile write stub: ["+b+"] ["+c+"] ["+f+"] "+Memory.readUtf8String(e.value.getBytes()));
send({
"type": 2,
"data": [b,c,f]
});
return 0;
};
var sys = Java.use("java.lang.System");
sys.exit.implementation=function(){
if(enddump){
console.log("Dump Data End......\n");
}
return this.exit.apply(this,arguments);
}
});
rpc.exports = {
start: function(){
startdump = true;
},
end: function(){
enddump = true;
fd.flush();
fd.close();
},
write: function(fd, data, bytecount){
var buf = Memory.alloc(bytecount);
buf.writeByteArray(data);
fd = new UnixFileDescriptor(fd);
var r = IO.write(fd, buf, bytecount);
return r;
},
read: function(fd, buffer, offset, byteCount){
console.log("read dump......");
fd = new UnixFileDescriptor(fd);
var r = IO.read(fd, buffer, offset, byteCount);
return r;
}
};
五、frida安装
如要成功使用frida框架进行开发,必须首先安装frida环境。在安装frida之前,需要选择对应的frida版本和操作系统。
例如,在Ubuntu 18.04上安装frida,需要按照以下步骤进行:
# 添加frida ppa源
$ sudo add-apt-repository ppa:frida/stable
# 更新源
$ sudo apt-get update
# 安装frida
$ sudo apt install frida-tools
# 检查frida安装状态
$ frida --version
六、friedmann方程
在学习frida框架开发之外,我们也可以结合物理学知识,学习Friedmann方程。Friedmann方程是从广义相对论出发,描述宇宙演化的一个基础方程。它描述了宇宙的空间和时间的演化,以及宇宙内各种物质的分布变化。Friedmann方程是宇宙学研究的基础和核心内容,对于了解宇宙和科学的本质有着重要意义。
但是需要注意的是,Friedmann方程与frida框架开发没有直接关系。我们应当理性看待、合理应用各种知识。
Friedmann方程的公式如下:
H^2 = (8piG / 3) * rho - k / a^2 + Lambda / 3
a' / a = H