Frida从16变到17,有一些语法上的变化,这里记录一下
换机子了,发现老脚本写法猛猛报错No such func,跑去看官方日志才看到17相对于16的更新。
内存读写APIs
17版本之前:
const playerHealthLocation = ptr('0x1234');
const playerHealth = Memory.readU32(playerHealthLocation);
Memory.writeU32(playerHealthLocation, 100);不过现在把Memory接口的读写变成了NativePointer的了
上面的代码就会变成下面:
const playerHealthLocation = ptr('0x1234');
const playerHealth = playerHealthLocation.readU32();
playerHealthLocation.writeU32(100);同时写完后还会返回当前地址的NativePointer,就是可以:
const playerData = ptr('0x1234');
playerData
.add(4).writeU32(13)
.add(4).writeU16(37)
.add(2).writeU16(42);这样子连着写。
静态模组
Module.ensureInitialized()Module.findBaseAddress()Module.getBaseAddress()Module.findExportByName()Module.getExportByName()Module.findSymbolByName()Module.getSymbolByName()
以上的全都似了(

取而代之的是:
Module.getGlobalExportByName()Process.getModuleByName()getExportByName()
比如原来的:
Module.getSymbolByName(null, 'open')
Module.getExportByName('libc.so', 'open')
Module.getBaseAddress('libc.so')
const openImpl = Process.getExportByName('libc.so', 'open');变成
Module.getGlobalExportByName('open')
Process.getModuleByName('libc.so').getExportByName('open')
Process.getModuleByName('libc.so').base
const openImpl = Process.getModuleByName('libc.so').getExportByName('open');
// or like this
const libc = Process.getModuleByName('libc.so');
const openImpl = libc.getExportByName('open');更加面向对象了。
