本文hook以activity来讲解,运用Java反射以及代理。
hook技术的难点在于hook到某个点,就是寻找在内存中“不变”的对象,那么静态修饰或者单例就是我们要hook的点,然后实现代理。所以根据这个想法,我们就来找Activity需要hook的点。
一:我们先跟踪 startActivity源码
第一步:
@Override
public void startActivity(Intent intent) {
this.startActivity(intent, null);
}
第二步:发现startActivity实际上调用了startActivityForResult
@Override
public void startActivity(Intent intent, @Nullable Bundle options) {
if (options != null) {
startActivityForResult(intent, -1, options);
} else {
startActivityForResult(intent, -1);
}
}
第三步:跟进startActivityForResult,发现是 Instrumentation 执行了execStartActivity
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
if (mParent &#