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)
相关推荐
安全小王子5 天前
nssctf_chicken_soup
网络安全·逆向·ctf·nssctf
安全小王子5 天前
nssctf——老鼠走迷宫
网络安全·逆向·ctf·nssctf
深念Y5 天前
QQ 数据库解密与聊天记录导出 — 技术文档
数据库·sqlite·手机·数据恢复·逆向·二进制·qq
安全小王子5 天前
nssctf_easyapp
网络安全·逆向·ctf·nssctf
安全小王子6 天前
nssctf_sign-ezc++
网络安全·逆向·ctf·nssctf
网安蟹佬霸7 天前
Android安全攻防实战:从APK逆向到Frida动态Hook全流程详解(附脚本)
android·前端·安全·web安全·逆向·csrf·网安
刘晴83010 天前
游戏逆向实战:我会梯云纵
逆向
k3x1n12 天前
三星安卓系统BUG排查记录:云闪付、铁路12306、个人所得税、中国移动等App,长期闪退的根本原因分析
android·逆向
_Achelous13 天前
BlueArchive蔚蓝档案国际服剧情文本取得
逆向
玫幽倩20 天前
2026黄河流域公安院校-电子物证单项赛(程序逆向分析+服务器取证)
运维·服务器·python·电子取证·逆向·程序分析·服务器取证