Field 값 후킹 질문드립니다.
안녕하세요 선배님들 후킹 시 궁금한점이 있어 글남김니다.
// Namespace: KHS.Manager
public class GameState // TypeDefIndex: 4580
{
// Fields
public ulong enemyLife; // 0x10
public ulong myDamage; // 0x18
public float myDamageAmp; // 0x20
public float myCriticalProbability; // 0x24
public float autoShotTime; // 0x28
public float autoShotLifetime; // 0x2C
public bool boss; // 0x30
public float bossCatTime; // 0x34
public CharacterType[] buddyType; // 0x38
public float[] buddyShotTime; // 0x40
public ulong[] buddyDamages; // 0x48
public float[] itemEffctMaxTime; // 0x50
public float[] itemEffctTime; // 0x58
public bool[] itemEffctUpdate; // 0x60
// Methods
// RVA: 0x70BBA0 Offset: 0x70BBA0 VA: 0x70BBA0
public void .ctor() { }
}
다음과 같은 코드가 있을때 enemyLife 값을 후킹하고 싶어 코드를 작성했는데 여기서 il2cpp.add()에 들어갈 offset 값을 어떻게 작성해야할까요..?
다음은 작성한 코드입니다.
function awaitForCondition(callback) {
var i = setInterval(function () {
var addr = Module.findBaseAddress('libil2cpp.so');
//console.log("Address found:", addr);
if (addr) {
clearInterval(i);
callback(+addr);
}
}, 0);
}
var il2cpp = null;
Java.perform(function () {
awaitForCondition(function (base) {
il2cpp = ptr(base);
//checkdamage();
checklife();
//modAddGold();
})
})
function checklife() {
Interceptor.attach(il2cpp.add(offset값???), {
onEnter: function(args) {
console.log("Showresult is calling");
this.instance = args[0];
console.log("value of a = " + this.instance.readULong());
//console.log(a.readByteArray(100));
//a.writeLong(100);
}
})
}