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了,成破车了");
            }
        });
    }
}

效果图如下

这里写图片描述

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

xposed 框架学习

xposed 框架学习 xposed 框架学习 一xposed 启动过程 app_main 虚拟机 二hook流程分析 findAndHookMethod findMethodExact hookMe...
  • djhsws
  • djhsws
  • 2015年11月08日 09:39
  • 1787

Xposed插件开发进阶篇

Dalvik 孵化器 Zygote (Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育/fork出来的)进程对应的程序是/system/bin...
  • h416756139
  • h416756139
  • 2016年05月24日 17:21
  • 2064

Xposed学习一:初探

学习Xposed框架,在github:https://github.com/rovo89 下载XposedInstaller安装到电脑上来管理Xposed的模块。 本文记录根据官方文档(资料1)在an...
  • a6624624
  • a6624624
  • 2015年08月26日 16:54
  • 635

(译)Xposed-替换资源

这是Xposed在github上的最后一篇教程。原文地址 Xposed使得替换资源,比如:图像和字符串之类的事变得容易。下面是做法: 简单的资源 @Override public void in...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2017年02月06日 11:57
  • 1594

Android xposed框架开发入门

近期在搞信息安全大赛,我们的作品是要基于xposed来做钩子,所以就研究了一下这个技术。但是真心感觉这个坑很多啊。。我是搞了半天才把框架搭建起来能够使用。写下来,各位后来的童鞋少走点坑吧。哈哈。入门涉...
  • u013496707
  • u013496707
  • 2016年03月21日 13:12
  • 10596

Android学习第十三天---Xposed框架理解

这篇文章 http://www.360doc.com/content/14/0625/09/9462341_389540723.shtml1.简介Xposed是GitHUB上rovo89大大设计的一...
  • d_0xff
  • d_0xff
  • 2016年08月30日 16:47
  • 583

Xposed框架开发入门(一)

最近在学习Android逆向的时候涉及到了Hook方面的知识,所以研究了下Xposed和Cydia Substrate框架,虽然最后还是成功搞起了,但是一路下来感觉还是有很多不顺的,所以在学习的时候就...
  • qq_24280381
  • qq_24280381
  • 2017年03月30日 21:20
  • 2020

Xposed框架之函数Hook学习

作者:Fly2015 Xposed是Android下Java层的开源Hook框架类似的有cydiasubstrate框架并且据说cydiasubstrate框架能实现Android的Java层和Nat...
  • QQ1084283172
  • QQ1084283172
  • 2015年07月06日 16:54
  • 8555

Three.js进阶篇之1 - 网格

在学习了几何形状和材质之后,我们就能使用他们来创建物体了。最常用的一种物体就是网格(Mesh),网格是由顶点、边、面等组成的物体;其他物体包括线段(Line)、骨骼(Bone)、粒子系统(Partic...
  • linolzhang
  • linolzhang
  • 2017年03月27日 23:38
  • 784

Java进阶篇

这篇博客主要记录在写Java过程中遇到的一系列问题 问题的解答会引用大牛们的解答或者博客,同样会一直更新下去... 1.如果在一个方法类里定义了一个内部类(比如匿名类),那么该内部类不能引用该方法...
  • u012866104
  • u012866104
  • 2015年12月20日 22:25
  • 441
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Xposed学习进阶篇
举报原因:
原因补充:

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