Xposed 框架检测机制

这篇具有很好参考价值的文章主要介绍了Xposed 框架检测机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Xposed 框架实现 Hook 的原理介绍

	Zygote是Android的核心,每运行一个app,Zygote就会fork一个虚拟机实例来运行app,
	Xposed Framework深入到了Android核心机制中,通过改造Zygote来实现一些很牛逼的
	功能。Zygote的启动配置在init.rc 脚 本 中,由系统启动的时候开启此进程,对应的
	执行文件是/system/bin/app_process,这个文件完成类库加载及一些函数调用的工作。
	当系统中安装了Xposed Framework之后,会对app_process进行扩展,也就是说,Xposed 
	Framework 会拿自己实现的app_process覆盖掉Android原生提供的app_process文件,
	当系统启动的时候,就会加载由 Xposed Framework 替换过的进程文件,并且,Xposed 
	Framework 还定义了一个 jar 包,系统启动的时候,也会加载这个包:
	/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar

二、常见检测

import java.io.BufferedReader;
import java.io.File;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;

import android.annotation.SuppressLint;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Module implements IXposedHookLoadPackage {

	// 定义全局变量 modify
	private int modify;
	
	@Override
	public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
		//通过 ClassLoader 的loadClass加载XposedHelper来修改一些局部变量值,阻止hook
		//处理方式,通过Hook类加载修改加载的类名
//		XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
//            @Override
//            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                super.beforeHookedMethod(param);
//				  if(param.args != null && param.args[0] != null && 
//					  param.args[0].toString().startsWith("de.robv.android.xposed.")){
// 
//                    // 改成一个不存在的类
//                    param.args[0] = "de.robv.android.xposed.ThTest";
//                }
//                
//            }
//        });
		
		//通过代码抛出一个异常,在堆栈中,查找Xposed相关的内容,进行判定
		//处理方式,通过Hook堆栈获取类名替换的方式进行阻止
		XposedHelpers.findAndHookMethod(StackTraceElement.class, "getClassName", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                String result = (String) param.getResult();
                if (result != null){
                    if (result.contains("de.robv.android.xposed.")) {
                        param.setResult("");
                    }else if(result.contains("com.android.internal.os.ZygoteInit")){
                        param.setResult("");
                    }
                }
                super.afterHookedMethod(param);
            }
        });
		
		//通过读取 shell 命令 /proc/pid(应用进程id)/maps 可以拿到当前上下文的so和jar列表,查找Xposed相关
		//处理方式,通过使用 BufferedReader进行读取命令的内容,过滤掉 XposedBridge.jar。
		XposedHelpers.findAndHookMethod(BufferedReader.class, "readLine", new XC_MethodHook() {
            @SuppressLint("SdCardPath") @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                String result = (String) param.getResult();
                if(result != null) {
                    if (result.contains("/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar")) {
                        param.setResult("");
                        new File("").lastModified();
                    }
                }
 
                super.afterHookedMethod(param);
            }
        });
		
		//其它,由于Xposed的hook,是通过so修改被hook的方法为native来实现的,所以检测方也可以通过检测方法是否变成了native来达到检测的目的
		//处理方式,对指定的方法,进行返回正常的值,来达到屏蔽的效果,这里用getDeviceId举例
		// 定义全局变量 modify
		XposedHelpers.findAndHookMethod(Method.class, "getModifiers", new XC_MethodHook() {
			@Override
			protected void afterHookedMethod(MethodHookParam param) throws Throwable {
				Method method = (Method)param.thisObject;
				String[] array = new String[]{"getDeviceId"};
				String method_name = method.getName();
				if(Arrays.asList(array).contains(method_name)){
					modify = 0;
				}else{
					modify = (Integer) param.getResult();
				}
				super.afterHookedMethod(param);
			}
		});
		 
		XposedHelpers.findAndHookMethod(Modifier.class, "isNative", int.class, new XC_MethodHook() {
			@Override
			protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
				param.args[0] = modify;
				super.beforeHookedMethod(param);
			}
		});
	}
}

文章来源地址https://www.toymoban.com/news/detail-596124.html

到了这里,关于Xposed 框架检测机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [免费专栏] Android安全之Android Xposed插件开发,小白都能看得懂的教程

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球 感谢大家一直以来对我CSDN博客的关注和支持,但

    2024年02月09日
    浏览(45)
  • Xposed Hook不到类报错以及Xposed的Hook方法讲解

    有时候XposedHook会报错,提示找不到类,这个是因为,hook的那个类是其他classloader加载的,这个时候,就需要先hook Application.class下的attach方法,拿到每个ClassLoader,然后再用这个ClassLoder尝试加载自己的目标类,如果成功加载了,那说明这个类就是该classLoader加载的,然后再进行

    2023年04月08日
    浏览(38)
  • Xposed环境安装

    Zygote是Android的核心,每运行一个app,Zygote就会fork一个虚拟机实例来运行app, Xposed Framework深入到了Android核心机制中,通过改造Zygote来实现一些很牛逼的 功能。Zygote的启动配置在init.rc 脚 本 中,由系统启动的时候开启此进程,对应的 执行文件是/system/bin/app_process,这个文件完

    2024年02月16日
    浏览(32)
  • Xposed插件编写

    所需要环境 : jdk sdk xposed激活安装 xposed激活安装 :https://blog.csdn.net/weixin_38927522/article/details/119832717 两个jar包,Bridge是实现,api-82是调用,调用无法查看源代码实现逻辑,故而会小一些,这两个用哪个都可以。 build.gradle下dependencies中引入: 全build.gradle文件如下: ​ 创建a

    2024年02月16日
    浏览(36)
  • 使用Xposed对native进行hook

    Xposed框架可谓是“家喻户晓”的神器,它具有着frida所不具备的持久性(虽然frida也可以通过frida-gadget实现持久化,但没有Xposed使用方便)。当我们需要hook java层的代码时,Xposed使用起来得心应手,但是随着软件开发者的安全意识越来越高,放在java层的核心代码也就越来少,这就

    2024年02月02日
    浏览(35)
  • 太极v14.0.4 免ROOT用Xposed

    一个帮助你免 Root、免解锁免刷机使用 Xposed 模块的 APP 框架。 模块通过它改变系统和应用的行为,既能以传统的 Root/ 刷机方式运作, 也能免 Root/ 免刷机运行;并且它支持 Android 5.0 ~ 11。 简单来说,太极就是个 Xposed 框架,能够加载 Xposed 模块、 修改系统和 APP、拦截方法,执

    2024年02月08日
    浏览(31)
  • 安卓5.0模拟器下安装Xposed和JustTrustMe详细教程解决app某音抓包无网络问题附安装包下载地址

    本篇文章主要介绍如何在安卓5.0模拟器下安装Xposed以及JustTrustMe模块,从而来实现抖音app抓包无网络问题,当然也包括抓包后HTTPS解密问题。 环境 : Android5.0 X86 架构,模拟器使用夜深/雷电均可,也可以使用AS中的VM manager新建安卓模拟器,你也可以使用真机测试但不推荐,毕竟需

    2024年02月02日
    浏览(71)
  • Android Studio Dolphin | 2021.3.1

    以下是 Android Studio 中 Jetpack Compose 的新功能和改进。 Compose 动画协调 现在,如果可组合项预览中描述了动画效果,您可以使用动画预览来一次性检查和协调所有这些动画。您还可以冻结特定动画。 Compose Multipreview 注解 您现在可以定义包含多个预览定义的注解类,并使用该新

    2024年02月05日
    浏览(40)
  • 2022最新Android项目导入过程(以Android studio2021.2.1为例)

    当我们访问别人项目的时候,可能由于别人项目版本太老,总是导入不了。常常报出如下错误。 也就是Android Studio版本不支持。我们通常需要修改一些配置信息才能正确导入。 常见的Android项目结构如图。 【注释】打开类型如图 打开Android studio,新建安卓项目。待自动导入完

    2024年02月05日
    浏览(51)
  • Android Studio Dolphin | 2021.3.1 发布,快来看看有什么更新吧~

    原文链接 :https://developer.android.com/studio/releases 来了来了,Android Studio 又更新啦,本次代号是 Dolphin ,也就是海豚,那么这次的坑会是大海吗? 本次更新主要内容是 Compose、Wear 和 Logcat 上的更新支持 ,可以看到 Compose 生态终于越来越成熟了。 如果你对这上面三部分完全不感

    2023年04月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包