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)
相关推荐
这样の我1 天前
某海外上报接口 strData 纯算逆向
逆向
蔡霸霸i2 天前
掌上高考招生计划逆向爬虫爬取
逆向
嫂子的姐夫6 天前
017-续集-贝壳登录(剩余三个参数)
爬虫·python·逆向
热心市民老八9 天前
010editor 最新版破解
逆向·reverse
嫂子的姐夫12 天前
010-sha1+base64:爬虫练习网站
爬虫·python·逆向
嫂子的姐夫12 天前
012-AES加解密:某勾网(参数data和响应密文)
javascript·爬虫·python·逆向·加密算法
嫂子的姐夫12 天前
011-AES:深证信
爬虫·python·逆向
嫂子的姐夫12 天前
013-webpack:新东方
爬虫·python·webpack·node.js·逆向
极客小云13 天前
【Rokid AR录屏功能逆向分析:通过蓝牙HCI抓包实现CXR SDK未提供的AR录屏功能】
ar·逆向·vr眼镜·rokid·rokid glasses
介一安全13 天前
Android 安全加固工具 dpt-shell
android·安全·网络安全·逆向