Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)

Модерирует : gyra, Maz

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

AZJIO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
; http://autoit-script.ru/index.php/topic,143.0.html
; http://forum.oszone.net/thread-148585-2.html
 
#Region [i];**** Directives created by AutoIt3Wrapper_GUI ****[/i]
#AutoIt3Wrapper_OutFile=KeyLoger.exe
#AutoIt3Wrapper_icon=KeyLoger.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=-
#AutoIt3Wrapper_Res_Description=KeyLoger.exe
#AutoIt3Wrapper_Res_Fileversion=0.1.0.0
[i]#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n[/i]
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion [i];**** Directives created by AutoIt3Wrapper_GUI ****[/i]
 
;  @AZJIO 6.11.2010 (AutoIt3_v3.2.12.1...v3.3.6.1)
 
Global Const $WH_KEYBOARD_LL = 13
Global $hStub_KeyProc = DllCallbackRegister("_Key_Proc", "int", "int;ptr;ptr")
Global $hMod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_KEYBOARD_LL, _
    "ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0)
Global $Text, $TrSv=0, $WinCurent, $WinTmp='', $KolSum0=2000, $Timer0=5, $TrIgn=0, $TrWin=0, $Size0=100
 
 
 
$Ini=@ScriptDir&'\KeyLoger.ini'
If Not FileExists($Ini) Then
    $otvet=MsgBox(4, 'Выгодное предложение', 'Хотите создать необходимый KeyLoger.ini?'&@CRLF&'Иначе выход.')
    If $otvet=6 Then
        $file = FileOpen($Ini,2)
        FileWrite($file, '[setting]' & @CRLF & _
            'KolSum=2000' & @CRLF & _
            'Timer=5' & @CRLF & _
            'Size=100' & @CRLF & _
            'TrIgn=1' & @CRLF & _
            'TrWin=1' & @CRLF & _
            'TrSv=0')
        FileClose($file)
        If Not FileExists($Ini) Then
            MsgBox(0, 'Ошибка', 'Отсутствует KeyLoger.ini.')
            Exit
        EndIf
    Else
        Exit
    EndIf
EndIf
 
$TrSv = IniRead ($Ini, 'setting', 'TrSv', 0)
$TrWin = IniRead ($Ini, 'setting', 'TrWin', 0)
$TrIgn = IniRead ($Ini, 'setting', 'TrIgn', 0)
 
$Size0 = IniRead ($Ini, 'setting', 'Size', 0)
$Timer0 = IniRead ($Ini, 'setting', 'Timer', 5)
$KolSum0 = IniRead ($Ini, 'setting', 'KolSum', 2000)
 
Opt("TrayMenuMode", 3)
Opt("TrayOnEventMode", 1)
If @compiled=0 Then TraySetIcon("KeyLoger.ico",3)
 
Global Const $WinName='KeyLoger'
If WinExists($WinName) Then Exit
$GuiPop = GUICreate($WinName, 300, 130, -1, -1, 0x80000000+0x00040000, 0x00000020+0x00000080)
GUISetBkColor(0x3f3f3f)
$Label=GUICtrlCreateLabel('Старт '&$WinName, 0, 0, 300, 130, 0x0200+0x1)
GUICtrlSetFont(-1, 20, 700, 'Arial')
GUICtrlSetColor(-1, 0xffd7d7)
GUISetState()
 
For $i = 255 to 0 step -1
    WinSetTrans($GuiPop,"",$i)
    Sleep(10)
Next
GUISetState(@SW_HIDE)
 
TraySetToolTip($WinName)
 
$Item1=TrayCreateItem("Буфер KeyLoger")
TrayItemSetOnEvent(-1, "_TextinGui")
 
$Item2=TrayCreateItem("Справка")
TrayItemSetOnEvent(-1, "_Help")
 
$Item3=TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "OnAutoItExit")
 
If $TrSv=1 Then AdlibRegister('_AutoSave', $Timer0*60000)
 
While 1
    Sleep(1000)
WEnd
 
 
Func _Help()
    MsgBox(0, 'Справка', "Утилита KeyLoger предназначена для слежения за нажатием клавиш клавиатуры и позволяет восстановить набранный текст из буфера KeyLoger при зависании программы, в который набирался этот текст (браузер или текстовый редактор)."&@CRLF&"Утилита не предназначена для скрытого слежения, поэтому иконка выведена в трей и при запуске отображается заставка."&@CRLF&"При использовании утилиты учитывайте, что в буфере KeyLoger'а может оказаться пароль или другие конфиденциальные данные. Поэтому остальная ответственность ложится на пользователя.")
EndFunc
 
 
Func _TextinGui()
    TrayItemSetState($Item1,128)
    TrayItemSetState($Item2,128)
    TrayItemSetState($Item3,128)
    Local $Gui, $Edit, $AutoSave, $KolSum, $Timer, $Size, $Ignore, $IgnWin, $filename, $aText
    $Gui = GUICreate('Буфер KeyLoger', 600, 450);, -1, -1, -1, 0x00000080
    $Edit=GUICtrlCreateEdit($Text, 5, 5, 410, 440, 0x0004+0x0040+0x1000+0x00200000)
    ; $Edit=GUICtrlCreateEdit($Text, 5, 5, 410, 440);, 0x0004
 
    GUICtrlCreateGroup('', 418, 4, 178, 120)
 
    $AutoSave=GUICtrlCreateCheckbox('Автосохранение', 425, 15, 120, 17)
    If $TrSv=1 Then GUICtrlSetState(-1, 1)
 
    GUICtrlCreateLabel('Колич. симв. для сохран.', 425, 37, 123, 17)
    $KolSum=GUICtrlCreateInput($KolSum0, 550, 34, 40, 20)
 
    GUICtrlCreateLabel('Интервал проверки, мин', 425, 60, 133, 17)
    $Timer=GUICtrlCreateInput($Timer0, 560, 58, 30, 20)
 
    GUICtrlCreateLabel('Миним. разм, файла, кб'&@CRLF&'для записи в новый', 425, 83, 133, 34)
    $Size=GUICtrlCreateInput($Size0, 560, 81, 30, 20)
 
    $Ignore=GUICtrlCreateCheckbox('Игнорировать спец-клавиши', 425, 140, 170, 16)
    If $TrIgn=1 Then GUICtrlSetState(-1, 1)
 
    $IgnWin=GUICtrlCreateCheckbox('Игнорировать имена окон', 425, 160, 170, 16)
    If $TrWin=1 Then GUICtrlSetState(-1, 1)
 
    GUICtrlCreateLabel('Редактирование текста'&@CRLF&'игнорируется в логе', 425, 400, 170, 34)
 
    GUISetState()
 
    ControlFocus($Gui, '', $Edit)
    Send('^{END}')
 
    While 1
        $msg = GUIGetMsg()
       Select
           Case $msg = $IgnWin
                If GUICtrlRead($IgnWin)=1 Then
                    $TrWin=1
                Else
                    $TrWin=0
                EndIf
                IniWrite($Ini, 'setting', 'TrWin', $TrWin)
           Case $msg = $Ignore
                If GUICtrlRead($Ignore)=1 Then
                    $TrIgn=1
                Else
                    $TrIgn=0
                EndIf
                IniWrite($Ini, 'setting', 'TrIgn', $TrIgn)
           Case $msg = $AutoSave
                $KolSum0=GUICtrlRead($KolSum)
                $Timer0=GUICtrlRead($Timer)
                $Size0=GUICtrlRead($Size)
                If GUICtrlRead($AutoSave)=1 Then
                    $TrSv=1
                    AdlibRegister('_AutoSave', $Timer0*60000)
                Else
                    $TrSv=0
                    AdlibUnRegister('_AutoSave')
                EndIf
                IniWrite($Ini, 'setting', 'TrSv', $TrSv)
                IniWrite($Ini, 'setting', 'Timer', $Timer0)
                IniWrite($Ini, 'setting', 'KolSum', $KolSum0)
                IniWrite($Ini, 'setting', 'Size', $Size0)
 
           Case $msg = -3
                If $Size0<>GUICtrlRead($Size) Then
                    $Size0=GUICtrlRead($Size)
                    IniWrite($Ini, 'setting', 'Size', $Size0)
                EndIf
                If $KolSum0<>GUICtrlRead($KolSum) Then
                    $KolSum0=GUICtrlRead($KolSum)
                    IniWrite($Ini, 'setting', 'KolSum', $KolSum0)
                EndIf
                If $Timer0<>GUICtrlRead($Timer) Then
                    $Timer0=GUICtrlRead($Timer)
                    IniWrite($Ini, 'setting', 'Timer', $Timer0)
                    AdlibUnRegister('_AutoSave')
                    AdlibRegister('_AutoSave', $Timer0*60000)
                EndIf
 
                GUIDelete($Gui)
                If StringRegExp($Text,'(?s).*\r\nCtrl\+\r\nEnd\r\n$', 0) Then $Text=StringTrimRight($Text, 13)
 
                TrayItemSetState($Item1,64)
                TrayItemSetState($Item2,64)
                TrayItemSetState($Item3,64)
                ExitLoop
       EndSelect
    WEnd
EndFunc
 
Func _AutoSave()
    If StringLen($Text)>$KolSum0 Then
        $i = 0
        Do
            $i+=1
        Until Not FileExists(@ScriptDir&'\KeyLog_'&$i&'.log')
        Dim $filename=@ScriptDir&'\KeyLog_'&$i-1&'.log'
        If FileGetSize($filename)>$Size0*1024 Then $filename=@ScriptDir&'\KeyLog_'&$i&'.log'
        $Text=StringRegExpReplace($Text, '(\r\n){2,}', @CRLF&@CRLF) ;удаляем многократные переходы строк
 
        $aText=StringRegExp($Text,'(?s)(^.*)\r\n(.*)$',3)
        If @Error Then
            Local $file = FileOpen($filename,1)
            FileWrite($file, @CRLF&@MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF&$Text)
            FileClose($file)
            $Text=''
        Else
            If UBound($aText)=2 Then
                Local $file = FileOpen($filename,1)
                FileWrite($file, @CRLF&@MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF&$aText[0])
                FileClose($file)
                $Text=$aText[1]
            EndIf
        EndIf
    EndIf
EndFunc
 
Func _Key_Proc($nCode, $wParam, $lParam)
 
    Local $aRet, $KEYHOOKSTRUCT
 
    If $nCode < 0 Then
        $aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
        Return $aRet[0]
    EndIf
 
    If $wParam = 256 Then
        $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
        _EvaluateKey_Proc(DllStructGetData($KEYHOOKSTRUCT, 1))
    EndIf
 
    $aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
    Return $aRet[0]
EndFunc
 
Func _EvaluateKey_Proc($nKeyCode)
    Local $sCapt_Codes, $sEng_Codes, $sEngShift_Codes, $sRus_Codes, $sRusShift_Codes, $sUkr_Codes, $sUkrShift_Codes
    Local $aCapture_Codes, $aEng_Codes, $aEngShift_Codes, $aRus_Codes, $aRusShift_Codes, $aUkr_Codes, $aUkrShift_Codes
    Local $sChar
 
If $TrWin=0 Then
    $WinCurent=WinGetHandle("[ACTIVE]")
    If $WinTmp<>$WinCurent Then
        $Text&=@CRLF&'======= '&WinGetTitle("[ACTIVE]")&' ======='&@CRLF
        $WinTmp=$WinCurent
    EndIf
EndIf
 
If $TrIgn=0 Then
    Switch $nKeyCode
        Case 27
            $Text&=@CRLF&'Esc'&@CRLF
        Case 44
            $Text&=@CRLF&'Print Screen / SysRq'&@CRLF
        Case 145
            $Text&=@CRLF&'Scroll Lock'&@CRLF
        Case 19
            $Text&=@CRLF&'Pause / Breack'&@CRLF
        Case 45
            $Text&=@CRLF&'Insert'&@CRLF
        Case 46
            $Text&=@CRLF&'Delete'&@CRLF
        Case 36
            $Text&=@CRLF&'Home'&@CRLF
        Case 35
            $Text&=@CRLF&'End'&@CRLF
        Case 33
            $Text&=@CRLF&'Page Up'&@CRLF
        Case 34
            $Text&=@CRLF&'Page Down'&@CRLF
        Case 37
            $Text&=@CRLF&'Left'&@CRLF
        Case 38
            $Text&=@CRLF&'Up'&@CRLF
        Case 39
            $Text&=@CRLF&'Right'&@CRLF
        Case 40
            $Text&=@CRLF&'Down'&@CRLF
        Case 112 To 127
            $F=$nKeyCode-111
            If Not StringRegExp($Text,'(?s).*\r\nF'&$F&'-$', 0) Then $Text&=@CRLF&'F'&$F&'-'
        Case 160, 161 ; слишком фонит эта клавиша при наборе текстов, выключаем её из лога
            ; $Text&=@CRLF&'Shift'&@CRLF
        Case 20
            If Not StringRegExp($Text,'(?s).*\r\nCaps Lock - $', 0) Then $Text&=@CRLF&'Caps Lock - '
        Case 144
            $Text&=@CRLF&'Num Lock'&@CRLF
        Case 91
            If Not StringRegExp($Text,'(?s).*\r\nWinL\+$', 0) Then $Text&=@CRLF&'WinL+'
        Case 92
            If Not StringRegExp($Text,'(?s).*\r\nWinR\+$', 0) Then $Text&=@CRLF&'WinR+'
        Case 162, 163
            If Not StringRegExp($Text,'(?s).*\r\nCtrl\+$', 0) Then $Text&=@CRLF&'Ctrl+'
        Case 164, 165
            If Not StringRegExp($Text,'(?s).*\r\nAlt\+$', 0) Then $Text&=@CRLF&'Alt+'
        Case 8
            $Text&=@CRLF&'BackSpace'&@CRLF
    EndSwitch
EndIf
 
If $TrIgn=1 And(_IsPressed(11) Or _IsPressed(12)) Then
    Return
Else
    Switch $nKeyCode
        ; Case
            ; $Text&=@CRLF&&@CRLF
        ; Case
            ; $Text&=@CRLF&&@CRLF
        ; Case
            ; $Text&=@CRLF&&@CRLF
        Case 111
            $Text&='/'
        Case 106
            $Text&='*'
        Case 109
            $Text&='-'
        Case 107
            $Text&='+'
        Case 110
            $Text&='.'
        Case 96 To 105
            $Text&=$nKeyCode-96
        Case 9
            $Text&='    '
        Case 13
            $Text&=@CRLF
        Case 226, 220
            If _IsPressed(10) Then ; если нажата клавиша Shift
                Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
                    Case 0409
                        $Text&='|'
                    Case 0419, 0422
                        $Text&='/'
                EndSwitch
            Else ; если не нажата клавиша Shift
                $Text&='\'
            EndIf
        ; проверяться будут только нажатия на буквы и цифры и еще клавиши минус и плюс, что после клавиши 0.
        Case 65 To 90, 48 To 57, 186 To 192, 219, 221, 222, 32
            $aCapture_Codes = "АQWERTYUIOPЫЭASDFGHJKLєЮZXCVBNMјѕї 1234567890Ѕ»"
 
            $aEng_Codes = StringSplit("`qwertyuiop[]asdfghjkl;'zxcvbnm,./ 1234567890-=", '')
            $aEngShift_Codes = StringSplit('~QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?' & ' !@#$%^&*()_+', '')
 
            $aRus_Codes = StringSplit("ёйцукенгшщзхъфывапролджэячсмитьбю." & " 1234567890-=", '')
            $aRusShift_Codes = StringSplit('ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,' & ' !"№;%*()_+', '')
 
            $aUkr_Codes = StringSplit("'йцукеягшщзхЇфівапролджєнчсмитьбю. 1234567890-=", '')
            $aUkrShift_Codes = StringSplit("’ЙЦУКЕЯГШЩЗХЇФІВАПРОЛДЖЄНЧСМИТЬБЮ," & ' !"№;%*()_+', '')
 
            Switch _WinGetKeyboardLayout(WinGetHandle("[ACTIVE]"))
                Case 0409 ;Если раскладка английская
                    If _IsPressed(10) Then ; если нажата клавиша Shift
                        $sChar = _ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aEngShift_Codes)
                    Else ; если не нажата клавиша Shift
                        $sChar = _ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aEng_Codes)
                    EndIf
 
                Case 0419 ;Если расскладка русская
                    If _IsPressed(10) Then ; если нажата клавиша Shift
                        $sChar = _ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aRusShift_Codes)
                    Else ; если не нажата клавиша Shift
                        $sChar = _ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aRus_Codes)
                    EndIf
 
                Case 0422 ;Если расскладка украинская
                    If _IsPressed(10) Then ; если нажата клавиша Shift
                        $sChar = _ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aUkrShift_Codes)
                    Else ; если не нажата клавиша Shift
                        $sChar = _ReplaceKeyCode_Proc($nKeyCode, $aCapture_Codes, $aUkr_Codes)
                    EndIf
            EndSwitch
            $Text&=$sChar
        ; Case Else ; если была нажата иная клавиша, то добавляем её код.
            ; If StringRegExp($Text,'(?s).*\r\nкод клавиши = [\d,]+\r\n$', 0) Then
                ; $Text=StringTrimRight($Text, 2)
                ; $Text&=','&$nKeyCode &@CRLF
            ; Else
                ; $Text&=@CRLF&'код клавиши = '&$nKeyCode &@CRLF
            ; EndIf
    EndSwitch
EndIf
EndFunc
 
;Функция для замены кодов нажатых клавиш с массива
Func _ReplaceKeyCode_Proc($nKeyCode, $aSearch_Array, $aReplace_Array)
    Local $n=StringInStr($aSearch_Array, Chr($nKeyCode), 1)
    $nKeyCode = Asc($aReplace_Array[$n])
    Return Chr($nKeyCode)
EndFunc
 
;функция позволяет узнать язык текущей расскладки клавиатуры
Func _WinGetKeyboardLayout($hWnd)
    Local $aRet = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)
    $aRet = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $aRet[0])
 
    Return "0000" & Hex($aRet[0], 4)
EndFunc
 
Func OnAutoItExit()
    If $TrSv=1 Then
        $KolSum0=0
        Global $filename
        _AutoSave()
    EndIf
    Exit
EndFunc
 
Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
If @error Then Return SetError(@error, @extended, False)
Return BitAND($a_R[0], 0x8000) <> 0
EndFunc

Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 15:11 06-11-2010 | Исправлено: AZJIO, 06:51 09-11-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
gyra (23-01-2020 10:51): AutoIT (Часть 4)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru