精华内容
下载资源
问答
  • 在上一篇文章《Xposed插件开发手册(1): Xposed框架的安装》,我们学习到了Xposed的安装,这篇文章我们就来做一个简单的Xposed模块,劫持我们写的App,整篇文章我参考了官网的教程来编写。 环境参数 虽然之前的文章...

    前言

    在上一篇文章《Xposed插件开发手册(1): Xposed框架的安装》,我们学习到了Xposed的安装,这篇文章我们就来做一个简单的Xposed模块,劫持我们写的App,整篇文章我参考了官网的教程来编写。

    环境参数

    研发环境

    • 操作系统:MacOS Mojava
    • IDE:Android Studio 3.2
    • Gradle:gradle-4.6-all.zip

    手机参数

    • 操作系统:魔趣OS 8.1
    • 手机:Redmi 5A
    • Xposed installer : XposedInstaller_3.1.5.apk
    • Xposed : xposed-v90-sdk27-arm64-beta3.zip
    • Xposed bridge version: 82

    上面已经列出了环境参数,如果哪里不清楚可以留言给我修改。

    开始研发

    新建项目

    新建一个Xposed的项目,环境配置为5.0
    在这里插入图片描述
    在这里插入图片描述

    创建一个MainActivity

    • activity_main.xml
      布局中只包含一个按钮
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hook监测"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </android.support.constraint.ConstraintLayout>
    
    • MainActivity.class
      代码中只做了一个点击监听操作。
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    
        public String toastMessage() {
            return "按钮未被劫持";
        }
    
    }
    

    配置XposedBridge

    XposedBridge中包含了编写Xposed插件的java代码用于调用Xposed环境中提供的功能。

    • 下载两个Xposed API
      • api-82-sources.jar: 包含源码的
      • api-82.jar: 不包含源码
        在这里插入图片描述

    我们将下载好的api-82.jar复制到Android Studio的libs目录下,在gradle中加载我们的jar包。

    dependencies {
        compileOnly fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        compileOnly 'de.robv.android.xposed:api:82' // 添加这一行且必须是 compileOnly
        compileOnly 'de.robv.android.xposed:api:82:sources'
    }
    

    注意compileOnly fileTree(dir: 'libs', include: ['*.jar'])这行代码,compileOnly命令只在编译时期打包进入,原因是Xposed里已有该jar包内容,再次打包进去会冲突。

    ps: 上面那个修改很重要,不修改就会导致handleLoadPackage没有回调,具体参考《Using the Xposed Framework API》

    修改AndroidManifest.xml文件

    在Application标签里面添加三个meta-data,当我们安装的时候Xposed框架会检验信息,并且判定次App是Xposed插件。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.martin.xposed">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <!-- 是否是xposed模块,xposed根据这个来判断是否是模块 -->
            <meta-data
                android:name="xposedmodule"
                android:value="true" />
    
            <!-- 模块描述,显示在xposed模块列表那里第二行 -->
            <meta-data
                android:name="xposeddescription"
                android:value="This is a Xposed Module Demo" />
    
            <!-- 最低xposed版本号(lib文件名可知) -->
            <meta-data
                android:name="xposedminversion"
                android:value="54" />
    
    
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    编写Xposed插件

    • 创建HookMain.java文件实现IXposedHookLoadPackage入口,这里是你的插件入口,参考Javadoc
    public class HookMain implements IXposedHookLoadPackage {
    
        /**
         * XposedBridge.log():以原生logcat的形式写入到/data/user_de/0/de.robv.android.xposed.installer/log/error.log
         */
        @Override
        public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
            if (loadPackageParam.packageName.equals(BuildConfig.APPLICATION_ID)) {
                Class clazz = loadPackageParam.classLoader.loadClass("com.martin.xposed.MainActivity");
                XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() {
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        super.beforeHookedMethod(param);
                        XposedBridge.log("Hook成功");
                    }
    
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        param.setResult("按钮已被劫持");
                    }
                });
            }
        }
    
    }
    
    

    上面看代码很明显,是针对我们的MainActivitytoastMessage方法进行劫持。beforeHookedMethod方法,是在我们toastMessage运行前会调用,afterHookedMethod方法,在我们方法运行后调用。

    编写插件入口配置文件Xposed_init

    • assets/xposed_init
      首先创建项目中的assets目录
      在这里插入图片描述
      创建一个文件(这里不需要任何后缀名),将我们的HookMain完整包名填写到文件中。
      在这里插入图片描述
    com.martin.xposed.HookMain
    

    取消instant Run

    在安装之前,需要配置取消IDE的instant run,如果不配置会监测不到你的入口。原因如下:

    Please make sure to disable Instant Run (File -> Settings -> Build, Execution, Deployment -> Instant Run), otherwise your classes aren’t included directly in the APK, but loaded via a stub application which Xposed can’t handle.

    在这里插入图片描述

    运行

    接下来,我们就可以直接运行我们的插件了,点开我们安装的Xposed installer的模块可以看见我们开发的插件已经被检测到了。
    在这里插入图片描述
    重启下手机生效,点击按钮查看我们的劳动成果。
    在这里插入图片描述

    小结

    总结下步骤:

    • 编写功能点
    • 使用XposedBridge对功能点进行劫持。
    • 配置插件入口文件

    其实这篇入门文章大部分都是编写配置文件并没有使用太多API,大家细心点配置就没什么问题了,我把项目上传到Github了不想编写的,自己下载运行就好了。关于原理的讲解,大家可以参考这篇文章《深入理解 Android(三):Xposed 详解》目前是我找到的比较好的国内资料。

    参考文献

    展开全文
  • Xposed Xposed插件开发

    千次阅读 2016-05-19 14:28:12
    Xposed插件开发简单介绍 Xposed,大名鼎鼎得Xposed,是Android平台上最负盛名的一个框架。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西,比如操纵一些本来只对系统厂商才...

    Xposed插件开发

    简单介绍
    Xposed,大名鼎鼎得Xposed,是Android平台上最负盛名的一个框架。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西,比如操纵一些本来只对系统厂商才open的功能(实际上是因为Android系统很多API是不公开的,而第三方APP又没有权限)。有了Xposed后,理论上我们的插件APP可以hook到系统任意一个Java进程。

    开发准备
    编译器我最初用AndroidStudio+Gradle环境发现不行,后来想了一下,应该是不能用Gradle环境的。于是就用IDEA+MAVEN创建工程,然后再导入AndroidStudio编译的。
    首先要给测试机root+刷rec|twrp+安装XposedInstaller,然后用XposedInstaller下载卡刷Xopsed框架卡刷包,然后在rec中刷进去。第一次开机会有点久,安装成功之后测试机就准备好了。
    然后是jar包:百度搜,下载XposedBridgeApi-54.jar,在工程目录新建lib文件夹,把下载的jar包放进去。然后右键工程-OpenModuleSetting 把lib以addjar文件夹的形式加入进来。注:不可用工程默认的libs目录,一定要自己创建lib目录使用。
    接下来是AndroidManifest.xml
    在application中添加:

    <meta-data
                android:name="xposedmodule"
                android:value="true" />
            <meta-data
                android:name="xposeddescription"
                android:value="介绍" />
            <meta-data
                android:name="xposedminversion"
                android:value="56" />

    创建xposed类,来写代码吧

    import android.telephony.TelephonyManager;
    
    import de.robv.android.xposed.IXposedHookLoadPackage;
    import de.robv.android.xposed.XC_MethodHook;
    import de.robv.android.xposed.XSharedPreferences;
    import de.robv.android.xposed.callbacks.XC_LoadPackage;
    
    import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
    
    /**
     * Created by zhaoyong on 2016/5/14.
     */
    public class XposedTest implements IXposedHookLoadPackage {
    
        /* (non-Javadoc)
         * @see de.robv.android.xposed.IXposedHookLoadPackage#handleLoadPackage(de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam)
         */
    
        public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
            hookPhoneinfo(loadPackageParam);
        }
    
        private void hookPhoneinfo(final XC_LoadPackage.LoadPackageParam lpparam) {
    
            //getDeviceId
            findAndHookMethod(TelephonyManager.class.getName(), //包名类名
            lpparam.classLoader, //不用管 这样写就好
            "getDeviceId", //方法名
            new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    //在该方法执行前调用
                }
    
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    //在该方法执行之后调用
                    //给改方法自定义返回值
                    param.setResult("自定义返回值");
                }
            });
        }
    
    }
    

    接下来创建assets目录,创建文件xopsed_init,以本文文档的形式创建,不要加.txt后缀,里面写

    com.xxx.xxx.xxx.XposedTest

    完成的包名类名路径

    完成,运行安装,激活,重启搞定。
    关于如何保存自定义配置,看我的另一个Xposed保存SP的文章。

    展开全文
  • 主要介绍了Xposed插件开发入门详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Xposed插件开发

    2017-07-05 17:52:21
    Xposed插件开发(一)简单demo xposed下载地址:http://repo.xposed.info/module/de.robv.android.xposed.installer xposed开发包源码:https://github.com/rovo89/XposedBridge.git xposed简易demo:...

    Xposed插件开发(一)简单demo

    xposed下载地址:http://repo.xposed.info/module/de.robv.android.xposed.installer
    xposed开发包源码:https://github.com/rovo89/XposedBridge.git
    xposed简易demo:https://github.com/rovo89/XposedExamples.git


    准备阶段

    新建android工程,只需要修改三个地方,就可以开发xposed插件了:
    导入XposedBridgeApi.jar
    我这边图省事直接将demo中lib文件拷贝到当前工程中了

    这里写图片描述

    Androidmanifest.xml 没有activity也不要紧。

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
    
            <!-- 增加三个meata-data -->
            <meta-data
                android:name="xposedmodule"
                android:value="true" />
            <meta-data
                android:name="xposeddescription"
                android:value="make a Simcard id" />
            <meta-data
                android:name="xposedminversion"
                android:value="30" />
    
        </application>

    在assets中添加xposed_init文件
    xposed_init文件记录xposed插件处理类,文件写入格式为:包名+类名
    这里写图片描述

    简单demo

    由于某app需要获取sim卡才能运行,这边准备利用xposed伪造一份simcard id绕过去。
    代码放在gihub:https://github.com/saidyou/com.saidyou.xposed.simcard.git
    这里写图片描述

    package com.saiyou.xposed.simcard;
    import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
    import android.telephony.TelephonyManager;
    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.LoadPackageParam;
    public class Simcard  implements IXposedHookLoadPackage {
        public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
            // TODO Auto-generated method stub
            XposedBridge.log(lpparam.packageName + " [Simcard]");           
            // sim is usefully      
            findAndHookMethod(TelephonyManager.class.getName(),lpparam.classLoader,"getSimState",new XC_MethodHook(){
    
                protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
                    // TODO Auto-generated method stub
                    super.beforeHookedMethod(param);
                }
    
                protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
                    // TODO Auto-generated method stub
                    super.afterHookedMethod(param);
                    //TelephonyManager.SIM_STATE_READY 5
                    param.setResult(TelephonyManager.SIM_STATE_READY);
                }       
            });     
            // get sim id       
            findAndHookMethod("android.telephony.TelephonyManager",lpparam.classLoader,"getSubscriberId",new XC_MethodHook(){
    
        }
    }

    问题

    xposed没有运行

    问题描述: 在android studio下编译,会将XposedBridgeApi.jar编译到dex中,然后xposed框架在运行时不是调用系统中的xposed接口,而是自身的jar包

    这里写图片描述
    解决方法: 所以删掉不必要的代码,xposed的才能正常运行,我这边写脚本处理,可以借鉴

    import sys
    import os
    import shutil
    
    pwd = sys.path[0]
    temp_path = pwd+'\\temp'
    if os.path.exists(temp_path):
        shutil.rmtree(temp_path)
    
    cmd = "apktool d -r %s\\app-release.apk -o %s"%(pwd,temp_path)
    
    print cmd
    os.system(cmd)
    
    shutil.rmtree('%s\\smali\\de'%temp_path)
    shutil.rmtree('%s\\smali\\androidx'%temp_path)
    shutil.rmtree('%s\\smali\\android'%temp_path)
    shutil.rmtree('%s\\unknown'%temp_path)
    
    text = ''
    is_unknown = False
    for line in open('%s\\apktool.yml'%temp_path):
        if is_unknown == False and line.find('unknownFiles:')+1:
            is_unknown = True
        elif is_unknown and line.startswith('  ') == False:
            is_unknown = False
        elif is_unknown == False:
            text += line
    
    open('%s\\apktool.yml'%temp_path, 'w+').write(text)
    os.system("apktool b -r %s -o %s\\new.apk"%(temp_path,pwd))
    os.system("apksign %s\\new.apk"%pwd)
    os.system('adb install -r %s\\new_signed.apk'%pwd)

    加载so

    问题描述: xposed的模块,在高版本下,例如android7.1上无法加载自己的so
    1、存在路径限制,只能加载/system/lib和/vertor/lib下的so
    2、域空间名限制

    展开全文
  • 初探Xposed 插件开发

    2020-08-03 19:35:31
    初探Xposed 插件开发 2019年5月30日 来源:Lazy1 1.之前手机上要是想要使用Xposed 功能必须root,然后我们并不想root,或者麻烦,偶尔看到了下面的APP,毫不犹豫用上了xpost http://vxposed.com/ 2.详细使用指南看...

    初探Xposed 插件开发

    2019年5月30日   来源: Lazy1

    1.之前手机上要是想要使用Xposed 功能必须root,然后我们并不想root,或者麻烦,偶尔看到了下面的APP,毫不犹豫用上了xpost

    http://vxposed.com/

    2.详细使用指南看官网把,简单就是单独开了个沙盒,不需要在root了

    3.插件开发准备

    image.png

    添加依赖

    dependencies {
        provided fileTree(include: ['*.jar'], dir: 'libs')
        //noinspection GradleCompatible
        compile 'com.android.support:appcompat-v7:24.2.1'
    }
    
    

    4.写一个类实现与IXposedHookLoadPackage

    
    public class Xp implements IXposedHookLoadPackage {
    
      @Override
      public void handleLoadPackage(LoadPackageParam loadPackageParam) throws Throwable {
        Log.e("handleLoadPackage",loadPackageParam.packageName);
        if ("你需要hook的包名".equals(loadPackageParam.packageName)){
          XposedBridge.log("开始hook");
          XposedHelpers.findAndHookMethod("你需要完全hook的类名", loadPackageParam.classLoader,"需要hook的方法名",“需要hook的方法的参数,没有可以空出来”, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
              super.beforeHookedMethod(param);
    
            }
    
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
              Class clazz = param.thisObject.getClass();
              Field field = clazz.getDeclaredField("iv_headImage");
              field.setAccessible(true);
              Log.e("handleLoadPackage",field.getName());
              ((ImageView) field.get(param.thisObject)).setVisibility(View.GONE);
            }
          });
        }
      }
    }
    
    
    
    

    5. 在assets资源目录下建立一个文件

    image.png

    上面的例子就是简单实现hook界面的图片隐藏。

    跑完毕之后我们在xpost框架中间就可以看到我们开发的插件

    image.png

    以上就是开发一个插件的简单步奏,开发插件主要是要看懂反编译的apk,知道他大概的流程,从而找到具体的属性,方法入手,从而改变成我们想要的结果。

    6.如果有时候我们的应用是多个dex使用上面的方法就可能失效,所以推荐使用下面的方法,一下就是我屏蔽某个应用的欢迎界面的代码

    public class Xp  implements IXposedHookLoadPackage {
      private static final String FILTER_PKGNAME = "cn.com.open.mooc";
      @Override
      public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable {
        Log.e("handleLoadPackage", loadPackageParam.packageName);
    
       /* XposedHelpers.findAndHookConstructor("java.net.URL", loadPackageParam.classLoader, String.class, new XC_MethodHook() {
          @Override
          protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            String url = (String) param.args[0];
            param.args[0] = "http://www.baidu.com/";
           Log.e("handleLoadPackage",url);
          }
        });*/
    
    
    
        if(FILTER_PKGNAME.equals(loadPackageParam.packageName)){
          //这里是为了解决app多dex进行hook的问题,Xposed默认是hook主dex
          XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
              ClassLoader cl = ((Context)param.args[0]).getClassLoader();
              Class<?> aClass = cl.loadClass("com.imooc.component.imoocmain.splash.MCSplashActivity");
              XposedHelpers.findAndHookMethod(aClass, "onCreate", Bundle.class, new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                  Log.e("handleLoadPackage","beforeHookedMethod");
    
                  super.beforeHookedMethod(param);
                }
    
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                  Log.e("handleLoadPackage","afterHookedMethod");
                  Activity activity = (Activity) param.thisObject;
                  Intent intent  = new Intent();
                  intent.setClassName(activity,"com.imooc.component.imoocmain.index.MCMainActivity");
                  activity.startActivity(intent);
                  super.afterHookedMethod(param);
                }
              });
            }
          });
        }
    
    
    
    
    
       /* XposedHelpers.findAndHookMethod("com.squareup.okhttp.HttpUrl",
            loadPackageParam.classLoader, "openConnection", new XC_MethodHook() {
              @SuppressLint("WrongConstant")
              @Override
              protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
                URL url = (URL) param.thisObject;
                Log.e("handleLoadPackage", url.get);
              *//*  Activity activity = (Activity) param.thisObject;
                Intent intent = new Intent();
                intent.setClassName(activity, "com.imooc.component.imoocmain.index.MCMainActivity");
                activity.startActivity(intent);
                activity.finish();*//*
              }
    
              @Override
              protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                Log.e("handleLoadPackage", "afterHookedMethod");
    
              }
            });*/
      }
    }
    
    

    上面的思路就是hook主欢迎界面的onCreate方法,然后直接跳转到首页。

    7 hook微信显示Menu

    package com.test.gradletask;
    
    import android.app.Application;
    import android.content.Context;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import de.robv.android.xposed.IXposedHookLoadPackage;
    import de.robv.android.xposed.XC_MethodHook;
    import de.robv.android.xposed.XposedBridge;
    import de.robv.android.xposed.XposedHelpers;
    import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
    
    /**
     * 项目名称:GradleTask
     * 类描述:
     * 创建人:Administrator
     * 创建时间:2018/3/12 10:46
     * 修改人:Administrator
     * 修改时间:2018/3/12 10:46
     * 修改备注:
     * 联系方式:906514731@qq.com
     */
    public class Man implements IXposedHookLoadPackage {
    
      private static final String FILTER_PKGNAME = "com.tencent.mm";
    
      @Override
      public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable {
        Log.e("handleLoadPackage", loadPackageParam.packageName);
        if (FILTER_PKGNAME.equals(loadPackageParam.packageName)) {
          //这里是为了解决app多dex进行hook的问题,Xposed默认是hook主dex
          XposedHelpers
              .findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                  final ClassLoader cl = ((Context) param.args[0]).getClassLoader();
                  final Class<?> aClass = cl
                      .loadClass("com.tencent.mm.ui.LauncherUI");
                  XposedHelpers
                      .findAndHookMethod(aClass, "onCreateOptionsMenu", Menu.class, new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                          Log.e("handleLoadPackage", "beforeHookedMethod");
    
                          super.beforeHookedMethod(param);
                        }
    
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                          Log.e("handleLoadPackage", "afterHookedMethod");
                          Menu menu=(Menu) param.args[0];
                          menu.add(0,3,0,"1b");
                          menu.add(0,4,0,"2b");
                          menu.add(0,5,0,"3b");
                          menu.add(0,6,0,"4b");
                          menu.add(0,7,0,"5b");
                          menu.add(0,8,0,"sb");
                          for(int i=0;i<menu.size();i++){
                            menu.getItem(i).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                              @Override
                              public boolean onMenuItemClick(MenuItem item) {
                                XposedBridge.log("你点击了");
              Toast.makeText(((Context) param.thisObject),"点击了",Toast.LENGTH_SHORT).show();
                                Log.e("handleLoadPackage","你点击了");
                                return false;
                              }
                            });
                          }
                          super.afterHookedMethod(param);
                        }
                      });
    
                }
              });
    
    
        }
    
    
      }
    }
    
    
    
    

    image.png

    7.xposed如果我们调用的参数是反编译APP类型,需要这样处理

    public class Man implements IXposedHookLoadPackage {
    
      private static final String FILTER_PKGNAME = "com.shuofeng.dl.application";
    
      @Override
      public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable {
        Log.e("handleLoadPackage", loadPackageParam.packageName);
        if (FILTER_PKGNAME.equals(loadPackageParam.packageName)) {
          //这里是为了解决app多dex进行hook的问题,Xposed默认是hook主dex
          XposedHelpers
              .findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                  ClassLoader cl = ((Context) param.args[0]).getClassLoader();
                  Class<?> aClass = cl.loadClass("com.shuofeng.dl.application.sf.GetUserStatu");
                  XposedHelpers
                      .findAndHookMethod(aClass, "autologin", cl.loadClass("com.shuofeng.dl.application.sf.callbackinterface"),new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                          super.beforeHookedMethod(param);
                          Log.e("handleLoadPackage","beforeHookedMethod");
                        }
    
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                          Log.e("handleLoadPackage", "afterHookedMethod");
    
                        }
                      });
                }
              });
    
    
        }
      }
    }
    
    
    
    
    

    中间参数类型,我们使用目标APP的全类名就可以了

        原文作者:Lazy1
        原文地址: https://www.jianshu.com/p/06d0e1b490e2
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

    展开全文
  • 其实网上已经有很多 Xposed 插件开发的入门教程了,我写的这篇与其说是教程,不如说是参考,为了防止以后忘了开发步骤,这里就写篇博客记录一下。要使用 Xposed 插件,首先要 root 手机并安装 Xposed 框架,这个是...
  • Xpatch用来重新签名打包Apk文件,使重打包后的Apk能加载安装在系统里的Xposed插件,从而实现免Root Hook任意App。
  • Xposed插件开发入门详解,前言Xposed的用处不必言说,能hook任意java写的代码,修改替换apk内部的资源文件。至于如何开发一个XPosed的插件,官方给出的答案如下:...
  • xposed插件监控微信项目源代码 附带视频教程 https://www.bilibili.com/video/av50740740 可以先看效果 再 下载
  • 1. Xposed插件Hello World 新建工程:MyXposed 引入xposed: provided 'de.robv.android.xposed:api:82' provided 'de.robv.android.xposed:api:82:sources' 官方链接 修改AndroidManifest 在AndroidManifest中...
  • 其实网上已经有很多 Xposed 插件开发的入门教程了,我写的这篇与其说是教程,不如说是参考,为了防止以后忘了开发步骤,这里就写篇博客记录一下。 要使用 Xposed 插件,首先要 root 手机并安装 Xposed 框架,这个是...
  • 麻花影视助手,这是一款Xposed插件,旨在净化麻花影视手机版。当前是功能还不是很完善,支持麻花影视 手机版2.5.0版本,不支持 Exposed 框架,EdXposed 和 Virtual Xposed 未测试。
  • 因为工作上的原因需要分析某个软件将网络下载的文件解压到那个路径,通过比对文件夹大小很难定位到具体位置,所以考虑使用xposed插件来做,因为没有现成的,所以只能自己动手来做一个了 需要如下准备工作 1.刷入...
  • Xposed插件 - Android一键脱壳工具 (必须获取root权限) 特性 支持Android4.0至7.1 支持模拟器及vmos 界面美观交互良好 一键脱全壳 并自动修复DexHeader magic 测试可脱(360加固)(爱加密),其余还未测试 ...
  • check wechat sns photos without sending lucky money / 让你不发红包就能查看朋友圈照片的Xposed插件 注意:建议自行编译及安装,避免安装不合法或者被修改过的 Xposed 插件。 关于 Xposed 请参考此处 酷安-Xposed...
  • 手机开启全局调试ro.debuggable...今天给介绍一个xposed插件来实现 手机的全局调试 原理,反正是frame java曾,管他什么hook就行。 再Zygote fork进程之前hook 修改runtimeFlags ,打开全局调试就可以。具体hook点查...
  • 前言 Xpatch是笔者开发的一款破解Android App工具,源码地址: ...本文接着上一篇Xpatch源码解析文章...加载Xposed插件之前,首先需要遍历所有安装的应用,根据Xposed插件的特征,找到其中的Xposed插件。 那什么样的应...
  • 微信Xposed插件,支持抢红包,消息防撤回,朋友圈防删除,朋友圈去广告
  • Xpatch用来重新签名打包Apk文件,使重打包后的Apk能加载安装在系统里的任意Xposed插件,从而实现免Root Hook任意App。 源码 https://github.com/WindySha/Xpatch Xpatch基本原理 Xpatch的原理是对Apk文件进行二次...
  • 但是似乎没有一个针对xposed插件加固的方案,笔者在试用了几家加固后,均会导致xposed插件的崩溃,要么就是插件功能失效,又或者运行性能大大影响导致App拦截的时候巨卡。 迫于无奈,对于本身就是安全从业者的笔者来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 483
精华内容 193
关键字:

xposed插件