Обсуждение версии 2.3.4.0 (Enterprise)

Всем привет, обновил сегодня софт и ни с того начали потоки падать( есть у кого также?
 
Пользователи zennodroid!!! Скажите пожалуйста как последние пол года развивается проект???
Раньше знаю было много багов. Как сейчас обстоят дела в целом? И как дела с анонимностью в частности?
Хотел реализовать проект на нем, вот думаю пытаться или нет...
 
  • Спасибо
Реакции: Kiriller
Пользователи zennodroid!!! Скажите пожалуйста как последние пол года развивается проект???
Раньше знаю было много багов. Как сейчас обстоят дела в целом? И как дела с анонимностью в частности?
Хотел реализовать проект на нем, вот думаю пытаться или нет...
Очень хорошо развивается. Баги исправляются быстро, все стабильно работает.
 
  • Спасибо
Реакции: Kiriller
Всем привет, обновил сегодня софт и ни с того начали потоки падать( есть у кого также?
Прошу прощения, комп был нагружен по этому потоки отваливались, разобрался.

Заметил баг после обновы, зенодройд перестал подтягивать правки шаблона, галка в настройках стоит, на предыдущей версии работало нормально.
 
Прошу прощения, комп был нагружен по этому потоки отваливались, разобрался.

Заметил баг после обновы, зенодройд перестал подтягивать правки шаблона, галка в настройках стоит, на предыдущей версии работало нормально.
А что за галка в настройках? Правки шаблона должны подтягиваться автоматически - происходит авто-перекомпиляция шаблона в случае правок. Если это то о чем я написал, то в настройках нет галок регулирующих это поведение.
 
Как подключится к устройству через Wif?
 
Как подключится к устройству через Wif?
Начиная с версий Андроид 11 есть такая возможность. Нужно включить adb wifi в настройках телефона, посмотреть его ip адрес в wifi, в командной строке выполнить: adb connect 192.168.3.47 (ip телефона указать) и устройство появится в списке доступных в ЗенноДроид, к нему будет возможность подключиться. Но следует отметить, что такой метод подключения (через wifi) не относится к достаточно стабильным, следует использовать с осторожностью и пониманием что подключения могут падать.

108058
 
Заметил баг после обновы, зенодройд перестал подтягивать правки шаблона, галка в настройках стоит, на предыдущей версии работало нормально.
Правки шаблона должны подтягиваться без галок.
Просто вы возможно забыли сохранить проект после очередных правок.
 
@Anatoly79 Кубики из примера "получение структуры" криво немного работают.
Если глянуть на строку droid.Hierarchy.GetLayout();
А потом на то, что распарсило, то видно далеко не все парситься в примере.

Там скорее надо подразумевать что это НЕ получение структуры, а получение атрибутов одного элемента.
 
Вот функцию вашу доработал уже сам... Она универсальна даже для Chrome многоуровневого дерева.
Условно - надо еще внешний цикл который ноды перебирает.
@Anatoly79 - с вас пирожок за это)) Принимаю api функцией выполнение JavaScript (очень надо!)

ПОЛНАЯ структура в список:
Развернуть Свернуть Копировать
//Добавлен System.Xml.Linq (Ссылки из GAG)
IZennoList Layout = project.Lists["Layout"];
Layout.Clear();

var droid = instance.DroidInstance;
string source = droid.Hierarchy.GetLayout();

var xDocument = System.Xml.Linq.XDocument.Parse(source);

// Получаем корневой элемент документа
System.Xml.Linq.XElement root = xDocument.Root;

// Получаем все узлы документа
var nodes = xDocument.Descendants();

// Выводим имена всех узлов
foreach (var node in nodes)
{
    var xElement = node;
    var message = "";
    
    message = "Node Name:" + node.Name.ToString();
    Layout.Add(message);
    
    foreach (System.Xml.Linq.XAttribute attr in xElement.Attributes())
    {
        message = "'\tName:" + attr.Name + ", Value:" + attr.Value;
        Layout.Add(message);
    }
}
 
Реально ли внедрить свои куки в браузере?
 
Добрый день, замечает кто утечку памяти? После обновы вроде как фиксанули это но щас снова забивает, 32гб часов за 12, причём в диспетчере не показывает какой процесс потребляет её если даже закрыть все приложения память забита.
 
Добрый день, замечает кто утечку памяти? После обновы вроде как фиксанули это но щас снова забивает, 32гб часов за 12, причём в диспетчере не показывает какой процесс потребляет её если даже закрыть все приложения память забита.
Добрый день! Не замечал такого, скорее всего дело в оптимизации шаблона или слишком большие списки/таблицы
 
Wise Memory Optimizer mojes postaviti stob pameti cistila kajdii 1 ceas ili kak tebe ugodno
 
Реально ли внедрить свои куки в браузере?
Проверка, что кука (TestCookie1) отсутствует:
C#:
Развернуть Свернуть Копировать
var droid = instance.DroidInstance;
var path = droid.App.GetCookiePath("com.android.chrome");
var cookie = droid.Sqlite3.ExecuteQuery(path, "SELECT * FROM cookies WHERE name='TestCookie1'", "-json");
return cookie;
C#:
Развернуть Свернуть Копировать
var droid = instance.DroidInstance;
// Установить sqlite, если еще не установлен
// droid.Sqlite3.Install();
var cookiePath = droid.App.GetCookiePath("com.android.chrome");
var domain = ".test.site";
var top_frame_site_key = "";
var name = "TestCookie1";
var value = "TheCookieValue-1";
var encrypted_value = "";
var path = "/";
var is_secure = Convert.ToInt32(true);
var http_only = Convert.ToInt32(true);
var create_time = DateTime.Now;
var expire_time = create_time.AddDays(1); // +1 day
var has_expires = Convert.ToInt32(true);
var is_persistent = Convert.ToInt32(true);
var priority = 1;
var samesite = 1; //LAX
var source_scheme = 2;
var source_port = 443;
var source_type = 0;
var has_cross_site_ancestor = 1;
//var is_same_party = Convert.ToInt32(false);
var create_time_converted = (((DateTimeOffset)create_time).ToUnixTimeSeconds() + 11644421940) * 1_000_000;
var expire_time_converted = (((DateTimeOffset)expire_time).ToUnixTimeSeconds() + 11644421940) * 1_000_000;
var query = $"INSERT INTO cookies (host_key, top_frame_site_key, name, value, encrypted_value, path, expires_utc, has_expires, is_persistent, priority, samesite, source_scheme, source_port, is_secure, is_httponly, creation_utc, last_access_utc, last_update_utc, source_type, has_cross_site_ancestor) VALUES('{domain}', '{top_frame_site_key}', '{name}', '{value}', '{encrypted_value}', '{path}', {expire_time_converted}, {has_expires}, {is_persistent}, {priority}, {samesite}, {source_scheme}, {source_port}, {is_secure}, {http_only}, {create_time_converted}, {create_time_converted}, {create_time_converted}, {source_type}, {has_cross_site_ancestor});";
return droid.Sqlite3.ExecuteQuery(cookiePath, query);
 
Последнее редактирование:
Подмена параметров на реальных устройствах

Добавлена возможность выполнять скрипты для Frida из проектов. Теперь можно подменять параметры устройств, изменяя значения переменных в шаблоне.

НЕ работает для системных приложений, а так же Chrome.
Unable to find a front-door activity или The connection is closed

т.е. внедряться можно только в примитивные приложения. В более или менее нормальные - к сожалению - не получится.
И подмены параметров тоже не выйдет.
 
НЕ работает для системных приложений, а так же Chrome.
Выполнение скриптов в Chrome точно работает. Например, скрипт для Frida используется в экшене перехват HCaptcha (в Chrome),

Написал простенький скрипт для демонстрации. Ищет classLoader, информативно выводит список всех методов в классе TabWebContentsDelegateAndroidImpl и перехватывает (выводит значение) функции loadingStateChanged (состояние загрузки). Подключаться нужно к запущенному процессу Chrome (кнопка самый верхний).
Скрипт работает на современных версиях Chrome (в Chrome 68, который по умолчанию в Memu, еще не было такого класса)
JavaScript:
Развернуть Свернуть Копировать
var classFactory;
var myClass = 'org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroidImpl';

const classLoaders = Java.enumerateClassLoadersSync();
for (const classLoader in classLoaders) {
    try {
        classLoaders[classLoader].findClass(myClass);  
        classFactory=Java.ClassFactory.get( classLoaders[classLoader]);  
        console.log("Success: " + classLoader + " " + classLoaders[classLoader]);
        break;
     
    } catch (e) { /* console.log( e); */} // ignore
}
if (classFactory == null){console.log('loader not found');}


var MyClass = classFactory.use(myClass);
var methodArr = MyClass.class.getDeclaredMethods();
console.log('---methods ---');
for(var m in methodArr){
    console.log(methodArr[m]);
}
console.log('---methods end---');

var method = MyClass.loadingStateChanged;
    method.implementation = function(b){
    console.log('page loading:' + b);
    method.call(this, b)
}
1687499492745.png
 
Последнее редактирование:
  • Спасибо
Реакции: Kiriller и Iv1
Выполнение скриптов в Chrome точно работает. Например, скрипт для Frida используется в экшене перехват HCaptcha (в Chrome),

Написал простенький скрипт для демонстрации. Ищет classLoader, информативно выводит список всех методов в классе TabWebContentsDelegateAndroidImpl и перехватывает (выводит значение) функции loadingStateChanged (состояние загрузки). Подключаться нужно к запущенному процессу Chrome (кнопка самый верхний).
Скрипт работает на современных версиях Chrome (в Chrome 68, который по умолчанию в Memu, еще не было такого класса)
JavaScript:
Развернуть Свернуть Копировать
var classFactory;
var myClass = 'org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroidImpl';

const classLoaders = Java.enumerateClassLoadersSync();
for (const classLoader in classLoaders) {
    try {
        classLoaders[classLoader].findClass(myClass); 
        classFactory=Java.ClassFactory.get( classLoaders[classLoader]); 
        console.log("Success: " + classLoader + " " + classLoaders[classLoader]);
        break;
    
    } catch (e) { /* console.log( e); */} // ignore
}
if (classFactory == null){console.log('loader not found');}


var MyClass = classFactory.use(myClass);
var methodArr = MyClass.class.getDeclaredMethods();
console.log('---methods ---');
for(var m in methodArr){
    console.log(methodArr[m]);
}
console.log('---methods end---');

var method = MyClass.loadingStateChanged;
    method.implementation = function(b){
    console.log('page loading:' + b);
    method.call(this, b)
}
Посмотреть вложение 108767
@Anatoly79 с возвращением из отпуска))
А для settings как?
 
Выполнение скриптов в Chrome точно работает. Например, скрипт для Frida используется в экшене перехват HCaptcha (в Chrome),

Написал простенький скрипт для демонстрации. Ищет classLoader, информативно выводит список всех методов в классе TabWebContentsDelegateAndroidImpl и перехватывает (выводит значение) функции loadingStateChanged (состояние загрузки). Подключаться нужно к запущенному процессу Chrome (кнопка самый верхний).
Скрипт работает на современных версиях Chrome (в Chrome 68, который по умолчанию в Memu, еще не было такого класса)
JavaScript:
Развернуть Свернуть Копировать
var classFactory;
var myClass = 'org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroidImpl';

const classLoaders = Java.enumerateClassLoadersSync();
for (const classLoader in classLoaders) {
    try {
        classLoaders[classLoader].findClass(myClass); 
        classFactory=Java.ClassFactory.get( classLoaders[classLoader]); 
        console.log("Success: " + classLoader + " " + classLoaders[classLoader]);
        break;
    
    } catch (e) { /* console.log( e); */} // ignore
}
if (classFactory == null){console.log('loader not found');}


var MyClass = classFactory.use(myClass);
var methodArr = MyClass.class.getDeclaredMethods();
console.log('---methods ---');
for(var m in methodArr){
    console.log(methodArr[m]);
}
console.log('---methods end---');

var method = MyClass.loadingStateChanged;
    method.implementation = function(b){
    console.log('page loading:' + b);
    method.call(this, b)
}
Посмотреть вложение 108767
На энтерпрайзе виснет намертво.
На Memu - я и без frida все менять умею) (У вас пример для MEMU)
Но сейчас ТОЛЬКО энтерпрайз и реальные устройства рассматриваются.
Все таки в ветке энтерпрайза пишем...
108769
 
На энтерпрайзе виснет намертво.
На Memu - я и без frida все менять умею) (У вас пример для MEMU)
Но сейчас ТОЛЬКО энтерпрайз и реальные устройства рассматриваются.
Все таки в ветке энтерпрайза пишем...
Телефон с Chrome 114:
1687513327897.png

Попробуйте удалить блок с перечислением методов.
JavaScript:
Развернуть Свернуть Копировать
var classFactory;
var myClass = 'org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroidImpl';

const classLoaders = Java.enumerateClassLoadersSync();
for (const classLoader in classLoaders) {
    try {
        classLoaders[classLoader].findClass(myClass); 
        classFactory=Java.ClassFactory.get( classLoaders[classLoader]); 
        console.log("Success: " + classLoader + " " + classLoaders[classLoader]);
        break;
    
    } catch (e) { /* console.log( e); */} // ignore
}
if (classFactory == null){console.log('loader not found');}

var MyClass = classFactory.use(myClass);
var method = MyClass.loadingStateChanged;
    method.implementation = function(b){
    console.log('page loading:' + b);
    method.call(this, b)
}
 
Не совсем понял. Можно поподробнее или это вопрос про бэкап com.android.setting?
Если выйти на более высокий уровень проблемы то:
1. IMEI и другие параметры читаться в том числе через системные функции. Типа *#06# - Как их подменять? Сколько я понимаю - данные о них хранятся в com.android.setting (и props, которые на реальной устройстве многие закрыты на запись)
2. Акаунты телефона хранятся вроде тоже в com.android.setting и gms - когда добавляешь аки, то может ругаться довольно быстро. Там тоже надо подменять.
3. Так же данные об устройстве тянет Chrome (тут сохранение данных работает)

Вот для всех случаем надо:
1. Подменять
2. Сохранять данные
3. Восстанавливать.

Прошу по всем случаям подсказать "как" это делать правильно, чтобы работало.
 
  • Спасибо
Реакции: Kiriller
Если выйти на более высокий уровень проблемы то:
1. IMEI и другие параметры читаться в том числе через системные функции. Типа *#06# - Как их подменять? Сколько я понимаю - данные о них хранятся в com.android.setting (и props, которые на реальной устройстве многие закрыты на запись)
2. Акаунты телефона хранятся вроде тоже в com.android.setting и gms - когда добавляешь аки, то может ругаться довольно быстро. Там тоже надо подменять.
3. Так же данные об устройстве тянет Chrome (тут сохранение данных работает)

Вот для всех случаем надо:
1. Подменять
2. Сохранять данные
3. Восстанавливать.

Прошу по всем случаям подсказать "как" это делать правильно, чтобы работало.
Реальной "Подмены" скорее всего не будет ........
 
1. IMEI и другие параметры читаться в том числе через системные функции. Типа *#06# - Как их подменять? Сколько я понимаю - данные о них хранятся в com.android.setting (и props, которые на реальной устройстве многие закрыты на запись)
*#06# по идее подменяется обычным хуком. Возможно речь про MIUI?
 
Так будет работать?
JavaScript:
Развернуть Свернуть Копировать
var TelephonyManager = Java.use('miui.telephony.TelephonyManagerEx');
TelephonyManager.getImeiList.implementation = function(){
    console.log("Hook IMEI");
    var list = TelephonyManager.getImeiList.call(this);
    list.set(0, "860000000000000")
    list.set(1, "990000000000000")
    return list;
};
 
Проверка, что кука (TestCookie1) отсутствует:
C#:
Развернуть Свернуть Копировать
var droid = instance.DroidInstance;
var path = droid.App.GetCookiePath("com.android.chrome");
var cookie = droid.Sqlite3.ExecuteQuery(path, "SELECT * FROM cookies WHERE name='TestCookie1'", "-json");
return cookie;
C#:
Развернуть Свернуть Копировать
var droid = instance.DroidInstance;
// Установить sqlite, если еще не установлен
// droid.Sqlite3.Install();
var cookiePath = droid.App.GetCookiePath("com.android.chrome");
var domain = ".test.site";
var top_frame_site_key = "";
var name = "TestCookie1";
var value = "TheCookieValue-1";
var encrypted_value = "";
var path = "/";
var is_secure = Convert.ToInt32(true);
var http_only = Convert.ToInt32(true);
var create_time = DateTime.Now;
var expire_time = create_time.AddDays(1); // +1 day
var has_expires = Convert.ToInt32(true);
var is_persistent = Convert.ToInt32(true);
var priority = 1;
var samesite = 1; //LAX
var source_scheme = 2;
var source_port = 443;
var source_type = 0;
var has_cross_site_ancestor = 1;
//var is_same_party = Convert.ToInt32(false);
var create_time_converted = (((DateTimeOffset)create_time).ToUnixTimeSeconds() + 11644421940) * 1_000_000;
var expire_time_converted = (((DateTimeOffset)expire_time).ToUnixTimeSeconds() + 11644421940) * 1_000_000;
var query = $"INSERT INTO cookies (host_key, top_frame_site_key, name, value, encrypted_value, path, expires_utc, has_expires, is_persistent, priority, samesite, source_scheme, source_port, is_secure, is_httponly, creation_utc, last_access_utc, last_update_utc, source_type, has_cross_site_ancestor) VALUES('{domain}', '{top_frame_site_key}', '{name}', '{value}', '{encrypted_value}', '{path}', {expire_time_converted}, {has_expires}, {is_persistent}, {priority}, {samesite}, {source_scheme}, {source_port}, {is_secure}, {http_only}, {create_time_converted}, {create_time_converted}, {create_time_converted}, {source_type}, {has_cross_site_ancestor});";
return droid.Sqlite3.ExecuteQuery(cookiePath, query);

Что-то не подгружается куки с дешифрованным параметром value
 

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