hook系列——Xposed框架入门(一)
来源:互联网 发布:linux eclipse 安装 编辑:程序博客网 时间:2024/06/05 08:03
说到hook技术,顾名思义就能形象解释了它的作用。
常用的hook技术框架莫过于substrace cydia,frida还有就是这个Xposed了。
先说一下Xposed原理吧
Android 有一个Zygote(受精卵)这个东西,大家应该不陌生,它本质是一个应用层的程序。每个应用程序由它fork()出。其最初的名字是app_process,通过直接调用pctrl把名字给改成了”zygote”。代码位于frameworks/base/cmds/app_process/app_main.cpp。
Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务;
2.通过替换/system/bin/app_process程序控制zygote进程,使app_process在启动过程中加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持;
好了,开始行动,可参考 https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
jar包下载地址:http://download.csdn.net/detail/qq_30548105/9765223
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我来改变IMEI"/></LinearLayout>
public class MainActivity extends AppCompatActivity { private Button button; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView= (TextView) findViewById(R.id.tv); button = (Button) findViewById(R.id.bt); textView.setText(MyImei()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { textView.setText(MyImei()); } }); } public String MyImei() { return "真正IMei"; }}
想要达到的效果是,文本原本显示的是 真正IMei 这个几个字,当插件运行了,会修改这个方法,点击按钮,文本字会被修改
1.新建一个Android 工程,导入jar包,这里着重提醒,大多数博客都是错误的引入方式,导致会报错
正确的引入方式:
在app下新建一个文件夹并复制jar到文件夹下,在build.gradle下写上,Sync now一下即可。
2.在AndroidManifest.xml下的application结点下配置meta-data,如图:
3.写一个类去实现 IXposedHookLoadPackage 接口,并重写handleLoadPackage方法
public class Main implements IXposedHookLoadPackage{ String className = "com.xptest.myimei.MainActivity"; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { Class clazz = loadPackageParam.classLoader.loadClass(className); /** * 第一个参数是目标类 * 第二个参数是目标方法 * 第三个是回调,可用这个替换目标方法,还有个带两个方法的回调,before,after那个 */ XposedHelpers.findAndHookMethod(clazz, "MyImei", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable { return "Hook Imei"; } }); }}
这个方法是在一个app包被加载的时候执行,执行的特别早,甚至在Application.onCreate()方法之前。可以在这里设置特定的hook钩子。参数对象包含app的一些信息。这里简单打印一些信息。
4.指定模块的运行入口
新建一个asset资源文件,新建一个文本文件,并命名xposed_init(必须)
内容写入口类的全包名
5.安装一开始编写应用,打开是这个样子
点击按钮,也不会发生改变
6.开始编译并安装插件
7.安装完成后,会提示
8.点击打开,选择模块,会看到刚才安装的插件
9.点击勾选,然后回到框架页面重启即可
此时,安装并打开我们编写的应用
一进入页面就发现文本已经被修改了,点击按钮也不会出现之前的”真正IMei“字样,说明我们已经hook成功
本人个人原创,如有雷同,纯属巧合,或者与本人联系,做改动。请转载或者CV组合标明出处,谢谢!(如有疑问或错误欢迎指出,本人QQ:752231513)
- hook系列——Xposed框架入门(一)
- Android Hook框架Xposed入门
- Android Hook框架Xposed入门
- Android Hook框架Xposed入门
- Xposed Android hook框架入门 -开发步骤
- xposed hook框架的使用(一)
- xposed hook入门篇
- Android Hook框架Xposed详解
- Android Hook框架Xposed进阶
- Android.Hook框架xposed篇
- Android Hook神器——XPosed入门(登陆劫持演示)
- Android Hook神器——XPosed入门(登陆劫持演示)
- Android Hook神器——XPosed入门(登陆劫持演示)
- Android Hook神器——XPosed入门(登陆劫持演示)
- 安卓神框架——xposed
- XPOSED一、框架初探
- Xposed框架之函数Hook学习
- Hook框架xposed的简单demo
- APP兼容不同的设备之适配不同的系统版本
- spring+slf4j+logback(四)
- 提高篇第一讲项目5-当年第几天
- SQL高级语句-FOREIGN KEY 约束,确保同一个表或者不同表之间的引用完整性
- Thread类
- hook系列——Xposed框架入门(一)
- Oracle之完全卸载
- 安卓面试题总结
- iOS开发-底层篇-Class详解,ios底层-class详解
- JavaScript模块化编程
- gulp+browser-sync使用方法
- CString char* String 之间的转化
- Rxjava+Retrofit+okhttp+mvp实现
- POJ计算鞍点