Содержимое
А кто-то еще помнит про ассемблер и машинный код? Наверное, уже ни для кого не секрет, что программирование с каждым годом трансформируется в сторону все более и более высокоуровневого - и вот, в 2023, с появлением GPT-3.5, мы подошли к моменту, когда естественный язык фактически стал еще одним языком программирования - и эта тенденция, как известно, продолжает развиваться. Тем не менее, давайте вспомним, что объединяет всех программистов? DDD? нет, по-моему от этих трех букв до сих пор многие шарахаются. SOLID? тоже не очень - разумные синьоры все больше ставят непоколибимость этих принципов под сомнение (см., например, одно из недавних интервью Сергея Теплякова). А что тогда? Машинный код! Да да, многие уже и забыли, но ведь именно в него компилируются все наши программы в конечно итоге после всяких интепретаций и IL'ов. В общем, до сих пор порой возникает потребность в том, чтобы посмотреть а что же там за код-то зашит в бинарнике - в особенности это актуально для антивирусных компаний, которые кроме "экзешника" обычно ничего и не имеют для анализа. И тут на помощь приходят всякие дизассемблеры и декомпиляторы типа IDA, Ghidra и т. д. Вот только проблема декомпиляторов в том, что восстановленный код на выходе получается мягко-говоря слабо читаемым. В общем, хорошая новость для вирусоборцев и других реверсеров в том, что теперь такой восстановленный код можно отправить в LLM и пропросить ее аккуратно переписать его на понятный язык (можно даже закинуть весь проект файликом или папкой* в Gemini). Проблема только в том, что даже мощные LLM все еще не очень хорошо это делают - ну и, конечно, на больших файлах, это может быть дороговато. LLM4Decompile И тут на сцену выходят наши любимые китайцы, которую сделали специализированную модельку LLM4Decompile, заточенную именно на восстановление декомпилированного кода и, удивительное дело, им удалось чуть ли ни в два раза по Re-executability обскакать GPT-4o. Молодцы, что тут сказать! Видео-демка тут. Ссылки на модели разных размеров тут. Еще, прикольно, что можно посмотреть датасет, на котором моделька обучалась (первый столбец - сырой код из Ghidra, второй столбец - изначальный код). Вообще, это очень интересный тренд - кажется, что еще немного и появятся готовые приложения, способные "переварить" любой скомпилированный "экзешник", "апкашку", "дллку" и прочие бинарники и выдать почти оригинальный код. Поэтому, как никогда важно делать тонкие клиенты и выводить критический функционал на серверную сторону (хотя! и тут LLMки уже пытаются имитировать бекенд эндпоинты - да что ж ты будешь делать!). В общем, как обычно, в интересное время живем. Возможности? Для тех, самых амбициозных из моих читателей, кто все еще думает над своим стартапом: вот вам супер интересная тема - создать такой тулинг (декомпилятор всего) и продавать его за большие деньги антивирусным компаниям - интересных челленджей я тут предвижу прям вагон. Только сначала обязательно пообщайтесь с ними и подсчитайте рынок. А есть у нас тут живые реверсеры? Расскажите в комментариях как вы используете LLMки в своей работе. * Кстати, да, хорошая новость для любителей пообщаться с кодом - Gemini теперь умеет принимать на вход целые папки. NB. Я проделывал этот фокус с восстановлением кода через LLM еще год назад в своей статье про асинхронную машину состояний в C#, если вы вдруг ее пропустили, то вот она.