Как 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<>();
}

проверьте, содержит ли этот параметр информацию о вашем приложении.

Другие вопросы по тегам