package mobi.acpm.inspeckage.hooks;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
/**
* Created by acpm on 24/11/15.
*/
public class IPCHook extends XC_MethodHook {
public static final String TAG = "Inspeckage_IPC:";
public static void initAllHooks(final XC_LoadPackage.LoadPackageParam loadPackageParam) {
findAndHookMethod(ContextWrapper.class, "startActivities",
Intent[].class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Intent[] it = (Intent[]) param.args[0];
StringBuffer sb = new StringBuffer();
for(Intent i : it){
sb.append(i+",");
}
XposedBridge.log(TAG + "startActivities: "+sb.toString().substring(0,sb.length()-1));
}
});
findAndHookMethod(ContextWrapper.class, "startService",
Intent.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Intent intent = (Intent) param.args[0];
XposedBridge.log(TAG + "startService: "+intent);
}
});
findAndHookMethod(ContextWrapper.class, "startActivity",
Intent.class, Bundle.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Intent intent = (Intent) param.args[0];
XposedBridge.log(TAG + "startActivity: "+intent);
}
});
//findAndHookMethod(ContextWrapper.class, "startActivity",
findAndHookMethod(Activity.class, "startActivity",
Intent.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Intent intent = (Intent) param.args[0];
XposedBridge.log(TAG + "startActivity: "+intent);
}
});
findAndHookMethod(ContextWrapper.class, "sendBroadcast",
Intent.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Intent intent = (Intent) param.args[0];
if(intent !=null && !intent.getAction().contains("mobi.acpm.inspeckage")) {
XposedBridge.log(TAG + "sendBroadcast: " + intent);
}
}
});
findAndHookMethod(ContextWrapper.class, "sendBroadcast",
Intent.class, String.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Intent intent = (Intent) param.args[0];
if(intent !=null && !intent.getAction().contains("mobi.acpm.inspeckage")) {
XposedBridge.log(TAG + "sendBroadcast: " + intent);
}
}
});
findAndHookMethod(ContextWrapper.class, "registerReceiver",
BroadcastReceiver.class, IntentFilter.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
IntentFilter intentFilter = (IntentFilter) param.args[1];
StringBuffer sb = new StringBuffer();
sb.append("Actions: ");
for(int i=0; i<intentFilter.countActions(); i++){
sb.append(intentFilter.getAction(i)+",");
}
if(!sb.toString().contains("mobi.acpm.inspeckage")) {
XposedBridge.log(TAG + "registerReceiver: " + sb.toString().substring(0, sb.length() - 1));
}
}
});
findAndHookMethod(ContextWrapper.class, "registerReceiver",
BroadcastReceiver.class, IntentFilter.class, String.class, Handler.class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
IntentFilter intentFilter = (IntentFilter) param.args[1];
StringBuffer sb = new StringBuffer();
sb.append("Actions: ");
for(int i=0; i<intentFilter.countActions(); i++){
sb.append(intentFilter.getAction(i)+",");
}
if(param.args[2] != null){
sb.append(" Permissions: "+param.args[2]);
}
if(!sb.toString().contains("mobi.acpm.inspeckage")) {
XposedBridge.log(TAG + "registerReceiver: " + sb.toString().substring(0, sb.length() - 1));
}
}
});
}
}