Отредактировать ELF

Модератор: Модераторы разделов

DSS
Сообщения: 390

Отредактировать ELF

Сообщение DSS »

Есть запускаемый файлик. Формата ELF, естественно.

В файлике имеются некоторые текстовые данные, которые нужно поправить. Исходника, с которого можно было бы скомпилировать, нету.
Кроме банального исправления очепяток, есть необходимость вставить пару строчек, среди остальных.
Естественно, работоспособность файлика должна сохранится.
Чем бы поковырять?
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

Re: Отредактировать ELF

Сообщение Sleeping Daemon »

DSS писал(а):
05.09.2011 13:09
Есть запускаемый файлик. Формата ELF, естественно.

В файлике имеются некоторые текстовые данные, которые нужно поправить. Исходника, с которого можно было бы скомпилировать, нету.
Кроме банального исправления очепяток, есть необходимость вставить пару строчек, среди остальных.
Естественно, работоспособность файлика должна сохранится.
Чем бы поковырять?

Например, дзассемблером.
Спасибо сказали:
DSS
Сообщения: 390

Re: Отредактировать ELF

Сообщение DSS »

Sleeping Daemon писал(а):
05.09.2011 13:21
Например, дзассемблером.

Файлик трудится в самодельной железке.
В самой железке никаких средств сборки нету.
Что там накуролесил создатель этой железки - одному ему известно.
Как потом этот дизассемблированный файл собирать в рабочее состояние - непонятно.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Отредактировать ELF

Сообщение /dev/random »

Варианты:
1) Создать файл локализации, заменяющий текст. Ограничение: работает только если автор вставил поддержку локализации, что маловероятно для встраиваемых систем.
2) Дизассемблировать и собрать заново. Ограничение: нужно знать архитектуру железки и поставить кросскомпилятор для этой архитектуры. Также желательно знать синтаксис её ассемблера.
3) Открыть hex-редактором. Ограничение: длина новой строки должна точно совпадать с длиной старой.
4) Где-то добыть исходники. Ограничение: нужно найти автора, убедить его дать исходники, узнать архитектуру, поставить кросскомпилятор.

Сомневаюсь, чтобы существовали другие варианты.

iУведомление от модератора /dev/random
Да, и ещё: тема переносится из "программ" в "программирование", поскольку именно к нему относятся все варианты, кроме 3-го.
Спасибо сказали:
DSS
Сообщения: 390

Re: Отредактировать ELF

Сообщение DSS »

/dev/random писал(а):
05.09.2011 18:45
Варианты:
1) Создать файл локализации, заменяющий текст. Ограничение: работает только если автор вставил поддержку локализации, что маловероятно для встраиваемых систем.
2) Дизассемблировать и собрать заново. Ограничение: нужно знать архитектуру железки и поставить кросскомпилятор для этой архитектуры. Также желательно знать синтаксис её ассемблера.
3) Открыть hex-редактором. Ограничение: длина новой строки должна точно совпадать с длиной старой.
4) Где-то добыть исходники. Ограничение: нужно найти автора, убедить его дать исходники, узнать архитектуру, поставить кросскомпилятор.

Сомневаюсь, чтобы существовали другие варианты.

1) Нету поддержки локализации. Все строки жёстко прописаны внутрях исполняемого файла.
2) Как это реализовать я даже близко не представляю.
4) Найти автора практически невозможно. Да и исходников у него скорее всего нет.

А вот по третьему пункту есть вопрос: а нельзя ли тем же самым hex-редактором каким-то образом внести какие-то изменения (может быть в заголовки ELF), чтобы длина строки изменилась? Например, используя то, что сегменты должны быть выровнены по границам страниц. Или с прошлого века ничего принципиально не изменилось и для различения переменных используется исключительно смещение от начала секции?
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Отредактировать ELF

Сообщение Portnov »

Если есть какие-то сведения о том, как оно реализовано в программе, то может какие-то шансы есть. Ну, например, если известно, что в данной секции расположена только одна текстовая строка, и она вычитывается просто пока не встретится \0. Тогда да, можно поправить в заголовках размер секции. А в общем случае — никак.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Отредактировать ELF

Сообщение drBatty »

DSS писал(а):
06.09.2011 08:53
А вот по третьему пункту есть вопрос: а нельзя ли тем же самым hex-редактором каким-то образом внести какие-то изменения

дык вбейте пробелы, если строка меньше. Если больше - NoWay.
вообще, можно поковырять, но это стОит $$$.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: Отредактировать ELF

Сообщение taaroa »

хех. задача перебить копирайты? ☺
есть техника rtp-патчинга, но вряд ли это применимо в данном случае.

http://www.eresi-project.org/
:wq
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Отредактировать ELF

Сообщение frp »

/dev/random писал(а):
05.09.2011 18:45
2) Дизассемблировать и собрать заново.

Это нереально без хороших знаний ассемблера человеком, делающим это. У дизассемблера куча проблемм, которые можно пофиксить только руками:
1. Он не всегда корректно отделяет код от данных (хотя для 90% случаев дизассемблеры справляются, кроме самомодифицирующегося кода и джампов по адресам, взятым из памяти)).
2. Он не способен однозначно определить, имеем ли мы дело со смещением или с числом.
Эти две крупные проблеммы дизассемблеры частично решают кучей эвристик, но все равно в большинстве случаев выхлоп дизассемблера не собирается в работающую программу, то есть, нужен человек, анализирующий весь выхлоп и фиксящий ошибки.
DSS писал(а):
06.09.2011 08:53
А вот по третьему пункту есть вопрос: а нельзя ли тем же самым hex-редактором каким-то образом внести какие-то изменения (может быть в заголовки ELF), чтобы длина строки изменилась?

Нет. В одну секцию забиваются все строки вместе.
DSS писал(а):
06.09.2011 08:53
Или с прошлого века ничего принципиально не изменилось и для различения переменных используется исключительно смещение от начала секции?

Ничего не изменилось.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Отредактировать ELF

Сообщение drBatty »

frp писал(а):
17.09.2011 12:24
но все равно в большинстве случаев выхлоп дизассемблера не собирается в работающую программу, то есть, нужен человек, анализирующий весь выхлоп и фиксящий ошибки.

drBatty писал(а):
06.09.2011 13:37
но это стОит $$$.

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
rusink
Сообщения: 1
ОС: debian

Re: Отредактировать ELF

Сообщение rusink »

DSS писал(а):
05.09.2011 13:09
Есть запускаемый файлик. Формата ELF, естественно.

В файлике имеются некоторые текстовые данные, которые нужно поправить. Исходника, с которого можно было бы скомпилировать, нету.
Кроме банального исправления очепяток, есть необходимость вставить пару строчек, среди остальных.
Естественно, работоспособность файлика должна сохранится.
Чем бы поковырять?

Можно внести изменения в текстовые блоки, но если "хвост" нового текста налезает на блок/строчку справа, его надо соответсвенно сдвинуть вправо и изменить указатель позиции этого блока. Указатель находится в секции инструкций .text, сами текстовые блоки - в секции .rodata. Между текстовыми блокам должен остаться как минимум один нулевой байт. С этой проблемой обычно сталкиваются русификаторщики. "Ковырять" можно дизассемблером, а править hex - редактором.
Спасибо сказали: