Antes que nada, preguntémonos que es la IID (Image Import Descriptor)?

La IID es una estructura que contiene los nombres de las apis y las dll en la que se encuentran, y con la información de esta estructura el cargador de Windows pone las direcciones correspondientes de cada api en la IAT.

Ahora que es la IAT (Import Address Table)?

La IAT es la tabla de importaciones donde se halla la dirección de memoria de cada api para que estas puedan ser utilizadas.

Ok, pero si es una estructura utilizada por Windows para todos los ejecutables y todas las dll, como ponen los AV firmas ahí sin fastidiar a cada ejecutable que se encuentre en el sistema?

Pues por la información contenida en esta estructura y el orden de esta información, como ya se dijo aquí están los nombres de las apis a utilizar y si hablamos de cualquier troyano, o algún otro “juguete” estarán las apis “WriteProcessMemory”, “RtlMoveMemory”, “GetThreadContext”, etc.

Entonces si yo tengo un troyano que tenga estas apis en su IID en cierto orden, por ejemplo

GetModuleHandleA
WriteProcessMemory
GetThreadContext
SetThreadContext


Y supongamos que algún AV puso su firma ahí puesto que un programa “inofensivo” no usa estas apis y si las usase las probabilidades de que las tenga en su IID en ese mismo orden son muy bajas. Así que nuestro programa es detectado gracias a esta firma, y muchos dejan las cosas hasta acá por no saber como librarse de ella.

Ahora como nos libramos de los fastidiosos AV que ponen su firma en la IID?

Fácil, cambiando el orden de las apis para desfigurar la firma.

SetThreadContext
WriteProcessMemory
GetThreadContext
GetModuleHandleA

Con eso ya no nos detectara el troyano, pero no es tan fácil, si solo hacemos eso ya nuestro programa “inofensivo” no servirá a nuestros propósitos. Por que?

Porque si no hacemos los cambios necesarios entonces en la IAT tendremos la dirección de la api “SetThreadContext” en el lugar de “GetModuleHandleA” por lo tanto cuando nuestro programa necesite llamar a GetModuleHandleA estará llamando sin darse cuenta a SetThreadContext y hasta aquí llego el troyano.

Para evitar esto tenemos que estudiar un poco la IID.

Imagen


Ahí se ve claramente parte de la estructura, es una estructura por cada Dll que usa el programa.

Cada estructura termina donde empieza la otra, así que procedo a explicar. Usare como ejemplo la primera que aparece.

El primer valor que aparece en la primera estructura es 0x3078 para obtener la dirección de memoria (ya que esos valores son en disco) debemos sumar el Image Base que en los ejecutables mayormente es 00400000. este primer valor corresponde al offset donde empieza una tabla con los punteros a los nombres de las apis, y el olly nos ayuda diciéndonos a que dll pertenecen las apis que son apuntadas.

Imagen


Nos dice que son las apis de User32.dll, y acá es donde esta lo importante, pues en el orden en el que aparecen en esta tabla es como se pondrán en la IAT.

El siguiente valor obviando los ceros, es 0x3290, y apunta al nombre de la dll en la cual se van a buscar las apis, igual el olly nos lo informa como se ve en la tabla de arriba.

Y el ultimo valor indica el lugar en la IAT donde empiezan las apis de la dll que indica la estructura.

Así que supongamos que tenemos una firma acá:

Imagen


La firma esta en las string, los de la compañía AV fueron precavidos y evitaron que los ceros intercalados formaran parte de la firma. Como la quitamos? Hay dos formas.

Procederé a explicar la forma “difícil”:

La firma esta en esas tres apis así que seleccionamos una y procedemos a buscar otra con la misma cantidad de caracteres. Yo escogí “KillTimer” que con el cero del final son 10 dígitos y la otra que escogí fue “LoadIconA” ahora los intercambiamos y esta todo casi listo.

Imagen


Ahora en la tabla de arriba donde hay un montón de direcciones que apuntan hacia aca (hacia las strings) buscamos las direcciones de las string que modificamos y las intercambiamos también.

La dirección de nuestras strings son 0x32CC 0x333A [en la tabla les aparecerá sin el imageBase y en la tabla se apunta hacia los cuatro ceros (“0000”) que están arriba de la string (no necesariamente tienen que ser ceros)] son la primera y la octava de la tabla de user32.dll

Imagen


Una vez intercambiados seleccionamos todo lo que modificamos, y hacemos Click secundario -> Copy to executable -> Selection, al hacerlo, nos lleva a otra ventana donde hacemos click secundario -> save file, y guardamos con otro nombre.

Ejecutamos y mi programa de prueba arranca como si nada hubiera pasado y la firma ya no esta puesto que los bytes detectados fueron cambiados.

Imagen


Ahora procedemos con el método “sencillo”, pero este método aumentara (muy poco) el tamaño del ejecutable.

Lo que hay que hacer es lo siguiente:

Abrimos el import reconstructor que es un programa para restaurar la IID de los programas que son dumpeados.

Imagen


Hacemos click en la caja desplegable debajo de “Attach to an ActiveProcess” y buscamos nuestro troyano, stub, etc. Previamente abierto con el olly. Y hacemos click en IAT autosearch y nos buscara la IAT (si no la encuentra es por que esta empaquetado o el programa tiene trucos para esconderla, así que tendrán que buscarla manualmente obtener el comienzo y el tamaño) al encontrarla le damos a Get Imports. Luego hacemos click en options.

Imagen


Y marcamos las dos casillas que ahí se ven.

Damos ok y en el olly, seleccionamos toda la IID y damos click secundario -> binary -> Fill with 00’s. con eso borramos la IID (y la firma) y seleccionamos para hacer copy to executable.

Guardamos con otro nombre, y en el Import Reconstructor hacemos click en “Fix Dump”, seleccionamos el recien guardado “animalito” y le damos enter.

Con eso ya tenemos IID nueva, sin strings y lo mejor, sin firma.

Algunas cosas que podrían quedar en el aire.

Ordinales: en una dll se guardan las funciones exportadas de dos maneras, por nombre (OpenFile) y por ordinal (0x8000026E). el ordinal, es un numero único dentro de la dll que se le asigna a cada función, y sirve para llamar a funciones que no tienen nombre (aunque no lo crean si existen).

Como encontrar la IID: la IID se encuentra en la sección que dice Imports en la columna contains de el mapeo de la memoria que nos muestra el olly al hacer click en el botón “M” de lo que yo he llamado barra de botones en los tutoriales de “Ing. Inversa de Troyanos”.

Para verla necesitan el plugin AnalizeThis que sirve para analizar las secciones que no son de código, para utilizarlo hacen click secundario -> Analize This!.

También la pueden encontrar desde la cabecera. En el Dump váyanse a la dirección 40003C y hacen click secundario -> Special -> PE Header ahí en esa dirección esta el puntero a la PE Signature, (aparece sin el imageBase, súmenselo) y a esa dirección le suman 0x80, se van hacia donde les dio el resultado y ahí estará un puntero (sin el imageBase) hacia la IID.


PD: la verdad no se si los AV han puesto firmas también en las importaciones por ordinal, yo lo dudo bastante pero si es así, le toca aplicar el primer método.

[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]

saludos
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
?? extraño por que yo si las veo... dejame desloguearme del google para ver si es por que estoy logueado. (las imagenes estan en mi cuenta google sites)
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
... pos ahi siguen, yo las veo, te pondria la imagen, perosi no ves esas tampocola que te ponga...
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
listo, problema conlas imagenes resuelto
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
lo estoy probando y este metodo esta genial

esa parte del el ejecutable me era imposible de modificar bloodday

sos de otro planeta
que vuelva demonio666vip
Imagen
gracias blodd pero nos acabs de traer una informacion buenisssima men...... Sigue asi bloodday
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Muy bueno tio, voy a intentarlo haber que pasa :P, saludos !
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
bloodday... un kapo es usted ... esto es data de primera calidad


Muchas gracias bro!... esto contribuye de sobremanera con el nivel del foro
Imagen


El que comió... cree que todos comieron...
muy util , pero los avs detectan los api en caso de heuristica y no en caso de firmas
es raro que los avs pone firmas a los api , nunca lo he visto y creo que la deteccion es heuristica y no importa el lugar de los apis si vos lo cambia porque los avs lo va a seguir detectando

muchas gracias por el tuto :)
saludos

Mostrar/Ocultar

gracias lo hice por que vi a varios con este problema, y en ningun lado he visto como resolverlo. asi que me puse a revisar los tutos de reconstruccion de la IAT y a escribir

m4rtir, si hay firmas ahi, lo se por que yo las he visto (y estoy 134% seguro de que no era heuristica) y los demas tambien, (en dudas y preguntas veras a varios con este problema).

saludos

PD: Como yo lo "descubri" para ser original le pondre "metodo Beepa"
//No estan permitidos los refer en este sitio.

SI ERES CHAVISTA Y HONESTO NO ERES INTELIGENTE.
SI ERES CHAVISTA E INTELIGENTE NO ERES HONESTO.
SI ERES INTELIGENTE Y HONESTO NO ERES NI SERAS NUNCA CHAVISTA.
y estoy 134% seguro de que no era heuristica
te voy a enviar un api detectado por un av i si cambias el lugar lo sigue detectando.
te lo mando en mp

Mostrar/Ocultar

Responder

Volver a “Manuales y Tutoriales”