《xp过堆栈检测app(XP过检测)》是一种软件应用程序,旨在帮助开发人员检测和解决在应用程序中可能出现的堆栈溢出错误。堆栈溢出是一种常见的编程错误,当一个函数递归调用自己或者太多函数被嵌套调用时,会导致堆栈溢出。这会导致程序崩溃或者产生不确定的行为,从而导致数据丢失或系统不稳定。
越来越多的app对xposed进行了检测
通过分析了其中部分对xposed检查的代码,希望通过xposed的方式阻止xposed检测达到通用的目的。
一般检查手段有很多,楼主也没分析完,这里列举了几个和处理方式。
1、通过 ClassLoader 的 loadClass 加载XposedHelper 来修改一些局部变量值,阻止hook.
处理方式,通过Hook 类加载修改 加载的类名
2、通过 代码抛出一个异常,在堆栈中,查找Xposed相关的内容,进行判定处理方式,通过Hook堆栈获取类名替换的方式进行阻止
3、通过读取 shell 命令 /proc/pid(应用进程id)/maps 可以拿到当前上下文的so和jar列表,查找Xposed相关
处理方式,楼主看到大部分多试通过使用 BufferedReader进行读取命令的内容,过滤掉 XposedBridge.jar就好。
绕过签名验证
隐藏你指定的应用
隐藏模拟位置
隐藏xposed框架
隐藏root
过滤Error级别的日志,得到以下信息:
导出/data/tombstones/tombstone_18到电脑,查看内存(方法栈)(也可以用MT管理器直接在模拟器或者手机上查看):
首先通过java.lang.Thread.currentThread获得当前线程对象,然后调用getStackTrace获得StackTraceElement数组,遍历该数组,调用getClassName,再判断是否包含xposed
定位xposed检测
通过Xposed框架进行hook这个app中的Thread.getStackTrace,打印调用栈(函数返回值):
(如果需要Hook这个app的StackTraceElement.getClassName,打印返回值即可)
打印的日志如下:
通过日志信息,可以看到调用者是java.lang.Runtime.nativeLoad,即so加载时调用(在Native层通过JNI方式进行调用getStackTrace)
分析dex文件
通过使用JEB反编译(也可以用androidkiller、jadx等工具反编译dex文件)classes.dex,通过字符串 的关键信息可以定位到com.secneo.apkwrapper.AW.attachBaseContext:
可以看到加载的是libDexHelper.so(旧版本是在加载,现在改到attachBaseContext了)
由so的加载流程可知,在so中的检测函数的调用要么是在JNI_OnLoad,要么是在.init或.init_array区段。
通过使用IDA动态调试APP,发现该加固是在JNI_OnLoad中调用检测函数(这里怎么用ida动态调试apk就不细分析)。
由于最终还是要调用Java层的getClassName方法,考虑到通用性,可以编写Xposed模块,绕过堆栈检测xposed框架
检测的绕过
XposedHookStackTraceElement.getClassName方法,判断是否包含xposed,如果包含则替换返回值为android.os.Handler
注意:需要在DexHelper加载前Hook,因为该加固是在JNI_OnLoad中调用检测函数。
上面代码是简单的xposed的hook代码功能。
1、为部分插件提供启用/禁用免重启支持
2、为部分插件提供插件教程
3、为插件增加评论评分功能
4、修复部分Bug,提升体验
5、新增设置功能在管理页面,支持下载、安装等相关设置
6、新增插件忽略/取消忽略更新功能
7、新增低电量时框架安装保护机制
8、新增用户反馈功能
XP过堆栈检测app使用一种静态代码分析技术,扫描整个代码库以寻找潜在的堆栈溢出错误。它会检查函数调用链的深度,以及递归调用的情况。如果检测到潜在的堆栈溢出风险,它会发出警告,并提供可能的修改建议。
玩家留言
跟帖评论