我正在使用cydia基板在第三方应用程序中挂钩方法,这意味着我无法访问它的源代码。我想要挂钩的方法有一个自定义类型参数,如下所示:
methodToHook(com.thirdparty.app.CustomClass param1)
但是要挂钩方法,我需要“告诉”cydia这个方法的参数类型,如下所示:
MS.hookClassLoad("com.thirdparty.app.CustomClass",
new MS.ClassLoadHook() {
@SuppressWarnings("unchecked")
public void classLoaded(Class<?> CustomClass) {
Log.i("misty", "CustomClassclassLoaded");
Constructor constructor1;
try {
constructor1 = CustomClass.getMethod("CustomClass", CustomClass.class);
那么我怎么能给它真正的“CustomClass.class”来完成钩子?
答案 0 :(得分:0)
我认为你在MS.hookClassLoad调用中已经过了一个级别。
试试这个
MS.hookClassLoad("com.thirdparty.app", new MS.ClassLoadHook() {
public void classLoaded(Class<?> CustomClass) {
Method getClass; try {
getClass = CustomClass.getMethod("getClass", Integer.TYPE);
} catch (NoSuchMethodException e) {
getClass = null;
}
if (getClass != null) {
final MS.MethodPointer old = new MS.MethodPointer();
MS.hookMethod(CustomClass, getClass, new MS.MethodHook() {
public Object invoked(Object CustomClass, Object... args)
throws Throwable
{
int ModifiedValue = (Integer) old.invoke(CustomClass, args);
return ModifiedValue & ~0x0000ff00 | 0x00ff0000;
}
}, old);
}
}
});
com.thirdparty.app 是申请书 和 CustomClass 是正在加载的类 getClass 是CustomClass中的内部方法。