- Регистрация
- 22.01.2019
- Сообщения
- 1 356
- Благодарностей
- 3 561
- Баллы
- 113
Очень хорошо развивается. Баги исправляются быстро, все стабильно работает.Пользователи zennodroid!!! Скажите пожалуйста как последние пол года развивается проект???
Раньше знаю было много багов. Как сейчас обстоят дела в целом? И как дела с анонимностью в частности?
Хотел реализовать проект на нем, вот думаю пытаться или нет...
Отпишитесь администрации и отправьте подробный логВсем привет, обновил сегодня софт и ни с того начали потоки падать( есть у кого также?
Прошу прощения, комп был нагружен по этому потоки отваливались, разобрался.Всем привет, обновил сегодня софт и ни с того начали потоки падать( есть у кого также?
А что за галка в настройках? Правки шаблона должны подтягиваться автоматически - происходит авто-перекомпиляция шаблона в случае правок. Если это то о чем я написал, то в настройках нет галок регулирующих это поведение.Прошу прощения, комп был нагружен по этому потоки отваливались, разобрался.
Заметил баг после обновы, зенодройд перестал подтягивать правки шаблона, галка в настройках стоит, на предыдущей версии работало нормально.
Начиная с версий Андроид 11 есть такая возможность. Нужно включить adb wifi в настройках телефона, посмотреть его ip адрес в wifi, в командной строке выполнить:Как подключится к устройству через Wif?
adb connect 192.168.3.47
(ip телефона указать) и устройство появится в списке доступных в ЗенноДроид, к нему будет возможность подключиться. Но следует отметить, что такой метод подключения (через wifi) не относится к достаточно стабильным, следует использовать с осторожностью и пониманием что подключения могут падать.Правки шаблона должны подтягиваться без галок.Заметил баг после обновы, зенодройд перестал подтягивать правки шаблона, галка в настройках стоит, на предыдущей версии работало нормально.
droid.Hierarchy.GetLayout();
Можно пример?А потом на то, что распарсило, то видно далеко не все парситься в примере
Вот функцию вашу доработал уже сам... Она универсальна даже для Chrome многоуровневого дерева.Можно пример?
//Добавлен 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, причём в диспетчере не показывает какой процесс потребляет её если даже закрыть все приложения память забита.
Проверка, что кука (TestCookie1) отсутствует:Реально ли внедрить свои куки в браузере?
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;
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);
НЕ работает для системных приложений, а так же Chrome.Подмена параметров на реальных устройствах
Добавлена возможность выполнять скрипты для Frida из проектов. Теперь можно подменять параметры устройств, изменяя значения переменных в шаблоне.
Unable to find a front-door activity
или The connection is closed
Выполнение скриптов в Chrome точно работает. Например, скрипт для Frida используется в экшене перехват HCaptcha (в Chrome),НЕ работает для системных приложений, а так же Chrome.
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)
}
@Anatoly79 с возвращением из отпуска))Выполнение скриптов в Chrome точно работает. Например, скрипт для Frida используется в экшене перехват HCaptcha (в Chrome),
Написал простенький скрипт для демонстрации. Ищет classLoader, информативно выводит список всех методов в классе TabWebContentsDelegateAndroidImpl и перехватывает (выводит значение) функции loadingStateChanged (состояние загрузки). Подключаться нужно к запущенному процессу Chrome (кнопка самый верхний).
Скрипт работает на современных версиях Chrome (в Chrome 68, который по умолчанию в Memu, еще не было такого класса)
Посмотреть вложение 108767JavaScript: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) }
На энтерпрайзе виснет намертво.Выполнение скриптов в Chrome точно работает. Например, скрипт для Frida используется в экшене перехват HCaptcha (в Chrome),
Написал простенький скрипт для демонстрации. Ищет classLoader, информативно выводит список всех методов в классе TabWebContentsDelegateAndroidImpl и перехватывает (выводит значение) функции loadingStateChanged (состояние загрузки). Подключаться нужно к запущенному процессу Chrome (кнопка самый верхний).
Скрипт работает на современных версиях Chrome (в Chrome 68, который по умолчанию в Memu, еще не было такого класса)
Посмотреть вложение 108767JavaScript: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) }
Телефон с Chrome 114:На энтерпрайзе виснет намертво.
На Memu - я и без frida все менять умею) (У вас пример для MEMU)
Но сейчас ТОЛЬКО энтерпрайз и реальные устройства рассматриваются.
Все таки в ветке энтерпрайза пишем...
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?А для settings как?
Если выйти на более высокий уровень проблемы то:Не совсем понял. Можно поподробнее или это вопрос про бэкап com.android.setting?
Реальной "Подмены" скорее всего не будет ........Если выйти на более высокий уровень проблемы то:
1. IMEI и другие параметры читаться в том числе через системные функции. Типа *#06# - Как их подменять? Сколько я понимаю - данные о них хранятся в com.android.setting (и props, которые на реальной устройстве многие закрыты на запись)
2. Акаунты телефона хранятся вроде тоже в com.android.setting и gms - когда добавляешь аки, то может ругаться довольно быстро. Там тоже надо подменять.
3. Так же данные об устройстве тянет Chrome (тут сохранение данных работает)
Вот для всех случаем надо:
1. Подменять
2. Сохранять данные
3. Восстанавливать.
Прошу по всем случаям подсказать "как" это делать правильно, чтобы работало.
*#06# по идее подменяется обычным хуком. Возможно речь про MIUI?1. IMEI и другие параметры читаться в том числе через системные функции. Типа *#06# - Как их подменять? Сколько я понимаю - данные о них хранятся в com.android.setting (и props, которые на реальной устройстве многие закрыты на запись)
Да, MIUI*#06# по идее подменяется обычным хуком. Возможно речь про MIUI?
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;
};