Подмена разрешения экрана на реальном устройстве (ZDE + Frida)

  • Автор темы Автор темы 3bdhmgc7
  • Дата начала Дата начала

3bdhmgc7

Новичок
Регистрация
29.05.2023
Сообщения
1
Реакции
0
Баллы
1
Приветствую всех, столкнулся с такой проблемой, как подмена разрешения экрана на реальном устройстве с помощью инжекта кода Frida
Проблема в том, что приложение вызывает функцию getWindowManager и я так полагаю, что при получении разрешения экрана, оно не вызывает функцию getMetrics, предположительно, оно используется функцию getDefaultDisplay() и получает оттуда данные, подмена функции и значений в getMetrics не дает результатов, приложение все равно видит оригинальные параметры устройства, изменить данные в getDefaultDisplay к сожалению я не нашел как
JavaScript:
Развернуть Свернуть Копировать
Java.perform(function() {
try {

    var display = Java.use('android.view.Display');
    var Activity = Java.use("android.app.Activity");

    display.getMetrics.overload('android.util.DisplayMetrics').implementation = function(metrics) {
        console.log('android.util.DisplayMetrics getMetrics');
        this.getMetrics(metrics);
        metrics.widthPixels.value = 1920;
        metrics.heightPixels.value = 1080;
        metrics.densityDpi.value = 420;
    }

    Activity.getWindowManager.implementation = function() {
        console.log('getWindowManager');

        var windowManager = this.getWindowManager();
        var display = windowManager.getDefaultDisplay();
        var metrics = Java.use("android.util.DisplayMetrics").$new();

        display.getMetrics(metrics);

        console.log(windowManager.getDefaultDisplay());

        metrics.widthPixels.value = 1920;
        metrics.heightPixels.value = 1080;
        metrics.densityDpi.value = 420;

        console.log(metrics);

        console.log(windowManager.getDefaultDisplay());

        return windowManager;
    };

    } catch (error) {
        console.log('Msg:' + error.stack)
    }

});
 
а без фриды как менять разрешение?
 
а без фриды как менять разрешение?
через adb команду

Так ставить

C#:
Развернуть Свернуть Копировать
instance.DroidInstance.Input.Shell($"adb shell wm size {project.Profile.DisplayWidth}x{project.Profile.DisplayHeight}", 10000);
instance.DroidInstance.Input.Shell($"adb shell wm density {project.Profile.DisplayDensity}", 10000);
instance.DroidInstance.Screen.ResetScreen();

Так сбрасывать


C#:
Развернуть Свернуть Копировать
instance.DroidInstance.Input.Shell($"adb shell wm size reset", 10000);
instance.DroidInstance.Input.Shell($"adb shell wm density reset", 10000);
instance.DroidInstance.Screen.ResetScreen();
 
Последнее редактирование:
Спасибо, а есть ли вариант подменить только для приложения, чтобы оно думало что разрешение заданное, а по факту не менять его? летят скрипты часто от реального изменения экрана, особенно клик по картинке
 
Последнее редактирование:
Спасибо, а есть ли вариант подменить только для приложения, чтобы оно думало что разрешение заданное, а по факту не менять его? летят скрипты часто от реального изменения экрана, особенно клик по картинке
не пробовал, у меня ничего не летит, главное разрешение не ставить больше фактического на устройстве
 
не пробовал, у меня ничего не летит, главное разрешение не ставить больше фактического на устройстве
пропорции меняются, размер кнопок тоже и поэтому уже не срабатывают клики по картинке, приходится играться с параметрами и то не всегда помогает, или до кнопки уже надо свайпать, а этого нет в проекте, некоторые браузеры не отдают дерево к сожалению(
профиль кстати генерирует всегда одно и тоже разрешение у меня почему-то и оно ниже нужного, твой файл выручает с моделями и разрешениями
 
Последнее редактирование:
пропорции меняются, размер кнопок тоже и поэтому уже не срабатывают клики по картинке, приходится играться с параметрами и то не всегда помогает, или до кнопки уже надо свайпать, а этого нет в проекте, некоторые браузеры не отдают дерево к сожалению(
профиль кстати генерирует всегда одно и тоже разрешение у меня почему-то и оно ниже нужного, твой файл выручает с моделями и разрешениями
ну собственно файл для этого и сделан, когда зенодроид генерирует профиль надо находить это устройство в моём списке и от туда в профиль прописывать параметры экрана, что бы в дальнейшем подмену сделать нормально
 
  • Спасибо
Реакции: nvrskozzy
ну собственно файл для этого и сделан, когда зенодроид генерирует профиль надо находить это устройство в моём списке и от туда в профиль прописывать параметры экрана, что бы в дальнейшем подмену сделать нормально
непонятно почему зенно не занесли к себе в базу твой файл)
 
Последнее редактирование:
не пробовал, у меня ничего не летит, главное разрешение не ставить больше фактического на устройстве
Если поставить больше фактического чем это может навредить?
 
wm size/density меняет параметры системно, поэтому и «едут» клики/поиск по картинке. Если нужно только чтобы конкретное приложение «думало» другое разрешение — это делается перехватом точек чтения метрик в процессе приложения: в первую очередь Resources.getDisplayMetrics() / Context.getResources(), Display.getRealMetrics()/getMetrics(), а на Android 11+ ещё WindowManager.getCurrentWindowMetrics() (bounds). Часто одного width/height мало — подменяйте также densityDpi
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)