frida基础 so篇(一)

获取process id

Process.id

获取已加载的so

Process.enumerateModules()

获取so的具体信息

js 复制代码
var process_obj_Module_Arr = Process.enumerateModules();
for (let index = 0; index < process_obj_Module_Arr.length; index++) {
    const element = process_obj_Module_Arr[index];

    if(element.path.indexOf("c_project")!=-1){
        console.log(element.name)
        console.log(element.base)
        console.log(element.size)
        console.log(element.path)
    }

}

获取单独一个so内的方法详情

js 复制代码
const hooks = Module.load("/data/app/~~wq4OApPMRngT8iCxA8RE9w==/c_project-F3_SK7jww3YPIqvUgDkEsw==/base.apk!/lib/arm64-v8a/libc_project.so");
var imports = hooks.enumerateImports();
for (let index = 0; index < imports.length; index++) {
    const element = imports[index];
    console.log(element.type)
    console.log(element.name)
    console.log(element.module)
    console.log(element.address)
}

通过方法找到so地址

Module.findExportByName(null,"strstr")

通过so地址找到so信息

Process.findModuleByAddress("0x72c194c030")

找到so的基地址

Module.findBaseAddress("libc_project.so")

根据模块名称和pattern名称找到ida上的地址

找到so地址和pattern地址后,最后可以使用计算的Hex功能,相减,就可以得到ida中方法的地址

js 复制代码
var pattern = "FF C3 01 D1 FD 7B 06 A9";

//找到模块地址
var model = Process.findModuleByName("libc_project.so");

console.log("model address = ",model.base)

//通过scan方法找到pattern匹配的地址
Memory. scan(model.base, model.size,pattern,{
    onMatch:function(address, size){
        console.log("find: address = ",address.toString())
        
        //ida地址
        var result = model.base - address.toString()
    },
    onError:function(reason){
        console.log("fail:",reason)
    },
    onComplete:function(){
        console.log("finish")
    }
})

申请10长度的内存,并打印出来

js 复制代码
//申请内存,长度为10
var r = Memory.alloc(10);

//用hexdump打印
console.log(hexdump(r,{
    offset:0,//偏移
    length:10,//长度
    header:true,//头部
    ansi:true//是否有颜色
}));

申请utf-8的内存

js 复制代码
var r = Memory.allocUtf8String("jevely")
console.log(hexdump(r,{
    offset:0,
    length:10,
    header:true,
    ansi:true
}));

读取utf-8内存

js 复制代码
console.log(Memory.readUtf8String(r));

复制内存

js 复制代码
var r = Memory.allocUtf8String("jevely")

//申请新的内存
var newaddress = Memory.alloc(10)
//复制长度为10的内存
Memory.copy(newaddress,r,10)
//打印
console.log(hexdump(newaddress))

往内存写东西

js 复制代码
//将string转为16进制
var arr = [0x6a, 0x65, 0x76, 0x65, 0x6c, 0x79];
//申请内存
const r = Memory.alloc(arr.length);
//将内容写入内存
Memory.writeByteArray(r,arr);
//打印
console.log(hexdump(r,{
    offset:0,
    length:arr.length,
    header:true,
    ansi:true
}))

读取内存内容

js 复制代码
var result = Memory.readByteArray(r,arr.length)
console.log(result)
相关推荐
Safe network access1 天前
IDA9.1+TRAE完成自动化逆向
网络·安全·逆向·ctf
clown_YZ2 天前
HeroCTF 2025--部分题解
网络安全·逆向·ctf
介一安全15 天前
【Frida Android】实战篇7:SSL Pinning 证书绑定绕过 Hook 教程阶段总结
android·网络安全·逆向·安全性测试·frida
介一安全19 天前
【Frida Android】实战篇5:SSL Pinning 证书绑定绕过 Hook 教程(二)
android·网络安全·逆向·安全性测试·frida
嫂子的姐夫20 天前
23-MD5+DES+Webpack:考试宝
java·爬虫·python·webpack·node.js·逆向
三喵22322 天前
安卓编译: 3.framework层定制修改(一)
逆向
三喵22324 天前
安卓编译: 2.native层定制修改(上)
逆向
网安Ruler24 天前
mips简单栈溢出
逆向
介一安全1 个月前
【Frida Android】实战篇1:环境准备
android·网络安全·逆向·frida