我尝试在我新植入的Xposed智能手机上安装Snapchat。但是,当Snapchat检测到Xposed Framework时,登录是不可能的。 我了解"这种限制的原因,即使我认为它有点太多,因为我没有使用Xposed for Snapchat。
但我的问题是:他们如何检测框架?
答案 0 :(得分:8)
SnapChat使用Google的SafetyNet Attestation API,但没有专门检查是否安装了XPosed。 SnapChat在第一次启动应用程序时运行SafetyNet。
为了确保SnapChat没有专门检查XPosed框架,我反编译Snapchat并运行grep -lri xposed
。搜索结果没有结果。
我确信有很多方法可以检查是否安装了Xposed。我编写了以下方法来获取当前安装的Xposed版本,如果在设备上找不到XposedBridge.jar,则返回null
:
/**
* 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;
}
据我所知,Xposed总是在/ system / framework中使用XposedBridge.jar,所以这应该适用于Xposed的官方版本,但在将来的版本中可能会中断。
答案 1 :(得分:2)
我相信Snapchat使用SafetyNet,这个API也可以保护Android Pay和Pokemon GO。
答案 2 :(得分:0)
在XposedHelper类中,可以通过反射检查Xposed
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<>();
}
检查这些参数中是否包含您的应用信息。