首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snapchat如何检测XPosed框架?

Snapchat如何检测XPosed框架?
EN

Stack Overflow用户
提问于 2016-10-28 07:54:24
回答 3查看 4.7K关注 0票数 7

我试着把Snapchat安装在我的新手机上。但是登录是不可能的,因为Snapchat检测到了。我“理解”了这个限制的原因,尽管我认为这有点太过了,因为我没有在Snapchat中使用。

但我的问题是:他们如何检测框架?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-28 09:38:35

SnapChat使用谷歌的SafetyNet认证API,没有专门检查是否安装了XPosed。SnapChat在应用程序第一次启动时运行SafetyNet。

为了确保SnapChat没有专门检查XPosed框架,我对Snapchat进行了解压缩并运行了grep -lri xposed。搜索没有结果。

检查是否安装了XPosed:

我相信,有很多方法可以检查是否安装了Xposed。我编写了以下方法,如果在设备上找不到null,则获取当前安装的Xposed或返回XposedBridge.jar:

代码语言:javascript
复制
/**
 * Get the current Xposed version installed on the device.
 * 
 * @param context The application context
 * @return The Xposed version or {@code null} if Xposed isn't installed.
 */
public static Integer getXposedVersion(Context context) {
  try {
    File xposedBridge = new File("/system/framework/XposedBridge.jar");
    if (xposedBridge.exists()) {
      File optimizedDir = context.getDir("dex", Context.MODE_PRIVATE);
      DexClassLoader dexClassLoader = new DexClassLoader(xposedBridge.getPath(),
          optimizedDir.getPath(), null, ClassLoader.getSystemClassLoader());
      Class<?> XposedBridge = dexClassLoader.loadClass("de.robv.android.xposed.XposedBridge");
      Method getXposedVersion = XposedBridge.getDeclaredMethod("getXposedVersion");
      if (!getXposedVersion.isAccessible()) getXposedVersion.setAccessible(true);
      return (Integer) getXposedVersion.invoke(null);
    }
  } catch (Exception ignored) {
  }
  return null;
}

据我所知,XposedBridge.jar在/system/framework中一直都有,所以这应该适用于Xposed的正式版本,但在以后的版本中可能会中断。

票数 10
EN

Stack Overflow用户

发布于 2017-01-05 18:14:19

我相信Snapchat使用的是SafetyNet,它也保护安卓支付和口袋妖怪GO。

票数 2
EN

Stack Overflow用户

发布于 2019-09-04 03:59:27

在XposedHelper类中,反射可以检查Xposed

代码语言:javascript
复制
public class XposedHelper {
    private static final String LOGTAG = "XposedHelpers";
    private static final HashMap<String, Field> fieldCache = new HashMap<>();
    private static final HashMap<String, Method> methodCache = new HashMap<>();
    private static final HashMap<String, Constructor<?>> constructorCache = new HashMap<>();
    private static final WeakHashMap<Object, HashMap<String, Object>> additionalFields = new WeakHashMap<>();
    private static final HashMap<String, ThreadLocal<AtomicInteger>> sMethodDepth = new HashMap<>();
}

检查是否包含这些参数中的应用程序信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40300515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档