Есть запускаемый файлик. Формата ELF, естественно.
В файлике имеются некоторые текстовые данные, которые нужно поправить. Исходника, с которого можно было бы скомпилировать, нету.
Кроме банального исправления очепяток, есть необходимость вставить пару строчек, среди остальных.
Естественно, работоспособность файлика должна сохранится.
Чем бы поковырять?
Отредактировать ELF
Модератор: Модераторы разделов
-
Sleeping Daemon
- Сообщения: 1450
Re: Отредактировать ELF
DSS писал(а): ↑05.09.2011 13:09Есть запускаемый файлик. Формата ELF, естественно.
В файлике имеются некоторые текстовые данные, которые нужно поправить. Исходника, с которого можно было бы скомпилировать, нету.
Кроме банального исправления очепяток, есть необходимость вставить пару строчек, среди остальных.
Естественно, работоспособность файлика должна сохранится.
Чем бы поковырять?
Например, дзассемблером.
-
DSS
- Сообщения: 390
Re: Отредактировать ELF
Файлик трудится в самодельной железке.
В самой железке никаких средств сборки нету.
Что там накуролесил создатель этой железки - одному ему известно.
Как потом этот дизассемблированный файл собирать в рабочее состояние - непонятно.
-
/dev/random
- Администратор
- Сообщения: 5427
- ОС: Gentoo
Re: Отредактировать ELF
Варианты:
1) Создать файл локализации, заменяющий текст. Ограничение: работает только если автор вставил поддержку локализации, что маловероятно для встраиваемых систем.
2) Дизассемблировать и собрать заново. Ограничение: нужно знать архитектуру железки и поставить кросскомпилятор для этой архитектуры. Также желательно знать синтаксис её ассемблера.
3) Открыть hex-редактором. Ограничение: длина новой строки должна точно совпадать с длиной старой.
4) Где-то добыть исходники. Ограничение: нужно найти автора, убедить его дать исходники, узнать архитектуру, поставить кросскомпилятор.
Сомневаюсь, чтобы существовали другие варианты.
1) Создать файл локализации, заменяющий текст. Ограничение: работает только если автор вставил поддержку локализации, что маловероятно для встраиваемых систем.
2) Дизассемблировать и собрать заново. Ограничение: нужно знать архитектуру железки и поставить кросскомпилятор для этой архитектуры. Также желательно знать синтаксис её ассемблера.
3) Открыть hex-редактором. Ограничение: длина новой строки должна точно совпадать с длиной старой.
4) Где-то добыть исходники. Ограничение: нужно найти автора, убедить его дать исходники, узнать архитектуру, поставить кросскомпилятор.
Сомневаюсь, чтобы существовали другие варианты.
i Уведомление от модератора /dev/random Да, и ещё: тема переносится из "программ" в "программирование", поскольку именно к нему относятся все варианты, кроме 3-го.
-
DSS
- Сообщения: 390
Re: Отредактировать ELF
/dev/random писал(а): ↑05.09.2011 18:45Варианты:
1) Создать файл локализации, заменяющий текст. Ограничение: работает только если автор вставил поддержку локализации, что маловероятно для встраиваемых систем.
2) Дизассемблировать и собрать заново. Ограничение: нужно знать архитектуру железки и поставить кросскомпилятор для этой архитектуры. Также желательно знать синтаксис её ассемблера.
3) Открыть hex-редактором. Ограничение: длина новой строки должна точно совпадать с длиной старой.
4) Где-то добыть исходники. Ограничение: нужно найти автора, убедить его дать исходники, узнать архитектуру, поставить кросскомпилятор.
Сомневаюсь, чтобы существовали другие варианты.
1) Нету поддержки локализации. Все строки жёстко прописаны внутрях исполняемого файла.
2) Как это реализовать я даже близко не представляю.
4) Найти автора практически невозможно. Да и исходников у него скорее всего нет.
А вот по третьему пункту есть вопрос: а нельзя ли тем же самым hex-редактором каким-то образом внести какие-то изменения (может быть в заголовки ELF), чтобы длина строки изменилась? Например, используя то, что сегменты должны быть выровнены по границам страниц. Или с прошлого века ничего принципиально не изменилось и для различения переменных используется исключительно смещение от начала секции?
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Отредактировать ELF
Если есть какие-то сведения о том, как оно реализовано в программе, то может какие-то шансы есть. Ну, например, если известно, что в данной секции расположена только одна текстовая строка, и она вычитывается просто пока не встретится \0. Тогда да, можно поправить в заголовках размер секции. А в общем случае — никак.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Отредактировать ELF
дык вбейте пробелы, если строка меньше. Если больше - NoWay.
вообще, можно поковырять, но это стОит $$$.
-
taaroa
- Сообщения: 1319
Re: Отредактировать ELF
хех. задача перебить копирайты? ☺
есть техника rtp-патчинга, но вряд ли это применимо в данном случае.
http://www.eresi-project.org/
есть техника rtp-патчинга, но вряд ли это применимо в данном случае.
http://www.eresi-project.org/
:wq
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Отредактировать ELF
Это нереально без хороших знаний ассемблера человеком, делающим это. У дизассемблера куча проблемм, которые можно пофиксить только руками:
1. Он не всегда корректно отделяет код от данных (хотя для 90% случаев дизассемблеры справляются, кроме самомодифицирующегося кода и джампов по адресам, взятым из памяти)).
2. Он не способен однозначно определить, имеем ли мы дело со смещением или с числом.
Эти две крупные проблеммы дизассемблеры частично решают кучей эвристик, но все равно в большинстве случаев выхлоп дизассемблера не собирается в работающую программу, то есть, нужен человек, анализирующий весь выхлоп и фиксящий ошибки.
Нет. В одну секцию забиваются все строки вместе.
Ничего не изменилось.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
-
rusink
- Сообщения: 1
- ОС: debian
Re: Отредактировать ELF
DSS писал(а): ↑05.09.2011 13:09Есть запускаемый файлик. Формата ELF, естественно.
В файлике имеются некоторые текстовые данные, которые нужно поправить. Исходника, с которого можно было бы скомпилировать, нету.
Кроме банального исправления очепяток, есть необходимость вставить пару строчек, среди остальных.
Естественно, работоспособность файлика должна сохранится.
Чем бы поковырять?
Можно внести изменения в текстовые блоки, но если "хвост" нового текста налезает на блок/строчку справа, его надо соответсвенно сдвинуть вправо и изменить указатель позиции этого блока. Указатель находится в секции инструкций .text, сами текстовые блоки - в секции .rodata. Между текстовыми блокам должен остаться как минимум один нулевой байт. С этой проблемой обычно сталкиваются русификаторщики. "Ковырять" можно дизассемблером, а править hex - редактором.