AndHook

A dynamic instrumentation framework designed for usage within process scope.

Support

How to use

In app module, we use an android project to show how to use the hook toolkit.

Hook with AndHook

/** 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

How does AndHook work?

AndHook

How the method was intercepted?

CallFlow

Special Thanks

References