Está genial .
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Páginas1
#2
Desarrollo y modificación de malwares / Re:Detectar un SO de 64bits
Julio 08, 2013, 01:13:02 AMNo tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Menos bytes... En C/C++ todo valor diferente de 0 es true
Eso es trampa .
#3
Desarrollo y modificación de malwares / Re:Detectar un SO de 64bits
Julio 06, 2013, 07:15:12 PMMismos bytes pero menos lineas jaja.
Saludos
#4
Dudas y pedidos generales / Re:Ayuda con compilacion codigo Anti-debugging
Junio 22, 2013, 10:30:18 AM
Compila con el WDK o cargala con GetProcAddress, está en NTDLL.
Saludos
Saludos
#5
Desarrollo y modificación de malwares / Otra forma de inyectar un ejecutable en memoria (DummySection)
Junio 16, 2013, 05:51:09 PM
Bueno, pues al fin se me ocurrió otra forma de hacer que podamos cargar un ejecutable en memoria y ejecutarlo que aún no sea (o no sea tan) detectada por los antivirus. Llevaba mucho tiempo pensando en ello, y la idea básica que tenía era clara: Cambiar el ImageBase del Loader ( el programa que cargará el ejecutable en memoria) por algo como 0x00100000 y así dejar 0x00400000 libre, que es donde se quieren cargar el 99.9% de los ejecutables. Una vez hecho esto llegaba lo difícil, reservar de alguna forma la dirección de memoria 0x00400000 para poder tener ahí permisos de lectura escritura y ejecución. En un primer momento había pensado en hacer uso del primer parámetro de No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta, pero no funcionó; esa memoria no siempre está libre cuando se inicia el Loader, por lo que aveces sí conseguía reservar memoria en esa dirección, pero otras veces no, así que no valía, el No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta lo ponía difícil.
Dejé el tema apartado por un tiempo hasta que el otro día se me ocurrió algo muy simple: Crear una sección falsa en la cabecera PE del Loader, que permitiera reservar la ansiada 0x00400000 y de tamaño el mismo valor que el SizeOfImage del ejecutable que queremos inyectar. Para lograr esto debemos recordar que el campo VirtualAddress es un RVA que por lo tanto se sumará al ImageBase del archivo, entonces para poder reservarla debemos restar al ansiado 0x00400000 nuestro ImageBase en nuestro caso 0x00100000 dando como resultado 0x00300000, además debemos editar el VirtualSize de la ultima sección con el nuevo VirtualAddress menos el VirtualAddress de dicha sección con lo cual no desalinearemos. Además debemos recordar que al ser una sección falsa no debe tener PointerToRawData ni RawSize. Una vez hecho esto el loader de Windows se encargará de reservarnos memoria en esa dirección, pudiendo así utilizarla para lo que queremos, como utilizarla para inyectar nuestro ejecutable. Entonces hice el siguiente código, que compilo de forma que el ImageBase se quede a 0x00100000 y asumiento que tengo acceso a la memoria que se encuentra apartir de 0x00400000.
Un resumen de lo que hace el código anterior:
Faltarían algunas cosas, como adaptar el PEB para que se lleve bien con ambos ejecutables inyectados (o con uno sólo), o arreglar la parte que carga la IAT manualmente para que rellene tambien las importaciones que se hacen por ordinales (si saco tiempo actualizo el post con las modificaciones para hacer esto), pero para mostrar que funciona nos sirve.
El ejecutable que puse en el resource es el siguiente, compilado con ImageBase 0x00400000:
Sólo nos falta hacer una última cosa para que funcione: En el primer código hemos supuesto que tenemos ya reservada memoria en 0x00400000, pero no hemos hecho nada para que así sea, así que, como dije al principio del texto, vamos a crear una nueva sección que servirá únicamente para hacer eso, ocupar esa memoria . Yo añadí la sección con el LordPE, teniendo el segundo código compilado originalmente así:
Y con la nueva sección añadida:
Ahora sí está todo listo, arrancamos el ejecutable y voilà:
Notas:
Saludos
Dejé el tema apartado por un tiempo hasta que el otro día se me ocurrió algo muy simple: Crear una sección falsa en la cabecera PE del Loader, que permitiera reservar la ansiada 0x00400000 y de tamaño el mismo valor que el SizeOfImage del ejecutable que queremos inyectar. Para lograr esto debemos recordar que el campo VirtualAddress es un RVA que por lo tanto se sumará al ImageBase del archivo, entonces para poder reservarla debemos restar al ansiado 0x00400000 nuestro ImageBase en nuestro caso 0x00100000 dando como resultado 0x00300000, además debemos editar el VirtualSize de la ultima sección con el nuevo VirtualAddress menos el VirtualAddress de dicha sección con lo cual no desalinearemos. Además debemos recordar que al ser una sección falsa no debe tener PointerToRawData ni RawSize. Una vez hecho esto el loader de Windows se encargará de reservarnos memoria en esa dirección, pudiendo así utilizarla para lo que queremos, como utilizarla para inyectar nuestro ejecutable. Entonces hice el siguiente código, que compilo de forma que el ImageBase se quede a 0x00100000 y asumiento que tengo acceso a la memoria que se encuentra apartir de 0x00400000.
Un resumen de lo que hace el código anterior:
- Obtiene el ejecutable que tiene embebido en el resource.
- Da permisos de lectura, escritura y ejecución a la memoria a partir de 0x00400000.
- Copia la cabecera PE y las secciones en el sitio correspondiente a cada una de ellas dentro de esa memoria.
- Rellena la IAT con los valores correspondientes, pues el loader de Windows no lo va a hacer (no hemos creado ningún proceso nuevo.
- Crea un nuevo hilo de ejecución en el EntryPoint del ejecutable inyectado.
Faltarían algunas cosas, como adaptar el PEB para que se lleve bien con ambos ejecutables inyectados (o con uno sólo), o arreglar la parte que carga la IAT manualmente para que rellene tambien las importaciones que se hacen por ordinales (si saco tiempo actualizo el post con las modificaciones para hacer esto), pero para mostrar que funciona nos sirve.
El ejecutable que puse en el resource es el siguiente, compilado con ImageBase 0x00400000:
Sólo nos falta hacer una última cosa para que funcione: En el primer código hemos supuesto que tenemos ya reservada memoria en 0x00400000, pero no hemos hecho nada para que así sea, así que, como dije al principio del texto, vamos a crear una nueva sección que servirá únicamente para hacer eso, ocupar esa memoria . Yo añadí la sección con el LordPE, teniendo el segundo código compilado originalmente así:
Y con la nueva sección añadida:
Ahora sí está todo listo, arrancamos el ejecutable y voilà:
Notas:
- En el primer código he hardcodeado el ImageBase y el SizeOfImage del ejecutable que inyecto, lo hice por comodidad, pero si quieres hacer por ejemplo un crypter que use esta técnica deberás obtener estos valores del ejecutable.
- Cuando saque tiempo publicaré otra entrada en la que mostraré el código de un crypter que use esta téncia, veremos a cauntos Antivirus engañamos .
Saludos
#6
Desarrollo y modificación de malwares / Re:[C] Libreria Hook IAT
Mayo 29, 2013, 05:09:17 PM
No entiendo, probaste si funciona?
Concretamente no entiendo la forma en la que localizas la API en la IAT:
Comparas el nombre. Hace mucho que no veo nada de la IAT, pero hace tiempo hice un código que hacía esto en ASM y, a riesgo de colarme, diría que los nombres se reemplazan en runtime por las direcciones, por lo que la 'única' forma de localizar la API es por su dirección y no por su nombre.
Saludos
Concretamente no entiendo la forma en la que localizas la API en la IAT:
Comparas el nombre. Hace mucho que no veo nada de la IAT, pero hace tiempo hice un código que hacía esto en ASM y, a riesgo de colarme, diría que los nombres se reemplazan en runtime por las direcciones, por lo que la 'única' forma de localizar la API es por su dirección y no por su nombre.
Saludos
#7
Dudas y pedidos generales / Re:[Help] Compilar estaticamente en Qt 4.8.0 C++
Mayo 29, 2013, 04:44:14 PM
En teoría tiene que funcionar añadiendo al fichero .pro:
Con eso debería funcionar. Si no lo hace, recompilando el framework y pasando -static cuando ejecutas el configure ya lo hará por defecto.
Y cuidado, si vas a crear una aplicación con soporte para plugins (QtPlugin) , éstos solo funcionan si se enlaza dinámicamente.
También puedes usar el No tienes permitido ver los links. Registrarse o Entrar a mi cuenta para hacer un instalable y hacer que todas las dependencias se copien a su sitio.
Saludos
Con eso debería funcionar. Si no lo hace, recompilando el framework y pasando -static cuando ejecutas el configure ya lo hará por defecto.
Y cuidado, si vas a crear una aplicación con soporte para plugins (QtPlugin) , éstos solo funcionan si se enlaza dinámicamente.
También puedes usar el No tienes permitido ver los links. Registrarse o Entrar a mi cuenta para hacer un instalable y hacer que todas las dependencias se copien a su sitio.
Saludos
Páginas1