asLody / SandHook

Android ART Hook/Native Inline Hook/Single Instruction Hook - support 4.4 - 11.0 32/64 bit - Xposed API Compat
Other
2.04k stars 440 forks source link

有BUG!!! #6

Closed yubazi closed 5 years ago

yubazi commented 5 years ago

返回类型为boolean和两个浮点类型的方法无法成功hook!!!!

ganyao114 commented 5 years ago

返回类型为boolean和两个浮点类型的方法无法成功hook!!!!

麻烦贴一下 log 另外如果使用 Xposed API 的话请注意 XposedCompat 初始化

yubazi commented 5 years ago

那个问题我已经解决了,是你代码没处理完全,但是有了个新的问题,方法体短的话无法hook,native层log提示方法can not inline due to origin code is too small

yubazi commented 5 years ago

@ganyao114 那个第一个问题修复在ParamWrapper.java里 if (objectType.isPrimitive()) { if (objectType == int.class) { return (int)object; } else if (objectType == long.class) { return (long) object; } else if (objectType == short.class) { return (short)object; } else if (objectType == byte.class) { return (byte)object; } else if (objectType == char.class) { return (char)object; } else if (objectType == boolean.class) { return (boolean)object ? 1 : 0; } else if (objectType == double.class) { return Double.doubleToLongBits(object); } else if (objectType == float.class) { return Float.floatToIntBits(object); } else { throw new RuntimeException("unknown type: " + objectType.toString()); } } else { return SandHook.getObjectAddress(object); } 但是第二个问题我不会弄,没学过c/ c++

public int getGold()
{
    return gold;
}

这样的就无法hook

ganyao114 commented 5 years ago

@ganyao114 那个第一个问题修复在ParamWrapper.java里 if (objectType.isPrimitive()) { if (objectType == int.class) { return (int)object; } else if (objectType == long.class) { return (long) object; } else if (objectType == short.class) { return (short)object; } else if (objectType == byte.class) { return (byte)object; } else if (objectType == char.class) { return (char)object; } else if (objectType == boolean.class) { return (boolean)object ? 1 : 0; } else if (objectType == double.class) { return Double.doubleToLongBits(object); } else if (objectType == float.class) { return Float.floatToIntBits(object); } else { throw new RuntimeException("unknown type: " + objectType.toString()); } } else { return SandHook.getObjectAddress(object); } 但是第二个问题我不会弄,没学过c/ c++

public int getGold()
{
    return gold;
}

这样的就无法hook

  1. 不是没有处理完全,是我故意不让带浮点的走 internal stub,带浮点的函数会走 DexMaker 动态生成签名一样的 hook stub,所以你需要初始化 XposedCompat,仔细看使用说明。
  2. 方法体短虽然不能使用 inline hook,但是会转而自动使用方法入口替换,这个警告不用管,也是成功 hook 了