package com.android.reverse.apimonitor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Intent; import android.os.WorkSource; import com.android.reverse.hook.HookParam; import com.android.reverse.util.Logger; import com.android.reverse.util.RefInvoke; public class AlarmManagerHook extends ApiMonitorHook { @Override public void startHook() { Method setImplmethod = RefInvoke.findMethodExact( "android.app.AlarmManager", ClassLoader.getSystemClassLoader(), "setImpl",int.class,long.class,long.class,long.class,PendingIntent.class,WorkSource.class); hookhelper.hookMethod(setImplmethod, new AbstractBahaviorHookCallBack() { @Override public void descParam(HookParam param) { Logger.log_behavior("The Alarm Information:"); PendingIntent intent = (PendingIntent) param.args[4]; descPendingIntent(intent); Logger.log_behavior("TriggerAtMillis = "+param.args[1]); Logger.log_behavior("windowMillis = "+param.args[2]); Logger.log_behavior("intervalMillis = "+param.args[3]); } }); } private void descPendingIntent(PendingIntent pintent){ Method getIntentMethod = RefInvoke.findMethodExact( "android.app.PendingIntent", ClassLoader.getSystemClassLoader(), "getIntent"); try { Intent intent = (Intent) getIntentMethod.invoke(pintent, new Object[]{}); ComponentName cn = intent.getComponent(); if(cn != null){ Logger.log_behavior("The ComponentName = "+cn.getPackageName()+"/"+cn.getClassName()); } Logger.log_behavior("The Intent Action = "+intent.getAction()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }