Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Android + IT

С этим тегом используют

Игры Смартфон Приложение iOS Телефон Google Play iPhone Программирование IT юмор Программист Юмор Работа Картинка с текстом Разработка Все
205 постов сначала свежее
siolz12
siolz12
10 месяцев назад

Google и открытый код⁠⁠

Google и открытый код IT, Android, Apple, Программа, Linux, Windows

google выпустит исходный код android 15 очень скоро.. по информации от издания Android Authority google выпустит исходный код своей новой ос, android 15 уже три сентября. но вот у меня один вопрос к Android Authority а зачем тереть сентябрь.

не смотря на то, что исходный код новой версии android будет 3 сентября, сборки для google pixel будут выпущены в середине, а то и в конце октября.

это подтвердила сама google.

обычно, готовые сборки android выходят в тот день, когда опубликовывается его исходный код.

но в случаи с android 15 есть не большое исключение.

вероятно, оно есть потому-что google не успевает к 3 сентября доделать новый android для pixel чтобы обеспечить хорошую производительность и работоспособность.

так что владельцы смартфонов от google, просто ждём

Показать полностью
IT Android Apple Программа Linux Windows
5
1
AstroGracy
AstroGracy
10 месяцев назад

Все о версиях Windows 11 и как включать незадействованные возможности ОС и выключать ненужные, в том числе в Windows 10⁠⁠

Сегодня у меня задача понятным языком рассказать вам о Windows 11. Всегда непросто описывать современные системы и их текущие версии, - во-первых они слишком быстро меняются, обновляются, устаревают, а, во-вторых, просто накоплено не так много исторических знаний и опыта, что делает суждения более поверхностными и спорными. Для начала я расскажу о глобальных версиях Windows 11, - их всего 4 (в трех ветвях обслуживания). Потом остановлюсь на том, что такое «Моменты» в терминологии Microsoft, когда эти моменты наступали для Windows 11 и что они приносили. Далее я еще усложню рассказ тем, что раскрою секрет Полишинеля, - Microsoft вводит новый функционал не только в новых версиях ОС, не только некими специальными пакетами «моментами», но и простыми кумулятивными обновлениями. Расскажу о том, какие веховые обновления приносили нововведения в ОС (очевидно, что все последующие включают в себя все предшествующее). Ну и чтобы сделать заметку окончательно нечитаемой для рядового пользователя, но, чтобы энтузиасты как раз таки дочитали ее до конца, расскажу, как задействовать новый функционал в Windows 10 и Windows 11, который Microsoft еще автоматом не сделал общедоступным. И что самое важное, расскажу, как отключить новый функционал, если вы предпочитаете классическую реализацию (если такая бинарно еще сохранилась в ОС). Ну что, поехали?

Все о версиях Windows 11 и как включать незадействованные возможности ОС и выключать ненужные, в том числе в Windows 10 IT, Windows, Android, Linux, Программа, Гайд, Длиннопост

Первая финальная сборка Windows 11 21H2 (здесь и далее ссылки на ресурс с описанием нововведений в версиях, моментах и сборках) номером 10.0.22000.51 ветви обслуживания co_release (Cobalt) была собрана 28.06.2021, официально стала доступна 04.10.2021. Версии Home и Pro вышли из официального цикла поддержки 10.10.2023, Enterprise и Education поддерживаются до 08.10.2024. То есть пока обновления выходят, но счет идёт на месяцы, пора переходить на более новую версию, благо — это бесплатно и легко выполнимо, - как через Windows Update, так и установкой поверх новой версии того же языка и издания, - приложения, файлы и активация сохранятся (если вы используете KMS активатор, потребуется повторно им воспользоваться). Почитать о том, что нового было в первой версии Windows 11 в сравнении с Windows 10 можно кроме ссылки выше, еще тут (на английском).

Windows 11 21H2 продолжает получать обновления до сих пор (для корпоративных и образовательных изданий, как я писал выше). За прошедшие три года было выпущено более сотни кумулятивных обновлений, большая часть из которых, как это всегда водилось, исправляли найденные ошибки и уязвимости, но некоторые из них также приносили новый функционал. На сегодня известны 14 сборок, которые Microsoft называет «Feature update» для Windows 11 21H2 (я их называю веховыми сборками). Эти сборки приносили те или иные дополнения в функционал. Заниматься перечислением их я здесь не буду, заинтересовавшиеся могут посмотреть страницу со всеми веховыми сборками Windows 11 21H2, где для каждой дан список нововведений. Очевидно, что так как обновления кумулятивны, установка последнего, в том числе более нового, чем отображенного на странице, даст вам весь функционал предыдущих.

Windows 11 2022 Update, она же Windows 11 22H2, ветки обслуживания ni_release (Nickel) впервые была представлена сборкой 10.0.22621.1 от 11.05.2022. Было выпущено почти две сотни обновлений, система поддерживается до сих пор: домашние версии до 08.10.2024, корпоративные до 14.10.2025. Список нововведений велик. Кроме функционала проведена серьезная работа над ошибками в интерфейсе, - те, кто плевались на интерфейс первой Windows 11 более снисходительны к последующим (причем сейчас речь скорее именно об упрощении излишне сложного оригинального Windows 11 каждой следующей версией).

Как и в случае Windows 10 на базе ядра Vibranium, и сборки 10.0.19041, которая пакетами обновлений плавно перетекала в 10.0.19042, 10.0.19043, 10.0.19044 и 10.0.19045, версия на базе ядра Nickel также развивалась с 10.0.22621 до бета канала 10.0.22622, затем ежегодным обновлением до версии 23H2 (о ней чуть позже) 10.0.22631 и ее бета канала 10.0.22635.

За два года вышло 12 веховых обновлений (список и нововведения смотри тут) из которых 5 были названы «моментами». Тут остановимся чуть подробнее, коротким списком:

Все о версиях Windows 11 и как включать незадействованные возможности ОС и выключать ненужные, в том числе в Windows 10 IT, Windows, Android, Linux, Программа, Гайд, Длиннопост

Те веховые обновления, которые названы «Моментами» имеют в себе больше нововведений, и эти нововведения могут включаться или выключаться (совсем не очевидным образом). Например, начиная с «Момента 1» в Проводнике появилась возможность использовать вкладки – но это не означает, что они сразу у всех появились! В «Моменте 3» появилась поддержка USB 4.0, в «Моменте 4» появился Copilot.
25.05.2023 выходит сборка 22621.1825, которая, если дополнительно установить KB5027397: обновление компонентов до Windows 11 версии 23H2 с помощью пакета включения обновляет систему до Windows 11 2023 Update, она же Windows 11 23H2 (Nickel R2) со сборкой 22631.1825.

Для Windows 11 23H2 на сегодня выходило пять веховых сборки, четыре из пяти являлись также веховыми для 22H2 и один «Момента», также общий с 22H2:

Все о версиях Windows 11 и как включать незадействованные возможности ОС и выключать ненужные, в том числе в Windows 10 IT, Windows, Android, Linux, Программа, Гайд, Длиннопост

Тут обращу внимание, что, например, сборка 22631.3668 является Release Preview для 23H2, но то же самое кумулятивное обновление 22621.3668 для 22H2 является поддерживаемым. С тех пор выходило уже множество сборок обновлений, 22631.3810 включает в себя все возможности и является поддерживаемым.

Наконец, недавно была представлена Windows 11 2024 Update, она же Windows 11 24H2 ветви обслуживания Germanium (ge_release). Первая сборка 10.0.26100.1 была собрана 03.04.2024. Добавлено много нового. Встроенный архиватор, наконец, понимает 7Zip, TAR, RAR, добавлена поддержка WiFi 7, Bluetooth LE Audio, масса нововведений в сценариях работы файлового сервера (и клиента SMB), подробнее по ссылке. Желающим получать свежие сборки следует единожды установить обновление ветви 10.0.26120.х (они есть с теми же номерами, что и 10.0.26100.х), и далее получать больше включенных возможностей. Впервые вместе с обычными изданиями Windows 11 доступно и LTSC, что означает, что для Windows 11 24H2 обновления будут выходить 10 лет. Тем кто любит менять ОС редко, но метко, это отличный знак. Тут неплохой обзор на русском.

В завершение теоретической заметки о версиях и сборках я добавлю техническую изюминку. Вы наверняка знаете, что часть функционала в ОС добавляется заранее, но активируется позже после тестирования ограниченным списком специальных тестеров. Существует утилита ViVeTool, и её графическая версия ViVeTool-GUI, которые могут показать вам большое количество возможностей ОС, которые вы можете включить (если они отключены) или выключить (если вам данное нововведение не нравится). Бывает, что Microsoft какое-то нововведение на время уберет обновлением, - обычно просто «спрячет» и включить можно через ViVeTool. Работает с Windows 10 и Windows 11. Перед применением делайте резервную копию настроек!

Например, вы можете отключить навязчивую строку поиска, выключить вкладки в Проводнике, вернуть возможности записи истории событий скриншотами для Copilot и многое другое.

Все о версиях Windows 11 и как включать незадействованные возможности ОС и выключать ненужные, в том числе в Windows 10 IT, Windows, Android, Linux, Программа, Гайд, Длиннопост

Это тема отдельной статьи, - и, наверное, не моей. В моем тг канале много крутой инфы про сервисы и нейронки и том как ими пользоваться! Там много сервисов которые упростят вам жизнь!

Показать полностью 4
[моё] IT Windows Android Linux Программа Гайд Длиннопост
2
4
ernik78
ernik78
10 месяцев назад

Ответ на пост «Не альтернатива пикабу (с минусами) - проект Talkvio. Реализовал более 600 предложений и улучшений пикабушников и участников. [Обновления]»⁠⁠1

Это я со старыми проверенными баянами мемами иду на новый ресурс.

Ответ на пост «Не альтернатива пикабу (с минусами) - проект Talkvio. Реализовал более 600 предложений и улучшений пикабушников и участников. [Обновления]» Сайт, Разработка, Интернет, IT, Комментарии, Социальные сети, Android, Улучшения, Длиннопост, Ответ на пост
Показать полностью 1
Сайт Разработка Интернет IT Комментарии Социальные сети Android Улучшения Длиннопост Ответ на пост
4
itforprof
itforprof
11 месяцев назад

Алиса, Маруся, Касперский… Утвердили перечень программ для предустановки⁠⁠

25 июля в России утвердили перечень российских приложений для обязательной предустановки на электронику.

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

Алиса, Маруся, Касперский… Утвердили перечень программ для предустановки IT, Приложение, Android, Импортозамещение, ВКонтакте, Одноклассники, Законодательство

Больше всего предустановленного софта предполагается в смартфонах и планшетах – целых 19 приложений. Часть из них дублируют друг друга. К примеру, 2ГИС и Яндекс.Карты, Яндекс с Алисой и Маруся.

Обязательными стали Касперский, Rutube, Дзен и Одноклассники с ВК. В ноутбуках — МойОфис.

Впрочем, итоговый список всё ещё может измениться. С текущей версией документа можно ознакомиться по ссылке.

Остаётся открытым вопрос о том, как закон будет распространяться на технику, ввезённую по параллельному импорту.

Показать полностью 1
IT Приложение Android Импортозамещение ВКонтакте Одноклассники Законодательство
10
8
Monakez
11 месяцев назад
Лига программистов

Об игрушках unity и android⁠⁠

Делать было нечего, дело было до +30 за окном и появился интерес вернуться к задачке. которая у меня долго пылилась на полке: а именно получить способ забраться во внутренности запущееного нативного приложения на андроид-эмуляторе, который использует libhoudini в качестве транслятора ARM. Для несведующих поясню: есть устройство андроид - оно в основе своей использует процессор ARM архитектуры. есть приложения, которые написаны так, что в конечном счете представляют собой машинный код по эту конкретную архитектуру. при желании что-то сделать с этим приложением необходим какой-то способ управлять этим машинным кодом. чем мы и займемся.

итак, у нас имеется некое приложение. а именно игрушка, скачаная с гугль плей( в процессе ковыряния я пришел к выводу, что это купленый кем-то движок с накручеными на него магазином. звуками и графикой, т.е. игрушек таких - много). у нас имеется понимание, что для "ковыряния" внутри запущенного приложения нам потребуется устройство с root доступом и очевидным решением тут видится эмулятор.

мы знаем, что эмуляторы( memu, bluestacks, nox, genymotion, etc...) запускаются на платформах с базовой архтектурой x86_64, но позволяют исполнять код для архитектуры arm. это достигается за счет исползования intel овской поделки под названием lib(rary)houdini - некий транслятор, встраиваемый в конкретный эмулятор его разработчиками и позволяющий собственно транслировать arm код в x86( как это делается - не знаю, да и код этого транслятора вроде как нигде не опубликован).

мы так же имеем базовые понятия о том, что такое apk, pm, adb, (ba)sh

таким образном мы имеем возможность выполнять почти все приложения, созданные для arm-устройств на наших настольных ПК.

дополнительно к этому у нас есть: текстовый редактор + javascript/python/c и некоторое ПО для отладки и внедрения в приложения. в частности - frida

ну чтож. приступим.

для начала устанавливаем наше приложение себе на эмулятор (я взял genymotion) и запускаем его. оно работает. чтож... теперь нам стоит "найти" его на эмуляторе и скачать к себе на локальную машину для дальнейшего анализа ( adb pull нам в помощь).

конкретно эта игрушка, которую разбирал я шла в split- apk. соответственно выкачиваем все apk файлы и ищем в них что-то относящееся к unity ( а конкретно нас интересуют libunity.so libil2cpp.so global-metadata.dat)

коротко, в двух словах зачем все это нужно:

unity - мета-фреймворк для разработки приложений с последюущим их релизом под различные платфформы. основной инструмент там - c4+ соответственно для "кроссплатформенности" был создан некий транслятор, а именно cSharp->IL(intermediate langauge)->platform. вот этот последний переход осуществляется посредством специальной виртуальной машины(ВМ), разной для каждой платформы и эта ВМ использует различные данные из global-metadata.dat в процессе трансляции IL и его последующего исполнения.

т.к. сам по себе c4+ вполне себе легко подает реверзу, то задача на первоначальном этапе сводится к вытаскиванию этого c4+ кода каким-то образом из IL с целью последующего изучения и выбора направлений дальнейшего анализа.

не вдаваясь в дебри всей этой внутренней кухне, отмечу лишь, что в природе существуют открытые решения для этой процедуры, в частности il2cppdumper коим и воспользуемся.

к сожалению( или к счастью) те данные, которые необходимы для работы этого ПО частично или полностью unity-разработчки определенным образом шифруют\обфусцируют. а именно файл global-metadata.dat и наша задача, в случае если il2cpp dumper не сможет корректно отработать будет заключаться в том, чтобы этот global-metadata.dat "восстановить".

на самом сайте il2cppdumper разобраны некие типовые случаи этого "восстановления"

в нашем же все свелось к небольшому анализу(найти место запуска IL virtual machine просмотреть до момента обращения к global-metadata.dat) и copy-paste листинга(анализировал libil2cpp с помощью IDA)

в итоге имеем следующий листинг, который нам любезно предоставила ida

fileHandle2 = (__int64)fileHandle;

fileBuffer = (const void *)utils::MemoryMappedFile::Map(fileHandle);

os::File::Close(fileHandle2, &error);

if ( (_DWORD)error )

{

utils::MemoryMappedFile::Unmap(fileBuffer);

LABEL_21:

fileBufferInMem = 0LL;

goto LABEL_22;

}

size_of_fileBuffer = get_size_of_fileBuffer((unsigned __int64)fileBuffer);

fileBufferInMem = malloc(size_of_fileBuffer);

memcpy(fileBufferInMem, fileBuffer, size_of_fileBuffer);

unXorArray = malloc(64u);

v15 = LoadMetadataFile_Val_1;

v16 = LoadMetadataFile_Val_2;

for ( i = 0LL; i != 64; ++i )

{

v16 = 18000 * (unsigned __int16)v16 + HIWORD(v16);

unXorArray[i] = v16;

v15 = 36969 * (unsigned __int16)v15 + HIWORD(v15);

}

LoadMetadataFile_Val_1 = v15;

LoadMetadataFile_Val_2 = v16;

if ( size_of_fileBuffer >= 1 )

{

bufidx = 0LL;

uXidx = 1;

do

{

uXidxOffset = uXidx + 62;

if ( uXidx - 1 >= 0 )

uXidxOffset = uXidx - 1;

notDone = size_of_fileBuffer <= uXidx;

*((_BYTE *)fileBufferInMem + bufidx) ^= unXorArray[uXidx - 1 - (uXidxOffset & 0xFFFFFFC0)];

bufidx = uXidx++;

}

while ( !notDone );

}

LABEL_22:

if ( (v24 & 1) != 0 )

operator delete(v26);

if ( (v27 & 1) != 0 )

operator delete(v29);

return fileBufferInMem

итак, не обращая внимания на всевозможные страшные буквы и названия переменых - сразу видим(и переименовыываем очевидное) следующее:

мапится файл в память(fileHandle, который указывает на global-metdata.dat)

магия

возвращается fileBufferInMem

вот эта вот магия - это и есть то ,что разработчики конкретной игры пытались выдать за "обфускацию" а именно

xor данных по ключу из генерируемого массива. крайне удобно тем, что a == xor(xor(a,b),b)

т.е. у нас на руках сразу есть ключ и закодированные данные. немного C и

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h>

#include <string.h>

#include <stdlib.h>

#include <stdint.h>

typedef uint64_t QWORD; // DWORD = unsigned 64 bit value

typedef uint32_t DWORD; // DWORD = unsigned 32 bit value

typedef uint16_t WORD; // WORD = unsigned 16 bit value

typedef uint8_t BYTE; // BYTE = unsigned 8 bit value

#define LOWORD(l) ((WORD)(l))

#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

#define LOBYTE(w) ((BYTE)(w))

#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))

BYTE* readContent(char* filename, size_t* size_t_ptr) {

FILE *f = fopen(filename, "rb");

fseek(f, 0, SEEK_END);

*size_t_ptr= ftell(f);

fseek(f, 0, SEEK_SET); /* same as rewind(f); */

BYTE *string = malloc(*size_t_ptr);

fread(string, *size_t_ptr, 1, f);

fclose(f);

return string;

}

void storeContent(char* filename, BYTE* buffer,size_t bufferSize){

FILE *f = fopen(filename, "wb");

fwrite(buffer,bufferSize,1,f);

fclose(f);

}

BYTE* initXor() {

BYTE* buf=(BYTE*)malloc(64);

DWORD v16=0x2A;

for(int i=0;i!=64;i++) {

v16=18000*((WORD)v16)+HIWORD(v16);

buf[i]=LOBYTE(v16);

//printf("%02X,", buf[i]&0xFF);

}

return buf;

}

void unXorBuffer(QWORD size_of_fileBuffer,BYTE* fileBufferInMem) {

if (size_of_fileBuffer<1){

return;

}

BYTE* unXorArray=initXor();

QWORD bufidx = 0LL;

QWORD uXidx = 1;

BYTE notDone;

do

{

DWORD uXidxOffset = uXidx + 62;

if ( uXidx - 1 >= 0 )

uXidxOffset = uXidx - 1;

notDone = size_of_fileBuffer <= uXidx;

fileBufferInMem[bufidx] ^= unXorArray[uXidx - 1 - (uXidxOffset & 0xFFFFFFC0)];

bufidx = uXidx++;

}

while ( !notDone );

free(unXorArray);

}

int main(int argc, char *argv[]) {

BYTE* uXor=initXor();

size_t gmSize;

BYTE* gmBuffer=readContent("./global-metadata.dat",&gmSize);

printf("%d",gmSize);

unXorBuffer(gmSize,gmBuffer);

storeContent("./global-metadata.dat.dec",gmBuffer,gmSize);

return 0;

}

на выходе получим "правильный" global-metdata.dat

далее можно воспользовваться il2cppdumper и восстановить структуру( не содержимое!!) приложения, т.е. классы их поля и методы.

и тут скорее всего (а на это яно намекали имена функций в IDA в libil2cpp) мы ничего понять сходу не сможем. т.к все эти классы\поля\методы\ обфусцированы, т.е. нет возможности по названиям понять кто за что отвечает:

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост

в таком случае наиболее очевидным и простым является анализ самого приложения с точки зрения "а что там вообще проиcходит. и куда мы можем сваять заплатку". в процессе анализа выявились 3 направления - данные игры( т.е всевозможные цены. шансы. награды и тп.) сохраниения - дада. в игре есть облачное сохранение. и ГПСЧ(random generator - вот он как раз и отвечает в конечном счете за всякие шансы\награды и тп)

разглядывая то, что "забыли\не смогли" закрыть разработчики своим обфускатором видно:

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост
  1. какой-то античит(значит нас "пасут" где?)

  2. используется json( полистав листинг классов, аннотации на методах\полях - игра вдоль и поперек использует json для маршаллинга. учтем.)

  3. какой-то savegamefree - значит можно приицепиться к save & load фукциям и посмотреьт что сохраняется и как ( сразу скажу, что необходимости в этом нет, т.к у нас есть п2)

чтож. приступим.

не буду долго описывать процесс поиска античита - он пристуствует. и подвязан на эти самые шансы. цены. игровую валюту и т.п) и в процессе "исследования" приходилось несколько раз начинать сначала ввиду "банхаммера" с "той стороны".

оставим за кадром процесс "прицепляния" frida к libhoudini в эмуляторе ( намекну только, что загрузка DLL происходит через последовательный поиск искомой библиотеке в каталоге "для библиотек приолжения" в апк в системе...)

для упрощения работы с frida и il2cpp я наткнулся в гугле на il2cpp-bridge - эдакая удобная надстройка над функционалом frida для более удобного вызова\анализа\перехвата интересующих меня функций (я нашел ее много позже и до этого полз через классический вариант. поиск RVA искомых функций в дампе c4+ файле, который получил из il2cppdumper и последующим их перехватом)

Атаковать будем ГСЧ - т.е. искуственно выдавать нужные нам шансы для какого-либо дейтсвиия. а именно "выпадение нужной нам вещи". для этого надо понимать. что ГСПЧ - это некая функция, которая имеет "начальную точку" и период(т.е. через какое-то большое количество обращений будут возвращаться те же самые значения от старта)

для этого находим все функции, где упомянется слово Random и "прицепимся" к ним. посмотрим какой именно ГПСЧ используется ( как минимум у нас их два - это System::Random и unity random ) входные и выходные значения в момент "выпадения вещи" (и продолжим уже исключительно с ним)

згрузим сохранение - повторим -загрузим-повторим.

наблюдеаем следующее:

каждый раз выпадает одна и та же вещь . следовательно где-то в сохранении (и даже можно найти где. но не нужно) сохраняется текущее значение для "начального значения" нашего ГПСЧ(initial seed, seed) и используется вызов всяких функций randomXXXX

по семантике понятно, что это "качество" вещи.

аттрибуты. значения аттибутов.

нас интересует только качество

следовательно схема такая:

перехватываем установку seed - устанавливаем свое значение. ловим нужную нам вещь

собственно вот рожденный в процессе ковыряния быдлокод, который приводит к требуемому результату

boilerplate взят тут

git remote -v

origin https://github.com/oleavr/frida-agent-example.git (fetch)

origin https://github.com/oleavr/frida-agent-example.git (push)

import {Buffer} from "buffer";

import "frida-il2cpp-bridge";

console.log("Rebuilded")

function awaitForCondition(callback: any) {

var i = setInterval(function () {

var addr = Module.findBaseAddress('libil2cpp.so');

console.log("Address found:", addr);

if (addr) {

clearInterval(i);

callback(+addr);

}

}, 0);

}

function _attach(base: any, klass: any, mtd: any, get_StackTrace: any) {

const va = mtd.virtualAddress

if (va == 0x0) {

//console.log("Attach fail", mtd.virtualAddress)

return

}

try {

Interceptor.attach(va, {

onEnter: function (args) {

console.log("onenter ", klass.fullName, `mtd:"${mtd}"`);

if (get_StackTrace != null) {

console.log(get_StackTrace.invoke());

}

//console.log("encode password", [>input<]pwd);

}

});

} catch (err) {

console.log(klass.fullname.tostring(), mtd, err)

console.log("error interception rva", mtd, va.sub(base))

}

}

const klassesOfInterests = [

// /*MainCharacterData*/"SH.491471447.sh_cxse1",

// /*some json related stuff*/"SH.491473776.sh_dbdo1",

// /*some json related stuff*/"SH.491473773.sh_dbdl1",

// /*some json related stuff cur character data? */"SH.491471465.sh_cxsw1",

// /*some json related stuff to files/sc.d? */"SH.491471742.sh_cydk1",

// /*diamond related data*/"SH.491471457.sh_cxso1",

// /*some logs to json handling?*///"SH.491475490.sh_ddri1",

// //"SH.491471477.sh_cxth1",

//"UnityEngine.Random",

// "System.Random",

// "RandomGemRewardVisualInfo",

// "PseudoRandom",

// "DefaultRandom",

"CodeStage",

// "SH.Feature.MS.CardProcess",

// "SH.Feature.RL.DiamondProcess"

]

const mtdsToSkip = [".ctor", "CurrentOwned", "get_IsRunning"]

/*

*

* enum of some events related to diamondProcess and game

* SH.491471427.sh_cxrk1

*

* ????

* SH.491471477.sh_cxth1

* assets related stuff?

* SH.491471546.sh_cxvx1

* */

awaitForCondition(function (base: any) {

const il2cpp = ptr(base);

//bind(il2cpp, ObscuredRefsRVAs)

//bind(il2cpp, BayatGamesFns)

Il2Cpp.perform(() => {

const SystemString = Il2Cpp.corlib.class("System.String");

const single = Il2Cpp.corlib.class("System.Single");

const int32 = Il2Cpp.corlib.class("System.Int32");

const get_StackTrace = Il2Cpp.corlib.class("System.Environment").method("get_StackTrace");

const SystemBoolean = Il2Cpp.corlib.class("System.Boolean");

const SystemType = Il2Cpp.corlib.class("System.Type");

const cSharp = Il2Cpp.domain.assembly("Assembly-CSharp");

const cSharpFP = Il2Cpp.domain.assembly("Assembly-CSharp-firstpass");

/*

with SEED=1 we have right top legendary item

this is Range(x,y) return values

inside 1 Range 0,1 System.Single 0.0003153085708618164

inside 1 Range -0.20000000298023224,0 System.Single -0.11122268438339233

inside 1 Range -0.20000000298023224,0 System.Single -0.06576250493526459

inside 1 Range -0.20000000298023224,0 System.Single -0.03238866850733757

*/

let seedValue = 1;

global.setRandomSeed = function (value) {

seedValue = value;

console.log("seed", seedValue)

}

let rrValues = []

const setRandomRange = function (...values) {

rrValues = [];

const rrTmp = [];

values.forEach(v => {

//const sV = Il2Cpp.string(`${v}`);

//rTmp.push(single.tryMethod("Parse", 1).invoke(sV));

rrTmp.push(v)

})

rrValues = rrTmp.reverse().sort()

console.log(rrValues.reverse());

}

global.overloadValues = function (vMin, vMax) {

var x = [];

for (var i = vMin; i <= vMax; i++) {

x.push(i);

}

rrValues = x.reverse();

console.log(rrValues)

}

global.setRandomRange = setRandomRange;

global.fixRandom = function () {

cSharp.image.classes.filter(klass => klass.fullName.includes("SH.Feature.E.RandomEquipmentProcess"))

.forEach(k =>

k.methods.filter(m => m.name.includes("Generate"))

.forEach(m => {

if (m.parameterCount != 2) {

return

}

m.implementation = function (a, b) {

console.log('genrate', k.fullName, m)

console.log(a)

console.log(b)

return this.tryMethod("Generate").invoke(a, b);

}

})

)

/*

* mix SEED with UNITY int32 RANDOM.RANGE gives us neceesarry results

* setRandomSeed(1123120)

* setRandomSeed(1023121)

* overloadValues(20,23)

* */

Il2Cpp

.domain.assembly("UnityEngine.CoreModule")

.image.class("UnityEngine.Random")

.methods.forEach(mtd => {

console.log('inject in ', mtd)

mtd.implementation = function (...args) {

const rva = mtd.relativeVirtualAddress;

if (!!rva && rva.equals(ptr(0x12e8d0c))) {

const a = args[0]

const b = args[1]

//this is item id, but idk what value it need to be?

// if (a === 0 && b === 100) {

if (a === 0 && b === 100) {

const v = rrValues.pop()

if (v !== undefined) {

console.log('overload Range(0,100) with', mtd, a, b, v)

return 0 + v

}

}

const rv = mtd.invoke(a, b);

console.log('range(x,y)', a, b, rv)

// int32 Range(int32, int32)

return rv

}

if (rva.equals(ptr(0x12e8cc0))) {

//float Range

//console.log('floatRange');

return 0.0006;//mtd.invoke(seedValue !== undefined ? seedValue : 1);

}

if (rva.equals(ptr(0x12e8b64))) {

//InitState

console.log('initState');

return mtd.invoke(seedValue !== undefined ? seedValue : 1);

}

const rv = mtd.invoke(...args);

//console.log('invoked', mtd, mtd.relativeVirtualAddress, args, rv)

return rv;

}

})

}

});

})

запустили приложение на эмуляторе.

запустили frida с нашим скриптом. загрузили свою сохраненную игру.

пробуем без "своего" ГСПЧ:

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост

включаем "свой":

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост
Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост
Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост

вуаля.

цель достигнута. любые "шансы" в игре теперь под нашим контролем. значения контролируемых античитом участков памяти - не затрагивались( т.е. всю валюту и прочая целесообразнее добывать "законными" методами..)

таким образом используя frida и немного терпения можно получить результат без затрат времени и\или денег( то, что в основном используют как валюту подавляющее большинство игроков)

на этом интерес к этой задаче интерес мой закончился, но этот пост - пусть остается. в том числе и как памятка мне

ЗЫ техники изменения значений переменных в памяти малоэффективны из-за используемого античита

Спасибо, что прочитал.

Показать полностью 6
[моё] Android Unity Игры IT Программирование Длиннопост
15
Блог компании
practicum.yandex
practicum.yandex
11 месяцев назад

Кто пишет приложения для вашего смартфона? Знакомимся с профессией Android-разработчика⁠⁠

На Android работают смартфоны, бытовые роботы и даже автомобили. Например, внутри ваших умных часов — программы, которые считывают пульс и напоминают, что ходить пешком нужно чаще. Их написали, потестили и зарелизили Android-разработчики. Разбираемся, чем еще занимаются такие специалисты и сколько получают.

Кто пишет приложения для вашего смартфона? Знакомимся с профессией Android-разработчика IT, Разработчики, Android, Длиннопост, Блоги компаний

Кто это такой и что делает

Android-разработчик пишет код для устройств на операционной системе Android. Скажем, будильник, который вы слышите по утрам на смартфоне; игра, в которую залипаете по пути на работу, — все это дело его рук. Еще он:

  • тестирует приложения на разных этапах разработки и устраняет ошибки;

  • оптимизирует продукт, чтобы он потреблял меньше ресурсов мобильного устройства;

  • работает вместе со специалистами по кибербезопасности над защитой приложений и данных пользователей;

  • расписывает внутреннюю документацию и инструкции;

  • реагирует на обратную связь и готовит обновления, опираясь на пожелания тех, кто уже пользуется продуктом.

Почему профессия востребована

Потому что прямо сейчас на Android работает 71,5% от всех смартфонов в мире. Для сравнения, вторая по популярности операционка — iOS для устройств Apple — установлена только на 27,7%. Разрыв просто гигантский, что создает широкое поле для разработчиков в плане разнообразных задач.

Что знает и умеет Android-разработчик

  • Кодит на Java и Kotlin

Это два главных языка программирования, которые используют в Android-разработке. Java существует с 1995 года с мощным бэкграундом. За это время накопились обширные библиотеки и гигантское сообщество опытных программистов, что упрощает изучение.

Kotlin — язык молодой, ему всего 13 лет. Код на нем лаконичнее, чем на Java, поэтому он медленно, но верно вытесняет старшего товарища. Между тем многие классы Android-библиотеки написаны именно на Java. Поэтому Android-разработчику стоит изучить оба языка.

  • Работает в Android Studio

Так называется среда разработки, где пишут код, создают интерфейс продукта и задают его логику. Это основной инструмент при работе с Android.

  • Использует фреймворки

Заготовка, на основе которой можно создать новое приложение. Разработчики для  Android в основном пользуются фреймворком React Native.

  • Знает HTML, CSS, XML

Программист разрабатывает не только логику и внутреннюю структуру приложений, но и интерфейс.

  • Разбирается в Git

Git — распределенная система управления версиями приложений. Программа редко пишется единственным человеком и за один подход. Ее создают командами, а значит, у каждого участника должен быть доступ к наиболее актуальной версии кода. Крупнейший сервис для этого — GitHub.

  • Тестирует гипотезы

Unit- и UI-тестирование позволяет проверять апдейты приложений, после чего внедрять в них только проверенные обновления.

  • Владеет английским

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

Кто пишет приложения для вашего смартфона? Знакомимся с профессией Android-разработчика IT, Разработчики, Android, Длиннопост, Блоги компаний

Сколько зарабатывает

На HeadHunter джуниорам обычно предлагают около 65 000 – 80 000 рублей. В мае 2024-го Android-разработчики в России получали в месяц в среднем 141 000 рублей — это ориентировочный оклад мидла. Сеньоры и тимлиды могут рассчитывать на более высокий доход. Вот примеры вакансий, в которых ведущему и Senior-программистам предлагают от 400 000 рублей в месяц.

Кто пишет приложения для вашего смартфона? Знакомимся с профессией Android-разработчика IT, Разработчики, Android, Длиннопост, Блоги компаний

Плюсы и минусы профессии


✅ Востребованность. Android — чуть ли не самая популярная операционка в мире. Программист всегда найдет работу.

✅ Разнообразие задач. Так как на Android функционируют не только смартфоны, но и другие устройства, нет недостатка в разноплановых тасках. Условно, в этом месяце писал игру для телефона, а сегодня уже разрабатываешь приложения для управления роботами на огромном предприятии.

✅ Удаленка. Android-программист может работать из любой точки мира, достаточно захватить с собой ноутбук. Улететь на море в среду, а к пятнице оказаться на горнолыжном курорте, не переставая работать, — это про разраба на Android.

❌ Постоянные новшества. Разработка мобильных приложений постоянно меняется. Старые библиотеки становятся неактуальными, появляются новые устройства со своими нюансами. Специалисту нужно непрерывно учиться, быть в курсе новых технологий и адаптироваться.

❌ Высокий порог входа. Стартовать в профессии непросто, программисту на Android много что нужно знать и уметь. Даже базовых языков два — Java и Kotlin. Учить их предстоит одновременно.

Сколько учиться на Android-разработчика

Освоить профессию с нуля реально всего за год. Столько учатся на курсе Практикума «Android-разработчик». За эти 12 месяцев студенты осваивают языки Java и Kotlin, работают в среде Android Studio, кодят в команде с помощью Git, пользуются различными библиотеками. К выпуску они умеют писать мобильные приложения по требованиям заказчика, находить и исправлять ошибки в своем и чужом коде.

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

Одно из главных преимуществ Практикума — большое и дружное сообщество выпускников. Студенты  попадают в комфортную среду, где можно задать вопрос, поделиться проблемами и получить ценный совет от того, кто уже прошел тот же путь.

Менять профессию страшно — хочется заранее знать, что не ошибся с выбором и нашел специальность, которая действительно нравится. Чтобы убедиться, подходит ли вам работа с Android, стоит пройти бесплатную вводную часть курса. На нем вы узнаете об основах профессии и как устроено обучение в Практикуме.

Реклама ООО «Яндекс», ИНН: 7736207543

Показать полностью 2
IT Разработчики Android Длиннопост Блоги компаний
1
11
RoKotEyn
RoKotEyn
1 год назад

Моё первое приложение в Google Play Market. Очень нужен фидбэк. Хелп⁠⁠

Привет, Пикабу!

Очень нужна помощь.

Кратко.

Нужны люди, которые смогут дать ЛЮБОЙ фидбэк по моему первому приложению в Google Play Market, которое сейчас находится на стадии закрытого тестирования. Очень ОЧЕНЬ нужны. Пожалуйста, напишите в Телеграм @rokoteyn либо на email rokoteyn@gmail.com.

Несколько скриншотов в конце поста.

Подробно.

Я изучаю корейский язык. Соответственно, часто возникает необходимость работы именно со словарём, а не с переводчиком. В качестве словаря я использовал государственный словарь от Института корейского языка Республики Корея (국립 국어원, https://krdict.korean.go.kr/rus). Это наиболее полный словарь, на который ссылается тот же Naver, НО он работает только в веб, а значит, если нет интернета, то нет и словаря. Плюс, сам запрос тоже выполняется достаточно долго. Ну а на мобилке через браузер пользоваться так вообще трэш.

Собственно, решил решить проблему в лоб – написать своё приложение. Считаю, что получилось. Приложение вполне рабочее. Но что в нём хорошего, спросите? Отвечаю:

• Максимально простой интерфейс

• Оно полностью оффлайн. Интернет не требуется

• Работает даже на старых телефонах (Android 7.0 и выше)

• Работает очень быстро, без загрузок. Поиск по базе данных осуществляется мгновенно

• Поддерживает 11(!) языков

• Используется база данных Национального Института корейского языка, поэтому это максимально полный из существующих словарь

Моя задача — сделать такое приложение, чтобы изучающие корейский язык считали его самым быстрым, лучшим и по сути единственно верным приложением для работы с корейским словарём. Такое приложение, чтобы им ХОТЕЛОСЬ пользоваться.

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

잘 부탁드립니다!

@rokoteyn, rokoteyn@gmail.com

P.S. Через какое-то время (если не забуду) постараюсь сделать пост, где подробно распишу, с какими проблемами столкнулся при разработке этого приложения и как их решал. И несмотря на то, что приложение выглядит очень просто, есть над чем подумать.

1/5
Показать полностью 5
[моё] IT Программирование Kotlin Android Корея Корейский язык Приложение Google Play Длиннопост
0
16
SeikiKun
SeikiKun
1 год назад

Простая приложенька для подсчета реальной стоимости товара⁠⁠

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

один из откликнувшихся был @amoralle

запрос звучал следующим образом: "Пересчёт стоимости из кастрированных типа 840 грамм - 78 рублей в килограмм (литр)/рубли."

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

Простая приложенька для подсчета реальной стоимости товара Разработка, IT, Креатив, Android, Мобильный, Калькулятор, Длиннопост
Простая приложенька для подсчета реальной стоимости товара Разработка, IT, Креатив, Android, Мобильный, Калькулятор, Длиннопост

забрать приложеньку на Андроид можно здесь:
https://disk.yandex.ru/d/lwVc8USmHK4iKQ

Показать полностью 2
[моё] Разработка IT Креатив Android Мобильный Калькулятор Длиннопост
11
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии