LINUX.ORG.RU

пакер бинарника с ресурсами

 


0

3

Здравствуйте, посоветуйте программу.
Есть бинарник(X) и какие-то рядом лежащие ресурсы: картинки, файл, либы и т.д.
Надо все это запихнуть в один бинарный файл(Y), после запуска которого:

$ Y # без всяких параметров! это важно
все это добро распакуется в указанную дерикторию(которую мы
указали при упаковке) и от-туда будет запущен бинарник(X).


Несложно сделать подручными средствами. Запаковываешь директорию, например, в tar.gz, перекодируюешь в base64 и вставляешь как heredoc в целевой скрипт, а он выполняет обратные действия и запускает программу. Пять минут если знаком с шеллом, и полчаса-час если тебе нужно гуглить и разбираться.

JaneDoe
()

VirtualBox и другие пакуются makeself. Сам не пробовал, но, вроде, подойдёт и в данном случае.

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

Proof of concept.

#!/bin/sh

base64 -d << THE_END | tar xz && cd tmp && ./hw
H4sIAFMnXFgAA+3VSwrCMBSF4Yy7iohze5M2Zj0qhRZqFRvR5dsgPibaUSrF/5tkkEAuHE4S9sdc
JSYD71xcjXfyvj4oU4j1YgtblEqMsYUo7VIPFp37sDlprfqmrbrw+dzY/kyFIf/6kvaO0fzt+pm/
OB/zd94pLWnHuvvz/JeLfNt0eV9n2W4TdH1ZhWvIfj0VpnLvfww93R2x4uuy/PL+v/pvZHgnjC2H
L4H+T6Cu2vZA3wEAAAAAAAAAAAAAmLUbZ2LJ0wAoAAA=
THE_END

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

Спасибо за пример, но скриптовый вариант не подойдет, т.к. на целевой машине может не оказаться нужных утилит, того же sh. Надо что бы это был бинарник в формате ELF без зависимостей.

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

не оказаться нужных утилит, того же sh

Если это нечто UNIX-подобное то этот вариант исключён.

бинарник в формате ELF без зависимостей.

Это тоже потому как оно будет зависеть от версии libc, но в целом осуществимо если ты напишешь такой бинарик и скомпилишь все статиком.

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

Если это нечто UNIX-подобное то этот вариант исключён.

По условию задачи нужен бинарник.

но в целом осуществимо если ты напишешь такой бинарик

Да, но зачем писать то, что возможно уже кто-то написал.

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

Да, но зачем писать то, что возможно уже кто-то написал.

Значит компиль статиком.

Ygor ★★★★★
()

Посмотри, как это сделано в Qt и qrc://

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

Ты изобрёл shar

Только с возможностью интеграции патча Бармина. В man shar автозапуска не видел.

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

man unzipsfx

можно создать бинарник, после запуска который или расспакуется в текущую дерикторию или в указанню через параметр -d. и не будет запускать никокой исполняемый файл внутри себя. т.е. по условию задачи не подходит. либо к нему надо писать патч

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

Там патч тривиальный.

там писать код 5 минут

Владелец одной фабрики был чрезвычайно обеспокоен. Паровой генератор, который обеспечивал светом и энергией весь его завод, сильно вибрировал. Это очень сложная проблема, общего решения которой не существует и сейчас. Множество экспертов пытались починить его, но все их попытки были безуспешны.
— Время — деньги, — повторял себе владелец фабрики, подсчитывая убытки из-за потерянной продукции, — время — деньги.
В этот момент человек в голубом комбинезоне заглянул к нему в контору. — Я могу починить ваш котёл, сэр, — сказал он.
Фабрикант был не впечатлён.
— Я приглашал лучших из лучших специалистов, чтобы они починили паровой котёл, но никто из них не смог помочь мне. Посмотрите на себя, у вас только маленькая сумка с инструментами, да и инструментов в ней не так много, если я не ошибаюсь.
— Совершенно верно, сэр. Я взял только те инструменты, которые пригодятся мне для выполнения этой работы. Так вы позволите уладить вашу проблему?
Рабочий не произвёл впечатления на фабриканта, но, поскольку терять ему было уже нечего, он повёл его в помещение, где находился котёл. В центре комнаты стоял сам котёл. От него во всех направлениях тянулось огромное количество труб, сообщающихся с каждым помещением завода. Покровительственным тоном фабрикант пригласил работника приступать к делу. Спокойно и без суеты человек в голубом комбинезоне вынул из своей сумки один инструмент, маленький резиновый молоток.
Аккуратно и методично он начал простукивать различные участки машины, внимательно прислушиваясь к звукам, которые издавала металлическая поверхность. За десять минут он простучал датчики давления, термостаты, подшипники и соединения, где, как он предполагал, находится повреждение. Наконец, он вернулся к своей сумке с инструментами, положил на место маленький молоточек и выбрал большой молоток. Он подошёл к одному из коленчатых соединений в одной из секций труб и нанёс несильный удар молотком. Эффект был мгновенным. Что-то сдвинулось, и паровой генератор перестал вибрировать.
Фабрикант был восхищён:
— Изумительно! Изумительно! Пришлите мне счёт. Удвойте ваши расценки.
— В этом нет необходимости, сэр, — ответил работник.
Когда несколько дней спустя фабрикант получил счёт, он был ошеломлён. Сумма намного превышала его ожидания. 10000 фунтов стерлингов! Большие деньги по тем временам. Несмотря на то, что он заплатил намного больше тем экспертам, которые пытались исправить поломку, но потерпели неудачу, он знал, что они провели там несколько дней. И они были представителями компаний с отличной репутацией! А этот странный человек провёл там всего десять минут.
Фабрикант дал секретарше поручение, чтобы она отослала ему запрос с просьбой подробно расписать стоимость оказанных услуг.
Вскоре с почты пришёл ответ.
За десять минут простукивания — 1 фунт.
За знание того, куда нужно ударить — 9999 фунтов.
Итого: 10000 фунтов.

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

По условию задачи нужен бинарник

Тогда ты разделом ошибся, тебе нужен Job

redgremlin ★★★★★
()

Без сторонних утилит можно сделать так: c помощью objcopy прицепи бинарный блоб (или несколько блобов) файлов к бинарнику. При старте программы open, write etc.

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

нет, ты просто ведёшь себя, как аутист

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

По условию задачи нужен бинарник.

В любом разумном применении, которое может придти мне в голову, шелл-скрипт подходит. Даже на каком-нибудь embedded есть busybox, где есть необходимые команды. Более того, шелл-скрипт даже более переносим, потому что бинарник завязан на архитектуру процессора. Так что можно принять, что в любом окружении, где может быть нужно удобство для пользователя (иначе бы не было требования на отсутствие аргументов у команды и автозапуск бинарника), если есть линуксовые syscall'ы, есть и sh.

Есть только два варианта, когда может быть нужно подобное извращение:

1) Это твоя лабораторная/практическая работа, а ты студент. Что ж сказать... В Job! В этом мире всё так - либо ты тратишь время (и разбираешься сам), либо тратишь деньги. Каждый делает выбор исходя из того, чего у него в избытке. А сейчас твой вопрос сформулировал именно «сделай-те за меня», а не «как создать файл из программы на Си и записать туда данные».

2) Ты нашёл где-то какую-то хитрую уязвимость, которая позволяет запустить только бинарник (но не шелл-скрипт) и только без параметров, и хочешь, чтобы тебе помогли её проэксплуатировать. В этом случае (большинство пользователей этого форума со мною согласятся), я очень надеюсь, что однажды под видом помощи тебе подсунут патч Бармина и ты поймёшь, что делаешь плохие вещи.

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

Дело закончилось тем что написал примитивный пакер.
И это было совсем не больно.

Есть только два варианта

Вариантов миллионы. Вот еще один: обычному пользователю, намного приятнее скачать один единственный бинарник без всяких зависимостей, ввиде вложенных «папочек», каких-то либ, картинок, странных скриптов и расширений типа «sh». Он просто хочет схоронить один файл на флешку, съемный диск или оставить где-то в сокровенном месте, а потом, два раза кликнуть и хоп, - приложение выполнит свое дело.

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

Покажи мне хоть одного пользователя, у которого нет sh/bash/что-то ещё.

Расширение sh файлу давать не обязательно, можно оставить без расширения как обычный бинарник. Главное, чтобы в начале файла было #!/bin/sh и был флаг исполняемости у файла. Но без флага исполняемости и ELF не запустится.

Зато я вижу совсем другой вариант - пользователь хочет запустить твой установщик на какой-нибудь малинке. А тут бац, а у тебя бинарник для x86. И ничего не работает. А ведь пользователей малинки точно больше пользователей, которые как-то по-освобому собирали свой дистрибутив, чтобы там не было sh (а это нетривиальная задача, кстати, потому что многие приложения в этом случае тоже не будут корректно работать).

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

Вообщем что хотел еще сказать, в офтопик.
Что на лоре не читают тему сообщения и сами сообщения. Была представлена конкретная проблема с конкретными требованиями.
Но, все-равно навязывают какое-то левое решение не решающее нужную задачу. Так не серьезно, ребята.

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