Здравствуйте, Философ, Вы писали:
Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
В одном местном чатике коллега нарвался на то, что у него почему-то попортилась кодировка в файлах и вместо кириллицы сплошные '�'. Он решил скормить код такому ИИ и посмотреть, восстановит ли тот логику. Просто комментарии, по сишному (а не ассемблерному) — то есть задача на порядки проще.
Вот что ему копилот с чатгопотой восстановили: начало:
#define U_16 1 // U_16 == 1 это значение для 16-битного регистра !!!#define U_detali 0 // Детали (+) это значение для подстройки 1V==217.81F === 12.0В=2614 Ом === 23.07.2018#define U1_detali 0 // Детали (+) это значение для подстройки 1V==217.81F === 12.0В=2614 Ом === 23.07.2018#define TimRA 0x01 // Пример настройки OCRx для таймера -- значение 1
А вот что было в оригинале:
#define U_16 1 // U_16 == 1 это Вариант для 16 симвю ЖКИ !!!#define U_detali 0 // поправка (+) для АЦП из-за разброса деталей делителя 1V==217.81F === 12.0в=2614 АЦП === 23.07.2018#define U1_detali 0 // поправка (+) для АЦП из-за разброса деталей делителя 1V==217.81F === 12.0в=2614 АЦП === 23.07.2018#define TimRA 0x01 // Нижний предел величины OCRx таймера ШИМ -- для 1мкФ
Я боюсь себе представить, что эти цифровые духи нафантазируют на ассемблере без подсказок... им даже на несоответствие количества букв было плевать.
Здравствуйте, netch80, Вы писали:
N>В одном местном чатике коллега нарвался на то, что у него почему-то попортилась кодировка в файлах и вместо кириллицы сплошные '�'. Он решил скормить код такому ИИ и посмотреть, восстановит ли тот логику. Просто комментарии, по сишному (а не ассемблерному) — то есть задача на порядки проще.
Коллега сам дурак, верящий в чудеса. Вместо использования ИИ надо искать уцелевшие исходники и/или восстанавливать вручную.
Чтобы восстанавливать испоррченную кодировку нужны модели специально на это обученные, а также понимающие языки программирования и предметную область.
А иначе получится то что и получилось.
К теме декомпиляции твой пост имеет косвенное отношение.
LLM4Decompile is the pioneering open-source large language model dedicated to decompilation. Its current version supports decompiling Linux x86_64 binaries, ranging from GCC's O0 to O3 optimization levels, into human-readable C source code. Our team is committed to expanding this tool's capabilities, with ongoing efforts to incorporate a broader range of architectures and configurations.
LLM4Decompile-End focuses on decompiling the binary directly. LLM4Decompile-Ref refines the pseudo-code decompiled by Ghidra.
LLM4Decompile – это открытая большая языковая модель, предназначенная для декомпиляции бинарного кода в удобочитаемый исходный код.
В текущей версии она способна преобразовывать двоичные файлы Linux x86_64, скомпилированные с уровнями оптимизации GCC от O0 до O3, обратно в человеко-читаемый код на языке C.
Здравствуйте, Философ, Вы писали:
Ф>1) Одной из самых трудных задач при реверсинге — понять, что делает функция и соответственно её назвать. Ф>2) Кроме того, бывают заинлайненные функции, где вместо call'ов используются безусловные переходы. Вот было бы круто их тоже выделять в виде функций. Ф>3) Часто заинлайнейнная компилятором функция, прям без переходов, in place. Было бы круто найти в гигатоннах ассемблера похожий код и выделить его в функцию с директивой inline.
Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
Можно. Собери датасет, а после обучи на нем разные сетки.
Какой-то результат получишь. После нам расскажешь о результатах.
И да, модели в стиле LLM лучше тренировать (один из примеров Llama)
1) Одной из самых трудных задач при реверсинге — понять, что делает функция и соответственно её назвать.
2) Кроме того, бывают заинлайненные функции, где вместо call'ов используются безусловные переходы. Вот было бы круто их тоже выделять в виде функций.
3) Часто заинлайнейнная компилятором функция, прям без переходов, in place. Было бы круто найти в гигатоннах ассемблера похожий код и выделить его в функцию с директивой inline.
Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
----------
Я не профессиональный реверсер, если что. Мне за это деньги не платят. Так — балуюсь.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Философ, Вы писали:
Ф>1) Одной из самых трудных задач при реверсинге — понять, что делает функция и соответственно её назвать.
Думаю что сделают когда-нибудь, но нужен полноценный контекст, а не отдельные функции. Имя функции часто зависит от предметной области.
Ф>2) Кроме того, бывают заинлайненные функции, где вместо call'ов используются безусловные переходы. Вот было бы круто их тоже выделять в виде функций. Ф>3) Часто заинлайнейнная компилятором функция, прям без переходов, in place. Было бы круто найти в гигатоннах ассемблера похожий код и выделить его в функцию с директивой inline.
п3 = п2. Это возможно только частично. Заинлайненные функции при оптимизации могут компилироваться в изоморфы, сохраняя семантику операции. Сюда же и всякие разворачивания циклов относятся и т.п.
Зачатки подобного функционала есть в IDA. Она умеет/-ла некоторые линейные блоки определять как memset/memcpy, как минимум. Но там это реализовано без всяких ИИ.
Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
На текущий момент — только п1, вероятно, реализуем напрямую.
Здравствуйте, Философ, Вы писали:
Ф>1) Одной из самых трудных задач при реверсинге — понять, что делает функция и соответственно её назвать. Ф>2) Кроме того, бывают заинлайненные функции, где вместо call'ов используются безусловные переходы. Вот было бы круто их тоже выделять в виде функций. Ф>3) Часто заинлайнейнная компилятором функция, прям без переходов, in place. Было бы круто найти в гигатоннах ассемблера похожий код и выделить его в функцию с директивой inline.
Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
Ф>---------- Ф>Я не профессиональный реверсер, если что. Мне за это деньги не платят. Так — балуюсь.
я думаю появится достаточно скоро (если еще не). В GPT можно скормить код и спросить что он делает. Можно попросить придумать название для функции. Осталось сделать полноценную тулзу, дополнительно потренировав на автоматически сгенерированном датасете из исходного кода + соответствующиего ему дизассемблированного бинарника.
Еще пробовал на примере, где была С-подобная функция со сложной математикой и без комментариев — и разбор функции с уточняющими вопросами весьма удивил.
Если давать достаточно обособленные примеры, результат может быть неплох.
Здравствуйте, Философ, Вы писали:
Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
Думаю, в этом они будут великолепны, так как могут анализировать горы данных за раз. Но придется специально натренировать сетку на примерах ассемблера и из чего он получался. А для этого нужно:
1. 100500 примеров.
2. Огромные вычислительные сетки для тренировки.
Так же разумно патинировать работу ИИ путём сращивания ИИ и готового софта для декомпиляции и человеком.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Философ, Вы писали:
Ф>1) Одной из самых трудных задач при реверсинге — понять, что делает функция и соответственно её назвать.
... Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
Здравствуйте, BSOD, Вы писали:
N>>В одном местном чатике коллега нарвался на то, что у него почему-то попортилась кодировка в файлах и вместо кириллицы сплошные '�'. Он решил скормить код такому ИИ и посмотреть, восстановит ли тот логику. Просто комментарии, по сишному (а не ассемблерному) — то есть задача на порядки проще.
BSO>Коллега сам дурак, верящий в чудеса. Вместо использования ИИ надо искать уцелевшие исходники и/или восстанавливать вручную.
"Был бы я таким умным, как моя жена завтра" (ц)
Он потом нашёл бэкап исходников, я как раз привёл его кусок как вторую цитату (ты мог бы это заметить, если бы внимательнее прочитал). Но на это по разным причинам ушла пара дней, а до того он думал, что потерял.
BSO>Чтобы восстанавливать испоррченную кодировку нужны модели специально на это обученные, а также понимающие языки программирования и предметную область. BSO>А иначе получится то что и получилось. BSO>К теме декомпиляции твой пост имеет косвенное отношение.
Самое прямое. Декомпиляция, что человеком, что моделью, это определение логики и перевод её на другой язык. Есть код, надо понять его логику и описать так, чтобы это стало понятно человеку. Чем более высокоуровневый язык у конкретного кода, тем легче всем, и человеку, и модели, понимать логику происходящего. Точно так же и предметная область. Не зная, что делает вызов функции foo или запись в регистр по имени buka, нельзя понять, что происходит при выполнении.
Накачать конкретными данными конкретную модель — может, года через три и можно будет делать это достаточно дёшево, чтобы применять, как ТС. Но не сейчас.