Сейчас на форуме: jinoweb (+4 невидимых)

 eXeL@B —› Программирование —› Найти структуру по размеру
Посл.ответ Сообщение

Ранг: 18.9 (новичок), 4thx
Активность: 0.030.05
Статус: Участник

Создано: 04 июля 2020 22:59
· Личное сообщение · #1

Подскажите есть ли в каком-то софте функционал чтобы найти структуры соответствующие заданному размеру?
В частности интересуют структуры из DDK.
Похожий функционал присутствует частично в kd и плагинах IDA, но там все привязано к отлаживаемому файлу.
Не хочется писать очередной бесполезный парсер заголовков, если есть что-то готовое...




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 04 июля 2020 23:10
· Личное сообщение · #2

Ate

В пе формате нет размера структур, а это нужно для защиты. Была попытка динамического определения размера, юзер структура размещалась в области памяти, на которую ставился GP. Далее выборка из ядра отслеживалась, структура расширялась, смещалась и так рекурсивно(можешь на васме пример посмотреть); весьма сложный механизм. Это единственный способ в динамике определить размер выборки, те структуры.

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 04 июля 2020 23:12 · Поправил: DrVB_5_6
· Личное сообщение · #3

А в Tlib библиотеках Иды слабо поискать?



Ранг: 18.9 (новичок), 4thx
Активность: 0.030.05
Статус: Участник

Создано: 05 июля 2020 16:51
· Личное сообщение · #4

DrVB_5_6 пишет:
Tlib библиотеках Иды

Уточните о чем вы

А я уточню о чем я.
При отладке программы на выходе получаем некую структуру данных, отправных точек в модулях нет, работа с данными идет вручную, автоматика тоже не определяет, но есть подозрения, что это какая-то стандартная DDK (а может и SDK) структура, форма которой приблизительно понятна, но недостаточна для паттерн-поиска. Хочу убедится что это кастом.
В заголовочных файлах у дефайнов размер нигде не указывается (иначе можно было бы просто по цифрам отпарсить), получив на выходе какое-то вменяемое количество совпадений и отсмотреть вручную на похожесть. Вот и появился вопрос, может в каком-то софте есть что-то типа браузера структур с возможностью фильтрации по размеру для нужной архитектуры.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 05 июля 2020 17:33 · Поправил: difexacaw
· Личное сообщение · #5

Ate

Указатель на структуру побайтно смещается в памяти, при этом в ядре возникает #PG, структура расширяется, ядерный вызов перезапускается и так пока не будет определён размер выборки(те структуры).

--> Link <--

Был выложен POC --> Link <--

Хотя какая разница у тебя скилла не хватит что бы такое реализовать

-----
vx




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 05 июля 2020 17:59
· Личное сообщение · #6

Рекомендую:
1. Не обращать внимания на этого придурка "difexacaw" от слова "совсем". За всё время на форуме он ничего внятного не написал - одни понты да и те почти всегда не в тему! Да ещё поливание г... всех и вся. Поковырялся в XP и возомнил себя невесть кем. А так - дырка от бублика!... Ценность его: сколько не жалко за мусор!
2. Взять библиотеки IDA - каталог til/... (там их несколько библиотек для разных DDK). Можно взять листинг любой из этих библиотек, организовать поиск (на питоне, к примеру) в них по разным параметрам: всё, что душе угодно, это не сложно.

Что-то более конкретное затрудняюсь посоветовать. Эти библиотеки по сути - бинарное представление заголовочных файлов, в них полное описание структур, длины всех объектов и т.д.
А дальше просто: есть инфа, которую можно фильтровать, сортировать, наматывать... на ... - ну всё, что угодно!..
Понадобятся программки Ильфака из "tlib.zip"!

| Сообщение посчитали полезным: f13nd


Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 05 июля 2020 19:03
· Личное сообщение · #7

DrVB_5_6

Написал, а вот ты как и остальные слился, не осилил слабак, нуби.

-----
vx





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 05 июля 2020 19:18
· Личное сообщение · #8

Как обычно крелк прочитал только заголовок и решил предложить самое анусовое из всех возможных решений придуманной им под этот заголовок задачи.

По-моему машинным способом надергать названий структур, наобъявлять их в проекте в студии и померять sizeof'ами было бы проще всего. Про браузеры структур wdk с фильтрацией по размеру не слышал ни разу.

-----
2 оттенка серого




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 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;
};
длина - в начале!
В библиотеке есть структуры, енумы, прототипы функций (описания, естественно)!
Енумы часто - это объединённые дефайны, поэтому напоминают кучу хлама, так как лепил их кто-то от балды.
Но это так, к слову!
Структуры, если есть, более или менее в норме.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 05 июля 2020 22:09 · Поправил: difexacaw
· Личное сообщение · #10

f13nd

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

-----
vx




Ранг: 18.9 (новичок), 4thx
Активность: 0.030.05
Статус: Участник

Создано: 05 июля 2020 23:03
· Личное сообщение · #11

DrVB_5_6 пишет:
Понадобятся программки Ильфака из "tlib.zip"!

Где взять?



Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 05 июля 2020 23:39 · Поправил: DrVB_5_6
· Личное сообщение · #12

Лови: https://my-files.su/e3ncy0

| Сообщение посчитали полезным: plutos, Ate, mak

Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 06 июля 2020 02:19 · Поправил: dosprog
· Личное сообщение · #13

Чаще всего, когда идёт работа со статической структурой,
в коде не фигурирует её размер, а только смещения её членов.
И знание размеров структур, неявно заявленных в заголовочном файле,
не даст ничего.

Но если же это всё-таки необходимо, то можно воспользоваться советом fr13nd'а: --> Link <--





Ранг: 18.9 (новичок), 4thx
Активность: 0.030.05
Статус: Участник

Создано: 06 июля 2020 12:48
· Личное сообщение · #14

Спасибо!
DrVB_5_6 пишет:
длина - в начале!

А с какими параметрами нужно парсить, у меня размера не показывает (-l[1csxf])?

dosprog пишет:
можно воспользоваться советом fr13nd

Code:
  1. Windows Kits\10\Include
  2. grep -riF --include "*.h" "typedef struct"

83700 вхождений и еще ~800 для DDK...
Тут даже если даже автоматикой сгенерировать исходник, нужно будет еще сортировать по зависимостям и наверняка чинить множественные конфликты, попробовать конечно можно, но я пока не готов.



Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 06 июля 2020 13:21
· Личное сообщение · #15

Ate пишет:
А с какими параметрами нужно парсить

Неужели трудно попробовать (для эксперимента, из любопытства даже) посмотреть выдачу со всеми или религия не позволяет?

Да с любым кроме "c", во всех есть длина (чтоб уж совсем понятно стало, так это цифры в начале строки и они в hex формате)!

Все структуры из стандартных ".h" файлов уже есть в библиотеках.
Необходимости городить новый огород нет от слова "совсем"!
Могут быть некоторые ляпы в этих библиотеках, но их не так много и они чаще всего связаны с "версиями" структур.
Кстати, такой запрос с "grep" выдаст откровенную хрень, которая по величине может даже в 2 раза превышать реальное количество.
Такой поиск даёт только количество таких шаблонов, а не количество реальных структур. Но это так, к слову!
На самом деле можно внимательно посмотреть библиотеки, исходники (в "*.h") и всё встанет на свои места.



Ранг: 18.9 (новичок), 4thx
Активность: 0.030.05
Статус: Участник

Создано: 06 июля 2020 14:52
· Личное сообщение · #16

DrVB_5_6 пишет:
Неужели трудно попробовать

Так это первое что сделал, не увидел сразу размеров, а в остальных вариантах всегда запускал с ключем -с

DrVB_5_6 пишет:
Необходимости городить новый огород нет от слова "совсем"!

Воистину так! Потребовалось две минуты чтобы идентифицировать стуктуру. Проблема решена, вопрос закрыт.
Большое спасибо за утилиту, для меня это просто находка.


 eXeL@B —› Программирование —› Найти структуру по размеру
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати