7

Возможно ли использовать нейросети для декомпиляции?

Я большой нуб в нейронках, но давно в голове есть идея - можно ли с помощью нейронок реализовать декомпилятор с бинарных сборок (.exe, .dll) в код на С/С++? Допустим для обучения качать проекты с гитхаба, компилировать их и давать нейронке исходники и сборку.

Правда исходники как правило состоят из множества файлов, а сборка одна в итоге получается.

Насколько реально такое реализовать в теории?

Искусственный интеллект

4.6K постов11.3K подписчика

Правила сообщества

ВНИМАНИЕ! В сообществе запрещена публикация генеративного контента без детального описания промтов и процесса получения публикуемого результата.


Разрешено:


- Делиться вопросами, мыслями, гипотезами, юмором на эту тему.

- Делиться статьями, понятными большинству аудитории Пикабу.

- Делиться опытом создания моделей машинного обучения.

- Рассказывать, как работает та или иная фиговина в анализе данных.

- Век жить, век учиться.


Запрещено:


I) Невостребованный контент

  I.1) Создавать контент, сложный для понимания. Такие посты уйдут в минуса лишь потому, что большинству неинтересно пробрасывать градиенты в каждом тензоре реккурентной сетки с AdaGrad оптимизатором.

  I.2) Создавать контент на "олбанском языке" / нарочно игнорируя правила РЯ даже в шутку. Это ведет к нечитаемости контента.

  I.3) Добавлять посты, которые содержат лишь генеративный контент или нейросетевой Арт без какой-то дополнительной полезной или интересной информации по теме, без промтов или описания методик создания и т.д.


II) Нетематический контент

  II.1) Создавать контент, несвязанный с Data Science, математикой, программированием.

  II.2) Создавать контент, входящий в противоречие существующей базе теорем математики. Например, "Земля плоская" или "Любое действительное число представимо в виде дроби двух целых".

  II.3) Создавать контент, входящий в противоречие с правилами Пикабу.


III) Непотребный контент

  III.1) Эротика, порнография (даже с NSFW).

  III.2) Жесть.


За нарушение I - предупреждение

За нарушение II - предупреждение и перемещение поста в общую ленту

За нарушение III - бан

Автор поста оценил этот комментарий
Как говаривал Бондарчук: "А этих всех вообще скоро ИИ заменит" Учись лучше кофе подносить с преданными глазами, говорят в будущем это будет самый перспективный навык))
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

А кому подносить? )) Все же будем его подносить, только кому? ))

показать ответы
0
Автор поста оценил этот комментарий
Вот только после декомпиляции ты не получишь обратно исходный код, в том виде в котором они был до. И это называется Reverse Engineering и этим олды занимались еще до всех этих AI. https://stackoverflow.com/questions/205059/is-there-a-c-deco...
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Я прекрасно это понимаю, сам в дизассемблере много просидел. Вопрос в том, насколько реально получить систему на нейронках, которая бы на порядок была круче существующих декомпиляторов, могла бы имена осмысленные давать переменным и функциям и насколько правдоподобно писала бы высокоуровневый код?

8
Автор поста оценил этот комментарий

Да ладно че ты уже говори прямо "надо автоматические генерить кряки" )))

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Мне скорее интересно декомпилировать софт, который мне интересен, чтобы идеи воровать))

показать ответы
0
Автор поста оценил этот комментарий
Я в него кидал .bmp в шестнадцатиричном виде 2*2 пикселя). Вроде понимал и еще в ответ генерил, но я не смог его открыть, он косячил похоже с "шапкой" формата.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

https://disk.yandex.ru/d/JdqwVZ4knc71vA

Тут собранная Hello World + исходник. Специально назвал test, чтоб у ChatGPT идей не было, что делает программка

показать ответы
2
Автор поста оценил этот комментарий
Ну сначало мы столкнемся с именованием переменных, потом процедур, потом декомпозиции в стек процедур, потом в обьекты, интерфейсы, юниты. Потом молодежь попросит лямбда выражения, аннотации, streamapi и так можно продолжать и до бесконечности. Не верю.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Раньше тоже переводчики с одного языка на другой, морфологический и синтаксический анализ текстов делали алгоритмическими методами.

Технически сейчас есть гитхабы/гитлабы, где куча исходников на компилируемых языках - брать исходники, собирать и в нейронку обучать

0
Автор поста оценил этот комментарий

Версия на C данного кода на ассемблере будет выглядеть следующим образом:

```C
#include <stdio.h>

int main() {
printf("Hello, world\n");
return 0;
}
```

В коде на C сначала импортируются необходимые библиотеки (`stdio.h`), затем определяется функция `main()`, которая выполняется при запуске программы. В функции `printf` выводится строка "Hello, world\n", а затем функция `main` возвращает 0, что указывает на успешное выполнение программы.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну т.е. на нейронках это очень даже рабочий вариант получается. Да, это можно было получить и с помощью алгоритмических методов, но нейросеть думаю сможет и имена переменным давать адекватные

показать ответы
0
Автор поста оценил этот комментарий

Этот код написан на языке ассемблера для архитектуры x86-64. Он выводит строку "Hello, world\n" в консоль и завершает выполнение программы. Давай идентифицируем каждый шаг:

1. `mov $1, %rax`: Загрузить код системного вызова write (1) в регистр %rax.
2. `mov $1, %rdi`: Загрузить дескриптор файла стандартного вывода (также 1) в регистр %rdi.
3. `mov $message, %rsi`: Загрузить указатель на строку `message` в регистр %rsi.
4. `mov $13, %rdx`: Загрузить длину сообщения (13 байт - 12 для 'Hello, world' и ещё один для '\n') в регистр %rdx.
5. `syscall`: Выполнить системный вызов, который записывает строку из %rsi в файловый дескриптор из %rdi.
6. `mov $60, %rax`: Загрузить код системного вызова exit (60) в регистр %rax.
7. `xor %rdi, %rdi`: Занулить регистр %rdi, что соответствует коду возврата 0.
8. `syscall`: Выполнить системный вызов, который завершает программу с кодом возврата из %rdi.
9. `message: .ascii "Hello, world\n"`: Определить строку 'Hello, world\n' для вывода.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А можете попросить преобразовать этот исходник в аналогичный на языке C ?

показать ответы
0
Автор поста оценил этот комментарий

Скопировал код, который после большого количества нулей идет. На С++ отказывается. Я не разбираюсь в Ассемблере и двоичном коде, мог фигню ему задать) Наиболее удачная попытка, он нашел в коде Hello world

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А спросите, что делает следующий код:


       .global _start

       .text

_start:

       mov $1, %rax

       mov $1, %rdi

       mov $message, %rsi

       mov $13, %rdx

       syscall

       mov $60, %rax

       xor %rdi, %rdi

       syscall

message:

       .ascii "Hello, world\n"

показать ответы
0
Автор поста оценил этот комментарий
У чатгпт лимиты от 4k до 32k токенов в зависимости от модели. Для перевода в символы (упрощенно) можно умножить на 0.75. Это будет размер текста на английском, но и ответ сюда же плюсуется. (Вопрос (на англ) + ответ (на англ)) < ((4к..32к) * 0.75)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Добавил файл a.out, 4кб, уже на ассемблере написан

показать ответы
0
Автор поста оценил этот комментарий
А есть пример малюсенького рабочего бинарника, чтоб в чатгпт закинуть?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня винды нет, только линукс. Можно скомпилировать программку, которая напишет Hello World, но это будет не .exe файл

показать ответы
2
Автор поста оценил этот комментарий

Гидру https://github.com/NationalSecurityAgency/ghidra у АНБ возьми... Или на https://dogbolt.org/ повыбирай...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Речь про нейронки, про гидру я и так знаю