URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 106376
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Запись бинарных данных в секцию ELF"

Отправлено auto_tips , 20-Янв-16 01:23 
Стоит задача - в программе запрятать бинарные данные. Допустим архив.

Создаём файл data.cpp для включения запланированных для добавления данных:

   volatile char a[DATASIZE] __attribute__((section(".her"))) = {0xfa};

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

Далее компилируем data.cpp в object-файл data.o:

   g++ -c -g data.cpp

Смотрим shed-адрес секции. И производим заливку согласно предустановленному размеру переменной "a". На моём компьютере это выглядит так:

   dd if=out.tar of=data.o bs=1 count= seek=52 conv=notrunc

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

   g++ -c -g main.cpp
   g++ -g -o test main.o data.o

URL:
Обсуждается: https://www.opennet.ru/tips/info/2936.shtml


Содержание

Сообщения в этом обсуждении
"Запись бинарных данных в секцию ELF"
Отправлено asavah , 20-Янв-16 01:23 
уважаемый студент, ваше стремление к написанию примитивных гайдов для одноклеточных похвально,
но давайте вы перестанете изобретать давно изобретённые велосипеды и приделывать к ним колёса произвольной формы, серьёзно, ваши гайдики печальны и бесполезны для любого человека осилившего гугл.

первый пример из закромов (закладок):
https://balau82.wordpress.com/2012/02/19/linking-a-binary-bl.../


"Запись бинарных данных в секцию ELF"
Отправлено maneken , 20-Янв-16 05:49 
А так чем плохо? Ничего дополнительно делать не надо.
__asm(
".global data_file\n"
".global _data_file\n"
"data_file:\n"
"_data_file:\n"
".incbin \"data.zip\"\n"
".global data_file_len\n"
".global _data_file_len\n"
"data_file_len:\n"
"_data_file_len:\n"
".int .-data_file \n"
);
extern void * data_file;
extern void * data_file_len;
unsigned char * data =(unsigned char *)&data_file;
int * datalen =(int *) &data_file_len;

"Запись бинарных данных в секцию ELF"
Отправлено 3619629066 , 20-Янв-16 11:16 
>А так чем плохо?

wow. Очень, очень хорошо.


"Запись бинарных данных в секцию ELF"
Отправлено dq0s4y71 , 03-Фев-16 19:46 
Ассемблерные вставки не есть хорошо.

"Запись бинарных данных в секцию ELF"
Отправлено a , 20-Янв-16 17:59 
man xxd

"Запись бинарных данных в секцию ELF"
Отправлено 3619629066 , 20-Янв-16 18:04 
10 mb?

"Запись бинарных данных в секцию ELF"
Отправлено a , 20-Янв-16 18:17 
Делается один раз:

dd bs=10m count=1 if=/dev/random of=random.bin
1+0 records in
1+0 records out
10485760 bytes transferred in 0.636338 secs (16478287 bytes/sec)

time xxd -i random.bin > random.c
real    0m1.997s
user    0m1.935s
sys    0m0.057s

time gcc -c random.c
real    0m9.414s
user    0m8.947s
sys    0m0.350s


"Запись бинарных данных в секцию ELF"
Отправлено Аноним , 24-Янв-16 23:23 
А не проще volatile char a[DATASIZE] = {бинарь}?

"Запись бинарных данных в секцию ELF"
Отправлено Andrey Mitrofanov , 25-Янв-16 10:05 
> А не проще volatile char a[DATASIZE] = {бинарь}?

Двоичные патчОры ещё не открыли для себя генерацию программ, здесь - хексов в Си. Бинарное программирование оно такое -- сложное и малодоступное.


"Запись бинарных данных в секцию ELF"
Отправлено pavlinux , 04-Фев-16 22:55 
$ rar a -sfx bash.exe out.tar;