package com.android.reverse.apimonitor; import java.lang.reflect.Method; import android.content.ComponentName; import android.content.pm.PackageManager; import android.net.Uri; import com.android.reverse.hook.HookParam; import com.android.reverse.util.Logger; import com.android.reverse.util.RefInvoke; public class PackageManagerHook extends ApiMonitorHook { @Override public void startHook() { Method setComponentEnableSettingmethod = RefInvoke.findMethodExact("android.app.ApplicationPackageManager", ClassLoader.getSystemClassLoader(), "setComponentEnabledSetting", ComponentName.class, int.class, int.class); hookhelper.hookMethod(setComponentEnableSettingmethod, new AbstractBahaviorHookCallBack() { @Override public void descParam(HookParam param) { // TODO Auto-generated method stub ComponentName cn = (ComponentName) param.args[0]; int newState = (Integer) param.args[1]; Logger.log_behavior("Set ComponentEnabled ->"); Logger.log_behavior("The Component ClassName: " + cn.getPackageName() + "/" + cn.getClassName()); if (newState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) Logger.log_behavior("Component New State = " + "COMPONENT_ENABLED_STATE_DISABLED"); if (newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) Logger.log_behavior("Component New State = " + "COMPONENT_ENABLED_STATE_ENABLED"); if (newState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) Logger.log_behavior("Component New State = " + "COMPONENT_ENABLED_STATE_DISABLED_USER"); if (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) Logger.log_behavior("Component New State = " + "COMPONENT_ENABLED_STATE_DEFAULT"); } }); Method installPackagemethod = null; try { installPackagemethod = RefInvoke.findMethodExact("android.app.ApplicationPackageManager", ClassLoader.getSystemClassLoader(), "installPackage", Uri.class, Class.forName("android.content.pm.IPackageInstallObserver"), int.class, String.class); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } hookhelper.hookMethod(installPackagemethod, new AbstractBahaviorHookCallBack() { @Override public void descParam(HookParam param) { // TODO Auto-generated method stub Uri uri = (Uri) param.args[0]; Logger.log_behavior("Slient Install APK ->"); Logger.log_behavior("The APK URL = " + uri.toString()); } }); Method deletePackagemethod = null; try { deletePackagemethod = RefInvoke.findMethodExact("android.app.ApplicationPackageManager", ClassLoader.getSystemClassLoader(), "deletePackage", String.class, Class.forName("android.content.pm.IPackageDeleteObserver"), int.class); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } hookhelper.hookMethod(deletePackagemethod, new AbstractBahaviorHookCallBack() { @Override public void descParam(HookParam param) { // TODO Auto-generated method stub String packagename = (String) param.args[0]; Logger.log_behavior("Slient UnInstall APK ->"); Logger.log_behavior("The APK PackageName = " + packagename); } }); Method getInstalledPackagesMethod = RefInvoke.findMethodExact("android.app.ApplicationPackageManager", ClassLoader.getSystemClassLoader(), "getInstalledPackages", int.class, int.class); hookhelper.hookMethod(getInstalledPackagesMethod, new AbstractBahaviorHookCallBack() { @Override public void descParam(HookParam param) { // TODO Auto-generated method stub Logger.log_behavior("Query Installed Apps ->"); } }); } }