The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Запись бинарных данных в секцию ELF"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Запись бинарных данных в секцию ELF"  +/
Сообщение от auto_tips (ok) on 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:
Обсуждается: http://www.opennet.dev/tips/info/2936.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Запись бинарных данных в секцию ELF"  +/
Сообщение от maneken on 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;
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Запись бинарных данных в секцию ELF"  +/
Сообщение от 3619629066 email on 20-Янв-16, 11:16 
>А так чем плохо?

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

9. "Запись бинарных данных в секцию ELF"  +/
Сообщение от dq0s4y71 (??) on 03-Фев-16, 19:46 
Ассемблерные вставки не есть хорошо.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Запись бинарных данных в секцию ELF"  +/
Сообщение от a (??) on 20-Янв-16, 17:59 
man xxd
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Запись бинарных данных в секцию ELF"  +/
Сообщение от 3619629066 email on 20-Янв-16, 18:04 
10 mb?
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Запись бинарных данных в секцию ELF"  +/
Сообщение от a (??) on 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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Запись бинарных данных в секцию ELF"  +1 +/
Сообщение от Аноним (??) on 24-Янв-16, 23:23 
А не проще volatile char a[DATASIZE] = {бинарь}?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Запись бинарных данных в секцию ELF"  +/
Сообщение от pavlinux (ok) on 04-Фев-16, 22:55 
$ rar a -sfx bash.exe out.tar;
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру