Как Snapchat обнаруживает XPposed Framework?
Я попытался установить Snapchat на мой недавно укоренившийся смартфон Xposed. Но вход в систему невозможен, поскольку Snapchat обнаруживает Xposed Framework. Я "понимаю" причину этого ограничения, хотя думаю, что это слишком много, поскольку я не использую Xposed для Snapchat.
Но мой вопрос: как они обнаруживают Framework?
2 ответа
Snapchat использует Google Аттестацию SafetyNet API и не проверяет, установлен ли XPposed. Snapchat запускает SafetyNet при первом запуске приложения.
Чтобы убедиться, что Snapchat специально не проверяет среду XPposed, я декомпилировал Snapchat и запустил grep -lri xposed
, Поиск не дал результатов.
Проверка, установлен ли XPposed:
Я уверен, что есть много способов проверить, установлен ли Xposed. Я написал следующий метод, который получает текущую версию Xposed или возвращает null
если XposedBridge.jar не был найден на устройстве:
/**
* 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 всегда имел XposedBridge.jar в /system/framework, так что это должно работать для официальных выпусков Xposed, но может сломаться в будущих выпусках.
Я считаю, что Snapchat использует SafetyNet, API, который также защищает Android Pay и Pokemon GO.
Xposed можно проверить отражением, в классе XposedHelper
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<>();
}
проверьте, содержит ли этот параметр информацию о вашем приложении.