Xposed学习进阶篇

原创 2016年08月31日 16:00:41

主要类介绍

  • IXposedHookLoadPackage.java 接口

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
    }

    方法:handleLoadPackage,在加载应用程序包的时候,执行这个方法

    参数:XC_LoadPackage.LoadPackageParam,这个参数包含了加载的应用程序的一些基本信息

  • XposedHelpers.java

     XposedHelpers.findAndHookMethod(Class<?> clazz, String methodName, Object... parameterTypesAndCallback)  {
            @Override
            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
                {
            @Override
            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
                return object ;
            }
        });
            }
        });
    

    方法:findAndHookMethod,是一个辅助方法,可以通过静态导入使用

    参数:
          第一个参数为包名.类名;
          第二个参数固定为lpparam.classLoader
          第三个参数为方法名(要被hook的函数名)
          第四,五…个参数为函数参数(用类型.class表示)
          最后一个参数为new XC_MethodHook() {…}

  • XposedBridge.java

    public static synchronized void log(String text) {
        Log.i("Xposed", text);
        if(logWriter != null) {
            logWriter.println(text);
            logWriter.flush();
        }
    }

    方法:log,顾名思义是日志打印的方法。输出到标准的logcat以及写入到/data/xposed/debug.log 这个文件中

     XposedBridge.hookAllMethods(Class<?> hookClass, String methodName, XC_MethodHook callback) {
     });
    XposedBridge.hookAllConstructors(Class<?> hookClass,XC_MethodHook callback) {
     });

    方法:hookAllMethods/hookAllConstructors,用于hook某个类中所有方法或者构造函数
    参数:
          第一个参数为包名.类名;
          第二个参数,方法名(hookAllConstructors无此参数)
          第三个参数,方法回调

Hook

在Xposed框架,最基本的核心就是对方法的hook,所以寻找目标的正确类和方法名就变得尤为重要。

  • 针对系统应用,可以通过google开放的源码进行查看相应的类和方法
  • 针对第三方应用,可以通过反编译目标程序,查看目标源码。(常见的反编译工具可以百度上搜一搜)

上一篇文章中提到的就是对于系统的方法进行劫持Hook传送门
接下来我们来hook一下第三方的应用

Hook第三方应用

demo代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tvName= (TextView) findViewById(R.id.tv_name);
        TextView tvInfo= (TextView) findViewById(R.id.tv_info);
        Test001 test001=new Test001("我是车","我是有四个轮子的高档车");
        tvName.setText(test001.getName());
        tvInfo.setText(test001.getDes());
    }

正常显示内容

这里写图片描述

hook内容,hook Test001 这个类的getDes方法

public class XModuleTest001 implements IXposedHookLoadPackage {

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        //将包名不是com.ycss.test_001的应用剔除
        if (!loadPackageParam.packageName.equals("com.ycss.test_001")) {
            return;
        }
        XposedBridge.log("Loaded app: " + loadPackageParam.packageName);

        XposedHelpers.findAndHookMethod("com.ycss.test_001.Test001", loadPackageParam.classLoader, "getDes", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                super.afterHookedMethod(param);
                String str =(String)param.getResult();
                XposedBridge.log("劫持后返回的内容" + (String)param.getResult());
                param.setResult("我的轮子已经被hook了,成破车了");
            }
        });
    }
}

效果图如下

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

安卓Hook系列教程(二):Xposed插件开发进阶篇

由于本屌意外发现了篇不错的教程,基本上是自己想写的东西,既然已经有了就转载一下,不自己写了。 有轮子就何需再去造轮子? 好吧,其实是懒癌发作了。。。。。。。。 Dalvik 孵化器 Zygote ...

sql注入学习进阶篇

  • 2011年12月16日 15:16
  • 19KB
  • 下载

WCF学习进阶篇

  • 2007年12月29日 16:02
  • 61KB
  • 下载

WebService CXF学习(进阶篇2):复杂对象传递(List,Map)

前面讲到了JavaBean对象的传递,这一节我们就CXF框架复杂对象(List,Map)的传递进行讲解。  第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要借助第三方...

IOS学习之UITableView(三):进阶篇索引,标记和自定义的table

目录[-] 一、带索引目录的表视图 二、可以进行行标记的表视图 三、定制表视图的每一行内容 代码下载 一、带索引目录的表视图       ①效果图 ...

WebService CXF学习(进阶篇1):自定义对象传递(简单JavaBean对象)

这一节我们就CXF框架简单的JavaBean对象传递进行讲解。  第一步:创建传输的JavaBean对象(UserInfo) [java] view plaincopy ...

SODBASE CEP学习进阶篇(二)续:日志采集-Flume Syslog采集

1. 启动CEP模型 启动CEP Server ./catalina.sh run 下载loganalysis.sod CEP模型文件。 使用Server Admin将loganalysis....

Git 学习进阶篇 -历史查看

Git历史记录的查看与对比主要涉及到三个命令:git log 、git diff 、git showgit log 命令使用在项目提交了若干记录,==git log== 命令可以查看提交历史:$ gi...

轻松学习自定义控件实现表钟效果-进阶篇新手必看,分分钟搞定自定义View

上篇介绍了组合自定义控件,那么今天来实现一个表钟效果。 目前还没有让其动起来。下篇咱们将对其进行完善。咱们完整的效果,既然是钟,那他就得实现秒进分,分进时的功能,还得在刻度上面实现数字显示。 最终...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Xposed学习进阶篇
举报原因:
原因补充:

(最多只允许输入30个字)