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 - бан

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

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

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

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

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

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

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

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

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

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (6)
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"

раскрыть ветку (5)
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' для вывода.

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

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

раскрыть ветку (3)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку