Сейчас на форуме: jinoweb (+4 невидимых) |
eXeL@B —› Программирование —› Найти структуру по размеру |
Посл.ответ | Сообщение |
|
Создано: 04 июля 2020 22:59 · Личное сообщение · #1 Подскажите есть ли в каком-то софте функционал чтобы найти структуры соответствующие заданному размеру? В частности интересуют структуры из DDK. Похожий функционал присутствует частично в kd и плагинах IDA, но там все привязано к отлаживаемому файлу. Не хочется писать очередной бесполезный парсер заголовков, если есть что-то готовое... |
|
Создано: 04 июля 2020 23:10 · Личное сообщение · #2 Ate В пе формате нет размера структур, а это нужно для защиты. Была попытка динамического определения размера, юзер структура размещалась в области памяти, на которую ставился GP. Далее выборка из ядра отслеживалась, структура расширялась, смещалась и так рекурсивно(можешь на васме пример посмотреть); весьма сложный механизм. Это единственный способ в динамике определить размер выборки, те структуры. ----- vx |
|
Создано: 04 июля 2020 23:12 · Поправил: DrVB_5_6 · Личное сообщение · #3 |
|
Создано: 05 июля 2020 16:51 · Личное сообщение · #4 DrVB_5_6 пишет: Tlib библиотеках Иды Уточните о чем вы А я уточню о чем я. При отладке программы на выходе получаем некую структуру данных, отправных точек в модулях нет, работа с данными идет вручную, автоматика тоже не определяет, но есть подозрения, что это какая-то стандартная DDK (а может и SDK) структура, форма которой приблизительно понятна, но недостаточна для паттерн-поиска. Хочу убедится что это кастом. В заголовочных файлах у дефайнов размер нигде не указывается (иначе можно было бы просто по цифрам отпарсить), получив на выходе какое-то вменяемое количество совпадений и отсмотреть вручную на похожесть. Вот и появился вопрос, может в каком-то софте есть что-то типа браузера структур с возможностью фильтрации по размеру для нужной архитектуры. |
|
Создано: 05 июля 2020 17:33 · Поправил: difexacaw · Личное сообщение · #5 Ate Указатель на структуру побайтно смещается в памяти, при этом в ядре возникает #PG, структура расширяется, ядерный вызов перезапускается и так пока не будет определён размер выборки(те структуры). Был выложен POC Хотя какая разница у тебя скилла не хватит что бы такое реализовать ----- vx |
|
Создано: 05 июля 2020 17:59 · Личное сообщение · #6 Рекомендую: 1. Не обращать внимания на этого придурка "difexacaw" от слова "совсем". За всё время на форуме он ничего внятного не написал - одни понты да и те почти всегда не в тему! Да ещё поливание г... всех и вся. Поковырялся в XP и возомнил себя невесть кем. А так - дырка от бублика!... Ценность его: сколько не жалко за мусор! 2. Взять библиотеки IDA - каталог til/... (там их несколько библиотек для разных DDK). Можно взять листинг любой из этих библиотек, организовать поиск (на питоне, к примеру) в них по разным параметрам: всё, что душе угодно, это не сложно. Что-то более конкретное затрудняюсь посоветовать. Эти библиотеки по сути - бинарное представление заголовочных файлов, в них полное описание структур, длины всех объектов и т.д. А дальше просто: есть инфа, которую можно фильтровать, сортировать, наматывать... на ... - ну всё, что угодно!.. Понадобятся программки Ильфака из "tlib.zip"! | Сообщение посчитали полезным: f13nd |
|
Создано: 05 июля 2020 19:03 · Личное сообщение · #7 |
|
Создано: 05 июля 2020 19:18 · Личное сообщение · #8 Как обычно крелк прочитал только заголовок и решил предложить самое анусовое из всех возможных решений придуманной им под этот заголовок задачи. По-моему машинным способом надергать названий структур, наобъявлять их в проекте в студии и померять sizeof'ами было бы проще всего. Про браузеры структур wdk с фильтрацией по размеру не слышал ни разу. ----- 2 оттенка серого |
|
Создано: 05 июля 2020 19:22 · Поправил: DrVB_5_6 · Личное сообщение · #9 f13nd пишет: наобъявлять их в проекте в студии и померять sizeof'ами было бы проще всего Так это уже всё есть в Tlib библиотеках. они, конечно, как и многие вещи в Иде, кривые донельзя, но что уже есть, то есть... Вот пример из листинга библиотеки "ntddk.til". Взял первую попавшуюся библиотеку, а в ней первое попавшееся на глаза описание структуры: 00000040 struct _LINE_ADDRESS_STATUS { ULONG ulTotalSize; ULONG ulNeededSize; ULONG ulUsedSize; ULONG ulNumInUse; ULONG ulNumActiveCalls; ULONG ulNumOnHoldCalls; ULONG ulNumOnHoldPendCalls; ULONG ulAddressFeatures; ULONG ulNumRingsNoAnswer; ULONG ulForwardNumEntries; ULONG ulForwardSize; ULONG ulForwardOffset; ULONG ulTerminalModesSize; ULONG ulTerminalModesOffset; ULONG ulDevSpecificSize; ULONG ulDevSpecificOffset; }; длина - в начале! В библиотеке есть структуры, енумы, прототипы функций (описания, естественно)! Енумы часто - это объединённые дефайны, поэтому напоминают кучу хлама, так как лепил их кто-то от балды. Но это так, к слову! Структуры, если есть, более или менее в норме. |
|
Создано: 05 июля 2020 22:09 · Поправил: difexacaw · Личное сообщение · #10 f13nd Да, не читал шапку. Я исходил из своей задачи, что бы решить задачи по защите нужно определить указатели и размер структур. Те структуры не в сурках, они в памяти апп и известны лишь как указатель на структуру(которые тоже нужно найти для начала). Ну если там трудность по суркам, то сорян ковыряйтесь дальше. ----- vx |
|
Создано: 05 июля 2020 23:03 · Личное сообщение · #11 |
|
Создано: 05 июля 2020 23:39 · Поправил: DrVB_5_6 · Личное сообщение · #12 |
|
Создано: 06 июля 2020 02:19 · Поправил: dosprog · Личное сообщение · #13 Чаще всего, когда идёт работа со статической структурой, в коде не фигурирует её размер, а только смещения её членов. И знание размеров структур, неявно заявленных в заголовочном файле, не даст ничего. Но если же это всё-таки необходимо, то можно воспользоваться советом fr13nd'а: |
|
Создано: 06 июля 2020 12:48 · Личное сообщение · #14 Спасибо! DrVB_5_6 пишет: длина - в начале! А с какими параметрами нужно парсить, у меня размера не показывает (-l[1csxf])? dosprog пишет: можно воспользоваться советом fr13nd Code:
83700 вхождений и еще ~800 для DDK... Тут даже если даже автоматикой сгенерировать исходник, нужно будет еще сортировать по зависимостям и наверняка чинить множественные конфликты, попробовать конечно можно, но я пока не готов. |
|
Создано: 06 июля 2020 13:21 · Личное сообщение · #15 Ate пишет: А с какими параметрами нужно парсить Неужели трудно попробовать (для эксперимента, из любопытства даже) посмотреть выдачу со всеми или религия не позволяет? Да с любым кроме "c", во всех есть длина (чтоб уж совсем понятно стало, так это цифры в начале строки и они в hex формате)! Все структуры из стандартных ".h" файлов уже есть в библиотеках. Необходимости городить новый огород нет от слова "совсем"! Могут быть некоторые ляпы в этих библиотеках, но их не так много и они чаще всего связаны с "версиями" структур. Кстати, такой запрос с "grep" выдаст откровенную хрень, которая по величине может даже в 2 раза превышать реальное количество. Такой поиск даёт только количество таких шаблонов, а не количество реальных структур. Но это так, к слову! На самом деле можно внимательно посмотреть библиотеки, исходники (в "*.h") и всё встанет на свои места. |
|
Создано: 06 июля 2020 14:52 · Личное сообщение · #16 DrVB_5_6 пишет: Неужели трудно попробовать Так это первое что сделал, не увидел сразу размеров, а в остальных вариантах всегда запускал с ключем -с DrVB_5_6 пишет: Необходимости городить новый огород нет от слова "совсем"! Воистину так! Потребовалось две минуты чтобы идентифицировать стуктуру. Проблема решена, вопрос закрыт. Большое спасибо за утилиту, для меня это просто находка. |
eXeL@B —› Программирование —› Найти структуру по размеру |
Эта тема закрыта. Ответы больше не принимаются. |