Всем привет !
Наверное нужно-было разместить это, там где обсуждают низкоуровневое программирование, но всё-же опубликую здесь, может нужно кому будет. Например для встраивания шеллов в своих так-сказать любимцев. :)
Итак задача:
Есть бинарник, неважно что, екзешник, 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>. :)
Ну это так может кому нужно будет. :)