Reversing Skype (bueno y malo)
En este tutorial se probará y pondrá a prueba sus métodos de cifrado y se verá sus tecnicas anti-debug, también sirve para dar un ejemplo conforme se vaya avanzando, veremos más adelante como se pueden aprovechar este tipo de técnicas y como podrían ser usadas por algunos desarrolladores de malware con el cual se podrían crear imitaciones de programas legítimos infectados con malware.
Analizando:
Empezamos, abrimos nuestro debugger y de primera instacia vemos que no es un Punto de un programa normal y si nos ponemos a ver algunas strings :
De principio, a primera vista me doy cuenta que el software está cifrado, estando en el entrypoint vemos instrucciones abajo, viendo un poco a detalle veremos que usa una rutina para desencriptar gran trozo del código que va a usar, esto es comun para evitar a los desensambladores y dejar al descubierto todo el codigo.
Aquí es muy sencillo explicar esta pequeña rutina:
CPU Disasm Address Hex dump Command Comments 01083DD9 B8 6893D3C2 MOV EAX,C2D39368 ; mueve al registro EAX un hardcoded que usara para la desencriptacion 01083DDE B9 F0DF0601 MOV ECX,0106DFF0 ; mueve al registro ECX el offset desde donde empezara a desencriptar 01083DE3 8D99 E85D0100 LEA EBX,[ECX+15DE8] ; mueve al registro EBX el offset del entrypoint 01083DE9 8D91 40600100 LEA EDX,[ECX+16040] LOOP: 01083DEF 3BCB CMP ECX,EBX 01083DF1 75 03 JNE SHORT 01083DF6 ; desde estas tres instrucciones, compara el registro ECX que este contiene el offset actual y de ser igual al entry point le suma 28, esto lo hace para no sobre escribir esta rutina 01083DF3 83C1 28 ADD ECX,28
CONTINUA:
01083DF6 3001 XOR BYTE PTR DS:[ECX],AL ; aplica un xor al contenido de ECX para empezar a desencriptar 01083DF8 C1C0 03 ROL EAX,3 ; rotation left 3 01083DFB 41 INC ECX ; incrementa ecx+ 1 01083DFC 3BCA CMP ECX,EDX 01083DFE ^ 75 EF JNE SHORT 01083DEF ; compara si ha llegado al offset 01084030 de no ser asi pasa a la etiqueta loop
Habiendo analizado esto, como vimos al ir des-encriptado y encontrarse con el punto de entrada que es el principio de esta rutina, por lo tanto:
Si hacemos doble click desde el entrypoint podremos ver desde ahí + 28 que será lo que se saltara y no sobreescribira esa parte asi quesi pongo un BreakPoint desde el +29 y démosle RUN pra que temrine la rutina y asi termina de des-encriptar los datos , al parecer no es nada del otro mundo de hecho es muy sencillo, continuemos
Adelante podemos ver codigo limpio, pero al parecer este binario se va des-encriptando por fragmentos de codigo que va a utlizar.
Teniendo esta parte clara y para no alargarnos, les resumire, y es que veriamos mas adelante que hace algunos movimientos similares, con algunas rutinas similares a la anterior (con XOR) desencriptara otro trozo pequeño de codigo que es una parte de la seccion .data unicamente
, pero la parte interesante es que este usa una rutina para crear una nueva tabla IAT (Import Address Table)
Primero obtiene el Handle de la libreria “kernel32.dll” con GetModuleHandle
sintaxis:
HMODULE WINAPI GetModuleHandle( _In_opt_ LPCTSTR lpModuleName );
Despues pasa a sacar el nombre de algunas API’s que usaria mas adelante con GetProcAdress para obtener las direcciones (nueva IAT)
Algunas son:
GetCurrentProcess
ExitProcess
LoadLibrary
VirtualProtect
GetSystemInfo
Esta parte sobre la creacion de una nueva IAT (que es muy comun en malware), pueden apoyarse como ejemplo donde esta igual explicada, en mi analisis de malware en las paginas (17-18)
Encontraremos rutinas muy similares a estas con mucho codigo basura, pero en si, el metodo de cifrado para el codigo que se usa son simples operaciones XOR con algunos hardcoded, ahora bien se podria obtener un binario desempacado, pero seria un trabajo muy largo y tedioso ya que este conforme va ejecutandose tambien elimina algunas partes, esto es un metodo “anti-dump” por si a alguien se le ocurre hacerle un dump cuando esta corriendo en memoria, que en teoría estaria des-encriptado pero sin algunos trozos de codigo y por lo tanto se romperia la ejecucion al intentar correr el dumpeado, estas tecnicas son muy comunes en packers comerciales.
Ahora vayamos a ver y explicar muy rapido algunas de sus tecnicas anti-debug
1: Uso de SoftIce ( que segun recuerdo esta descontinuado)
Este realiza una busqueda de patrones y de
cumplirse o encontrarlos muestra el mensaje “Skype is not compatible
with system debuggers like SoftICE” , pero como en este caso esoty
usando Olly Debugger no ahi problema.
2: IsDebuggerPresent , este es muy comun y a
la vez muy sencillo burlar modificando algunos bytes 0,1 y aun asi
tambien existen muchos plugins para burlarlo.
Bien pasemos a la parte que quiero probar y
supongo para algunos podria ser la mas interesante y es intentar
adjuntar codigo o una seccion de codigo y ver si es necesario parrchear
chequeos CRC en caso de que este tenga algunos.
Usaremos la herramienta “ToPo”
Seleccionamos nuestro binario llenamos los datos y seleccionamos la
casilla “Redirect Entrypoint” , esto no ahorra codigo ya que esto hara
que empieze a ejecutar codigo desde nuestro injerto y solo basta con
meter nuestro codigo y redirigir al lugar donde deberia iniciar o donde
iniciaba antes de nuestro injerto y listo, ahora abrimos el debugger y
veamos si funciono
Ahi etamos en el Entry Point y estamos en la
nueva seccion, veamos las seciones y veremos que aparece nuestra nueva
seccion llamada .topo, tenemos una zona vacia preparada para meter
cuanto codigo queramos .
Si ejecutamos Skype para probar si detecta este algun cambio:
Al parecer no detecto ningun cambio en el tamaño y demas, creo que basta un poco de imaginación como para poder tener un skype 100% funcional con un malware adicional injertado, como mencione anteriomente, y no bastaría mas que meterlo de nuevo al instalador y un poco de ingenieria social, ubicarlo en un buen sitio en la red y estoy seguro que serian muchas las victimas.
Este escrito podría dar pie a una segunda parte donde se muestren a donde se realizan las conexiones “Login” y que tanto se puede jugar con el codigo de skype y sus conexiones ya que como vimos no es tan complejo ir descrifrando el codigo, por si alguien se anima a colaborar no dude en contactarme o si me queda algo de tiempo intentare trabajar en ello.
Este escrito podría dar pie a una segunda parte donde se muestren a donde se realizan las conexiones “Login” y que tanto se puede jugar con el codigo de skype y sus conexiones ya que como vimos no es tan complejo ir descrifrando el codigo, por si alguien se anima a colaborar no dude en contactarme o si me queda algo de tiempo intentare trabajar en ello.
@Torrescrack248
0 comentarios:
Publicar un comentario