Информация Как преобразовать бинарник программы в сишный код


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 142
Репутация
8 268
images


Всем привет !

Наверное нужно-было разместить это, там где обсуждают низкоуровневое программирование, но всё-же опубликую здесь, может нужно кому будет. Например для встраивания шеллов в своих так-сказать любимцев. :)

Итак задача:

Есть бинарник, неважно что, екзешник, elf - образ или что-ещё. Нужно преобразовать его в си-код, что-бы получить буфер.

Пример для понимания, если откроете екзешник, то у вас будет набор байт, например 000300007477e652...., а надо сделать примерно так:

0x00, 0x03, 0x00, 0x00, 0x74, 0x77, 0xe6, 0x52

Что-бы потом сделать так:
Код:
char buffer_shell = {0x00, 0x03, 0x00, 0x00, 0x74, 0x77, 0xe6, 0x52}

Далее уже можете работать с этим буфером, например запустить другую программу из своей.

Что-то нигде не смог найти решение этой задачи, как видите если например программа более мегабайта, то править так запаришься.

Да и вообще стало интересно написать небольшой преобразователь на си. :)

Вот-что получилось:
Код:
#include <stdio.h>

#define PATH_FILE_OPEN "myProga.exe"
#define PATH_FILE_HEX "hex.txt"
#define SIZE_FILE 3*1024*1024

static unsigned int buffer [SIZE_FILE];
static unsigned int tmp;
static int i = 0;
static int count = 0;

int main(void)
{
    FILE *hFileOpen;
    FILE *hFileHex;

    hFileOpen = fopen(PATH_FILE_OPEN, "r");
    hFileHex  = fopen(PATH_FILE_HEX, "w");

    if ((hFileOpen == NULL) || (hFileHex == NULL))
    {
        printf("Error open files ");
        return 0;
    }

    while(!feof(hFileOpen))
    {
          tmp = getc (hFileOpen);
          if (i < SIZE_FILE) buffer [i] = tmp; else printf ("Error file size = %d \n", i);
          i++;
    }

    printf ("I = %d \n", i);

    close (hFileOpen);

    for (int j = 0; j<(i-1); j++)
    {
        count++; 
    if ( count == 10 ) 
        {
            fprintf (hFileHex, " 0x%02x,\n", (((unsigned int*)buffer)[j]));
            count = 0; 
        } else  fprintf (hFileHex, " 0x%02x, ", (((unsigned int*)buffer)[j]));
    };

    close (hFileHex);

    return(0);
}

PATH_FILE_OPEN "myProga.bin" - Указываете имя своей программы (Должна находится в папке с программой)
PATH_FILE_HEX "hex.txt" - Будет преобразованный файл.
SIZE_FILE 3*1024*1024 - Размер файла, три мегабайта. Для буфера, если файл больше, то можно увеличить.

Можно откомпилировать на любой оси, использовал только библиотеку #include <stdio.h>. :)

Ну это так может кому нужно будет. :)
 

advalex

Уважаемый пользователь
Форумчанин
Регистрация
01.01.2021
Сообщения
31
Репутация
11
Гениально и просто. Но получается, что из одной программы по сути запустится другая программа, но это типо уже не запуск шелкода.
 

advalex

Уважаемый пользователь
Форумчанин
Регистрация
01.01.2021
Сообщения
31
Репутация
11
И красивей бы лоб добавить имена файла через аргументы)))))
 
Верх Низ