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



Последнее исправление: Lexperience (всего исправлений: 1)

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

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

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

Владимир

Добавочка.
«hook Linux»

Шире вопрос нужно ставить - «Как хакать Linux программы».

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

декомпилирование != дизассемблирование

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

Владимир

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

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

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

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

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

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

Владимир

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

anonymous
()

radare2, objdump, gdb.

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

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

Владимир

Не эксперт, но имею свою библиотеку для работы с dll /не для хака/.

PS: Стараюсь не вести диалоги в тех темах где мало разбираюсь.

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

Владимир

Спасибо /в хозяйстве пригодится/.
Когда нужно будет - разберемся.

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

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

Ну есть:

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

Владимир

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

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

гидра еще от НСА
но за денюжку можно и на аутсорс отдать декомпильнуть
хоча ida 7.0 давно слитая

anonymous
()

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

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

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

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

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

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

Нда? И что мешает воткнуть вмеcто какой-то команды jmp в свой код, а из своего кода jmp обратно в адрес той команды? Собственно, так и делают.

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

Поясните пожалуйста. Как я понимаю тут написано что он в qnx запускается? да я это знаю, я же говорю это программа управления тренажером и он полностью построен для QNX

Lexperience
() автор топика

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 ★★★★★
()

Как я понимаю единственным разумным способом это сделать

Так где исходники? В них поправь и пересобери.

anonymous
()
Ответ на: комментарий от 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
() автор топика
Ответ на: комментарий от EXL

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

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

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

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

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

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

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

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

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

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

при наличии денег нет ничего невозможного
1М бинаря, от $4к

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

Владимир

Какой GUI, ... использовался для разработки?
Может быть он in memory имеет метаданные об controls?

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

Почему анонимус обращается «Владимир»?

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

Готов всмысле? Разобрался с программой и получилось запустить ее? Кнопки ты имеешь ввиду как отдельный элемент? я могу «впиндюрить» туда еще одну?

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

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

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

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

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

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

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

с декомпиляцией я не работал ранее

Знаешь, что такое реверс инженеринг и кто им в IT занимается?

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

знаю, хацкеры и люди которые занимаются как я в данном случае разработкой дополнений и модернизацией ПО.

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

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

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

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

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

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

знаю, хацкеры

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

Deleted
()

Если не забуду, завтра напишу по поводу.

А вообще, быстро и просто не будет.

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

Очень даже не каждый прогер возьмётся за реверс.

Кому очень нужно — делают. Супер-пупер квалификации там не нужно, но нужно очень много упорства. ТСу нужно — он справится. Тебе не нужно — не справишься. Всё просто.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.