/*----------------------------------------------------------------------------+ *| | *| Android's Hooker | *| | *+---------------------------------------------------------------------------+ *| Copyright (C) 2011 Georges Bossert and Dimitri Kirchner | *| This program is free software: you can redistribute it and/or modify | *| it under the terms of the GNU General Public License as published by | *| the Free Software Foundation, either version 3 of the License, or | *| (at your option) any later version. | *| | *| This program is distributed in the hope that it will be useful, | *| but WITHOUT ANY WARRANTY; without even the implied warranty of | *| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | *| GNU General Public License for more details. | *| | *| You should have received a copy of the GNU General Public License | *| along with this program. If not, see <http://www.gnu.org/licenses/>. | *+---------------------------------------------------------------------------+ *| @url : http://www.amossys.fr | *| @contact : android-hooker@amossys.fr | *| @sponsors : Amossys, http://www.amossys.fr | *+---------------------------------------------------------------------------+ */ package com.amossys.hooker.hookers; import java.util.HashMap; import java.util.Map; import com.amossys.hooker.SubstrateMain; import com.amossys.hooker.exceptions.HookerInitializationException; /** * @author Georges Bossert * */ public class IPCHooker extends Hooker { public static final String NAME = "IPC"; public IPCHooker() { super(IPCHooker.NAME); } @Override public void attach() { attachOnContextWrapperClass(); attachOnIntentClass(); } /** * Attach on ContextWrapper class */ private void attachOnContextWrapperClass() { Map<String, Integer> methodsToHook = new HashMap<String, Integer>(); // methodsToHook.put("getPackageName", 0); // methodsToHook.put("getResources", 0); methodsToHook.put("registerReceiver", 0); methodsToHook.put("sendBroadcast", 0); methodsToHook.put("sendBroadcastAsUser", 0); //No method in class android.content.ContextWrapper has been found with name sendOrderedbroadcastAsUser methodsToHook.put("sendOrderedBroadcast", 0); //same methodsToHook.put("sendOrderedBroadcastAsUser", 0); //same methodsToHook.put("startActivities", 0); methodsToHook.put("startActivity", 0); methodsToHook.put("startInstrumentation", 0); methodsToHook.put("startIntentSender", 0); methodsToHook.put("startService", 0); methodsToHook.put("stopService", 0); methodsToHook.put("unregisterReceiver", 0); methodsToHook.put("grantUriPermission", 0); // methodsToHook.put("bindService", 0); //We cannot hook bindService since we are using this method in our Hooker code. methodsToHook.put("unbindService", 0); methodsToHook.put("checkPermission", 0); methodsToHook.put("checkUriPermission", 0); methodsToHook.put("getSystemService", 0); try { hookMethods(null, "android.content.ContextWrapper", methodsToHook); SubstrateMain.log("hooking android.content.ContextWrapper methods sucessful"); } catch (HookerInitializationException e) { SubstrateMain.log("hooking android.content.ContextWrapper methods has failed", e); } } /** * Hook Intent Class. This could be very verbose, be careful with methods you define here. * This method is not used because it cause applications to crash. */ private void attachOnIntentClass(){ Map<String, Integer> methodsToHook = new HashMap<String, Integer>(); methodsToHook.put("Intent", 0); methodsToHook.put("getAction", 0); methodsToHook.put("getData", 0); methodsToHook.put("getDataString", 0); methodsToHook.put("getExtras", 0); methodsToHook.put("getIntent", 0); methodsToHook.put("hasExtra", 0); methodsToHook.put("parseUri", 0); methodsToHook.put("putExtra", 0); methodsToHook.put("setAction", 0); methodsToHook.put("setClass", 0); methodsToHook.put("setClassName", 0); methodsToHook.put("setData", 0); try { hookMethods(null, "android.content.Intent", methodsToHook); SubstrateMain.log("hooking android.content.Intent methods sucessful"); } catch (HookerInitializationException e) { SubstrateMain.log("hooking android.content.Intent methods has failed", e); } } }