├── .classpath ├── .project ├── AndroidManifest.xml ├── XposedBridgeApi-54.jar ├── assets └── xposed_init ├── bin ├── AndroidManifest.xml ├── classes.dex ├── classes │ └── com │ │ ├── binpang │ │ ├── apiMonitor │ │ │ ├── AbstractBahaviorHookCallBack.class │ │ │ ├── AccountManagerHook$1.class │ │ │ ├── AccountManagerHook$2.class │ │ │ ├── AccountManagerHook.class │ │ │ ├── ActivityManagerHook$1.class │ │ │ ├── ActivityManagerHook$2.class │ │ │ ├── ActivityManagerHook$3.class │ │ │ ├── ActivityManagerHook.class │ │ │ ├── ActivityThreadHook$1.class │ │ │ ├── ActivityThreadHook.class │ │ │ ├── AlarmManagerHook$1.class │ │ │ ├── AlarmManagerHook.class │ │ │ ├── ApiMonitorHook$InvokeInfo.class │ │ │ ├── ApiMonitorHook.class │ │ │ ├── ApiMonitorHookManager.class │ │ │ ├── AudioRecordHook$1.class │ │ │ ├── AudioRecordHook.class │ │ │ ├── BlueToothHook$1.class │ │ │ ├── BlueToothHook$2.class │ │ │ ├── BlueToothHook.class │ │ │ ├── CameraHook$1.class │ │ │ ├── CameraHook$2.class │ │ │ ├── CameraHook$3.class │ │ │ ├── CameraHook$4.class │ │ │ ├── CameraHook.class │ │ │ ├── ConnectivityManagerHook$1.class │ │ │ ├── ConnectivityManagerHook.class │ │ │ ├── ContentResolverHook$1.class │ │ │ ├── ContentResolverHook$2.class │ │ │ ├── ContentResolverHook$3.class │ │ │ ├── ContentResolverHook$4.class │ │ │ ├── ContentResolverHook$5.class │ │ │ ├── ContentResolverHook$6.class │ │ │ ├── ContentResolverHook$7.class │ │ │ ├── ContentResolverHook.class │ │ │ ├── ContextImplHook$1.class │ │ │ ├── ContextImplHook.class │ │ │ ├── LocationHook$1.class │ │ │ ├── LocationHook.class │ │ │ ├── MediaRecorderHook$1.class │ │ │ ├── MediaRecorderHook$2.class │ │ │ ├── MediaRecorderHook$3.class │ │ │ ├── MediaRecorderHook$4.class │ │ │ ├── MediaRecorderHook.class │ │ │ ├── NetWorkHook$1.class │ │ │ ├── NetWorkHook$2.class │ │ │ ├── NetWorkHook.class │ │ │ ├── NotificationManagerHook$1.class │ │ │ ├── NotificationManagerHook.class │ │ │ ├── PackageManagerHook$1.class │ │ │ ├── PackageManagerHook$2.class │ │ │ ├── PackageManagerHook$3.class │ │ │ ├── PackageManagerHook$4.class │ │ │ ├── PackageManagerHook.class │ │ │ ├── ProcessBuilderHook$1.class │ │ │ ├── ProcessBuilderHook.class │ │ │ ├── RuntimeHook$1.class │ │ │ ├── RuntimeHook.class │ │ │ ├── SmsManagerHook$1.class │ │ │ ├── SmsManagerHook$2.class │ │ │ ├── SmsManagerHook$3.class │ │ │ ├── SmsManagerHook$4.class │ │ │ ├── SmsManagerHook.class │ │ │ ├── TelephonyManagerHook$1.class │ │ │ ├── TelephonyManagerHook$2.class │ │ │ └── TelephonyManagerHook.class │ │ └── methodhook │ │ │ ├── FindMethod.class │ │ │ ├── HookHelperFacktory.class │ │ │ ├── HookHelperInterface.class │ │ │ ├── HookParam.class │ │ │ ├── Logger.class │ │ │ ├── MainActivity.class │ │ │ ├── MethodHookCallBack.class │ │ │ ├── XposeHookHelperImpl.class │ │ │ └── methodHookStart.class │ │ └── example │ │ └── methodhook │ │ ├── BuildConfig.class │ │ ├── R$attr.class │ │ ├── R$dimen.class │ │ ├── R$drawable.class │ │ ├── R$id.class │ │ ├── R$layout.class │ │ ├── R$menu.class │ │ ├── R$string.class │ │ ├── R$style.class │ │ └── R.class ├── dexedLibs │ └── android-support-v4-b66c4d24896a180888f9a0cf8d576b8a.jar ├── methodHook.apk ├── res │ └── crunch │ │ ├── drawable-hdpi │ │ └── ic_launcher.png │ │ ├── drawable-mdpi │ │ └── ic_launcher.png │ │ ├── drawable-xhdpi │ │ └── ic_launcher.png │ │ └── drawable-xxhdpi │ │ └── ic_launcher.png └── resources.ap_ ├── gen └── com │ └── example │ └── methodhook │ ├── BuildConfig.java │ └── R.java ├── ic_launcher-web.png ├── libs └── android-support-v4.jar ├── moban.png ├── proguard-project.txt ├── project.properties ├── readme.md ├── res ├── drawable-hdpi │ └── ic_launcher.png ├── drawable-mdpi │ └── ic_launcher.png ├── drawable-xhdpi │ └── ic_launcher.png ├── drawable-xxhdpi │ └── ic_launcher.png ├── layout │ └── activity_main.xml ├── menu │ └── main.xml ├── values-v11 │ └── styles.xml ├── values-v14 │ └── styles.xml ├── values-w820dp │ └── dimens.xml └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml └── src └── com └── binpang ├── apiMonitor ├── AbstractBahaviorHookCallBack.java ├── AccountManagerHook.java ├── ActivityManagerHook.java ├── ActivityThreadHook.java ├── AlarmManagerHook.java ├── ApiMonitorHook.java ├── ApiMonitorHookManager.java ├── AudioRecordHook.java ├── BlueToothHook.java ├── CameraHook.java ├── ConnectivityManagerHook.java ├── ContentResolverHook.java ├── ContextImplHook.java ├── LocationHook.java ├── MediaRecorderHook.java ├── NetWorkHook.java ├── NotificationManagerHook.java ├── PackageManagerHook.java ├── ProcessBuilderHook.java ├── RuntimeHook.java ├── SmsManagerHook.java └── TelephonyManagerHook.java └── methodhook ├── FindMethod.java ├── HookHelperFacktory.java ├── HookHelperInterface.java ├── HookParam.java ├── Logger.java ├── MainActivity.java ├── MethodHookCallBack.java ├── XposeHookHelperImpl.java └── methodHookStart.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | methodHook 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 31 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /XposedBridgeApi-54.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/XposedBridgeApi-54.jar -------------------------------------------------------------------------------- /assets/xposed_init: -------------------------------------------------------------------------------- 1 | com.binpang.methodhook.methodHookStart -------------------------------------------------------------------------------- /bin/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 31 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /bin/classes.dex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes.dex -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AbstractBahaviorHookCallBack.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AbstractBahaviorHookCallBack.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AccountManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AccountManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AccountManagerHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AccountManagerHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AccountManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AccountManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ActivityManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ActivityManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ActivityManagerHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ActivityManagerHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ActivityManagerHook$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ActivityManagerHook$3.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ActivityManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ActivityManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ActivityThreadHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ActivityThreadHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ActivityThreadHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ActivityThreadHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AlarmManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AlarmManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AlarmManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AlarmManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ApiMonitorHook$InvokeInfo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ApiMonitorHook$InvokeInfo.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ApiMonitorHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ApiMonitorHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ApiMonitorHookManager.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ApiMonitorHookManager.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AudioRecordHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AudioRecordHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/AudioRecordHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/AudioRecordHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/BlueToothHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/BlueToothHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/BlueToothHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/BlueToothHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/BlueToothHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/BlueToothHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/CameraHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/CameraHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/CameraHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/CameraHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/CameraHook$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/CameraHook$3.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/CameraHook$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/CameraHook$4.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/CameraHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/CameraHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ConnectivityManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ConnectivityManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ConnectivityManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ConnectivityManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$3.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$4.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$5.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$5.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$6.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$6.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook$7.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook$7.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContentResolverHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContentResolverHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContextImplHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContextImplHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ContextImplHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ContextImplHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/LocationHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/LocationHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/LocationHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/LocationHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/MediaRecorderHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/MediaRecorderHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/MediaRecorderHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/MediaRecorderHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/MediaRecorderHook$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/MediaRecorderHook$3.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/MediaRecorderHook$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/MediaRecorderHook$4.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/MediaRecorderHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/MediaRecorderHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/NetWorkHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/NetWorkHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/NetWorkHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/NetWorkHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/NetWorkHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/NetWorkHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/NotificationManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/NotificationManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/NotificationManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/NotificationManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/PackageManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/PackageManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/PackageManagerHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/PackageManagerHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/PackageManagerHook$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/PackageManagerHook$3.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/PackageManagerHook$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/PackageManagerHook$4.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/PackageManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/PackageManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ProcessBuilderHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ProcessBuilderHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/ProcessBuilderHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/ProcessBuilderHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/RuntimeHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/RuntimeHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/RuntimeHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/RuntimeHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/SmsManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/SmsManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/SmsManagerHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/SmsManagerHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/SmsManagerHook$3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/SmsManagerHook$3.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/SmsManagerHook$4.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/SmsManagerHook$4.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/SmsManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/SmsManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/TelephonyManagerHook$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/TelephonyManagerHook$1.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/TelephonyManagerHook$2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/TelephonyManagerHook$2.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/apiMonitor/TelephonyManagerHook.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/apiMonitor/TelephonyManagerHook.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/FindMethod.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/FindMethod.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/HookHelperFacktory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/HookHelperFacktory.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/HookHelperInterface.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/HookHelperInterface.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/HookParam.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/HookParam.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/Logger.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/Logger.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/MainActivity.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/MainActivity.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/MethodHookCallBack.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/MethodHookCallBack.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/XposeHookHelperImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/XposeHookHelperImpl.class -------------------------------------------------------------------------------- /bin/classes/com/binpang/methodhook/methodHookStart.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/binpang/methodhook/methodHookStart.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/BuildConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/BuildConfig.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$attr.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$attr.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$dimen.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$dimen.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$drawable.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$drawable.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$id.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$id.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$layout.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$layout.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$menu.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$menu.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$string.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$string.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R$style.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R$style.class -------------------------------------------------------------------------------- /bin/classes/com/example/methodhook/R.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/classes/com/example/methodhook/R.class -------------------------------------------------------------------------------- /bin/dexedLibs/android-support-v4-b66c4d24896a180888f9a0cf8d576b8a.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/dexedLibs/android-support-v4-b66c4d24896a180888f9a0cf8d576b8a.jar -------------------------------------------------------------------------------- /bin/methodHook.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/methodHook.apk -------------------------------------------------------------------------------- /bin/res/crunch/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/res/crunch/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/crunch/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/res/crunch/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/crunch/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/res/crunch/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/res/crunch/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/res/crunch/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /bin/resources.ap_: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/bin/resources.ap_ -------------------------------------------------------------------------------- /gen/com/example/methodhook/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /** Automatically generated file. DO NOT MODIFY */ 2 | package com.example.methodhook; 3 | 4 | public final class BuildConfig { 5 | public final static boolean DEBUG = true; 6 | } -------------------------------------------------------------------------------- /gen/com/example/methodhook/R.java: -------------------------------------------------------------------------------- 1 | /* AUTO-GENERATED FILE. DO NOT MODIFY. 2 | * 3 | * This class was automatically generated by the 4 | * aapt tool from the resource data it found. It 5 | * should not be modified by hand. 6 | */ 7 | 8 | package com.example.methodhook; 9 | 10 | public final class R { 11 | public static final class attr { 12 | } 13 | public static final class dimen { 14 | /** Default screen margins, per the Android Design guidelines. 15 | 16 | Example customization of dimensions originally defined in res/values/dimens.xml 17 | (such as screen margins) for screens with more than 820dp of available width. This 18 | would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). 19 | 20 | */ 21 | public static final int activity_horizontal_margin=0x7f040000; 22 | public static final int activity_vertical_margin=0x7f040001; 23 | } 24 | public static final class drawable { 25 | public static final int ic_launcher=0x7f020000; 26 | } 27 | public static final class id { 28 | public static final int action_settings=0x7f080000; 29 | } 30 | public static final class layout { 31 | public static final int activity_main=0x7f030000; 32 | } 33 | public static final class menu { 34 | public static final int main=0x7f070000; 35 | } 36 | public static final class string { 37 | public static final int action_settings=0x7f050002; 38 | public static final int app_name=0x7f050000; 39 | public static final int hello_world=0x7f050001; 40 | } 41 | public static final class style { 42 | /** 43 | Base application theme, dependent on API level. This theme is replaced 44 | by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 45 | 46 | 47 | Theme customizations available in newer API levels can go in 48 | res/values-vXX/styles.xml, while customizations related to 49 | backward-compatibility can go here. 50 | 51 | 52 | Base application theme for API 11+. This theme completely replaces 53 | AppBaseTheme from res/values/styles.xml on API 11+ devices. 54 | 55 | API 11 theme customizations can go here. 56 | 57 | Base application theme for API 14+. This theme completely replaces 58 | AppBaseTheme from BOTH res/values/styles.xml and 59 | res/values-v11/styles.xml on API 14+ devices. 60 | 61 | API 14 theme customizations can go here. 62 | */ 63 | public static final int AppBaseTheme=0x7f060000; 64 | /** Application theme. 65 | All customizations that are NOT specific to a particular API-level can go here. 66 | */ 67 | public static final int AppTheme=0x7f060001; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/ic_launcher-web.png -------------------------------------------------------------------------------- /libs/android-support-v4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/libs/android-support-v4.jar -------------------------------------------------------------------------------- /moban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/moban.png -------------------------------------------------------------------------------- /proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=android-22 15 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # 安装条件及过程: 2 | * 需要一台root过的android4.4.x的设备 3 | * 在该设备中安装Xposed Installer客户端,由于安装Xposed时,需要将android的app_main.cpp等文件进行替换, 4 | 所以需要android的root权限 5 | * 安装编写好的com.bingpang.methodhook模块至该客户端,此时Xposed客户端将会检测到有Xposed模块,如图所示 6 | ![安装模板截图](moban.png) 7 | * 勾选该模板并重启android设备 8 | ---- 9 | ---- 10 | ---- 11 | # Hook Method解析 12 | ## 实现的功能 13 | * 标签为FM的log输出了具体敏感函数的类和方法名,如android.telephony.SmsManager->sendTextMessage 14 | * 标签为DetailInform的log则输出了敏感函数相应的数据,如在android.telephony.SmsManager->sendTextMessage中 15 | 会输出Send SMS -> SMS DestNumber: destNumber , SMS Content: Content 16 | ## 具体的敏感函数列表 17 | 18 | *SmsManager* 19 | - android.telephony.SmsManager/sendTextMessage 20 | - android.telephony.SmsManager/getAllMessagesFromIcc 21 | - android.telephony.SmsManager/sendDataMessage 22 | - android.telephony.SmsManager/sendMultipartTextMessage 23 | 24 | *TelephonyManager* 25 | - android.telephony.TelephonyManager/getLine1Number 26 | - android.telephony.TelephonyManager/listen 27 | 28 | *AccountManager* 29 | - android.accounts.AccountManager/getAccounts 30 | - android.accounts.AccountManager/getAccountsByType 31 | 32 | *ActivityManager* 33 | - android.app.ActivityManager/killBackgroundProcesses 34 | - android.app.ActivityManager/forceStopPackage 35 | 36 | *AlarmManager* 37 | - android.app.AlarmManager/setImpl 38 | 39 | *AudioRecord* 40 | - android.media.AudioRecord 41 | 42 | *Camera* 43 | - android.hardware.Camera/takepicture 44 | - android.hardware.Camera/setPreviewCallback 45 | - android.hardware.Camera/setPreviewCallbackWithBuffer 46 | - android.hardware.Camera/setOneShotPreviewCallback 47 | 48 | *ConnectivityManager* 49 | - android.net.ConnectivityManager/setMobileDataEnabled 50 | 51 | *ContentResolver* 52 | - android.content.ContentResolver/qurey 53 | - android.content.ContentResolver/registerContentObserver 54 | - android.content.ContentResolver/insert 55 | - android.content.ContentResolver/bulkInsert 56 | - android.content.ContentResolver/delete 57 | - android.content.ContentResolver/update 58 | - android.content.ContentResolver/applyBatch 59 | 60 | *ContextImpl* 61 | - android.app.ContextImpl/registerReceiver 62 | 63 | *MediaRecorder* 64 | - android.media.MediaRecorder/start 65 | - android.media.MediaRecorder/stop 66 | 67 | *Internet* 68 | - java.net.URL/openConnection 69 | - org.apache.http.impl.client.AbstractHttpClient/execute 70 | 71 | *NotificationManager* 72 | - android.app.NotificationManager/notify 73 | 74 | *ApplicationPackageManager* 75 | - android.app.ApplicationPackageManager/installPackage 76 | - android.app.ApplicationPackageManager/deletePackage 77 | - android.app.ApplicationPackageManager/getInstalledPackages 78 | 79 | -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-v11/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 64dp 9 | 10 | 11 | -------------------------------------------------------------------------------- /res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16dp 5 | 16dp 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | methodHook 5 | Hello world! 6 | Settings 7 | 8 | 9 | -------------------------------------------------------------------------------- /res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 14 | 15 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/AbstractBahaviorHookCallBack.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import com.binpang.methodhook.HookParam; 4 | import com.binpang.methodhook.Logger; 5 | import com.binpang.methodhook.MethodHookCallBack; 6 | 7 | 8 | 9 | public abstract class AbstractBahaviorHookCallBack extends MethodHookCallBack { 10 | 11 | @Override 12 | public void beforeHookedMethod(HookParam param) { 13 | // TODO Auto-generated method stub 14 | /*int length = param.args.length; 15 | Object[] m = param.args; 16 | String args = "/"; 17 | for(int i = 0; i < length;i++) 18 | { 19 | args+=(String)m[i]+"/"; 20 | }*/ 21 | Logger.logD("Invoke "+ param.method.getDeclaringClass().getName()+"->"+param.method.getName()); 22 | this.descParam(param); 23 | //this.printStackInfo(); 24 | } 25 | 26 | @Override 27 | public void afterHookedMethod(HookParam param) { 28 | // TODO Auto-generated method stub 29 | //Logger.log_behavior("End Invoke "+ param.method.toString()); 30 | } 31 | 32 | private void printStackInfo(){ 33 | Throwable ex = new Throwable(); 34 | StackTraceElement[] stackElements = ex.getStackTrace(); 35 | if(stackElements != null){ 36 | StackTraceElement st; 37 | for(int i=0; i"); 26 | } 27 | }); 28 | 29 | Method getAccountsByTypeMethod = FindMethod.findMethod( 30 | "android.accounts.AccountManager", ClassLoader.getSystemClassLoader(), 31 | "getAccountsByType",String.class); 32 | hookhelper.hookMethod(getAccountsByTypeMethod, new AbstractBahaviorHookCallBack() { 33 | 34 | @Override 35 | public void descParam(HookParam param) { 36 | // TODO Auto-generated method stub 37 | String type = (String) param.args[0]; 38 | Logger.logI("Get Account By Type ->"); 39 | Logger.logI("type :" +type); 40 | } 41 | }); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ActivityManagerHook.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bin2415/methodHook/c241afe73ec20e18df64cfc8817775ad134af999/src/com/binpang/apiMonitor/ActivityManagerHook.java -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ActivityThreadHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | 6 | 7 | 8 | import com.binpang.methodhook.FindMethod; 9 | import com.binpang.methodhook.HookParam; 10 | import com.binpang.methodhook.Logger; 11 | 12 | public class ActivityThreadHook extends ApiMonitorHook { 13 | 14 | @Override 15 | public void startHook() { 16 | // TODO Auto-generated method stub 17 | try { 18 | Class receiverDataClass = Class.forName("android.app.ActivityThread$ReceiverData"); 19 | if (receiverDataClass != null) { 20 | Method handleReceiverMethod = FindMethod.findMethod("android.app.ActivityThread", ClassLoader.getSystemClassLoader(), 21 | "handleReceiver", receiverDataClass); 22 | hookhelper.hookMethod(handleReceiverMethod, new AbstractBahaviorHookCallBack() { 23 | 24 | @Override 25 | public void descParam(HookParam param) { 26 | Logger.logI("The Receiver Information:"); 27 | Object data = param.args[0]; 28 | Logger.logI(data.toString()); 29 | 30 | } 31 | }); 32 | } 33 | } catch (ClassNotFoundException e) { 34 | // TODO Auto-generated catch block 35 | e.printStackTrace(); 36 | } 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/AlarmManagerHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.InvocationTargetException; 4 | import java.lang.reflect.Method; 5 | 6 | import android.app.PendingIntent; 7 | import android.content.ComponentName; 8 | import android.content.Intent; 9 | import android.os.WorkSource; 10 | 11 | import com.binpang.methodhook.FindMethod; 12 | import com.binpang.methodhook.HookParam; 13 | import com.binpang.methodhook.Logger; 14 | 15 | 16 | public class AlarmManagerHook extends ApiMonitorHook { 17 | 18 | @Override 19 | public void startHook() { 20 | 21 | Method setImplmethod = FindMethod.findMethod( 22 | "android.app.AlarmManager", ClassLoader.getSystemClassLoader(), 23 | "setImpl",int.class,long.class,long.class,long.class,PendingIntent.class,WorkSource.class); 24 | hookhelper.hookMethod(setImplmethod, new AbstractBahaviorHookCallBack() { 25 | 26 | @Override 27 | public void descParam(HookParam param) { 28 | Logger.logI("The Alarm Information:"); 29 | PendingIntent intent = (PendingIntent) param.args[4]; 30 | descPendingIntent(intent); 31 | Logger.logI("TriggerAtMillis = "+param.args[1]); 32 | Logger.logI("windowMillis = "+param.args[2]); 33 | Logger.logI("intervalMillis = "+param.args[3]); 34 | 35 | } 36 | }); 37 | 38 | } 39 | 40 | private void descPendingIntent(PendingIntent pintent){ 41 | Method getIntentMethod = FindMethod.findMethod( 42 | "android.app.PendingIntent", ClassLoader.getSystemClassLoader(), 43 | "getIntent"); 44 | try { 45 | Intent intent = (Intent) getIntentMethod.invoke(pintent, new Object[]{}); 46 | ComponentName cn = intent.getComponent(); 47 | if(cn != null){ 48 | Logger.logI("The ComponentName = "+cn.getPackageName()+"/"+cn.getClassName()); 49 | } 50 | Logger.logI("The Intent Action = "+intent.getAction()); 51 | } catch (IllegalArgumentException e) { 52 | // TODO Auto-generated catch block 53 | e.printStackTrace(); 54 | } catch (IllegalAccessException e) { 55 | // TODO Auto-generated catch block 56 | e.printStackTrace(); 57 | } catch (InvocationTargetException e) { 58 | // TODO Auto-generated catch block 59 | e.printStackTrace(); 60 | } 61 | 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ApiMonitorHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import com.binpang.methodhook.HookHelperFacktory; 4 | import com.binpang.methodhook.HookHelperInterface; 5 | 6 | 7 | 8 | 9 | public abstract class ApiMonitorHook { 10 | 11 | protected HookHelperInterface hookhelper = HookHelperFacktory.getHookHelper(); 12 | public static class InvokeInfo{ 13 | private long invokeAtTime; 14 | private String className; 15 | private String methodName; 16 | private Object[] argv; 17 | private Object result; 18 | private Object invokeState; 19 | } 20 | public abstract void startHook(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ApiMonitorHookManager.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | 4 | 5 | public class ApiMonitorHookManager { 6 | 7 | private static ApiMonitorHookManager hookmger; 8 | private SmsManagerHook smsManagerHook; 9 | private TelephonyManagerHook telephonyManagerHook; 10 | private MediaRecorderHook mediaRecorderHook; 11 | private AccountManagerHook accountManagerHook; 12 | private ActivityManagerHook activityManagerHook; 13 | private AlarmManagerHook alarmManagerHook; 14 | private ConnectivityManagerHook connectivityManagerHook; 15 | private ContentResolverHook contentResolverHook; 16 | private ContextImplHook contextImplHook; 17 | private PackageManagerHook packageManagerHook; 18 | private RuntimeHook runtimeHook; 19 | private ActivityThreadHook activityThreadHook; 20 | private AudioRecordHook audioRecordHook; 21 | private CameraHook cameraHook; 22 | private NetWorkHook networkHook; 23 | private NotificationManagerHook notificationManagerHook; 24 | private ProcessBuilderHook processBuilderHook; 25 | 26 | 27 | private ApiMonitorHookManager(){ 28 | this.smsManagerHook = new SmsManagerHook(); 29 | this.telephonyManagerHook = new TelephonyManagerHook(); 30 | this.mediaRecorderHook = new MediaRecorderHook(); 31 | this.accountManagerHook = new AccountManagerHook(); 32 | this.activityManagerHook = new ActivityManagerHook(); 33 | this.alarmManagerHook= new AlarmManagerHook(); 34 | this.connectivityManagerHook = new ConnectivityManagerHook(); 35 | this.contentResolverHook = new ContentResolverHook(); 36 | this.contextImplHook = new ContextImplHook(); 37 | this.packageManagerHook = new PackageManagerHook(); 38 | this.runtimeHook = new RuntimeHook(); 39 | this.activityThreadHook = new ActivityThreadHook(); 40 | this.audioRecordHook = new AudioRecordHook(); 41 | this.cameraHook = new CameraHook(); 42 | this.networkHook = new NetWorkHook(); 43 | this.notificationManagerHook = new NotificationManagerHook(); 44 | this.processBuilderHook = new ProcessBuilderHook(); 45 | } 46 | 47 | public static ApiMonitorHookManager getInstance(){ 48 | if(hookmger == null) 49 | hookmger = new ApiMonitorHookManager(); 50 | return hookmger; 51 | } 52 | 53 | public void startMonitor(){ 54 | this.smsManagerHook.startHook(); 55 | this.telephonyManagerHook.startHook(); 56 | this.mediaRecorderHook.startHook(); 57 | this.accountManagerHook.startHook(); 58 | this.activityManagerHook.startHook(); 59 | this.alarmManagerHook.startHook(); 60 | this.connectivityManagerHook.startHook(); 61 | this.contentResolverHook.startHook(); 62 | this.contextImplHook.startHook(); 63 | this.packageManagerHook.startHook(); 64 | this.runtimeHook.startHook(); 65 | this.activityThreadHook.startHook(); 66 | this.audioRecordHook.startHook(); 67 | this.cameraHook.startHook(); 68 | this.networkHook.startHook(); 69 | this.notificationManagerHook.startHook(); 70 | this.processBuilderHook.startHook(); 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/AudioRecordHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | 6 | 7 | 8 | import com.binpang.methodhook.FindMethod; 9 | import com.binpang.methodhook.HookParam; 10 | import com.binpang.methodhook.Logger; 11 | 12 | public class AudioRecordHook extends ApiMonitorHook { 13 | 14 | @Override 15 | public void startHook() { 16 | // TODO Auto-generated method stub 17 | Method startRecordingMethod = FindMethod.findMethod( 18 | "android.media.AudioRecord", ClassLoader.getSystemClassLoader(), 19 | "startRecording"); 20 | hookhelper.hookMethod(startRecordingMethod, new AbstractBahaviorHookCallBack() { 21 | 22 | @Override 23 | public void descParam(HookParam param) { 24 | // TODO Auto-generated method stub 25 | Logger.logI("Audio Recording ->"); 26 | } 27 | }); 28 | 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/BlueToothHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import com.binpang.methodhook.FindMethod; 6 | import com.binpang.methodhook.HookParam; 7 | import com.binpang.methodhook.Logger; 8 | 9 | public class BlueToothHook extends ApiMonitorHook{ 10 | 11 | @Override 12 | public void startHook() { 13 | // TODO Auto-generated method stub 14 | 15 | 16 | Method openBluetoothmethod = FindMethod.findMethod( 17 | "android.bluetooth.BluetoothAdapter", ClassLoader.getSystemClassLoader(), 18 | "getLine1Number"); 19 | hookhelper.hookMethod(openBluetoothmethod, new AbstractBahaviorHookCallBack() { 20 | 21 | @Override 22 | public void descParam(HookParam param) { 23 | Logger.logI("Open the BlueTooth"); 24 | } 25 | }); 26 | 27 | Method connectBluetooth = FindMethod.findMethod( 28 | "android.bluetooth.BluetoothSocket", ClassLoader.getSystemClassLoader(), 29 | "connect"); 30 | hookhelper.hookMethod(connectBluetooth, new AbstractBahaviorHookCallBack() { 31 | 32 | @Override 33 | public void descParam(HookParam param) { 34 | Logger.logI("Connect the blueTooth"); 35 | } 36 | }); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/CameraHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import android.hardware.Camera.PictureCallback; 6 | import android.hardware.Camera.PreviewCallback; 7 | import android.hardware.Camera.ShutterCallback; 8 | 9 | 10 | 11 | 12 | import com.binpang.methodhook.FindMethod; 13 | import com.binpang.methodhook.HookParam; 14 | import com.binpang.methodhook.Logger; 15 | 16 | public class CameraHook extends ApiMonitorHook { 17 | 18 | @Override 19 | public void startHook() { 20 | // TODO Auto-generated method stub 21 | Method takePictureMethod = FindMethod.findMethod( 22 | "android.hardware.Camera", ClassLoader.getSystemClassLoader(), 23 | "takePicture",ShutterCallback.class,PictureCallback.class,PictureCallback.class,PictureCallback.class); 24 | hookhelper.hookMethod(takePictureMethod, new AbstractBahaviorHookCallBack() { 25 | 26 | @Override 27 | public void descParam(HookParam param) { 28 | // TODO Auto-generated method stub 29 | Logger.logI("Camera take a picture->"); 30 | } 31 | }); 32 | 33 | Method setPreviewCallbackMethod = FindMethod.findMethod( 34 | "android.hardware.Camera", ClassLoader.getSystemClassLoader(), 35 | "setPreviewCallback",PreviewCallback.class); 36 | hookhelper.hookMethod(setPreviewCallbackMethod, new AbstractBahaviorHookCallBack() { 37 | 38 | @Override 39 | public void descParam(HookParam param) { 40 | // TODO Auto-generated method stub 41 | Logger.logI("Camera setPreview ->"); 42 | } 43 | }); 44 | 45 | Method setPreviewCallbackWithBufferMethod = FindMethod.findMethod( 46 | "android.hardware.Camera", ClassLoader.getSystemClassLoader(), 47 | "setPreviewCallbackWithBuffer",PreviewCallback.class); 48 | hookhelper.hookMethod(setPreviewCallbackWithBufferMethod, new AbstractBahaviorHookCallBack() { 49 | 50 | @Override 51 | public void descParam(HookParam param) { 52 | // TODO Auto-generated method stub 53 | Logger.logI("Camera setPreview ->"); 54 | } 55 | }); 56 | 57 | Method setOneShotPreviewCallbackMethod = FindMethod.findMethod( 58 | "android.hardware.Camera", ClassLoader.getSystemClassLoader(), 59 | "setOneShotPreviewCallback",PreviewCallback.class); 60 | hookhelper.hookMethod(setOneShotPreviewCallbackMethod, new AbstractBahaviorHookCallBack() { 61 | 62 | @Override 63 | public void descParam(HookParam param) { 64 | // TODO Auto-generated method stub 65 | Logger.logI("Camera setPreview ->"); 66 | } 67 | }); 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ConnectivityManagerHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | 6 | 7 | 8 | 9 | 10 | import com.binpang.methodhook.FindMethod; 11 | import com.binpang.methodhook.HookParam; 12 | import com.binpang.methodhook.Logger; 13 | 14 | public class ConnectivityManagerHook extends ApiMonitorHook { 15 | 16 | @Override 17 | public void startHook() { 18 | 19 | Method setMobileDataEnabledmethod = FindMethod.findMethod( 20 | "android.net.ConnectivityManager", ClassLoader.getSystemClassLoader(), 21 | "setMobileDataEnabled",boolean.class); 22 | hookhelper.hookMethod(setMobileDataEnabledmethod, new AbstractBahaviorHookCallBack() { 23 | 24 | @Override 25 | public void descParam(HookParam param) { 26 | boolean status = (Boolean) param.args[0]; 27 | Logger.logI("Set MobileDataEnabled = "+status); 28 | } 29 | }); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ContentResolverHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | import java.util.ArrayList; 5 | import java.util.HashMap; 6 | import java.util.Set; 7 | 8 | import com.binpang.methodhook.FindMethod; 9 | import com.binpang.methodhook.HookParam; 10 | import com.binpang.methodhook.Logger; 11 | 12 | import android.content.ContentProviderOperation; 13 | import android.content.ContentValues; 14 | import android.database.ContentObserver; 15 | import android.net.Uri; 16 | import android.text.TextUtils; 17 | ; 18 | 19 | public class ContentResolverHook extends ApiMonitorHook { 20 | 21 | private static final String[] privacyUris = { "content://com.android.contacts", "content://sms", "content://mms-sms", "content://contacts/", 22 | "content://call_log", "content://browser/bookmarks" }; 23 | 24 | private boolean isSensitiveUri(Uri uri) { 25 | String url = uri.toString().toLowerCase(); 26 | Logger.logI(url); 27 | for (int i = 0; i < privacyUris.length; i++) { 28 | if (url.startsWith(privacyUris[i])) { 29 | return true; 30 | } 31 | } 32 | return false; 33 | } 34 | 35 | private String concatenateStringArray(String[] array, String splitstr) { 36 | StringBuilder sb = new StringBuilder(); 37 | for (int i = 0; i < array.length; i++) { 38 | if (i == array.length - 1) 39 | sb.append(array[i]); 40 | else 41 | sb.append(array[i] + splitstr); 42 | } 43 | return sb.toString(); 44 | } 45 | 46 | private String concatenateQuery(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { 47 | StringBuilder sb = new StringBuilder("select "); 48 | if (projection == null) { 49 | sb.append("* "); 50 | } else { 51 | sb.append(concatenateStringArray(projection, ",")); 52 | } 53 | sb.append(" from [" + uri.toString() + "] "); 54 | if (!TextUtils.isEmpty(selection)) { 55 | sb.append(" where "); 56 | if (selectionArgs == null) { 57 | sb.append(selection); 58 | } else { 59 | String selectstr = selection; 60 | for (int i = 0; i < selectionArgs.length; i++) { 61 | selectstr = selectstr.replaceFirst("?", selectionArgs[i]); 62 | } 63 | sb.append(selectstr); 64 | } 65 | } 66 | if (!TextUtils.isEmpty(sortOrder)) 67 | sb.append(" order by " + sortOrder); 68 | return sb.toString(); 69 | } 70 | 71 | private String concatenateInsert(Uri uri, ContentValues cv) { 72 | StringBuilder sb = new StringBuilder(); 73 | sb.append(" insert into "); 74 | sb.append("[" + uri.toString() + "]"); 75 | sb.append(" ( "); 76 | String[] keysArray = new String[cv.size()]; 77 | keysArray = this.getContentValuesKeySet(cv).toArray(keysArray); 78 | sb.append(concatenateStringArray(keysArray, ",")); 79 | sb.append(" ) "); 80 | sb.append(" values ("); 81 | for (int i = 0; i < keysArray.length; i++) { 82 | if (i == keysArray.length - 1) 83 | sb.append(" " + cv.get(keysArray[i])); 84 | else 85 | sb.append(" " + cv.get(keysArray[i]) + ","); 86 | } 87 | sb.append(" )"); 88 | return sb.toString(); 89 | } 90 | 91 | private String concatenateDelete(Uri uri, String selection, String[] selectionArgs) { 92 | StringBuilder sb = new StringBuilder(); 93 | sb.append(" delete from "); 94 | sb.append("[" + uri.toString() + "]"); 95 | if (!TextUtils.isEmpty(selection)) { 96 | sb.append(" where "); 97 | if (selectionArgs == null) 98 | sb.append(selection); 99 | else { 100 | String selectstr = selection; 101 | for (int i = 0; i < selectionArgs.length; i++) { 102 | selectstr = selectstr.replaceFirst("?", selectionArgs[i]); 103 | } 104 | sb.append(selectstr); 105 | } 106 | } 107 | return sb.toString(); 108 | } 109 | 110 | private String concatenateUpdate(Uri uri, ContentValues cv, String selection, String[] selectionArgs) { 111 | StringBuilder sb = new StringBuilder(); 112 | sb.append(" update "); 113 | sb.append("[" + uri.toString() + "]"); 114 | sb.append(" set "); 115 | String[] keysArray = (String[]) this.getContentValuesKeySet(cv).toArray(); 116 | for (int i = 0; i < keysArray.length; i++) { 117 | if (i == keysArray.length - 1) 118 | sb.append(" " + keysArray[i] + "=" + cv.get(keysArray[i])); 119 | else 120 | sb.append(" " + keysArray[i] + "=" + cv.get(keysArray[i]) + ", "); 121 | } 122 | if (!TextUtils.isEmpty(selection)) { 123 | sb.append(" where "); 124 | if (selectionArgs == null) 125 | sb.append(selection); 126 | else { 127 | String selectstr = selection; 128 | for (int i = 0; i < selectionArgs.length; i++) { 129 | selectstr = selectstr.replaceFirst("?", selectionArgs[i]); 130 | } 131 | sb.append(selectstr); 132 | } 133 | } 134 | return sb.toString(); 135 | } 136 | 137 | @Override 138 | public void startHook() { 139 | 140 | Method querymethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), "query", Uri.class, 141 | String[].class, String.class, String[].class, String.class); 142 | hookhelper.hookMethod(querymethod, new AbstractBahaviorHookCallBack() { 143 | 144 | @Override 145 | public void descParam(HookParam param) { 146 | // TODO Auto-generated method stub 147 | Uri uri = (Uri) param.args[0]; 148 | if (isSensitiveUri(uri)) { 149 | Logger.logI("Read ContentProvider -> Uri = " + uri.toString()); 150 | String queryStr = concatenateQuery(uri, (String[]) param.args[1], (String) param.args[2], (String[]) param.args[3], 151 | (String) param.args[4]); 152 | Logger.logI("Query SQL = " + queryStr); 153 | } 154 | } 155 | }); 156 | 157 | Method registerContentObservermethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), 158 | "registerContentObserver", Uri.class, boolean.class, ContentObserver.class, int.class); 159 | hookhelper.hookMethod(registerContentObservermethod, new AbstractBahaviorHookCallBack() { 160 | 161 | @Override 162 | public void descParam(HookParam param) { 163 | // TODO Auto-generated method stub 164 | Uri uri = (Uri) param.args[0]; 165 | if (isSensitiveUri(uri)) { 166 | Logger.logI("Register ContentProvider Change -> Uri = " + uri.toString()); 167 | Logger.logI("ContentObserver ClassName =" + param.args[1].getClass().toString()); 168 | } 169 | } 170 | }); 171 | 172 | Method insertmethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), "insert", 173 | Uri.class, ContentValues.class); 174 | hookhelper.hookMethod(insertmethod, new AbstractBahaviorHookCallBack() { 175 | 176 | @Override 177 | public void descParam(HookParam param) { 178 | // TODO Auto-generated method stub 179 | Uri uri = (Uri) param.args[0]; 180 | if (isSensitiveUri(uri)) { 181 | Logger.logI("Insert ContentProvider -> Uri = " + uri.toString()); 182 | ContentValues cv = (ContentValues) param.args[1]; 183 | String insertStr = concatenateInsert(uri, cv); 184 | Logger.logI("Insert SQL = " + insertStr); 185 | } 186 | } 187 | }); 188 | 189 | Method bulkInsertmethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), "bulkInsert", 190 | Uri.class, ContentValues[].class); 191 | hookhelper.hookMethod(bulkInsertmethod, new AbstractBahaviorHookCallBack() { 192 | 193 | @Override 194 | public void descParam(HookParam param) { 195 | // TODO Auto-generated method stub 196 | Uri uri = (Uri) param.args[0]; 197 | if (isSensitiveUri(uri)) { 198 | ContentValues[] cv = (ContentValues[]) param.args[1]; 199 | Logger.logI("Bulk Insert ContentProvider -> Uri = " + uri.toString()); 200 | String insertStr = null; 201 | for (int i = 0; i < cv.length; i++) { 202 | insertStr = concatenateInsert(uri, cv[i]); 203 | Logger.logI("Insert " + i + " SQL = " + insertStr); 204 | } 205 | } 206 | } 207 | }); 208 | 209 | Method deletemethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), "delete", 210 | Uri.class, String.class, String[].class); 211 | hookhelper.hookMethod(deletemethod, new AbstractBahaviorHookCallBack() { 212 | 213 | @Override 214 | public void descParam(HookParam param) { 215 | // TODO Auto-generated method stub 216 | Uri uri = (Uri) param.args[0]; 217 | if (isSensitiveUri(uri)) { 218 | Logger.logI("Delete ContentProvider -> uri= " + uri.toString()); 219 | String deleteStr = concatenateDelete(uri, (String) param.args[1], (String[]) param.args[2]); 220 | Logger.logI("Delete SQL = " + deleteStr); 221 | } 222 | 223 | } 224 | }); 225 | 226 | Method updatemethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), "update", 227 | Uri.class, ContentValues.class, String.class, String[].class); 228 | hookhelper.hookMethod(updatemethod, new AbstractBahaviorHookCallBack() { 229 | 230 | @Override 231 | public void descParam(HookParam param) { 232 | // TODO Auto-generated method stub 233 | Uri uri = (Uri) param.args[0]; 234 | if (isSensitiveUri(uri)) { 235 | Logger.logI("Update ContentProvider -> uri=" + uri.toString()); 236 | String updateStr = concatenateUpdate(uri, (ContentValues) param.args[1], (String) param.args[2], (String[]) param.args[3]); 237 | Logger.logI("Update SQL = " + updateStr); 238 | } 239 | } 240 | }); 241 | 242 | Method applyBatchMethod = FindMethod.findMethod("android.content.ContentResolver", ClassLoader.getSystemClassLoader(), 243 | "applyBatch", String.class, ArrayList.class); 244 | hookhelper.hookMethod(applyBatchMethod, new AbstractBahaviorHookCallBack() { 245 | 246 | @Override 247 | public void descParam(HookParam param) { 248 | // TODO Auto-generated method stub 249 | ArrayList opts = (ArrayList) param.args[1]; 250 | for(int i=0; i< opts.size(); i++){ 251 | Logger.logI("Batch SQL = " + descContentProviderOperation(opts.get(i))); 252 | } 253 | 254 | } 255 | }); 256 | 257 | } 258 | 259 | private Set getContentValuesKeySet(ContentValues cv){ 260 | HashMap mValue = (HashMap) FindMethod.getFieldOjbect("android.content.ContentValues", cv, "mValues"); 261 | return mValue.keySet(); 262 | } 263 | 264 | private final static int TYPE_INSERT = 1; 265 | private final static int TYPE_UPDATE = 2; 266 | private final static int TYPE_DELETE = 3; 267 | 268 | private String descContentProviderOperation(ContentProviderOperation opt) { 269 | String sqlstr = null; 270 | int mType = FindMethod.getFieldInt("android.content.ContentProviderOperation", opt, "mType"); 271 | switch (mType) { 272 | case TYPE_INSERT: 273 | { 274 | Uri uri = (Uri) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mUri"); 275 | ContentValues cv = (ContentValues) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mValues"); 276 | sqlstr = concatenateInsert(uri, cv); 277 | break; 278 | } 279 | 280 | case TYPE_UPDATE: 281 | { 282 | Uri uri = (Uri) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mUri"); 283 | ContentValues cv = (ContentValues) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mValues"); 284 | String selection = (String) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mSelection"); 285 | String[] selectionArgs = (String[]) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mSelectionArgs"); 286 | sqlstr = concatenateUpdate(uri, cv, selection, selectionArgs); 287 | break; 288 | } 289 | 290 | case TYPE_DELETE: 291 | Uri uri = (Uri) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mUri"); 292 | String selection = (String) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mSelection"); 293 | String[] selectionArgs = (String[]) FindMethod.getFieldOjbect("android.content.ContentProviderOperation", opt, "mSelectionArgs"); 294 | sqlstr = concatenateDelete(uri, selection, selectionArgs); 295 | break; 296 | 297 | } 298 | return sqlstr; 299 | } 300 | 301 | } 302 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ContextImplHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | import java.util.Iterator; 5 | 6 | import android.content.BroadcastReceiver; 7 | import android.content.IntentFilter; 8 | 9 | 10 | 11 | 12 | import com.binpang.methodhook.FindMethod; 13 | import com.binpang.methodhook.HookParam; 14 | import com.binpang.methodhook.Logger; 15 | 16 | public class ContextImplHook extends ApiMonitorHook{ 17 | 18 | @Override 19 | public void startHook() { 20 | // TODO Auto-generated method stub 21 | Method registerReceivermethod = FindMethod.findMethod( 22 | "android.app.ContextImpl", ClassLoader.getSystemClassLoader(), 23 | "registerReceiver", BroadcastReceiver.class,IntentFilter.class); 24 | hookhelper.hookMethod(registerReceivermethod, new AbstractBahaviorHookCallBack() { 25 | 26 | @Override 27 | public void descParam(HookParam param) { 28 | // TODO Auto-generated method stub 29 | Logger.logI("Register BroatcastReceiver"); 30 | Logger.logI("The BroatcastReceiver ClassName = "+param.args[0].getClass().toString()); 31 | if(param.args[1] != null){ 32 | String intentstr = descIntentFilter((IntentFilter) param.args[1]); 33 | Logger.logI("Intent Action = ["+intentstr+"]"); 34 | } 35 | } 36 | }); 37 | } 38 | 39 | public String descIntentFilter(IntentFilter intentFilter){ 40 | StringBuilder sb = new StringBuilder(); 41 | Iterator actions =intentFilter.actionsIterator(); 42 | String action = null; 43 | while(actions.hasNext()){ 44 | action = actions.next(); 45 | sb.append(action+","); 46 | } 47 | return sb.toString(); 48 | 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/LocationHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import com.binpang.methodhook.FindMethod; 6 | import com.binpang.methodhook.HookParam; 7 | import com.binpang.methodhook.Logger; 8 | 9 | public class LocationHook extends ApiMonitorHook{ 10 | 11 | @Override 12 | public void startHook() { 13 | // TODO Auto-generated method stub 14 | Method getLocationMethod = FindMethod.findMethod( 15 | "android.location.LocationManager", ClassLoader.getSystemClassLoader(), 16 | "getAccounts"); 17 | hookhelper.hookMethod(getLocationMethod, new AbstractBahaviorHookCallBack() { 18 | 19 | @Override 20 | public void descParam(HookParam param) { 21 | // TODO Auto-generated method stub 22 | Logger.logI("Get Location"); 23 | } 24 | }); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/MediaRecorderHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.io.FileDescriptor; 4 | import java.lang.reflect.Method; 5 | 6 | 7 | 8 | 9 | import com.binpang.methodhook.FindMethod; 10 | import com.binpang.methodhook.HookParam; 11 | import com.binpang.methodhook.Logger; 12 | 13 | public class MediaRecorderHook extends ApiMonitorHook { 14 | 15 | @Override 16 | public void startHook() { 17 | 18 | Method startmethod = FindMethod.findMethod( 19 | "android.media.MediaRecorder", ClassLoader.getSystemClassLoader(), 20 | "start"); 21 | hookhelper.hookMethod(startmethod, new AbstractBahaviorHookCallBack() { 22 | 23 | @Override 24 | public void descParam(HookParam param) { 25 | // TODO Auto-generated method stub 26 | Logger.logI("Media Record: Start ->"); 27 | String mPath = (String)FindMethod.getFieldOjbect("android.media.MediaRecorder", param.thisObject, "mPath"); 28 | if(mPath != null) 29 | Logger.logI("Save Path: ->" +mPath); 30 | else{ 31 | FileDescriptor mFd = (FileDescriptor) FindMethod.getFieldOjbect("android.media.MediaRecorder", param.thisObject, "mFd"); 32 | Logger.logI("Save Path: ->" +mFd.toString()); 33 | } 34 | } 35 | }); 36 | 37 | Method stopmethod = FindMethod.findMethod( 38 | "android.media.MediaRecorder", ClassLoader.getSystemClassLoader(), 39 | "stop"); 40 | hookhelper.hookMethod(stopmethod, new AbstractBahaviorHookCallBack() { 41 | 42 | @Override 43 | public void descParam(HookParam param) { 44 | // TODO Auto-generated method stub 45 | Logger.logI("Media Record: Stop ->"); 46 | } 47 | }); 48 | 49 | 50 | Method autiomethod = FindMethod.findMethod( 51 | "android.media.MediaRecorder", ClassLoader.getSystemClassLoader(), 52 | "setAudioSource"); 53 | hookhelper.hookMethod(autiomethod, new AbstractBahaviorHookCallBack() { 54 | 55 | @Override 56 | public void descParam(HookParam param) { 57 | // TODO Auto-generated method stub 58 | Logger.logI("Media Record: Start"); 59 | 60 | } 61 | 62 | }); 63 | 64 | Method videomethod = FindMethod.findMethod( 65 | "android.media.MediaRecorder", ClassLoader.getSystemClassLoader(), 66 | "setAudioSource"); 67 | hookhelper.hookMethod(videomethod, new AbstractBahaviorHookCallBack() { 68 | 69 | @Override 70 | public void descParam(HookParam param) { 71 | // TODO Auto-generated method stub 72 | Logger.logI("Video Record: Start"); 73 | 74 | } 75 | 76 | }); 77 | 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/NetWorkHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.io.IOException; 4 | import java.lang.reflect.Method; 5 | import java.net.URL; 6 | 7 | import org.apache.http.Header; 8 | import org.apache.http.HttpEntity; 9 | import org.apache.http.HttpHost; 10 | import org.apache.http.HttpRequest; 11 | import org.apache.http.HttpResponse; 12 | import org.apache.http.client.methods.HttpGet; 13 | import org.apache.http.client.methods.HttpPost; 14 | import org.apache.http.client.utils.URLEncodedUtils; 15 | import org.apache.http.protocol.HTTP; 16 | import org.apache.http.protocol.HttpContext; 17 | 18 | import com.binpang.methodhook.FindMethod; 19 | import com.binpang.methodhook.HookParam; 20 | import com.binpang.methodhook.Logger; 21 | 22 | 23 | public class NetWorkHook extends ApiMonitorHook { 24 | 25 | @Override 26 | public void startHook() { 27 | // TODO Auto-generated method stub 28 | // HttpURLConnection 29 | Method openConnectionMethod = FindMethod.findMethod("java.net.URL", ClassLoader.getSystemClassLoader(), "openConnection"); 30 | hookhelper.hookMethod(openConnectionMethod, new AbstractBahaviorHookCallBack() { 31 | @Override 32 | public void descParam(HookParam param) { 33 | // TODO Auto-generated method stub 34 | URL url = (URL) param.thisObject; 35 | Logger.logI("Connect to URL ->"); 36 | Logger.logI("The URL = " + url.toString()); 37 | } 38 | }); 39 | 40 | Method executeRequest = FindMethod.findMethod("org.apache.http.impl.client.AbstractHttpClient", ClassLoader.getSystemClassLoader(), 41 | "execute", HttpHost.class, HttpRequest.class, HttpContext.class); 42 | 43 | hookhelper.hookMethod(executeRequest, new AbstractBahaviorHookCallBack() { 44 | @Override 45 | public void descParam(HookParam param) { 46 | // TODO Auto-generated method stub 47 | Logger.logI("Connect to URL ->"); 48 | HttpHost host = (HttpHost) param.args[0]; 49 | HttpRequest request = (HttpRequest) param.args[1]; 50 | if (request instanceof HttpGet) { 51 | HttpGet httpGet = (HttpGet) request; 52 | Logger.logI("HTTP Method : " + httpGet.getMethod()); 53 | Logger.logI("HTTP URL : " + httpGet.getURI().toString()); 54 | Header[] headers = request.getAllHeaders(); 55 | if (headers != null) { 56 | for (int i = 0; i < headers.length; i++) { 57 | Logger.logI(headers[i].getName() + ":" + headers[i].getName()); 58 | } 59 | } 60 | } else if (request instanceof HttpPost) { 61 | HttpPost httpPost = (HttpPost) request; 62 | Logger.logI("HTTP Method : " + httpPost.getMethod()); 63 | Logger.logI("HTTP URL : " + httpPost.getURI().toString()); 64 | Header[] headers = request.getAllHeaders(); 65 | if (headers != null) { 66 | for (int i = 0; i < headers.length; i++) { 67 | Logger.logI(headers[i].getName() + ":" + headers[i].getValue()); 68 | } 69 | } 70 | HttpEntity entity = httpPost.getEntity(); 71 | String contentType = null; 72 | if (entity.getContentType() != null) { 73 | contentType = entity.getContentType().getValue(); 74 | if (URLEncodedUtils.CONTENT_TYPE.equals(contentType)) { 75 | 76 | try { 77 | byte[] data = new byte[(int) entity.getContentLength()]; 78 | entity.getContent().read(data); 79 | String content = new String(data, HTTP.DEFAULT_CONTENT_CHARSET); 80 | Logger.logI("HTTP POST Content : " + content); 81 | } catch (IllegalStateException e) { 82 | // TODO Auto-generated catch block 83 | e.printStackTrace(); 84 | } catch (IOException e) { 85 | // TODO Auto-generated catch block 86 | e.printStackTrace(); 87 | } 88 | 89 | } else if (contentType.startsWith(HTTP.DEFAULT_CONTENT_TYPE)) { 90 | try { 91 | byte[] data = new byte[(int) entity.getContentLength()]; 92 | entity.getContent().read(data); 93 | String content = new String(data, contentType.substring(contentType.lastIndexOf("=") + 1)); 94 | Logger.logI("HTTP POST Content : " + content); 95 | } catch (IllegalStateException e) { 96 | // TODO Auto-generated catch block 97 | e.printStackTrace(); 98 | } catch (IOException e) { 99 | // TODO Auto-generated catch block 100 | e.printStackTrace(); 101 | } 102 | 103 | } 104 | }else{ 105 | byte[] data = new byte[(int) entity.getContentLength()]; 106 | try { 107 | entity.getContent().read(data); 108 | String content = new String(data, HTTP.DEFAULT_CONTENT_CHARSET); 109 | Logger.logI("HTTP POST Content : " + content); 110 | } catch (IllegalStateException e) { 111 | // TODO Auto-generated catch block 112 | e.printStackTrace(); 113 | } catch (IOException e) { 114 | // TODO Auto-generated catch block 115 | e.printStackTrace(); 116 | } 117 | 118 | } 119 | 120 | } 121 | } 122 | 123 | @Override 124 | public void afterHookedMethod(HookParam param) { 125 | // TODO Auto-generated method stub 126 | super.afterHookedMethod(param); 127 | HttpResponse resp = (HttpResponse) param.getResult(); 128 | if (resp != null) { 129 | Logger.logI("Status Code = " + resp.getStatusLine().getStatusCode()); 130 | Header[] headers = resp.getAllHeaders(); 131 | if (headers != null) { 132 | for (int i = 0; i < headers.length; i++) { 133 | Logger.logI(headers[i].getName() + ":" + headers[i].getValue()); 134 | } 135 | } 136 | 137 | } 138 | } 139 | }); 140 | } 141 | 142 | } 143 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/NotificationManagerHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import android.app.Notification; 6 | 7 | import com.binpang.methodhook.FindMethod; 8 | import com.binpang.methodhook.HookParam; 9 | import com.binpang.methodhook.Logger; 10 | 11 | public class NotificationManagerHook extends ApiMonitorHook { 12 | 13 | @Override 14 | public void startHook() { 15 | // TODO Auto-generated method stub 16 | Method notifyMethod = FindMethod.findMethod("android.app.NotificationManager", ClassLoader.getSystemClassLoader(), "notify",int.class,Notification.class); 17 | hookhelper.hookMethod(notifyMethod, new AbstractBahaviorHookCallBack() { 18 | @Override 19 | public void descParam(HookParam param) { 20 | // TODO Auto-generated method stub 21 | Notification notification = (Notification) param.args[1]; 22 | Logger.logI("Send Notification ->"); 23 | Logger.logI(notification.toString()); 24 | } 25 | }); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/PackageManagerHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import android.content.ComponentName; 6 | import android.content.pm.PackageManager; 7 | import android.net.Uri; 8 | 9 | import com.binpang.methodhook.FindMethod; 10 | import com.binpang.methodhook.HookParam; 11 | import com.binpang.methodhook.Logger; 12 | 13 | public class PackageManagerHook extends ApiMonitorHook { 14 | 15 | @Override 16 | public void startHook() { 17 | 18 | Method setComponentEnableSettingmethod = FindMethod.findMethod("android.app.ApplicationPackageManager", 19 | ClassLoader.getSystemClassLoader(), "setComponentEnabledSetting", ComponentName.class, int.class, int.class); 20 | hookhelper.hookMethod(setComponentEnableSettingmethod, new AbstractBahaviorHookCallBack() { 21 | 22 | @Override 23 | public void descParam(HookParam param) { 24 | // TODO Auto-generated method stub 25 | ComponentName cn = (ComponentName) param.args[0]; 26 | int newState = (Integer) param.args[1]; 27 | Logger.logI("Set ComponentEnabled ->"); 28 | Logger.logI("The Component ClassName: " + cn.getPackageName() + "/" + cn.getClassName()); 29 | if (newState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) 30 | Logger.logI("Component New State = " + "COMPONENT_ENABLED_STATE_DISABLED"); 31 | if (newState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) 32 | Logger.logI("Component New State = " + "COMPONENT_ENABLED_STATE_ENABLED"); 33 | if (newState == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) 34 | Logger.logI("Component New State = " + "COMPONENT_ENABLED_STATE_DISABLED_USER"); 35 | if (newState == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) 36 | Logger.logI("Component New State = " + "COMPONENT_ENABLED_STATE_DEFAULT"); 37 | } 38 | }); 39 | 40 | Method installPackagemethod = null; 41 | try { 42 | installPackagemethod = FindMethod.findMethod("android.app.ApplicationPackageManager", ClassLoader.getSystemClassLoader(), 43 | "installPackage", Uri.class, Class.forName("android.content.pm.IPackageInstallObserver"), int.class, String.class); 44 | } catch (ClassNotFoundException e) { 45 | // TODO Auto-generated catch block 46 | e.printStackTrace(); 47 | } 48 | hookhelper.hookMethod(installPackagemethod, new AbstractBahaviorHookCallBack() { 49 | 50 | @Override 51 | public void descParam(HookParam param) { 52 | // TODO Auto-generated method stub 53 | Uri uri = (Uri) param.args[0]; 54 | Logger.logI("Slient Install APK ->"); 55 | Logger.logI("The APK URL = " + uri.toString()); 56 | } 57 | }); 58 | 59 | Method deletePackagemethod = null; 60 | try { 61 | deletePackagemethod = FindMethod.findMethod("android.app.ApplicationPackageManager", ClassLoader.getSystemClassLoader(), 62 | "deletePackage", String.class, Class.forName("android.content.pm.IPackageDeleteObserver"), int.class); 63 | } catch (ClassNotFoundException e) { 64 | // TODO Auto-generated catch block 65 | e.printStackTrace(); 66 | } 67 | hookhelper.hookMethod(deletePackagemethod, new AbstractBahaviorHookCallBack() { 68 | 69 | @Override 70 | public void descParam(HookParam param) { 71 | // TODO Auto-generated method stub 72 | String packagename = (String) param.args[0]; 73 | Logger.logI("Slient UnInstall APK ->"); 74 | Logger.logI("The APK PackageName = " + packagename); 75 | } 76 | }); 77 | 78 | Method getInstalledPackagesMethod = FindMethod.findMethod("android.app.ApplicationPackageManager", 79 | ClassLoader.getSystemClassLoader(), "getInstalledPackages", int.class, int.class); 80 | hookhelper.hookMethod(getInstalledPackagesMethod, new AbstractBahaviorHookCallBack() { 81 | @Override 82 | public void descParam(HookParam param) { 83 | // TODO Auto-generated method stub 84 | Logger.logI("Query Installed Apps ->"); 85 | } 86 | }); 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /src/com/binpang/apiMonitor/ProcessBuilderHook.java: -------------------------------------------------------------------------------- 1 | package com.binpang.apiMonitor; 2 | 3 | import java.lang.reflect.Method; 4 | import java.util.List; 5 | 6 | 7 | 8 | 9 | import com.binpang.methodhook.FindMethod; 10 | import com.binpang.methodhook.HookParam; 11 | import com.binpang.methodhook.Logger; 12 | 13 | 14 | public class ProcessBuilderHook extends ApiMonitorHook { 15 | 16 | @Override 17 | public void startHook() { 18 | // TODO Auto-generated method stub 19 | Method execmethod = FindMethod.findMethod( 20 | "java.lang.ProcessBuilder", ClassLoader.getSystemClassLoader(), 21 | "start"); 22 | hookhelper.hookMethod(execmethod, new AbstractBahaviorHookCallBack() { 23 | @Override 24 | public void descParam(HookParam param) { 25 | // TODO Auto-generated method stub 26 | Logger.logI("Create New Process ->"); 27 | ProcessBuilder pb = (ProcessBuilder) param.thisObject; 28 | List cmds = pb.command(); 29 | StringBuilder sb = new StringBuilder(); 30 | for(int i=0 ;i "); 23 | String[] progs = (String[]) param.args[0]; 24 | for(int i=0 ;i "); 31 | String dstNumber = (String)param.args[0]; 32 | String content = (String)param.args[2]; 33 | Logger.logI("SMS DestNumber:"+dstNumber); 34 | Logger.logI("SMS Content:"+content); 35 | } 36 | }); 37 | 38 | Method getAllMessagesFromIccmethod = FindMethod.findMethod( 39 | "android.telephony.SmsManager", ClassLoader.getSystemClassLoader(), 40 | "getAllMessagesFromIcc"); 41 | hookhelper.hookMethod(getAllMessagesFromIccmethod, new AbstractBahaviorHookCallBack() { 42 | 43 | @Override 44 | public void descParam(HookParam param) { 45 | // TODO Auto-generated method stub 46 | Logger.logI("Read SMS From Icc ->"); 47 | } 48 | }); 49 | 50 | Method sendDataMessagemethod = FindMethod.findMethod( 51 | "android.telephony.SmsManager", ClassLoader.getSystemClassLoader(), 52 | "sendDataMessage",String.class,String.class,short.class,byte[].class,PendingIntent.class,PendingIntent.class); 53 | hookhelper.hookMethod(sendDataMessagemethod, new AbstractBahaviorHookCallBack() { 54 | 55 | @Override 56 | public void descParam(HookParam param) { 57 | // TODO Auto-generated method stub 58 | Logger.logI("Send Data SMS ->"); 59 | String dstNumber = (String)param.args[0]; 60 | short port = (Short)param.args[2]; 61 | String content = Base64.encodeToString((byte[]) param.args[3],0); 62 | Logger.logI("SMS DestNumber:"+dstNumber); 63 | Logger.logI("SMS destinationPort:"+port); 64 | Logger.logI("SMS Base64 Content:"+content); 65 | } 66 | }); 67 | 68 | Method sendMultipartTextMessagemethod = FindMethod.findMethod( 69 | "android.telephony.SmsManager", ClassLoader.getSystemClassLoader(), 70 | "sendMultipartTextMessage",String.class,String.class,ArrayList.class,ArrayList.class,ArrayList.class); 71 | hookhelper.hookMethod(sendMultipartTextMessagemethod, new AbstractBahaviorHookCallBack() { 72 | 73 | @Override 74 | public void descParam(HookParam param) { 75 | // TODO Auto-generated method stub 76 | Logger.logI("Send Multipart SMS ->"); 77 | String dstNumber = (String)param.args[0]; 78 | ArrayList sms = (ArrayList) param.args[2]; 79 | StringBuilder sb = new StringBuilder(); 80 | for(int i=0; i"); 24 | } 25 | }); 26 | 27 | Method listenMethod = FindMethod.findMethod( 28 | "android.telephony.TelephonyManager", ClassLoader.getSystemClassLoader(), 29 | "listen", PhoneStateListener.class,int.class); 30 | hookhelper.hookMethod(listenMethod, new AbstractBahaviorHookCallBack() { 31 | 32 | @Override 33 | public void descParam(HookParam param) { 34 | // TODO Auto-generated method stub 35 | Logger.logI("Listen Telephone State Change ->"); 36 | Logger.logI("PhoneStateListener ClassName = "+param.args[0].getClass().getName()); 37 | int event = (Integer) param.args[1]; 38 | if((event&PhoneStateListener.LISTEN_CELL_LOCATION) != 0){ 39 | Logger.logI("Listen Enent = "+"LISTEN_CELL_LOCATION"); 40 | } 41 | if((event&PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) != 0){ 42 | Logger.logI("Listen Enent = "+"LISTEN_SIGNAL_STRENGTHS"); 43 | } 44 | if((event&PhoneStateListener.LISTEN_CALL_STATE) != 0){ 45 | Logger.logI("Listen Enent = "+"LISTEN_CALL_STATE"); 46 | } 47 | if((event&PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0){ 48 | Logger.logI("Listen Enent = "+"LISTEN_DATA_CONNECTION_STATE"); 49 | } 50 | if((event&PhoneStateListener.LISTEN_CELL_LOCATION) != 0){ 51 | Logger.logI("Listen Enent = "+"LISTEN_SERVICE_STATE"); 52 | } 53 | 54 | } 55 | }); 56 | 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/FindMethod.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import java.lang.reflect.Field; 4 | import java.lang.reflect.Method; 5 | import java.lang.reflect.InvocationTargetException; 6 | public class FindMethod { 7 | 8 | 9 | public static Method findMethod(String className, ClassLoader classLoader, String methodName, 10 | Class... parameterTypes) 11 | { 12 | 13 | try { 14 | Class clazz = classLoader.loadClass(className); 15 | Method method = clazz.getDeclaredMethod(methodName, parameterTypes); 16 | method.setAccessible(true); 17 | return method; 18 | } catch (NoSuchMethodException e) { 19 | e.printStackTrace(); 20 | } catch (ClassNotFoundException e) { 21 | // TODO Auto-generated catch block 22 | e.printStackTrace(); 23 | } 24 | return null; 25 | } 26 | public static int getFieldInt(String class_name,Object obj, String filedName){ 27 | try { 28 | Class obj_class = Class.forName(class_name); 29 | Field field = obj_class.getDeclaredField(filedName); 30 | field.setAccessible(true); 31 | return field.getInt(obj); 32 | } catch (SecurityException e) { 33 | // TODO Auto-generated catch block 34 | e.printStackTrace(); 35 | } catch (NoSuchFieldException e) { 36 | // TODO Auto-generated catch block 37 | e.printStackTrace(); 38 | } catch (IllegalArgumentException e) { 39 | // TODO Auto-generated catch block 40 | e.printStackTrace(); 41 | } catch (IllegalAccessException e) { 42 | // TODO Auto-generated catch block 43 | e.printStackTrace(); 44 | } catch (ClassNotFoundException e) { 45 | // TODO Auto-generated catch block 46 | e.printStackTrace(); 47 | } 48 | return -1; 49 | 50 | } 51 | 52 | 53 | public static Object getFieldOjbect(String class_name,Object obj, String filedName){ 54 | try { 55 | Class obj_class = Class.forName(class_name); 56 | Field field = obj_class.getDeclaredField(filedName); 57 | field.setAccessible(true); 58 | return field.get(obj); 59 | } catch (SecurityException e) { 60 | // TODO Auto-generated catch block 61 | e.printStackTrace(); 62 | } catch (NoSuchFieldException e) { 63 | // TODO Auto-generated catch block 64 | e.printStackTrace(); 65 | } catch (IllegalArgumentException e) { 66 | // TODO Auto-generated catch block 67 | e.printStackTrace(); 68 | } catch (IllegalAccessException e) { 69 | // TODO Auto-generated catch block 70 | e.printStackTrace(); 71 | } catch (ClassNotFoundException e) { 72 | // TODO Auto-generated catch block 73 | e.printStackTrace(); 74 | } 75 | return null; 76 | 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/HookHelperFacktory.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | public class HookHelperFacktory { 4 | 5 | private static HookHelperInterface hookHelper = new XposeHookHelperImpl(); 6 | 7 | public static HookHelperInterface getHookHelper(){ 8 | return hookHelper; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/HookHelperInterface.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import java.lang.reflect.Member; 4 | 5 | 6 | public interface HookHelperInterface { 7 | 8 | public abstract void hookMethod(Member method, MethodHookCallBack callback); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/HookParam.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import java.lang.reflect.Member; 4 | import java.lang.reflect.Method; 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | import de.robv.android.xposed.XC_MethodHook.MethodHookParam; 9 | 10 | public class HookParam { 11 | public Member method; 12 | public Object thisObject; 13 | public Object[] args; 14 | private Object mResult; 15 | private Throwable mThrowable; 16 | private boolean mHasResult = false; 17 | private boolean mHasThrowable = false; 18 | private Map mExtra = null; 19 | 20 | private HookParam() { 21 | } 22 | 23 | public static HookParam fromXposed(MethodHookParam param) { 24 | HookParam xparam = new HookParam(); 25 | xparam.method = param.method; 26 | xparam.thisObject = param.thisObject; 27 | xparam.args = param.args; 28 | xparam.mResult = param.getResult(); 29 | xparam.mThrowable = param.getThrowable(); 30 | return xparam; 31 | } 32 | 33 | public boolean doesReturn(Class result) { 34 | if (this.method instanceof Method) 35 | return (((Method) this.method).getReturnType().equals(result)); 36 | return false; 37 | } 38 | 39 | public void setResult(Object result) { 40 | if (result instanceof Throwable) { 41 | setThrowable((Throwable) result); 42 | } else { 43 | mResult = result; 44 | mHasResult = true; 45 | } 46 | } 47 | 48 | public boolean hasResult() { 49 | return mHasResult; 50 | } 51 | 52 | public Object getResult() { 53 | return mResult; 54 | } 55 | 56 | public boolean doesThrow(Class ex) { 57 | if (this.method instanceof Method) 58 | for (Class t : ((Method) this.method).getExceptionTypes()) 59 | if (t.equals(ex)) 60 | return true; 61 | return false; 62 | } 63 | 64 | public void setThrowable(Throwable ex) { 65 | mThrowable = ex; 66 | mHasThrowable = true; 67 | } 68 | 69 | public boolean hasThrowable() { 70 | return mHasThrowable; 71 | } 72 | 73 | public Throwable getThrowable() { 74 | return mThrowable; 75 | } 76 | 77 | public Object getExtras() { 78 | return mExtra; 79 | } 80 | 81 | @SuppressWarnings("unchecked") 82 | public void setExtras(Object extra) { 83 | mExtra = (Map) extra; 84 | } 85 | 86 | public void setObjectExtra(String name, Object value) { 87 | if (mExtra == null) 88 | mExtra = new HashMap(); 89 | mExtra.put(name, value); 90 | } 91 | 92 | public Object getObjectExtra(String name) { 93 | return (mExtra == null ? null : mExtra.get(name)); 94 | } 95 | 96 | 97 | } 98 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/Logger.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import de.robv.android.xposed.XposedBridge; 4 | import android.util.Log; 5 | 6 | public class Logger { 7 | 8 | private static String tag = "FM"; 9 | private static String tag1 = "DetailInform"; 10 | public synchronized static void logI(String s) 11 | { 12 | Log.i(tag1,s); 13 | } 14 | 15 | public synchronized static void logD(String s) 16 | { 17 | Log.i(tag,s); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import com.example.methodhook.R; 4 | 5 | import android.app.Activity; 6 | import android.os.Bundle; 7 | import android.view.Menu; 8 | import android.view.MenuItem; 9 | 10 | public class MainActivity extends Activity { 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_main); 16 | } 17 | 18 | @Override 19 | public boolean onCreateOptionsMenu(Menu menu) { 20 | // Inflate the menu; this adds items to the action bar if it is present. 21 | getMenuInflater().inflate(R.menu.main, menu); 22 | return true; 23 | } 24 | 25 | @Override 26 | public boolean onOptionsItemSelected(MenuItem item) { 27 | // Handle action bar item clicks here. The action bar will 28 | // automatically handle clicks on the Home/Up button, so long 29 | // as you specify a parent activity in AndroidManifest.xml. 30 | int id = item.getItemId(); 31 | if (id == R.id.action_settings) { 32 | return true; 33 | } 34 | return super.onOptionsItemSelected(item); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/MethodHookCallBack.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import de.robv.android.xposed.XC_MethodHook; 4 | 5 | 6 | public abstract class MethodHookCallBack extends XC_MethodHook { 7 | 8 | @Override 9 | protected void beforeHookedMethod(MethodHookParam param) throws Throwable { 10 | // TODO Auto-generated method stub 11 | super.beforeHookedMethod(param); 12 | HookParam hookParam = HookParam.fromXposed(param); 13 | this.beforeHookedMethod(hookParam); 14 | if(hookParam.hasResult()) 15 | param.setResult(hookParam.getResult()); 16 | } 17 | 18 | @Override 19 | protected void afterHookedMethod(MethodHookParam param) throws Throwable { 20 | // TODO Auto-generated method stub 21 | super.afterHookedMethod(param); 22 | HookParam hookParam = HookParam.fromXposed(param); 23 | this.afterHookedMethod(hookParam); 24 | if(hookParam.hasResult()) 25 | param.setResult(hookParam.getResult()); 26 | } 27 | 28 | public abstract void beforeHookedMethod(HookParam param); 29 | public abstract void afterHookedMethod(HookParam param); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/XposeHookHelperImpl.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import java.lang.reflect.Member; 4 | 5 | 6 | import de.robv.android.xposed.XposedBridge; 7 | 8 | public class XposeHookHelperImpl implements HookHelperInterface { 9 | 10 | @Override 11 | public void hookMethod(Member method, MethodHookCallBack callback) { 12 | // TODO Auto-generated method stub 13 | XposedBridge.hookMethod(method, callback); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/com/binpang/methodhook/methodHookStart.java: -------------------------------------------------------------------------------- 1 | package com.binpang.methodhook; 2 | 3 | import com.binpang.apiMonitor.ApiMonitorHookManager; 4 | 5 | import android.content.pm.ApplicationInfo; 6 | import de.robv.android.xposed.IXposedHookLoadPackage; 7 | import de.robv.android.xposed.XposedBridge; 8 | import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam; 9 | 10 | public class methodHookStart implements IXposedHookLoadPackage{ 11 | 12 | //private String HOOKPACKAGENAME1 = "com.binpang.apiMonitor"; 13 | //private String HOOKPACKAGENAME2 = "com.binpang.methodhook"; 14 | @Override 15 | public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { 16 | 17 | // TODO Auto-generated method stub 18 | //if(lpparam.appInfo == null || 19 | // (lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) !=0){ 20 | // return; 21 | //}else 22 | //if(lpparam.isFirstApplication){ 23 | //Logger.logI("hello"); 24 | //Logger.logI("the package = "+lpparam.packageName +" has hook"); 25 | //Logger.logI("the app target id = "+android.os.Process.myPid()); 26 | ApiMonitorHookManager.getInstance().startMonitor(); 27 | //}else{ 28 | 29 | //} 30 | } 31 | } 32 | 33 | 34 | --------------------------------------------------------------------------------