A dynamic instrumentation framework designed for usage within process scope.
In app
module, we use an android project to show how to use the hook toolkit.
/** Define hook configuration */
public class AndHookConfig {
/** Hook Activity's onStart() method */
@HookHelper.Hook(clazz = Activity.class)
private static void onStart(Activity activity) {
Log.d(AndTest.LOG_TAG, "onStart: HookedActivity::onStart start, this is " + activity.getClass());
HookHelper.invokeVoidOrigin(activity);// invoke the origin method
Log.d(AndTest.LOG_TAG, "onStart: HookedActivity::onStart end, this is " + activity.getClass());
}
}
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Make sure AndHook's native library is loaded first.
AndHook.ensureNativeLibraryLoaded(null);
// Then apply hook configuration before target method running.
HookHelper.applyHooks(AndHookConfig.class);
}
}
public class MainActivity extends Activity {
@Override
protected void onStart() {
Log.i(TAG, "MainActivity.super::onStart: start");
super.onStart();// the method which is hooked
Log.i(TAG, "MainActivity.super::onStart: end");
}
}
// After MainActivity launched, you will be able to see log in logcat like:
// AndHook_Test: MainActivity.super::onStart: start
// AndHook_Test: onStart: HookedActivity::onStart start, this is class andhook.test.ui.MainActivity
// AndHook_Test: onStart: HookedActivity::onStart end, this is class andhook.test.ui.MainActivity
// AndHook_Test: MainActivity.super::onStart: end