MadVlad Опубликовано 15 июня, 2019 Поделиться Опубликовано 15 июня, 2019 (изменено) Здрасте. Начну пожалуй с того, что ещё не разу не видел, что бы навсегда банили за то, что ты в нике при регистрации 4 циферки поставил. Навсегда и без доступа к сайту, ник поменять тоже нельзя. Ну то такое, Бог им судья, благо у кождого есть впн + другой браузер, перерегистрироваться дело 5-ти минут. Ближе к делу: написал сканер, который ищет сигнатуры в коде. Вопрос в одном: где искать? адрес нужного мне кода не входит не в один модуль. Нашёл область (memory region) памяти, где находится нужный код. Скорее всего программа (а точнее модуль flash.ocx) динамически выделяет память и пишет туда код. Но как найти нужную область памяти? Вопрос: как получить начальный адрес и размер для поиска сигнатуры? Или единственный вариант в таком случае - искать вдоль и поперёк по процессу, захватывая всё на своём пути? Изменено 15 июня, 2019 пользователем MadVlad Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 июня, 2019 Поделиться Опубликовано 16 июня, 2019 В 15.06.2019 в 16:50, MadVlad сказал: что бы навсегда банили за то, что ты в нике при регистрации 4 циферки поставил Правила нужно читать ДО регистрации, там четко прописано, какие ники разрешены. Если ты ищешь уже "распакованные" инструкции, то, скорее всего, да, придется идти по всему процессу, потому что код может быть "выгружен" в любую область памяти. Теоретически, можно найти этот загрузчик, найдя сначала сигнатуру нужного кода на ActionScript с помощью того же FFDEC, найти этот участок памяти в коде, а затем по брейкпоинту посмотреть, что к нему будет обращаться. Засада такого метода в том, что этот код будет прочитан единожды при загрузки flash приложения, и потому это будет весьма сложно отловить. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 16 июня, 2019 Поделиться Опубликовано 16 июня, 2019 (изменено) Как вариант, можно попробовать перехватить указатель на участок памяти, хукнув функцию выделяющую память и зная размер участка, отфильтровать только то что нужно.(Не в курсе как работает память во флеше) Или без хука, перебором всех сегментов и вычислением размера. Изменено 16 июня, 2019 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 17 июня, 2019 Поделиться Опубликовано 17 июня, 2019 В 16.06.2019 в 18:51, partoftheworlD сказал: хукнув функцию выделяющую память и зная размер участка, отфильтровать только то что нужно.(Не в курсе как работает память во флеше) Или без хука, перебором всех сегментов и вычислением размера. И чаще всего обломиться, поскольку выделяемая память будет не точного размера, а выровнена по 4/8 байтной границе. Самый верный вариант - это дата брейкпоинт на байткод, который должен считаться и преобразоваться в стандартный машинный. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 17 июня, 2019 Поделиться Опубликовано 17 июня, 2019 2 часа назад, Xipho сказал: а выровнена по 4/8 байтной границе. Т.е. alloc/HeapAlloc/new выделяют не n-кол-во байт? Если так, то будет над чем поковыряться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 17 июня, 2019 Поделиться Опубликовано 17 июня, 2019 20 минут назад, partoftheworlD сказал: alloc/HeapAlloc/new Насчет этих не уверен на сто процентов. Но точно знаю, что VirtualAlloc и GlobaAlloc выделяют не меньше n байт с выравниванием страниц памяти по 4/8 байтной границе. Ссылка на комментарий Поделиться на другие сайты Поделиться
MadVlad Опубликовано 24 июня, 2019 Автор Поделиться Опубликовано 24 июня, 2019 Сделал перебор всех областей через VirtualQueryEx, и поиск нужной по размеру/протекту/типу. После перебора отсеивается штук 10, и мгновенно находится нужная сигнатура. Думаю, это самый быстрый и простой вариант. Всем спасибо =) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения