android插件化(AMS Hook)
来源:互联网 发布:数控线切割编程3b代码 编辑:程序博客网 时间:2024/05/10 07:10
/** * startActivity方法最终会调用ActivityManagerNative, * ActivityManagerNative实际上就是ActivityManagerService这个远程对象的Binder代理对象 * * static public IActivityManager getDefault() { * return gDefault.get(); * } * * gDefault这个静态变量的定义如下: * * private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() { * protected IActivityManager create() { * IBinder b = ServiceManager.getService("activity_manager"); * IActivityManager am = IActivityManager.Stub.asInterface(b); * return am; * } * }; * * 由于Framework与AMS打交道是如此频繁,Framework使用了单例对象来保存这个AMS代理对象;这样只要需要与AMS进行IPC调用,获取这个单例即可, * 这是AMS这个系统服务与其他普通服务的不同之处,也是我们没使用Binder Hook的原因——我们只需要简单地Hook掉这个单例即可, * 不过Android不同版本对于如何保存这个单例的代理对象是不同的;Android 2.x系统直接使用静态变量存储,Android 4.x以上抽象出了一个Singleton类 * * Context.startActivity --> ContextImpl.startActivity --> mMainThread.getInstrumentation().execStartActivity() --> * ActivityManagerNative.getDefault().startActivity() */package com.example.administrator.ams;import android.annotation.TargetApi;import android.content.ClipData;import android.content.Intent;import android.os.Build;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import java.lang.reflect.Field;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class MainActivity extends AppCompatActivity implements Button.OnClickListener { private void hookAms() throws Exception { Class<?> activityManagerNativeClass = Class.forName("android.app.ActivityManagerNative"); Field gDefaultField = activityManagerNativeClass.getDeclaredField("gDefault"); gDefaultField.setAccessible(true); Object gDefault = gDefaultField.get(null); /** * 4.x以上的gDefault是一个 android.util.Singleton对象,我们取出这个单例里面的字段 */ Class<?> singleton = Class.forName("android.util.Singleton"); Field mInstanceField = singleton.getDeclaredField("mInstance"); mInstanceField.setAccessible(true); /** * ActivityManagerNative的gDefault对象里面原始的IActivityManager对象 */ Object rawIActivityManager = mInstanceField.get(gDefault); /** * 创建一个这个对象的代理对象,然后替换这个字段,让我们的代理对象帮忙干活 */ Class<?> IActivityManagerInterface = Class.forName("android.app.IActivityManager"); Object proxy = Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class<?>[]{IActivityManagerInterface}, new IActivityManagerHandler(rawIActivityManager)); mInstanceField.set(gDefault, proxy); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { hookAms(); } catch (Exception e) { Log.e("wangzihan", "exception"); e.printStackTrace(); } } @Override public void onClick(View v) { getApplicationContext().startActivity(new Intent(this, SecondActivity.class)); }}class IActivityManagerHandler implements InvocationHandler { private Object base; IActivityManagerHandler(Object base) { this.base = base; } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Log.e("wangzihan", "hook IActivityManager in ActivityManagerNative"); return method.invoke(base, args); }}
0 0
- android插件化(AMS Hook)
- Android 插件化原理解析(4):Hook 机制之 AMS & PMS
- Android 插件化原理解析——Hook机制之AMS&PMS
- Android 插件化原理解析——Hook机制之AMS&PMS
- Android 插件化原理解析——Hook机制之AMS&PMS
- 插件化开发---Hook之AMS\PMS、startActivity2种方式
- android 插件化机制之AMS&PMS
- AMS Hook
- Android上hook AMS和PMS
- android插件化(Binder Hook)
- Android 插件化原理解析(3):Hook 机制之 Binder Hook
- Android插件化开发-hook动态代理
- Android插件化开发-hook动态代理
- Hook机制之AMS&PMS
- Android系统篇之----Hook系统的AMS服务实现应用启动的拦截功能
- Android 4.4 AMS 学习笔记(一)
- Android ActivityManagerService(AMS)的启动分析
- Android ActivityManagerService(AMS)的进程管理
- jq插件的编写中(jquery.extend、jquery.fn与jquery.fn.extend的使用区别)
- 排序算法之冒泡排序
- [LeetCode] Excel Sheet Column Number 字符串转数字
- Hibernate5学习笔记(五)
- 12 WebGL移动、旋转和缩放中的平移
- android插件化(AMS Hook)
- Linux strace命令
- 电脑USB口输出的是什么电平
- Github最火开源项目-一分钟学会旋转选择器WheelPicker使用
- 【更友好的用户交互】从一个小程序谈起
- JVM
- 优秀是一种使命
- 通用viewHolder设计,通用Adapter设计,解决简单的listview显示
- win10+uefi+gpt安装一键GHOST之后无法重启的快速解决方法(无需重装系统无需修复引导)