3 место Автоматизация Android без посредников. Часть 2.

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

WLDN

Client
Регистрация
09.07.2015
Сообщения
358
Реакции
571
Баллы
93
77575


Привет, друзья. :az:

Я подготовил вам новую порцию информации об Android для того, чтобы вы переварили её и сделали exxxtraCash$$$$$.
Для удобства вторая часть будет содержать несколько пунктов:
  1. Подмена запросов
  2. Работа со смартфонами в многопотоке
  3. Бонус

Подмена запросов
У ZennoPoster есть прекрасный метод для подмены запросов. С помощью него вы можете заменить в запросе те параметры, которые не удалось заменить штатным методом и, например, обойти защиту какого-либо сайта. Также имеется отличный метод для получения запросов в переменную.

Но что делать, если речь идёт об Android? Как подменить и вытащить запросы из эмулятора?
Для этого мы можем использовать библиотеку FiddlerCore.
Наверное кто-то из вас пользовался или активно пользуется Fiddler, так вот у них есть ещё и библиотека, которую вы можете внедрить в свой шаблон и делать с трафиком всё что вам вздумается.

Для вас я написал удобный код для работы с библиотекой. Рассмотрим принцип его работы.
Скачивайте шаблон, устанавливайте adb и софт, закидывайте dll в ExternalAssemblies.
В предыдущей статье есть инструкция и пояснения к шаблону.

В шаблоне вы найдете 2 новых кубика:
Start Fiddler - запускает сервер и асинхронный код для работы с трафиком,
Stop Fiddler - закрывает сервер и останавливает асинхронный код.

77577


В общем коде вы можете найти класс Fid с методами:
Start:
Start:
Развернуть Свернуть Копировать
public void Start(){
            FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest; //Выполнение кода до запроса
            FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse; //Выполнение кода после запроса
            FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete; //Выполнение по завершению сессии (сессия это когда запрос полностью был получен)
            try {
                FiddlerApplication.Startup(8888, false, true, true); //запуск Fiddler сервера с настройками (порт, установить сервер в системные настройки, включить дешифровку ssl трафика, принимать удаленные подключения)
            } catch (Exception e) {}
         
        }

Stop:
Stop:
Развернуть Свернуть Копировать
public void Stop(bool server_deactivate){
            FiddlerApplication.BeforeRequest -= FiddlerApplication_BeforeRequest; //Отключение асинхронного кода до запроса
            FiddlerApplication.BeforeResponse -= FiddlerApplication_BeforeResponse; //Отключение асинхронного кода после запроса
            FiddlerApplication.AfterSessionComplete -= FiddlerApplication_AfterSessionComplete; //Отключение асинхронного кода по завершению сессии
         
            if (FiddlerApplication.IsStarted() && server_deactivate == true) // Отключение
                FiddlerApplication.Shutdown();  // Fiddler Server
        }

B внутри методы, в которых вам нужно писать свой код:
Method:
Развернуть Свернуть Копировать
        void FiddlerApplication_BeforeRequest(Session oSession){
            }
     
        void FiddlerApplication_BeforeResponse(Session oSession){
        }
     
        void FiddlerApplication_AfterSessionComplete(Session oSession){
            }
        }

Для примера я сделал и оставил замену некоторых значений для приложения TikTok:
  • замена названия модели (FiddlerApplication_BeforeRequest)
  • подмена в теле запроса (FiddlerApplication_BeforeRequest)
  • парсинг ссылок картинок (FiddlerApplication_AfterSessionComplete)

Для того чтобы писать код вам потребуется небольшие знания C# и для удобного тестинга можно использовать Fiddler и Fiddler ScriptEditor (см. Видео).

К сожалению, некоторые приложения шифруют тела запросов и вам придется поковыряться в прилке, чтобы удалить шифрование, либо использовать Frida для подмены функций.


Работа со смартфонами в многопотоке
В шаблоне я оставил несколько новых кубиков для работы со смартфонами.
77579


Но чтобы всё нормально работало вам нужно закомментировать и раскомментировать указанные части кода в общем коде.

Смысл работы абсолютно такой же как и в версии для эмуляторов:
  • Алгоритм получает список всех девайсов через adb
  • По порядку проверяет свободные серийники для взятия в работу. Если их нет в глобальной переменной, то берёт.
  • Отправляет значение серийника в переменную, чтобы подключить телефон по adb

Бонус
В прошлой статье многие жаловались, что невозможно работать с русскоязычными прилками.
Я немного подредактировал SharpAdbClient.dll для того, чтобы это работало.

Также добавил блок с установкой Clipper. Он нужен для того, чтобы вытаскивать значения из буфера обмена и вносить в переменную.
В кубике есть пример установки приложения через специальный кубик, если PacketManager не работает на вашем смартфоне.


Видео



Если вам понравилась моя статья, то буду безмерно рад вашим лайкам и голосам!:-)
 
Номер конкурса статей
  1. Пятнадцатый конкурс статей
Тема статьи
  1. Другое

Вложения

Последнее редактирование:
Спасибо! Раньше для подмены задействовал fiddlerscript, но использование напрямую библиотеки значительно все упрощает)
 
  • Спасибо
Реакции: WLDN
Полезная вещь.:ay: Из прошлой части много полезного взял. :az:
 
  • Спасибо
Реакции: WLDN и lybimiy86
В предыдущей статье автора Автоматизация Android без посредников. Часть 1. Я оставлял свой отзыв в котором написал:
Судя по темам автора - он может написать гораздо более интересную статью, чего я конечно и желаю в будущем.
Чтож - это именно та статья, на которую я дал напутствие.
По-своему роду уникальная статья, аналогов которой ещё небыло на форуме. Надеюсь разработчики тоже это понимают и не обделят тебя вниманием, а может и возьмут этот инструмент на вооружение для допиливания Zennodroid

Браво Маэстро! Мой голос критика - теперь твой! Голосуем за тебя всем чатом.
 
  • Спасибо
Реакции: WLDN
будем ждать продолжения! Спасибо)
 
  • Спасибо
Реакции: WLDN
Просто супер! Голосую за тебя:ay:
 
  • Спасибо
Реакции: WLDN
Однозначно голосую!
 
  • Спасибо
Реакции: WLDN
Срочно надо купить зенку чтобы голос за тебя учли))))) Спасибо, красавчик!
 
  • Спасибо
Реакции: WLDN
Сорян не вникал - это зенноПостер или Дроид?
Спасибо!
 
  • Спасибо
Реакции: WLDN
Спасибо за статью, очень пригодилась. Только не могу понять как использовать проксю при работе с эмулятором android. Если через настройки wi-fi в эмуляторе, тогда через fiddler не получится ловить запросы.
 
  • Спасибо
Реакции: WLDN
Напиши пожалуйста, код для получения ответа запроса в переменную. У самого что-то не выходит(
 
Последнее редактирование:
  • Спасибо
Реакции: WLDN
Спасибо за статью, очень пригодилась. Только не могу понять как использовать проксю при работе с эмулятором android. Если через настройки wi-fi в эмуляторе, тогда через fiddler не получится ловить запросы.
Привет, спасибо. Попробуй узнать точный локальный IP пк с которого ты запускаешь эмулятор. Должно получиться, если делать так как в видео.
 
Напиши пожалуйста, код для получения ответа запроса в переменную. У самого что-то не выходит(
Я думаю что так.

project.Variable["название_переменной"].Value = oSession.GetResponseBodyAsString();

в этом случае ты будешь получать все тела запросов, которые будет ловить фидлер. Чтобы взять конкретный, нужно написать условие перед этим кодом как в примере.

Вот так отправляет все тела запросов в FiddlerScript'е в лог:
FiddlerApplication.Log.LogString(oSession.GetResponseBodyAsString());
 
  • Спасибо
Реакции: trecho и kane16
Спасибо за статью, очень пригодилась. Только не могу понять как использовать проксю при работе с эмулятором android. Если через настройки wi-fi в эмуляторе, тогда через fiddler не получится ловить запросы.
Пробрось fiddler с помощью ProxyCap на свою проксю.
 
Ура! Поддержка русского добавлена!
Спасибо!
 
  • Спасибо
Реакции: WLDN
Как установить прокси ? Это самый главный вопрос
 
Как установить прокси ? Это самый главный вопрос
Привет.

Несколько вариантов:
- Автоматизировать установку прокси в Wi-Fi настройках.
- Использовать команду:
adb shell settings put global http_proxy <ip>:<port>
- Использовать апк по типу ProxyDroid
- Использовать Proxifier с моб проксями
- Приобрести мой плагин Droxy
- Изучить вопрос и написать самостоятельно программу для проксирования (без шуток)
 
  • Спасибо
Реакции: westruk
Привет.

Несколько вариантов:
- Автоматизировать установку прокси в Wi-Fi настройках.
- Использовать команду:
adb shell settings put global http_proxy <ip>:<port>
- Использовать апк по типу ProxyDroid
- Использовать Proxifier с моб проксями
- Приобрести мой плагин Droxy
- Изучить вопрос и написать самостоятельно программу для проксирования (без шуток)
Как преобрести и есть ли возможность потестить?
 
Привет.

Несколько вариантов:
- Автоматизировать установку прокси в Wi-Fi настройках.
- Использовать команду:
adb shell settings put global http_proxy <ip>:<port>
- Использовать апк по типу ProxyDroid
- Использовать Proxifier с моб проксями
- Приобрести мой плагин Droxy
- Изучить вопрос и написать самостоятельно программу для проксирования (без шуток)
Здравствуйте, а есть ли код для выключения эмуялтора?
 
Замечательная статья! Буду с нетерпением ждать продолжения.
 
  • Спасибо
Реакции: WLDN
Здравствуйте, а есть ли код для выключения эмуялтора?
Здравствуйте, в предыдущей статье рассматривал этот вопрос, если мне не изменяет память. Выключить можно разными способами, я лично делал через kill process
 
Правильно ли я понял. что сторонний прокси в данной схеме использовать не получиться? т.к локальный от фидлера будет использоваться
 
Последнее редактирование:
Del.
 
Последнее редактирование:
Можноли поймать дамп в переменую с екрана сматфона?
По типу команди
adb -s {-Variable.adb_name_devices-} shell uiautomator dump
 
Можноли поймать дамп в переменую с екрана сматфона?
По типу команди
adb -s {-Variable.adb_name_devices-} shell uiautomator dump
Взять команду дампа из общего кода и запихнуть в кубик a.Command, не забыть поставить true. В переменной Receiver появится содержимое xml дампа
 

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