LINUX.ORG.RU

Декомпилирование ELF 32-bit LSB файла.

 


1

1

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

file выдает: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /usr/lib/ldqnx.so.2, not stripped

Ответ на: комментарий от anonymous

Да очень большой объем информации, 2\3 я уже прочитал но все что смог дельного получить, это «readelf -s» и «objectdump». Но я решил все таки написать и сюда, так как может быть найдутся спецы которые смогут мне помочь в этом разобраться.

Lexperience ()
Ответ на: комментарий от Deleted

Владимир

Не удивлюсь если программы получения си кода имеются ... /конечно об этом в inet не будут говорить/.

Один небольшой намек.
Если хорошо понимать как LLVM генерит бинарный код, то скорее всего возможно получить из него некий «ручной код».

anonymous ()
Ответ на: комментарий от anonymous

Не удивлюсь если программы получения си кода имеются

Не программы, плагины к radare2. Только не си, а псевдо-си, достаточно при этом проблематичный.

Deleted ()
Ответ на: комментарий от Deleted

Владимир

Ну раз вы мне дали «пас», то продолжу ...
Мне тоже не известны такие программы.
ИМХНО чтобы программисты «спали спокойно» говорят - «Из бинарного кода нельзя получить подобие вменяемого исходного кода».

anonymous ()

radare2, objdump, gdb.

Всё целиком декомпилировать не нужно. Найди точки интереса и декомпилируй руками оттуда. Например, ты нашёл строки текста в бинарнике. Запускаешь под gdb, ставишь бряк на чтение, так узнаёшь, что за код читает строку. Продолжаешь ковырять оттуда.

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous

LLVM генерит бинарный код, то скорее всего возможно получить из него некий «ручной код».

Ну есть:

  • snowman - декомпилирует криво
  • IDA Pro + HexRays - декомпилирует хорошо, но в псевдокод, а не в Си, плюс стоит как макбук.
  • LLVM-nased декомпилятор от создателей аваста (название не помню) - нечто среднее между предыдущими двумя
SR_team ★★ ()
Ответ на: комментарий от SR_team

Владимир

Спасибо!
Меня в основном тематика работы с dll /in memory и файлом/ в основном интересует для обеспечения возможности расширения функциональности run-time режима работы программ.
Пока не «копаю» глубоко, но придется ...
Скорее всего изобрету свой «велосипед» /для Linux/.
Потому как elf и dll - для других целей.

anonymous ()

а так же изменить отображаемый текст в некоторых местах

Это, вполне возможно, реально (но зависит от программы).

добавить туда еще одну виртуальную кнопку

А вот это — вряд ли. Ты ж ведь хочешь, чтобы кнопка не просто висела, а ещё что-то делала в этом симуляторе?..

Имхо, но: Декомпиляция программы до такой степени, чтобы туда можно было невозбранно подмешивать свою логику, по сложности сопоставима с написанием своего собственного симулятора (если не сложнее). Кто готов оспорить — оспаривайте.

hobbit ★★★★★ ()

file выдает: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /usr/lib/ldqnx.so.2, not stripped

Так у вас Linux или QNX?

По теме: возможно это можно сделать через хак с помощью LD_PRELOAD, найти функцию которая эти кнопки отображает и подижектиться.

EXL ★★★★★ ()
Ответ на: комментарий от Lexperience

И он, эта программа, работает на Linux? Где ты его запускаешь и видишь эти кнопки?

Судя по всему твоя программа зависит от Photon’а (аналог X.Org / Xaw в мире QNX).

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Нет. Вот этот образ: https://drive.google.com/open?id=1F5NydYXACEdhmkyQdF1llfdBWEUjD4rp

я запускаю через QEMU и работаю с этим

вот инструкция краткая к этому чуду https://pikabu.ru/story/upravlenie_kosmicheskimi_apparatami_teoriya_i_praktik...

и вот https://pikabu.ru/story/upravlenie_kosmicheskimi_apparatami_teoriya_i_praktik...

Lexperience ()
Ответ на: комментарий от Lexperience

я запускаю через QEMU и работаю с этим

Какой командой?

Да папка Photon есть такая. Но я так понимаю запустить к примеру в Ubuntu я не смогу это, только в QNX. Верно?

Верно. Эту программу можно было бы портировать под дистрибутивы Linux, будь у неё доступен исходный код. А так это сделать практически невозможно. Теоретически можно заняться реверс-инжинирингом и сделать аналог на C или C++ с открытыми исходниками, но никто это не будет делать, потому что это сложно и дорого.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

качаешь образ в домашнюю папку и в терминале: qemu-system-x86_64 inpu_model_743_B.img

далее жди. Управление стрелками. Мышь не используется. Хотя если бы ее можно было подключить то было бы классно.

Lexperience ()
Ответ на: комментарий от Lexperience

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

SR_team ★★ ()
Ответ на: комментарий от SR_team

Да я понял тебя, но есть проблема, что к сожалению мои познания в программировании не такие уж большие что бы написать подобное ПО, но я учусь и со временем это будет возможно. Поэтому я и обратился сюда)

Lexperience ()
Ответ на: комментарий от Deleted

Нет, я имею ввиду что в данном случае я не имею желания разрабатывать заново ПО СУДН изделия, а собираюсь всего лишь добавить туда одну единственную функцию, что бы все значения из симулятора Orbter (топливо, скорость ,положение и т.д.) передавались в эту программу. И я не нашел пока что другого способа. Поэтому и обратился сюда, с декомпиляцией я не работал ранее, но работал мой отец и он говорил что это возможно перевод обратно в код Си

Lexperience ()
Ответ на: комментарий от Lexperience

всего лишь добавить туда одну единственную функцию, что бы все значения из симулятора Orbter (топливо, скорость ,положение и т.д.) передавались в эту программу

Не выглядит простой задачей. К тому же у тебя программа под QNX. Прямо туда Orbiter вкорячивать планируешь?

и он говорил что это возможно перевод обратно в код Си

Никто не говорит, что это в принципе невозможно. Просто очень трудоёмко.

i-rinat ★★★★★ ()