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)
相关推荐
介一安全3 天前
【Frida Android】实战篇17:Frida检测与绕过——基于inline hook的攻防实战
android·网络安全·逆向·安全性测试·frida
嫂子的姐夫4 天前
008-字体反爬:猫眼
爬虫·逆向·混淆·字体反爬
apcipot_rain7 天前
汇编语言与逆向分析 一轮复习笔记
汇编·笔记·逆向
这样の我8 天前
某海外 _signature签名分析
逆向
Aerelin8 天前
《静态分析:GUI程序的明码比较》
逆向·ctf
奋飞安全8 天前
给你的Ida插上翅膀
安全·逆向
恶猫8 天前
ImHex 十六进制编辑器 v1.38.0 多语便携版
编辑器·逆向·十六进制·模式匹配·imhex
Aerelin8 天前
Windows GUI 逆向分析题(CrackMe)
逆向·ctf
逆向新手8 天前
js逆向-某省特种设备aes加密研究
javascript·爬虫·python·逆向·js
介一安全11 天前
【Frida Android】实战篇15:Frida检测与绕过——基于/proc/self/maps的攻防实战
android·网络安全·逆向·安全性测试·frida