Інструменти, які допомагають здійснити зворотне проектування бінарних форматів файлів


82

Які інструменти доступні для декодування невідомих форматів двійкових даних?

Я знаю Hex Workshop та редактор 010, як підтримуючі структури. Вони обмежені в обмеженій мірі для відомого фіксованого формату, але їх важко використовувати з чим-небудь складнішим, особливо для невідомих форматів. Думаю, я розглядаю модуль для мови сценаріїв або інструмент графічного інтерфейсу, який можна скриптувати.

Наприклад, я хотів би мати можливість знайти структуру в блоці даних з обмеженої відомої інформації, можливо, магічного числа. Після того, як я знайшов структуру, дотримуйтесь відомої довжини та зміщення слів, щоб знайти інші структури. Потім повторіть це рекурсивно та повторно, де це має сенс.

У своїх мріях, можливо, навіть автоматично визначає можливі зсуви та довжини на основі того, що я вже сказав системі!


1
Не є прямою відповіддю на ваше запитання: Чи немає у вас виконуваних файлів, які працюють із цими двійковими файлами з невідомими форматами? Використання налагоджувача ring3, такого як OllyDbg, для зворотного проектування, натомість було б набагато простіше, ніж в значній мірі спробувати застосувати формати файлів грубої сили.
Даніель Слоф

О так, один із додатків, який я мав би додати до запитання "яку програму ти коли-небудь хотів написати, але так і не знайшов часу для цього";)
devio

У деяких випадках у мене є виконувані файли, які їх певною мірою обробляють. Іноді файли є виконуваним кодом (але не у стандартному форматі) і цілком можуть містити власні процедури декодування. Як вихідну точку ми можемо мати обмежені фрагменти часткової документації. В інших випадках я нічого не маю.
Mat

Відповіді:


22

Ось декілька порад, які спадають на думку:

З мого досвіду, інтерактивні мови сценаріїв (я використовую Python) можуть бути великою підмогою. Ви можете написати простий фреймворк для роботи з бінарними потоками та деякі прості алгоритми. Тоді ви можете написати сценарії, які прийматимуть ваш двійковий файл і перевіряти різні речі. Наприклад:

Проведіть статистичний аналіз різних частин. Випадкові дані, наприклад, скажуть вам, що ця частина, ймовірно, стиснута / зашифрована. Нулі можуть означати відступ між деталями. Розсіяні нулі можуть означати цілі значення або рядки Unicode тощо. Спробуйте помітити різні компенсації. Спробуйте перетворити частини двійкового файлу у 2 або 4 байтові цілі числа або у плаваючі, роздрукуйте їх і перевірте, чи вони роблять сенс. Напишіть деякі функції, які будуть шукати повторювані або дуже подібні частини в даних, таким чином ви можете легко виявити заголовки.

Спробуйте знайти якомога більше рядків, спробуйте різні кодування (c рядки, рядки pascal, utf8 / 16 тощо). Для цього є кілька хороших інструментів (я думаю, що Hex Workshop має такий інструмент). Струни можуть сказати вам багато чого.

Удачі!


Хахуар із наведеної нижче відповіді є саме такою структурою. Він постачається із заздалегідь визначеним набором полів: різні типи рядків, дати, біти, плаваючі символи, відступи тощо. Вбудовані парсери можуть бути використані як приклади разом із документами.
roolebo

15

Для Mac OS X є новий чудовий інструмент, який навіть кращий за мій iBored: Synaliyze It! ( http://www.synalysis.net/ )

У порівнянні з iBored , він краще підходить для незаблокованих файлів, одночасно надаючи повний контроль над структурами, включаючи можливість написання (з Lua). І це також візуалізує структури краще.


10

Тупні ; наскільки мені відомо, безпосередньо не доступна в Microsoft Research, але є стаття про цей інструмент, яка може зацікавити когось, хто хоче написати подібну програму (можливо, з відкритим кодом):

Тупні: Автоматичне зворотне проектування вхідних форматів ( @ цифрова бібліотека ACM )

Анотація

Останні роботи встановили важливість автоматичного зворотного проектування специфікацій протоколу або формату файлу. Однак формати, зворотно розроблені попередніми інструментами, пропустили важливу інформацію, яка є критично важливою для програм безпеки. У цій роботі ми представляємо Tupni, інструмент, який може реконструювати вхідний формат із багатим набором інформації, включаючи послідовності записів, типи записів та обмеження введення. Тупні може узагальнити специфікацію формату за кількома входами. Ми впровадили прототип Tupni та оцінили його у 10 різних форматах: п'ять форматів файлів (WMF, BMP, JPG, PNG та TIF) та п'ять мережевих протоколів (DNS, RPC, TFTP, HTTP та FTP). Тупні визначив усі послідовності записів у тестових входах. Ми також показуємо, що, об'єднуючи декілька файлів WMF, Tupni може отримати більш повну специфікацію формату для WMF. Крім того, ми демонструємо корисність Tupni, використовуючи багату інформацію, яку вона надає для створення підписів про вразливість zeroday, що не було можливим за допомогою попередніх інструментів зворотного проектування.



8

Мій власний інструмент "iBored", який я випустив зовсім недавно, може зробити це частиною. Я написав інструмент для візуалізації та налагодження форматів файлової системи (UDF, HFS, ISO9660, FAT тощо), і впровадив пошук, копіювання, а пізніше навіть підтримку структури та шаблонів. Підтримка структур досить проста, а шаблони - це спосіб динамічного визначення структур.

Все це програмовано на діалекті Visual BASIC, що дозволяє перевіряти значення, читати конкретні блоки та все.

Інструмент безкоштовний, працює на всіх платформах (Win, Mac, Linux), але оскільки це персональний інструмент, який я щойно оприлюднив для поширення, він мало задокументований.

Однак, якщо ви хочете спробувати і хочете дати відгук, я можу додати більше корисних функцій.

Я навіть хотів би з відкритим кодом, але, як це написано на REALbasic , я сумніваюся, що багато людей приєднаються до такого проекту.

Посилання: Домашня сторінка iBored


2
Звучить пекельно приємний проект, до якого можна долучитися ... Коли я працював дослідником антивірусів, це було б дуже зручно. Натомість я все робив вручну ... Я завантажу і перевірю. Дякую вам за це, я мені це використовую. :)
LarryF

Схоже на початок хорошого інструменту для аналізу двійкових файлів, але він все ще дуже орієнтований на диск (512-байтові блоки - це трохи роздача ...)
Стів Беннетт,

@SteveBennett: йому подобається кластеризувати файл у однакові за розміром блоки, це правда, але розмір блоку можна легко змінити за допомогою меню. А iBored також може обробляти весь файл як один блок. Єдиним недоліком є ​​те, що у нього будуть проблеми з великими файлами, оскільки він намагається показати всі дані в одному прокручуваному поданні блоку, тоді як один блок, що може призвести до проблем із продуктивністю.
Thomas Tempelmann

6

Я все ще іноді використовую старий шістнадцятковий редактор під назвою AX, Advanced Hex Editor. Здається, зараз це в значній мірі зникло з Інтернету, хоча Google все одно повинен мати можливість знайти його для вас. Остання версія, яку я знаю, була версія 3.4, але я дійсно використовував лише безкоштовну для особистого користування версію 2.1.

Найцікавішою його функцією, і якою я найбільше користувався для розшифровки різних форматів ігор та графіки, є режим графічного перегляду. Це в основному просто показує вам файл із кожним байтом, перетвореним у кольоровий піксель. І як би це просто не звучало, це іноді значно спрощувало мої спроби реверсивного проектування.

Я вважаю, що робити це на око - це навпаки проти автоматичного аналізу, і графічний режим не буде особливо корисним для пошуку та подальшого зміщення ...

Пізніша версія має деякі функції, які звучать так, ніби вони можуть відповідати вашим потребам (скрипти, шукач регулярності, генератор граматики), але я навіть не уявляю, наскільки вони хороші.


URL-адреса мертва, можливо, вона тут зараз: advanced-hex-editor-axe.en.softonic.com
Steve Bennett

@Steve Дякую за огляд. Це той. Незважаючи на всі обіцяні там віруси, проте, мій сканер вірусів дав мені попередження про віруси, намагаючись його завантажити, тому я не турбувався. Я переформулював свою відповідь.
mercator

6

Існує Hachoir, яка є бібліотекою Python для аналізу будь-якого двійкового формату на поля, а потім перегляду полів. У ньому є безліч синтаксичних аналізаторів для загальних форматів, але ви також можете написати власні парсери для своїх файлів (наприклад, при роботі з кодом, який читає або пише двійкові файли, я зазвичай спочатку пишу синтаксичний аналізатор Hachoir, щоб отримати допомогу з налагодження). Схоже, що проект на даний момент майже неактивний.


(Посилання порушено)
jacobq


0

Вирізка моєї відповіді на подібне запитання:

Одним із інструментів є WinOLS , який призначений для інтерпретації та редагування двійкових зображень комп'ютерного управління двигуном автомобіля (переважно числових даних у таблицях пошуку). Він підтримує різні ендіанські формати (хоча, на мою думку, не PDP), а також перегляд даних з різною шириною та зміщенням, визначення областей масивів (карт) та візуалізація їх у 2D або 3D із різними можливостями масштабування та зміщення. Він також має евристичний / статистичний автоматичний шукач карт, який може підійти вам.

Це комерційний інструмент, але безкоштовна демонстраційна версія дозволить вам робити все, крім збереження змін у бінарному файлі та використання непотрібних вам функцій управління двигуном.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.