Все наверно слышали о знаменитом Джеймсе…. Бондович который. А с чего это я тут начал разговор о забугорных фильмах?
1281549388 james bond 241x300 Привет от Джеймса
А вот к чему я веду: в прошлом посте был продемонстрирован способ обхода firewall’a. Используя данную технику можно с достаточной легкостью создавать сообщения-самоудалялки. Так подкинешь своему другу послание — он его откроет — прочитает, а затем это послание исчезнет с диска. Потом можно ходить и говорить: а докажи!

Итак, алгоритм действий будет такой:

  • Показать сообщение
  • Удалить программу

Если с первым пунктом проблем быть не должно (любой знаток знает MessageBoxA), то со вторым немножко помучится придется. Я представляю себе это так: сначала мы выбираем процесс-жертву, затем получаем там  память, пишем все что надо в тот процесс и в завершении создаем удаленную нить эээ… нееет, сначала  показываем сообщение, а затем только удаляем себя. Итак, на бумаге хорошо, а в коде лучше. Код получения PID’a я описывать не буду, опишу лишь новое. В самом начале описывается:

typedef VOID (WINAPI *S)(DWORD dwMilliseconds);
typedef BOOL (WINAPI *DFA)(LPCTSTR lpFileName);

struct StartupInfo
{
        char szProgramName[MAX_PATH];
        S fSleep;
        DFA fDeleteFileA;
};

Здесь все просто: Нам нужны функция ожидания — чтобы подождать освобождения всех бяк и функция для удаления файла. Также нужна переменная с именем файла, а иначе — что удалять? Далее код процедуры — инъекции:

DWORD __stdcall InjectionProcedure(LPVOID p)
{
        StartupInfo *info = (StartupInfo *)p;

        info->fSleep(1000);
        info->fDeleteFileA(info->szProgramName);

        return 0;
}

Сначала ждем, потом удаляем. Банально. А вот и код главной программы:

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        //Код, который будет самоудалятся после просмотра сообщения

        StartupInfo info;
        memset(&info,0,sizeof(info));

        GetModuleFileName(NULL,info.szProgramName,sizeof(info.szProgramName));

        info.fDeleteFileA = (DFA)GetProcAddress(LoadLibrary("Kernel32.dll"),"DeleteFileA");
        info.fSleep = (S)GetProcAddress(LoadLibrary("Kernel32.dll"),"Sleep");

        //*************************************************************************************************************

        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,GetPid("explorer.exe"));

        LPVOID lpThread = VirtualAllocEx(hProcess,NULL,4096,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
        LPVOID lpParametr = VirtualAllocEx(hProcess,NULL,sizeof(info),MEM_COMMIT,PAGE_READWRITE);

        DWORD dwWritten;

        WriteProcessMemory(hProcess,lpThread,InjectionProcedure,4096,&dwWritten);
        WriteProcessMemory(hProcess,lpParametr,&info,sizeof(info),&dwWritten);

        //*************************************************************************************************************

        MessageBox(0,"Это секретное сообщение! Оно самоудалится после прочтения","Внимание",MB_ICONINFORMATION);

        //*************************************************************************************************************

        DWORD ThreadId;
        if(CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)lpThread,lpParametr,0,&ThreadId)==0)
                MessageBox(0,"Не ленитесь, удалите сами","!",MB_ICONERROR);

        return 0;
}

Создаем структуру, инициализируем ее — то есть присваиваем ее полям адреса нужных функций и имя программы, затем открываем эксплорер, аллочим там память и записываем наш суперский код. После этого пишем сообщение. Как только пользователь кликнет «Ок» выполнение программы продолжится — будет создан наш тред который и подотрет за собой. Ну вот и все  вроде бы. Ничего страшного. Успехов в ковырянии возможностей windows. Как и положено, полный исходник качается тут.

tt twitter big4 Привет от Джеймса tt digg big4 Привет от Джеймса tt facebook big4 Привет от Джеймса tt gmail big4 Привет от Джеймса tt myspace big4 Привет от Джеймса tt reddit big4 Привет от Джеймса

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Друзья
Блог линуксоида Программы для диагностики компьютера
Супер Pixel
Убивалка флешаБэкконект шелл. Часть вторая.Бэкконект шелл. Начало.НАМ для деления чиселПростая арифметикаПередача файлов. Часть третья. Клиент.Dll injectionСканер портовКодировка текста в BMPРухнул на два дняПередача файлов. Часть вторая. Сервер.Поворот и BMPCRC32 суммаBMP форматфайловые вирусыассемблер, строкиАссемблер и матрицапримеры ассемблерМногопоточное программированиеАрхитектура клиент — серверРаздача ICQПишем шуткупишем паукаПривет от ДжеймсаОбход firewallЗагрузка картинок на Gyazo, прямо из ThunarКейлоггер 3Плюшки в контекстном меню Thunarc по сетиКейлоггер 2КейлоггерСкачать Ассемблер!VirusCheckerОтморозки мешают жить ?! Не проблемма !Cкрипты для взлома аккаунтов QIPWinAPI. Работа с файлами. Часть третья. ЧтениеDlink exploitБрут сайта etxt.ruКрасивая раскладка клавиатуры в GnomeМои безделушки на PerlКак запускать Perl скрипты под WindowsБрутфорс партнёрки ZipCoinПарсер upwap.ruИзменения в блогеЧудо ЗаливалкаСкрипт для загрузки файлов на Zalil.ruЯндекс «чоткий» поисковик!WinAPI. Работа с файлами. Часть вторая. ЗаписьWinAPI. Работа с файлами. Часть первая. ПоискПолучение MD5 хеша средствами C++Что нам стоить letitfile.com забрутить?WarCraft III запуск под LinuxЭнтропия файлаWinsock и C++. Мини прокси. Часть |\\/. Завершающая.Перепилил чекер для 4gameЧекер акаунтов YoupornCMailSend v 1.1. Отправка почы без проблемСлучайные числаWinsock и C++. Часть |||. smtp монстр.Брутфорс LetitFile.comИспользование X-Forwarded-For, для обмана веб-сервера, подмена IP подручными средствамиДело было вечером, делать было нечего…Мысли о аудио сервереПарсер ников из твиттераКонец школоло…Perl+Linux. Заметка первая (Удобный Paste bin).Бэкконект шелл.E-MAIL + winsocket + Cpp. Сложно?winsock и C++. Часть ||. Атака клоунов.C++ резолвинг адресаPerl, анализ HTML кода и определение CMSМатематика в C++winsock и C++