首页
社区
课程
招聘
[原创]揭秘腾讯游戏登陆(详细版)
发表于: 2015-6-23 11:56 15823

[原创]揭秘腾讯游戏登陆(详细版)

2015-6-23 11:56
15823
原贴地址:
http://bbs.pediy.com/showthread.php?p=1377270#post1377270

由于大部分小伙伴发应没看懂,我就在此重新详细解释一下。

1、利用TASLogin.exe的勾子函数 输入密码的原理解释
   
   通过xt,我们发现此进程利用SetWindowsHookEx安装了一个WH_KEYBOARD_LL的低层键盘勾子,用来捕获键盘输入,回调函数声明如下
  
LRESULT CALLBACK LowLevelKeyboardProc(
    _In_  int nCode,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
  );

    参数简单说明:
         第一个用处不大,
      第二个wParam,代表是按下还是弹起,
      第三个lParam,是一个指向 KBDLLHOOKSTRUCT 的指针. 也是利用他来做为输入的
  typedef struct tagKBDLLHOOKSTRUCT {
    DWORD     vkCode;  //当前按下的键
    DWORD     scanCode;  
    DWORD     flags;
    DWORD     time;
    ULONG_PTR dwExtraInfo;
  } KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT;


2、利用方法
  
      一、构造参数,
    二、设置输入焦点窗口
    三、调用回调函数
   
3、构造参数
     int nCode = HC_ACTION;
     WPARAM wParamDown =WM_KEYDOWN;
     WPARAM wParamUp =WM_KEYUP;
     KBDLLHOOKSTRUCT pKdb={0};

4、设置输入焦点窗口
   要设置焦点窗口,肯定必须要先有窗口句柄,我采用的方法是在这个进程刚创建的时候就注入一个DLL,然后利用SetWindowsHookEx安装一个WH_GETMESSAGE勾子,在密码框窗口已经有消息的时候,说明这个窗口已经创建成功,那么我们就安装一个定时器,为什么要安装定时器呢,因为这个进程很恶心的说,创建的线程,被此进程的其它函数强制结束了,
LRESULT CALLBACK GetMsgProc(__in  int code,__in  WPARAM wParam,__in  LPARAM lParam
	)
{
	if( code == HC_ACTION )
	{
		MSG * pMsg =(MSG*)lParam;

		LONG dwStyle = GetWindowLong(pMsg->hwnd,GWL_STYLE);
		if( !g_hPwd &&  
			dwStyle & ES_PASSWORD &&
			!( dwStyle&ES_MULTILINE) )
		{
			TCHAR tcText[100];
			_stprintf_s(tcText,_T("密码框句柄:%x"),pMsg->hwnd);
			OutputDebugString(tcText);

			g_hPwd=pMsg->hwnd;
			if( !dwTimerId )
				dwTimerId = SetTimer(g_hPwd,0x1000,0x10,InputPwdTimer);
		}
	}
	return CallNextHookEx(0,code,wParam,lParam);
}


好了,密码框句柄也有了,设置焦点就太简单了吧,

5、调用勾子回调函数,
   通过XT,我们发现勾子回调函数位于 +0x16A645偏移处,
		DWORD dwModuleHanlde = (DWORD)GetModuleHandle(_T("fszwd.dat"));
		if(!dwModuleHanlde)
		{
			OutputDebugString(_T("模块还没有加载"));
			__leave;
		}
		
		if( ::GetFocus() != g_hPwd) 
		{
			::SetWindowPos(GetParent(g_hPwd),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
			::SetFocus(g_hPwd);
		}

		bInputChar =true;
		OutputDebugString(_T("已经执行"));

		g_dwCallbackAddr = dwModuleHanlde +0x16A645;

用  g_dwCallbackAddr 来保存 “勾子回调函数” 地址

typedef LRESULT  ( CALLBACK *  LowLevelKeyboardProc)(_In_  int nCode,
_In_  WPARAM wParam,_In_  LPARAM lParam);

pKdb.vkCode = 'A';  //设置虚键码
LowLevelKeyboardProc Proc=(LowLevelKeyboardProc)g_dwCallbackAddr; //
//输入字符
Proc(nCode,wParamDown,(LPARAM)&pKdb);
Proc(nCode,wParamUp,(LPARAM)&pKdb);


那么这样就输入了,'A'这个字母,其它的同理了,,

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
2
mark一下 谢谢分享
2015-6-23 12:05
0
雪    币: 22
活跃值: (458)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
揭秘腾讯游戏 的啥?
2015-6-23 12:14
0
雪    币: 76
活跃值: (206)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
感谢 分享
2015-6-23 12:36
0
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
这个看懂了吧。
2015-6-23 12:43
0
雪    币: 40
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
疾风之刃?
2015-6-23 12:48
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主辛苦了
2015-6-23 15:04
0
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
能有你们来顶一下,我觉得还是值得的。
2015-6-23 16:35
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
一个都没有看懂
2015-6-23 17:34
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
两篇都拜读了一下....

估计楼主的语文还是体育老师教的..鉴定完毕...
2015-6-23 17:44
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
先顶!感谢原创分享!
2015-6-23 19:58
0
雪    币: 76
活跃值: (206)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
明白大慨意思
2015-6-25 10:02
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼主水平真高。发个编译好的看能不能玩
2015-6-28 17:08
0
雪    币: 52
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
哥 把钩子破掉才有用 这样也就是模拟一下登录而已
2015-6-28 17:56
0
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
15
破掉勾子做啥?
2015-6-30 01:12
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
之前说的不对,现在是注入成功,但是输入好像不行了,难道TX已经封了这个方法?求楼主支招!
2015-9-6 00:36
0
雪    币: 39
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
杨sir,,我也是注入TASLogin.exe成功,被hook的回调函数地址也和xuetr上的一样。但是调用输入提示,客户端组件加载错误。郁闷呀。
2015-12-28 22:56
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
给力啊!感谢分享~
有时间试试看……
2015-12-28 23:50
0
雪    币: 35
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我今天测试了也一样 不知道是什么原因 而且现在只有第一次注入TASLogin.exe才能成功 同一个目录里的dll第二次注入就连注入都没注入
2016-1-6 19:05
0
雪    币: 20
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
感谢原创分享!
2016-1-9 08:45
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
21
标题党,说的跟搞通了登录协议一样,原来只是个系统hook钩子,醉了
2016-1-9 08:55
0
雪    币: 16
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
这个登陆何必那么麻烦,一个API和FindWindow就可以搞定的事情,非要搞那么复杂
2016-1-9 22:13
0
雪    币: 39
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
求详解,哪个API
2016-4-15 13:14
0
雪    币: 39
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
哥唉,SetWindowsHookEx的GetMsgProc没运行怎么回事?
2016-4-17 22:31
0
游客
登录 | 注册 方可回帖
返回
//