информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsЗа кого нас держат?Атака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Крупный сбой Azure и других сервисов... 
 Серьезный сбой AWS положил множество... 
 Фишинговая атака на Python-разработчиков 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] rewrite PE (need example) 09.06.04 15:08  
Автор: choor Статус: Elderman
<"чистая" ссылка>
Хотелось бы узнать как с помощью си перезаписать ПЕ заголовок и добавить свою секцию, мне бы желательно пример. Не могу про это инфу найти, помогите :)
[C++] Скачай какой нить пример работы с PE 09.06.04 15:49  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Их в инете навалом. И смотри. Доки по PE есть в MSDN (сделай поиск по IMAGE_NT_HEADERS)

> Хотелось бы узнать как с помощью си перезаписать ПЕ
> заголовок и добавить свою секцию, мне бы желательно пример.
> Не могу про это инфу найти, помогите :)

Общий алгоритм такой

PVOID ImageBase;
PIMAGE_NT_HEADERS NtHeaders;
PSECTION_HEADER SectionHeader;

Мэпишь файл (или читаешь его в память) по какому нибудь адресу ImageBase

NtHeaders = ImageNtHeader(ImageBase);
if (NtHeaders == NULL)
goto fail;

SectionHeader = (PSECTION_HEADER)(((PCHAR)&NtHeaders->OptionalHeader)+NtHeaders->FileHeader.SizeOfOptionalHeader) + NtHeaders->FileHeader.NumberOfSections;

strncpy(SectionHeader->Name, "SECTNAME", 8);
и т.д.
Виртуальный адрес берешь из предыдущей секции + длина предыдущей секции (обязательно соблюдать выравнивание как в файле так и в виртуальной памяти: NtHeaders->OptionalHeader.SectionAlignment и NtHeaders->OptionalHeader.FileAlignment иначе винда просто не загрузит файл).

Потом
NtHeaders->FileHeader.NumberOfSections++;
NtHeaders->OptionalHeader.SizeOfImage += NewSectionSize;
[C++] А как записать мой код в эту самую секцию? 11.06.04 16:03  
Автор: choor Статус: Elderman
<"чистая" ссылка>
После долгово изучения интернета у меня вышло вот что:
#include <windows.h>
#include <winnt.h>
#include <conio.h>
#include <stdio.h>

#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
#define MakePtr(Type, Base, Offset) ((Type)(DWORD(Base) + (DWORD)(Offset)))

int main(int argc, char* argv[])
{
const char* PEFile="rabbit.exe";

PVOID ImageBase;
PIMAGE_DOS_HEADER DosHeader;
PIMAGE_NT_HEADERS NtHeader;
IMAGE_SECTION_HEADER SectionHeader;
SECURITY_ATTRIBUTES sa;
HANDLE hFMap,hFile;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
WORD pe;
DWORD dw;

hFile = CreateFile(PEFile,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
ReadFile(hFile,&pe,2,&dw,NULL);
hFMap=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
ImageBase=MapViewOfFile(hFMap,FILE_MAP_ALL_ACCESS,0,0,0);
DosHeader=PIMAGE_DOS_HEADER(ImageBase);
NtHeader=(PIMAGE_NT_HEADERS) NTSIGNATURE(DosHeader);
printf("Before: %x\n",DosHeader->e_lfanew);
CloseHandle(hFMap);
CloseHandle(hFile);
getch();
return 0;
}

---
Рабочий код, спокойно может работать со всем PE, но как теперь дозаписать в секцию мой код? и как выдернуть код из секции?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach