Сейчас на форуме: rmn, exp50848 (+7 невидимых)

 eXeL@B —› Основной форум —› Разбор объёмных структур. Делимся опытом и советами
Посл.ответ Сообщение


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 10 марта 2013 21:16
· Личное сообщение · #1

Приветствую! Наверняка многим приходилось реверсить приложения, где используются большие, вложенные пользовательские структуры. В моём случае в приложении инициализируются несколько одинаковых структур с большим количеством полей. Поля в структуре заполняются в разных местах проги и не подряд. Задача состоит в том чтобы полностью повторить эту структуру и скормить её IDA. Если бы структура заполнялась в одном месте и подряд, проблем особых небыло бы.
Суть проблемы, думаю ясна. Есть ли какие-то проги, помогающие разбирать и строить структуры?

-----
Research For Food





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 марта 2013 21:33
· Личное сообщение · #2

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

хотя лучше вручную набрать, если уметь - то получается быстро



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 10 марта 2013 21:37
· Личное сообщение · #3

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

-----
старый пень





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 10 марта 2013 21:39
· Личное сообщение · #4

reversecode
Да, умеет создавать, и даже можно было бы смириться с убогостью, но это происходит в пределах одной функции, так что не используемая часть структуры обозначаются массивами байтовыми для заполнения пустот. А руками заполнять не очень легко, если размер структуры =0x2A8D байт

-----
Research For Food





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 марта 2013 21:43 · Поправил: reversecode
· Личное сообщение · #5

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

изучайте данные в той структуре
иногда получается вложеными структурами быстрее ее наполнить, если формат их одинаков
например массив каких то векторов
где вектор по 0x20 или 0x24 сайза
и тогда уже наложив структуру можно из нее массив сделать в Н елементов

daFix пишет:
0x2A8D

это вообще мало

вот к примеру тоже не очень большие и уже разобраные
00000000 xxxx_t struc ; (sizeof=0x38828) ; XREF: xxxx_tr
или в том же проекте
00000000 yyyy_t struc ; (sizeof=0x56DC) ; XREF: .data:_yyyy_ctx




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 10 марта 2013 22:08 · Поправил: hors
· Личное сообщение · #6

daFix пишет:
Суть проблемы, думаю ясна. Есть ли какие-то проги, помогающие разбирать и строить структуры?


Не совсем понятно на каком принципе эти проги, если бы они существовали, работали. А так структуры в ида заполняются только вручную, по мере исследования. Если есть pdb(случайно ), то структуры можно выдернуть этой программой --> Link <--

-----
http://ntinfo.biz





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 марта 2013 22:16
· Личное сообщение · #7

hors пишет:
Если есть pdb(случайно ), то структуры можно выдернуть этой программой --> Link <--

6.3 демо помоему умеет уже это нормально дергать без сторонних плагинов




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 10 марта 2013 22:40 · Поправил: hors
· Личное сообщение · #8

reversecode пишет:
6.3 демо помоему умеет уже это нормально дергать без сторонних плагинов


Не, IDA 6.3 demo извлекает не всё. Сейчас специально проверил.

-----
http://ntinfo.biz





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 марта 2013 22:51
· Личное сообщение · #9

а дайте файлик на каком проверяли и что не извлекло скажите




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 10 марта 2013 22:53
· Личное сообщение · #10

hors пишет:
Не совсем понятно на каком принципе эти проги, если бы они существовали, работали

Да и мне не совсем понятно)) Как вариант - прога, в которую указываешь размерность массива, создаётся массив байт, потом по мере определения полей, вписываешь имя элемента, размерность и адрес, а прога сама перестраивает структуру с учётом новых изменений. Всё это конечно и руками делается не плохо, но слишком муторно и начинаешь путаться, когда структура разрастается.
Сейчас голова не работает, болею, поэтому могу тормозить

-----
Research For Food





Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 10 марта 2013 22:59
· Личное сообщение · #11

reversecode пишет:
а дайте файлик на каком проверяли и что не извлекло скажите


http://rghost.ru/44409985

В файле ntdll.h все что должно быть.

-----
http://ntinfo.biz





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 10 марта 2013 23:15
· Личное сообщение · #12

hors пишет:
http://rghost.ru/44409985
В файле ntdll.h все что должно быть.

да вижу
уже на начале
SECURITY_IMPERSONATION_LEVEL
ида пропустила enum тип и не распарсила с pdb
файлы по разнице в два раза по размеру отличаются, в IDA соответсвенно меньше


 eXeL@B —› Основной форум —› Разбор объёмных структур. Делимся опытом и советами
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати