elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Analisis de stub.dll con Java
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Analisis de stub.dll con Java  (Leído 7,673 veces)
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Analisis de stub.dll con Java
« en: 16 Enero 2018, 15:30 pm »

Buenas que tal? alguna sugerencia de como podria decompilar este stub.dll ? no esta ofuscado se carga desde

Código
  1. final JarInputStream input = new JarInputStream(App.class.getClassLoader().getResourceAsStream("stub.dll"));

para luego cifrar las clases que contiene con DES y crear un server, quiero saber su funcionamiento

bueno si alguien me da una sugerencia pues bien, otra cosa no posee runPE, No pareciera estar con JNA O JNI. La imagen de abajo no me muestra nada ojo uso este soft solo para motivos de exploración.


https://drive.google.com/open?id=1JpTcaZ9NDUG3I1lnQSY4CxMzKLhfuP0v
« Última modificación: 5 Febrero 2019, 20:31 pm por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: Analisis de stub
« Respuesta #1 en: 16 Enero 2018, 15:37 pm »

¿De donde sacaste este Stub? ¿Es de algún cripter? ¿En que lenguaje esta creado?
En línea

Un byte a la izquierda.
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Analisis de stub
« Respuesta #2 en: 16 Enero 2018, 15:46 pm »

¿De donde sacaste este Stub? ¿Es de algún cripter? ¿En que lenguaje esta creado?

Como esta jefe gracias por la pronta respuesta,
  
  • lenguaje java

pues casi me infectan con Unrecom RAT ese stub esta en su source, que se usa para crear el server en runtime se cifran esas clases que contiene con RSA y AES, el caso de arriba el cifrado DES lo usa una version anterior a este Unrecom segun el source se parece bastante.

Esta ofuscado el cliente con allatori demo 4.7 pero el stub es otra cosa se cifra desde el propio cliente aparte

« Última modificación: 16 Enero 2018, 16:03 pm por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: Analisis de stub
« Respuesta #3 en: 16 Enero 2018, 16:23 pm »

Pero... si mal no recuero JAVA no compila sus archivos  :xD quizás baste con renombrar el Stub.dll a la extensión que tenga java y abrirlo con el editor de JAVA....
En línea

Un byte a la izquierda.
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Analisis de stub
« Respuesta #4 en: 16 Enero 2018, 16:31 pm »

Pero... si mal no recuero JAVA no compila sus archivos  :xD quizás baste con renombrar el Stub.dll a la extensión que tenga java y abrirlo con el editor de JAVA....

Aun nada ni con extensión .java ni .class  wtf

el .class al querer decompilar
  
   javap -c stub.class arroja error
  
y el .java igual, bueno ese stub.dll salen codificados de manera extraña, pero viendo bien en una de esas palabras al final del archivo salen nombres de algunas clases, clases que como mencione arriba, son usadas para generar el server, y que analizando el server o sea, descomprimiendo el .jar, aparacen dichas clases cifradas
« Última modificación: 19 Enero 2018, 17:22 pm por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: Analisis de stub
« Respuesta #5 en: 16 Enero 2018, 16:45 pm »

Entonces sigue depurando a partir de la línea donde se carga:
Código
  1. inal JarInputStream input = new JarInputStream(App.class.getClassLoader().getResourceAsStream("stub.dll"));

Y mira que hace con el archivo, quizás te de mas información acerca de su extensión o de  como esta cifrado.

saludos.
En línea

Un byte a la izquierda.
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Analisis de stub
« Respuesta #6 en: 3 Febrero 2019, 21:24 pm »

Entonces sigue depurando a partir de la línea donde se carga:
Código
  1. final JarInputStream input = new JarInputStream(App.class.getClassLoader().getResourceAsStream("stub.dll"));

Y mira que hace con el archivo, quizás te de mas información acerca de su extensión o de  como esta cifrado.

saludos.

Hola Fary que estés bien dog, sabes que en unos de esos días logre solucionar, pues resulta que el stub.dll en realidad es un .jar(pero no funciona con solo renombrarlo a .jar y ya), algún método se uso para comprimir los bytecode dentro de una .dll,  lo desconozco pero si se que hay la forma, el codigo para extraer el stub.dll es el siguiente, lo que hace es leerlo completamente y guardarlo en un .jar

Código
  1. public class CrearJar implements ShowData {
  2.  
  3.    private static final Path STUB_PATH =  Paths.get("src/main/resources/stub.dll");
  4.    private static final Path DESTINO_STUB = Paths.get("src/main/resources/clasesStub.jar");
  5.  
  6.    public CrearJar() {
  7.        init();
  8.    }
  9.  
  10.    /**
  11.      * lee el path donde esta el stub.dll y volca el contenido en un .jar
  12.      */
  13.    private void init() {
  14.  
  15.        try(final JarInputStream jarInputStream = new JarInputStream(Files.newInputStream(STUB_PATH ));
  16.            final BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(DESTINO_STUB ));
  17.            final JarOutputStream jarOutputStream = new JarOutputStream(bos, jarInputStream.getManifest())) {
  18.  
  19.            JarEntry jarEntry;
  20.  
  21.            while((jarEntry = jarInputStream.getNextJarEntry()) != null) {
  22.                if(predicate(jarEntry)) {
  23.                    getLogger().info(jarEntry.getName());
  24.                    jarOutputStream.putNextEntry(jarEntry);
  25.                    jarOutputStream.write(readAllBytes(jarInputStream));
  26.                    jarOutputStream.flush();
  27.                }
  28.            }
  29.        }catch (IOException ex) {
  30.            getLogger().severe(ex.getMessage(),ex);
  31.        }
  32.    }
  33.  
  34.    /**
  35.      * Validar el jarEntry
  36.      * @param jarEntry que se le hara el test
  37.      * @return boolean true si son solo clases, y que no sean directorios, ni tengan $
  38.      */
  39.    private boolean predicate(final JarEntry jarEntry) {
  40.        final Predicate<JarEntry> predicate = p -> !jarEntry.isDirectory()
  41.                                                   && jarEntry.getName().endsWith(".class")
  42.                                                   && !jarEntry.getName().contains("$"),
  43.                                                   || jarEntry.getName().contains("_");
  44.        return predicate.test(jarEntry);
  45.    }
  46.    /**
  47.      *
  48.      * @return all bytes from stub
  49.      */
  50.    private byte[] readAllBytes(final InputStream input) {
  51.        try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
  52.            final byte[] bytesread = new byte[1024];
  53.            int dataRead;
  54.            while((dataRead = input.read(bytesread)) != -1) {
  55.                baos.write(bytesread,0,dataRead);
  56.            }
  57.            return baos.toByteArray();
  58.        }catch (IOException ex) {
  59.            getLogger().severe(null,ex);
  60.        }
  61.        return new byte[0];
  62.    }
  63.  
  64.  


Salida linea 23 del método init()

Código
  1. 19:08:06.783 [main] INFO CrearJar - Desinstala.class
  2. 19:08:06.783 [main] INFO CrearJar - Principal.class
  3. 19:08:06.783 [main] INFO CrearJar - extra/ClassLoaderMod.class
  4. 19:08:06.783 [main] INFO CrearJar - extra/Constante.class
  5. 19:08:06.783 [main] INFO CrearJar - extra/Constantes.class
  6. 19:08:06.783 [main] INFO CrearJar - extra/RegistryUtils.class
  7. 19:08:06.799 [main] INFO CrearJar - opciones/Archivo.class
  8. 19:08:06.799 [main] INFO CrearJar - opciones/DesUAC.class
  9. 19:08:06.799 [main] INFO CrearJar - opciones/EnviarFile.class
  10. 19:08:06.799 [main] INFO CrearJar - opciones/Informacion.class
  11. 19:08:06.799 [main] INFO CrearJar - opciones/Instalador.class
  12. 19:08:06.799 [main] INFO CrearJar - opciones/Interface_.class
  13. 19:08:06.799 [main] INFO CrearJar - opciones/Kille.class
  14. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion1.class
  15. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion10.class
  16. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion12.class
  17. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion13.class
  18. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion14.class
  19. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion2.class
  20. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion5.class
  21. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion6.class
  22. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion7.class
  23. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion7b.class
  24. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion8.class
  25. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion9.class
  26. 19:08:06.799 [main] INFO CrearJar - opciones/Opcion9b.class
  27. 19:08:06.799 [main] INFO CrearJar - opciones/OrdenCaptura.class
  28. 19:08:06.799 [main] INFO CrearJar - opciones/PassAll.class
  29. 19:08:06.799 [main] INFO CrearJar - opciones/Pina.class
  30. 19:08:06.799 [main] INFO CrearJar - opciones/WebBot.class
  31. 19:08:06.799 [main] INFO CrearJar - opciones/a.class
  32. 19:08:06.799 [main] INFO CrearJar - opciones/interfaceInfo.class
  33. 19:08:06.799 [main] INFO CrearJar - opciones/passFilezilla.class
  34. 19:08:06.799 [main] INFO CrearJar - opciones/passIDM.class
  35. 19:08:06.799 [main] INFO CrearJar - opciones/passNoip.class


Aquí esta la main class, el servidor lee el password contenido en un .xml, para descifrar los bytecodes en runtime y cargarlos en memoria por medio del custom classloader, se ven otras versiones de arabes donde esa contraseña esta alojada en un json


Clase que descifra contenida solo en el servidor, la linea 19, en el método init() se le setea un dos es decir Cipher.DECRYPT_MODE

Código
  1. package extra;
  2. import java.io.ByteArrayOutputStream;
  3. import javax.crypto.Cipher;
  4. import javax.crypto.SecretKey;
  5. import javax.crypto.SecretKeyFactory;
  6. import javax.crypto.spec.DESKeySpec;
  7.  
  8. public class Constante {
  9.    public Constante() {
  10.    }
  11.  
  12.    public static byte[] Constantino(String contrasena, byte[] input) {
  13.        try {
  14.            ByteArrayOutputStream out = new ByteArrayOutputStream();
  15.            SecretKeyFactory skf = SecretKeyFactory.getInstance(new String(new char[]{'D', 'E', 'S'}));
  16.            DESKeySpec kspec = new DESKeySpec(contrasena.getBytes());
  17.            SecretKey ks = skf.generateSecret(kspec);
  18.            Cipher c = Cipher.getInstance(new String(new char[]{'D', 'E', 'S'}));
  19.            c.init(2, ks);
  20.            byte[] tmp = c.update(input, 0, input.length);
  21.            out.write(tmp);
  22.            tmp = c.doFinal();
  23.            out.write(tmp);
  24.            out.close();
  25.            return out.toByteArray();
  26.        } catch (Exception var8) {
  27.            return null;
  28.        }
  29.    }
  30. }

Update Try/catch con BufferedOutputStream
« Última modificación: 8 Junio 2019, 21:56 pm por rub'n » En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.075



Ver Perfil WWW
Re: Analisis de stub
« Respuesta #7 en: 3 Febrero 2019, 22:30 pm »

Enhorabuena rub'n!!! Me alegro de que pudieses resolverlo  :)

saludos!!
En línea

Un byte a la izquierda.
colcrt

Conectado Conectado

Mensajes: 87


Ver Perfil
Re: Analisis de stub.dll con Java
« Respuesta #8 en: 8 Febrero 2019, 01:14 am »


rub'n muy interesante, una pregunta como hace para detectar ese tipo de malware??
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Analisis de stub.dll con Java
« Respuesta #9 en: 8 Febrero 2019, 23:21 pm »

rub'n muy interesante, una pregunta como hace para detectar ese tipo de malware??

Pues obviamente por el código, siempre y cuando no este ofuscado, cifrado etc, incluso ofuscado algunas veces puedes llegar a interpretar, pero no es lo ideal,

A parte debes conocer el lenguaje de dicho malware, te ayudara mas rápido a su entendimiento.
 
En línea

rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Stub.dll Indetectar
Dudas Generales
NyxKazuya 3 5,620 Último mensaje 2 Marzo 2011, 06:26 am
por SuperDraco
Acerca de DOS stub
ASM
x64core 7 4,370 Último mensaje 2 Junio 2012, 00:21 am
por H1tchclock
[?] Indetectar Stub + Dudas
Análisis y Diseño de Malware
MeCraniDOS 5 5,160 Último mensaje 18 Noviembre 2012, 12:57 pm
por Danyfirex
que es un stub viene con el crypter
Análisis y Diseño de Malware
full159 2 4,134 Último mensaje 19 Agosto 2014, 06:03 am
por Mr.Virus
Stub en VB 6
Programación Visual Basic
Rama_04 1 2,289 Último mensaje 29 Diciembre 2014, 20:10 pm
por mhcruz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines