The OpenNET Project / Index page

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

Запись бинарных данных в секцию ELF
Стоит задача - в программе запрятать бинарные данные. Допустим архив. 

Создаём файл 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


Альтернативный вариант от посетителя maneken:

   __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;
 
19.01.2016 , Автор: 赤熊
Ключи: gcc, elf, compile, cpp / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / C/C++, сборка, отладка

Обсуждение [ RSS ]
  • 1.1, asavah (ok), 01:23, 20/01/2016 [ответить]  
  • +/
    уважаемый студент, ваше стремление к написанию примитивных гайдов для одноклеточных похвально,
    но давайте вы перестанете изобретать давно изобретённые велосипеды и приделывать к ним колёса произвольной формы, серьёзно, ваши гайдики печальны и бесполезны для любого человека осилившего гугл.

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

     
  • 1.2, maneken (?), 05:49, 20/01/2016 [ответить]  
  • +/
    А так чем плохо? Ничего дополнительно делать не надо.
    __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;
     
     
  • 2.3, 3619629066 (?), 11:16, 20/01/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >А так чем плохо?

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

     
  • 2.9, dq0s4y71 (??), 19:46, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ассемблерные вставки не есть хорошо.
     

  • 1.4, a (??), 17:59, 20/01/2016 [ответить]  
  • +/
    man xxd
     
     
  • 2.5, 3619629066 (?), 18:04, 20/01/2016 [^] [^^] [^^^] [ответить]  
  • +/
    10 mb?
     
     
  • 3.6, a (??), 18:17, 20/01/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Делается один раз:

    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

     

  • 1.7, Аноним (-), 23:23, 24/01/2016 [ответить]  
  • +1 +/
    А не проще volatile char a[DATASIZE] = {бинарь}?
     
     
  • 2.8, Andrey Mitrofanov (?), 10:05, 25/01/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > А не проще volatile char a[DATASIZE] = {бинарь}?

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

     

  • 1.10, pavlinux (ok), 22:55, 04/02/2016 [ответить]  
  • +/
    $ rar a -sfx bash.exe out.tar;
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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