Пишу свой декомпилятор, как быть с функциями к которым у меня нет заголовков?

Тема в разделе "WASM.RESEARCH", создана пользователем Shooshpanchik, 24 июн 2026 в 10:42.

  1. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Главная отличительная черта моего декомпилятора - полученный исходник без изменений можно откомпилировать обратно. Пока работоспособность полученного бинарника не гарантируется, так как нет разбора констант и тем более строк. Тестовый бинарник отрабатывает на ура. bootvid.dll и write.exe из состава WinXP тоже декомпилятся, но потом компилятор спотыкается на неизвестных ему функциях. А в принципе хотелось бы и их знать и какие параметры им передаются. Чтоб более осмысленно называть переменные и генерировать для них более читаемый листинг. Пока у меня мало чего из дизасма в декомп переводится. Но как это делать в программу уже заложено.
    Архитектура выстроенна так, что легко можно будет добавлять новые форматы бинарников. Вообще хочу разбор бинарников вынести в плагины. decomp.jpg
     
    Thetrik, GRAFik и _edge нравится это.
  2. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    513
    А на чём пишите, если не секрет ? На ASM ? Если да, то на каком диалекте ?
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.412
    Это должно быть уже очевидно на данном этапе, но: если у тебя нет отладочной информации к собранному экзешнику, и если в нем нет зашитых RTTI-таблиц (как, например, есть в экзешниках, собранных Голангом), то тебе в общем-то эту информацию неоткуда брать.

    Можешь, конечно, встроить в свой декомпилятор функцию поиска в гугле, но в общем случае для любой экспортной функции ты даже можешь в паблике этой информации не найти.
     
  4. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Саму свою программу? На Delphi (10.1 Berlin), я жуть как не люблю клепать интерфейс. А тут я кинул на форму готовые компоненты, настроил и все работает. У меня сейчас есть подсветка синтаксиса, только указать цвета, как сейчас только для чисел сделанно. Отображение огромейнейших HEX данных.
    А вот листинг генерится для Sphinx C--, он как нельзя лучше подходит для этой задачи. Вот тестовый бинарник раз и скушался и собрался обратно. Он даже и работает, но пока у меня нет разбора строк, а там MessageBox с ними :dntknw:
    decomp2.jpg
     
  5. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    513
    Был, да скорее всего и есть, известный в определённых кругах, ресерчер/реверсер/исследователь всевозможных антивирусов и, по-моему, бывший сотрудник дяди Жени - Росси (Rossi). От него на Хабре было много интересных ресёрч-статей (был цикл статей про отладчик для Windows, вроде) были и ещё какие-то инересные статьи. Так вот он был всегда "горой" за Делфи. И всем всегда говорил, что Делфи просто ещё многими, до конца не раскрыт и что, типа, если он захочет как-то защитить свою программу от реверсинга, то Делфи - это самая благоприятная среда для этого. Все эти VSL, если по уму задействовать, то хакеры замучаются реверсить эту программу. А Росси был явно не делитант и в реверсинге и в защите и много ещё в чём. Так что вот за, что купил - за то и продал... :)
     
  6. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Это точно не Я, я оказывается на васме уже почти 20 лет как зареган :)
    Разбор Дельфовых бинарников у меня тоже будет, и написать его будет не так сложно, у меня сделанно наследованием классов, TDelphiLoader будет просто наследован от TPELoader и дополнен своим функционалом.

    А вот еще и Beep.sys отработан нормально, но вот опять неизвестные функции :dntknw:
    decomp3.png
     
  7. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    691
    А как решается задача code vs data Как case- ветвления обрабатываются ?
     
  8. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Пока только добавляются переменные с которыми работают инструкции.
    case сейчас не обрабатывается, просто записываются ассемблерные инструкции.
    А вот функции обрабатывает чистенько, от начала и до конца, по всем возможным веткам. decomp4.jpg
     

    Вложения:

  9. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    513
    Казалось бы простой вопрос, но моментально ставит всех и вся в тупик. Ахимов он поэтому и Ахимов, ну или Инди, если для кого-то так более понятней. :)
     
  10. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    194
    Но работает он не так как оригинал?
    По косвенным признакам: посчитать, сколько раз перед call были push или сколько значений
    загружено в регистры перед вызовом, после этого через встроенную llm или функцию поиска в гугле.

    Имхо это NP-сложная задача без практического решения.
     
  11. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Я стремлюсь чтоб и работал так же как оригинал. Но пока у меня нет разбора ни констант ни строк.
    Поэтому тестовый бинарник работает вот так:
    Decomp5.jpg
     
  12. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    194
    Не знаю, может релевантно:
    https://github.com/amruth-sn/kong

    2026-06-24_13-17-11.png

    - Высокий уровень : Kong надежно декомпилирует, деобфусцирует и восстанавливает имена, типы и структуру.
    - Средний уровень : Декомпиляция пригодна для использования, но сопровождается повышенным уровнем шума. Ожидайте частичного восстановления и более низких показателей достоверности.
    - Низкий уровень : Декомпиляция содержит значительные пробелы, и результаты останутся неполными, зашумленными или нечитаемыми.

    Еще один декомпилятор:
    https://github.com/kokizzu/LLM4Decompile
     
    Последнее редактирование: 24 июн 2026 в 13:22
  13. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    655
    Адрес:
    Russia
    не Rouse? именно Rossi? https://habr.com/ru/users/Rouse/

    касаемо "защищенного от хакеров", лучше VB6 наверное что-то сложно найти, декомпилятора как не было, так и нет.
     
    Последнее редактирование: 24 июн 2026 в 13:23
  14. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    513
    Кстати, на одном англоязычном ресурсе, я как-то именно такую мысль и прочитал как-то. И говорил об этом местный гуру, у которого было имя, знания, призвание... и т. д. и т.п... :)
     
  15. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    902
    От многих факторов зависит. Я реверсил почти 1 в 1 прогу. Да и это вопрос опыта и стиля программирования программиста который писал прогу, т.к. на VB6 можно писать в стиле С и декомпилятор выдаст почти идентичный выхлоп:
    https://github.com/thetrik/VbVst/bl...b6/VbDebugVst/dll/modules/modDebugee.bas#L186 - вот функция на VB6, а вот ее выхлоп автоанализа в IDA::
    vb.png
     
    GRAFik нравится это.
  16. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Вобщем пока вставляю в исходник заглушки:

    extern WINAPI "ntoskrnl.exe"{
    int RtlInitUnicodeString();
    };

    И C-- спокойно это проглатывает. Займусь чемнить более полезным пока.
     
  17. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    513
  18. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    131
    Господа, ну тогда другой вопрос:
    Где можно взять всякие тестовые бинарники, чтоб рассматривалось множество всяких приемов, которые надо бы знать декомпилятору?
     
  19. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.226
    Может я еще не проснулся, но пока выхлоп выглядит как обычный листинг, в котором пересылки из регистра в регистр заменины на оператор '='. Если это и есть "отличительная особенность", то это самый странный декомпилятор. Читаемость кода от этого не повышается. А если это предполагается как специальный инструмент для риппинга, то его наоборот следует делать бОльшим дизассемблером, чем дизассемблеры, указывая особенности кодирования инструкции.
     
  20. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    513
    Самый идеальный вариант - писать самому и компилировать. Как вариант: искать что-то подходящее для этих целей на Гитхаб и т. п. ресурсах и тоже компилировать и смотреть/анализировать выход декомпилятора.