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

ZennoLab Team

Super Moderator
Команда форума
Регистрация
22.01.2019
Сообщения
1 225
Благодарностей
3 368
Баллы
113

sergeypetrovq

Client
Регистрация
20.04.2023
Сообщения
7
Благодарностей
1
Баллы
3
Всем привет, обновил сегодня софт и ни с того начали потоки падать( есть у кого также?
 

takerz

Client
Регистрация
02.07.2016
Сообщения
179
Благодарностей
23
Баллы
18
Пользователи zennodroid!!! Скажите пожалуйста как последние пол года развивается проект???
Раньше знаю было много багов. Как сейчас обстоят дела в целом? И как дела с анонимностью в частности?
Хотел реализовать проект на нем, вот думаю пытаться или нет...
 
  • Спасибо
Реакции: Kiriller

Ysocnet

Client
Регистрация
24.09.2019
Сообщения
92
Благодарностей
54
Баллы
18
Пользователи zennodroid!!! Скажите пожалуйста как последние пол года развивается проект???
Раньше знаю было много багов. Как сейчас обстоят дела в целом? И как дела с анонимностью в частности?
Хотел реализовать проект на нем, вот думаю пытаться или нет...
Очень хорошо развивается. Баги исправляются быстро, все стабильно работает.
 
Регистрация
23.12.2014
Сообщения
502
Благодарностей
128
Баллы
43
  • Спасибо
Реакции: Kiriller

sergeypetrovq

Client
Регистрация
20.04.2023
Сообщения
7
Благодарностей
1
Баллы
3
Всем привет, обновил сегодня софт и ни с того начали потоки падать( есть у кого также?
Прошу прощения, комп был нагружен по этому потоки отваливались, разобрался.

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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 461
Благодарностей
8 686
Баллы
113
Прошу прощения, комп был нагружен по этому потоки отваливались, разобрался.

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

lasrtkil

Новичок
Регистрация
18.12.2022
Сообщения
1
Благодарностей
0
Баллы
1
Как подключится к устройству через Wif?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 461
Благодарностей
8 686
Баллы
113
Как подключится к устройству через Wif?
Начиная с версий Андроид 11 есть такая возможность. Нужно включить adb wifi в настройках телефона, посмотреть его ip адрес в wifi, в командной строке выполнить: adb connect 192.168.3.47 (ip телефона указать) и устройство появится в списке доступных в ЗенноДроид, к нему будет возможность подключиться. Но следует отметить, что такой метод подключения (через wifi) не относится к достаточно стабильным, следует использовать с осторожностью и пониманием что подключения могут падать.

108058
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 461
Благодарностей
8 686
Баллы
113
Заметил баг после обновы, зенодройд перестал подтягивать правки шаблона, галка в настройках стоит, на предыдущей версии работало нормально.
Правки шаблона должны подтягиваться без галок.
Просто вы возможно забыли сохранить проект после очередных правок.
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 913
Благодарностей
747
Баллы
113
@Anatoly79 Кубики из примера "получение структуры" криво немного работают.
Если глянуть на строку droid.Hierarchy.GetLayout();
А потом на то, что распарсило, то видно далеко не все парситься в примере.

Там скорее надо подразумевать что это НЕ получение структуры, а получение атрибутов одного элемента.
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 913
Благодарностей
747
Баллы
113
Вот функцию вашу доработал уже сам... Она универсальна даже для 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);
    }
}
 
Регистрация
23.12.2014
Сообщения
502
Благодарностей
128
Баллы
43
Реально ли внедрить свои куки в браузере?
 

sergeypetrovq

Client
Регистрация
20.04.2023
Сообщения
7
Благодарностей
1
Баллы
3
Добрый день, замечает кто утечку памяти? После обновы вроде как фиксанули это но щас снова забивает, 32гб часов за 12, причём в диспетчере не показывает какой процесс потребляет её если даже закрыть все приложения память забита.
 
Регистрация
23.12.2014
Сообщения
502
Благодарностей
128
Баллы
43
Добрый день, замечает кто утечку памяти? После обновы вроде как фиксанули это но щас снова забивает, 32гб часов за 12, причём в диспетчере не показывает какой процесс потребляет её если даже закрыть все приложения память забита.
Добрый день! Не замечал такого, скорее всего дело в оптимизации шаблона или слишком большие списки/таблицы
 

apalon

Активный пользователь
Регистрация
01.06.2015
Сообщения
158
Благодарностей
33
Баллы
28
Wise Memory Optimizer mojes postaviti stob pameti cistila kajdii 1 ceas ili kak tebe ugodno
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63
Реально ли внедрить свои куки в браузере?
Проверка, что кука (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.com";
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 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, is_same_party, creation_utc, last_access_utc, last_update_utc) 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}, {is_same_party}, {create_time_converted}, {create_time_converted}, {create_time_converted});";
return droid.Sqlite3.ExecuteQuery(cookiePath, query);
 
Последнее редактирование:
  • Спасибо
Реакции: Мамикон и Kiriller

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 913
Благодарностей
747
Баллы
113
Подмена параметров на реальных устройствах

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

т.е. внедряться можно только в примитивные приложения. В более или менее нормальные - к сожалению - не получится.
И подмены параметров тоже не выйдет.
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63
НЕ работает для системных приложений, а так же 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

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 913
Благодарностей
747
Баллы
113
Выполнение скриптов в 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 как?
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 913
Благодарностей
747
Баллы
113
Выполнение скриптов в 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
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63
На энтерпрайзе виснет намертво.
На 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)
}
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63

Iv1

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

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

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

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

Прошу по всем случаям подсказать "как" это делать правильно, чтобы работало.
Реальной "Подмены" скорее всего не будет ........
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63
1. IMEI и другие параметры читаться в том числе через системные функции. Типа *#06# - Как их подменять? Сколько я понимаю - данные о них хранятся в com.android.setting (и props, которые на реальной устройстве многие закрыты на запись)
*#06# по идее подменяется обычным хуком. Возможно речь про MIUI?
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 913
Благодарностей
747
Баллы
113

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63
Так будет работать?
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;
};
 

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