获取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)