Перейти к содержанию

Сканер сигнатур flash игры


Рекомендуемые сообщения

Здрасте. Начну пожалуй с того, что ещё не разу не видел, что бы навсегда банили за то, что ты в нике при регистрации 4 циферки поставил. Навсегда и без доступа к сайту, ник поменять тоже нельзя. Ну то такое, Бог им судья, благо у кождого есть впн + другой браузер, перерегистрироваться дело 5-ти минут.

 

Ближе к делу: написал сканер, который ищет сигнатуры в коде. Вопрос в одном: где искать? адрес нужного мне кода не входит не в один модуль. Нашёл область (memory region) памяти, где находится нужный код. Скорее всего программа (а точнее модуль flash.ocx) динамически выделяет память и пишет туда код. Но как найти нужную область памяти?

 

Вопрос: как получить начальный адрес и размер для поиска сигнатуры? Или единственный вариант в таком случае - искать вдоль и поперёк по процессу, захватывая всё на своём пути?

 

Изменено пользователем MadVlad
Ссылка на комментарий
Поделиться на другие сайты

В 15.06.2019 в 16:50, MadVlad сказал:

что бы навсегда банили за то, что ты в нике при регистрации 4 циферки поставил

Правила нужно читать ДО регистрации, там четко прописано, какие ники разрешены.

 

Если ты ищешь уже "распакованные" инструкции, то, скорее всего, да, придется идти по всему процессу, потому что код может быть "выгружен" в любую область памяти. Теоретически, можно найти этот загрузчик, найдя сначала сигнатуру нужного кода на ActionScript с помощью того же FFDEC, найти этот участок памяти в коде, а затем по брейкпоинту посмотреть, что к нему будет обращаться. Засада такого метода в том, что этот код будет прочитан единожды при загрузки flash приложения, и потому это будет весьма сложно отловить. 

Ссылка на комментарий
Поделиться на другие сайты

Как вариант, можно попробовать перехватить указатель на участок памяти, хукнув функцию выделяющую память и зная размер участка, отфильтровать только то что нужно.(Не в курсе как работает память во флеше)

 

Или без хука, перебором всех сегментов и вычислением размера.

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

В 16.06.2019 в 18:51, partoftheworlD сказал:

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

 

Или без хука, перебором всех сегментов и вычислением размера.

И чаще всего обломиться, поскольку выделяемая память будет не точного размера,  а выровнена по 4/8 байтной границе.

 

Самый верный вариант - это дата брейкпоинт на байткод, который должен считаться и преобразоваться в стандартный машинный.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Xipho сказал:

а выровнена по 4/8 байтной границе.

Т.е. alloc/HeapAlloc/new выделяют не n-кол-во байт? Если так, то будет над чем поковыряться.

Ссылка на комментарий
Поделиться на другие сайты

20 минут назад, partoftheworlD сказал:

alloc/HeapAlloc/new

Насчет этих не уверен на сто процентов. Но точно знаю, что VirtualAlloc и GlobaAlloc выделяют не меньше n байт с выравниванием страниц памяти по 4/8 байтной границе.

Ссылка на комментарий
Поделиться на другие сайты

Сделал перебор всех областей через VirtualQueryEx, и поиск нужной по размеру/протекту/типу. После перебора отсеивается штук 10,  и мгновенно находится нужная сигнатура. Думаю, это самый быстрый и простой вариант.

 

Всем спасибо =)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.