关闭

Xposed框架初次见面-开发自己的Xposed插件

标签: 插件xposedhook
619人阅读 评论(1) 收藏 举报
分类:

Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的虚拟机的劫持。基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作.与 iOS 越狱后的插件相似。由于涉及到修改系统,所以如果调教不当,很可能会使你的手机变成砖

搭建Xposed环境花了很久,特此整理出一个捷径给小伙伴们。不要在为了刷第三方Recovery烦恼,不要再为手机root烦恼,也不要再为安装Xposed烦恼,直接下载一个root好的,包含XP框架的Rom包,直接装入即可。

以下是使用AS开发自己的Xposed插件
初次在Android studio中使用Xposed,以下是流程,不要粗心,少一步都是失败的。至于原理的分析,我就不做整理,毕竟自己弄懂了之后还抽不出来整理。

首先准备好XposedBridgeApi的jar包。
拿走不谢
链接:https://pan.baidu.com/s/1mi7onQo 密码:v8ci

新建Xposed框架工程,注意此工程无Activity
将jar包放在工程lib文件夹中,并在AndroidManifest.xml文件中添加如下内容:


        <!-- xposed模块开关,默认true就行 -->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <!-- 提示文字 -->
        <meta-data
            android:name="xposeddescription"
            android:value="一个登陆劫持的样例" />
        <!-- 最低版本支持 -->
        <meta-data
            android:name="xposedminversion"
            android:value="87" />

另外新建一个被劫持的工程。此工程就是我们需要的登录界面和逻辑的工程

<?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">

    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你的账号"/>
    <EditText
        android:id="@+id/et2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你的密码"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="my_onClick"
        android:text="登陆"
        android:textSize="26dp"/>

</LinearLayout>

以上是布局代码,以下是MainActivity代码

package com.zhonghao.test1;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {

    private EditText mEditText;
    private EditText mEditText1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEditText = (EditText) findViewById(R.id.et1);
        mEditText1 = (EditText) findViewById(R.id.et2);
    }

    public void my_onClick(View view) {

        String username = mEditText.getText().toString();
        String password = mEditText1.getText().toString();
        if(CheckRegister(username,password)){
            Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(MainActivity.this,"登陆失败",Toast.LENGTH_SHORT).show();
        }
    }

    private boolean CheckRegister(String username, String password) {
        return username.equals(password);
    }
}

ok,被劫持的工程准备完毕,此工程可以安装到手机上了,下面回到XP框架工程
jar包添加之后,不要忘记配置。在app的build中特别注意此处
这里写图片描述
将compile改为provided,不改的话会怎么样,你自己试试呗,肯定报错

下一步我们需要告诉Xposed框架模块的主入口类,也就是这里的com.zhonghao.hooktest.Main
添加一个assets文件夹:右键点击 app这个module –> new –> Folder –>Assets Folder,然后确认即可。
在assets中new一个file,文件名为xposed_init,并在其中写上入口类的完整路径
文件里 将路径写上即可

com.zhonghao.hooktest.Main

这里写图片描述

下面,新创建一个类
Main

我们的模块所要实现的功能就是劫持登录的账号密码,然后显示在手机上Xposed框架的日志里以及打印在Logcat控制台上。
新建一个Main类,并实现IXposedHookLoadPackage接口,并实现IXposedHookLoadPackage接口中的handleLoadPackage方法

package com.zhonghao.hooktest;

import android.util.Log;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;

/**
 * 项目名称:HookTest
 * 包名:com.zhonghao.hooktest
 * 创建人:小豪
 * 创建时间:2017/1/26 14:15
 * 类描述:
 */

public class Main implements IXposedHookLoadPackage {

    //被HOOK的程序的包名和类名
    String packName = "com.zhonghao.test1";
    String className = "com.zhonghao.test1.MainActivity";
    /**
     * 获取包加载时候的回调
     */
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        // 将包名不是 com.zhonghao.test1 的应用剔除掉,此处要特别注意,我们只想hook住需要的包名
        if (!loadPackageParam.packageName.equals("com.zhonghao.test1"))
            return;
        XposedBridge.log("Loaded app: " + loadPackageParam.packageName);

        // replaceHookedMethod 替换方法
        // beforeHookedMethod 方法前执行
        // afterHookedMethod 方法后执行
        // 处理是的情况
        // 找到对应类的方法,进行hook,hook的方式有两种
      findAndHookMethod(className,     // 类名
                loadPackageParam.classLoader, // 类加载器
                "CheckRegister", // 方法名
                String.class,   // 参数1
                String.class,   // 参数2
                new XC_MethodHook() {
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

                        XposedBridge.log("开始劫持了! ");
                        XposedBridge.log("参数1 = : " + param.args[0]);
                        XposedBridge.log("参数2 = : " + param.args[1]);
                        Log.d("xposedplugin", (String) param.args[0]);
                        Log.d("xposedplugin", (String) param.args[1]);
                    }

                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        XposedBridge.log("劫持结束了! ");
                        XposedBridge.log("参数1 = : " + param.args[0]);
                        XposedBridge.log("参数2 = : " + param.args[1]);
                        Log.d("xposedplugin", (String) param.args[0]);
                        Log.d("xposedplugin", (String) param.args[1]);
                    }
                });
    }

}

到此就完成了。然后这个没有activity的工程,签名打包生成apk装到手机上。为什么不能直接装?没主界面无法运行。so.安装完之后,在Xposed框架里点击模块勾中你的应用,然后重启手机即刻生效。最后的效果如下
这里写图片描述
这里写图片描述
这里写图片描述

对于实现原理想要方便的同学直接查看Xposed框架hook原理

到此一个初次见面就完成了,之后是开发自己所需的高端的Xposed框架,带我完成之后再分享给大家!


最近才更新,我的建议大家还是自己刷入Xposed吧,因为rom自带的问题很多。我这里把获取系统权限的superSu给大家,还有XposedInstaller,以及ReExplore文件浏览器。 XposedInstaller里边直接点击下载框架,然后也是进入recover界面相应目录下刷进去。


superSu下载
XposedInstaller下载
RootExplore下载

1
0
查看评论

[Android开发] Xposed 插件开发之二: Xposed一些知识

一、 Api说明1. IXposedHookLoadPackage.java加载回调接口,在xposed入口类继承,实现handleLoadPackage方法 handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) 这...
  • niubitianping
  • niubitianping
  • 2016-09-18 15:05
  • 6326

[Android开发] Xposed 插件开发之一: Xposed入门

一、什么是XposedXposed Framework 为来自国外XDA论坛(forum.xda-developers.com)的rovo89自行开发的一个开源的安卓系统框架。它是一款特殊的安卓App,其主要功能是提供一个新的应用平台,玩家们安装Xposed框架后,就能够通过Xposed框架搭建起的...
  • niubitianping
  • niubitianping
  • 2016-09-18 09:27
  • 9732

Xposed模块制作入门

由于某个项目的特殊需求,可能要用Xposed框架干一些事情。然而在国内基本没有找到关于Xposed模块制作的文章(基本上全是下载呵呵),只在XDA上找到一篇教程。这篇文章差不多是XDA上的教程翻译过来的(原文链接:http://forum.xda-developers.com/showthread....
  • entalent
  • entalent
  • 2015-07-27 20:39
  • 3686

Xposed Xposed插件开发

Xposed插件开发简单介绍 Xposed,大名鼎鼎得Xposed,是Android平台上最负盛名的一个框架。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西,比如操纵一些本来只对系统厂商才open的功能(实际上是因为Android系统很多API是不公开的,...
  • YaphetZhao
  • YaphetZhao
  • 2016-05-19 14:28
  • 1272

Xposed框架开发入门(一)

最近在学习Android逆向的时候涉及到了Hook方面的知识,所以研究了下Xposed和Cydia Substrate框架,虽然最后还是成功搞起了,但是一路下来感觉还是有很多不顺的,所以在学习的时候就把学习笔记顺手写下来了。 关于这篇Xposed开发入门,准备分三章来写。第一章主要是关于Xpose...
  • qq_24280381
  • qq_24280381
  • 2017-03-30 21:20
  • 1975

Xposed插件开发基础篇

xposed hook java 官方教程:https://github.com/rovo89/XposedBridge/wiki/Development-tutorial 官网:http://repo.xposed.info/module/de.robv.android.xpose...
  • h416756139
  • h416756139
  • 2016-05-24 17:20
  • 4915

Android xposed框架开发入门

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

Xposed模块开发入门教程

前言:在高手如云的XDA论坛上Xposed框架都被许多开发者誉为“安卓第一神器”。究竟是什么神奇的能力让它在众多APP中脱引而出呢?本文将指引大家完成一个Xposed上最简单的Demo,让大家领略一下Xposed的威力。 一、手机环境 1.ROOT过的Android手机(根据手机型号自行ROOT,本...
  • chenhao0428
  • chenhao0428
  • 2016-05-10 09:34
  • 15268

【Xposed模块开发】用Android Studio开发第一个Xposed模块

最近打算学习Xposed模块的开发。 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完...
  • mrglaucusss
  • mrglaucusss
  • 2016-03-23 15:19
  • 8496

微信抢红包插件xposed框架

我: https://github.com/veryyoung/WechatLuckyMoney 我: http://www.miui.com/forum.php?mod=viewthread&tid=5862304&extra=page=1&mobile=2 我: ...
  • xiaopihai86
  • xiaopihai86
  • 2018-01-12 11:04
  • 387
    个人资料
    • 访问:27103次
    • 积分:919
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:6篇
    • 译文:0篇
    • 评论:7条
    博客专栏
    我的微信公众号
      定期分享编程学习资源,技术文章,以及轻松一下的搞笑段子,欢迎关注哦!
      IT小菜鸟的起飞史
    最新评论