Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Mad Antrax en 16 Mayo 2007, 20:58 pm



Título: [Propuesta] Offset's Detector...
Publicado por: Mad Antrax en 16 Mayo 2007, 20:58 pm
Buenas, os propongo un proyecto a ver si os gusta y lo programamos entre unos cuantos...

La idea
Los Antivirus detectan unas zonas concretas de los troyanos (llamados offsets), si un Antivirus descubre uno (o varios) offset's en un archivo lo detectará como virus/troyano.

Hasta el día de hoy, la única forma de saber que offset hace saltar Antivirus era ir probando uno por uno (que coñazo!). Lo que quiero programar es una utilidad que lo haga por nosotros.

Explicación
Un simple programa que le especifiques la ruta de tu server.exe. El programa pedirá cuantos bytes quieres trocear. (Supongamos que nuestro server.exe pesa 10000 bytes, troceamos a 1000 bytes). Obtendremos 10 archivitos de 1000 bytes cada uno. Ahora solo falta pasar el AV y ver que archivo detecta.

Problemas
Es posible que al trocear un server.exe, nuestro AV no detecte ningún archivito malicioso. Eso significa que una parte del offset maligno ha quedado partido en 2 (o más) archivos, en este caso tendríamos que indicar al usuario que repita el "troceo" indicando un valor más elevado.

Y si queréis podemos programar un mini-editor hexadecimal integrado para editar allí mismo el offset. O incluso una utilidad para volver a juntar los archivitos troceados (después de detectar y editar el offset maligno).

Que os parece, alguien se anima? (respuestas mismo)


Título: Re: [Propuesta] Offset's Detector...
Publicado por: BenRu en 16 Mayo 2007, 21:51 pm
La idea es buena, aunque está aplicacion ya existe, aunque está en una lengua muy rara (rumano, ruso, o algo asi)

Realmente sería igual que hacerlo manual, aunque asi ahorras mucho tiempo.

Respecto a la programación, creo que no es complicado.

Aunque bueno, algunos Troyanos como bifrost tienen muchos offsets malignos, por lo tanto, habria que partirlo en muchas partes, y luego, modificarlo...teniendo cuidado de no romper el server final.

Un saludo


Título: Re: [Propuesta] Offset's Detector...
Publicado por: ANELKAOS en 16 Mayo 2007, 22:04 pm
Pinta bien, pero en VB? :P el offset no es mas que una medida del número de bytes que tiene desde un determinado punto hasta encontrar la 'firma' del virus. Si le metes una serie de nops ya estarias modificandolo.

El problema: independientemente del offset hasta las instrucciones consideradas como maliciosas, ciertos AVs no miran el offset si no, si contiene una serie de instrucciones independientemente de la localización de estas.

Dicho esto, adelante :)


Título: Re: [Propuesta] Offset's Detector...
Publicado por: Hans el Topo en 16 Mayo 2007, 22:58 pm
Mi pregunta es... ¿qué se supone que vas a editar una vez troceado? xD
En cuanto se modifique algo el ejecutable seguramente petará o dejará de hacer lo que tenía que hacer...xD

Salvando ese punto que creo que no comprendo correctamente, el proyecto suena bien.


Título: Re: [Propuesta] Offset's Detector...
Publicado por: Mad Antrax en 16 Mayo 2007, 23:38 pm
Si, ya se que los AV usan partes del código como firma que son esenciales para que funcionen (una llamada a una API, una String Stática, etc...), y es evidente que troyanos del palo: bifrost, poisonivy, etc... tendrán unos offset's intocables. Pero estoy seguro que nos servirá para volver indetectables algunos códigos no tan famosos (pequeños keyloggers, etc...).

En cuanto al lenguaje de programación es lo mismo, solo es un programa que divide un archivo en partes iguales, cualquier lenguaje es apto para ello.

Mi pregunta es... ¿qué se supone que vas a editar una vez troceado? xD
La idea es trocear el ejecutable y obtener los archivitos para luego pasarle un Antivirus por encima y ver cual de ellos contiene el offset (firma) maligno. Una vez localizado el archivo procederíamos edición (añadiendo NOP's, modificando un caracter en caso de ser una string...) e intentar dejarlo indetectable sin joder la funcionalidad del archivo.

Que se pierde en intentarlo?


Título: Re: [Propuesta] Offset's Detector...
Publicado por: WHK en 17 Mayo 2007, 08:50 am
Estaría bueno hacer todo eso en un solo programa.
Partir el archivo automaticamente en muchas partes iguales dependiendo el tamaño original preconfigurando todo para despues darle en "Start"
Normalmente los archivos se parten con el olly (me lo enseñó octalh), y despues se escanea parte por parte para ver cuales son detectados importando la base de datos de variados antivirus como me mostraron acá:

(http://subir-imagenes.com/imagenes/fee6551781.gif)

y luego injectar bites vacios como lo hace el topo:

(http://subir-imagenes.com/imagenes/1a1cf7986c.gif)

Puedes hacer algo así como el SSS cuando le das la ip y te hace todo solo...

Divide -> Escanea -> {los detectados: Injecta -> Escanea nuevamente -> [si aún es detectado buelve a dividirse y se debuelve a escanear y asi sucesivamente hasta que ya no es detectado y luego...][si no es detectado continua con la proxima parte detectada]} -> une

PD:
Citar
Demasiado complicado, se quedará a medias...  2 (28.6%)
:xD no te tienen confianza jajajaja obiamente si mad expuso esta propuesta es porque lo hará y no quedará  a medias.


Título: Re: [Propuesta] Offset's Detector...
Publicado por: ~~ en 17 Mayo 2007, 12:48 pm
Si se lleva a cabo yo me apunto, ya tenia pensado un proyecto asi, pero nunca me puse a ello xDD

Yo creo q la mejor idea seria partirlo en trozos, q el user lo escanee con el av y los trozas q dectecte q los vuelva a partir con nuestro programa hasta obtener el offset exacto.

Citar
Una vez localizado el archivo procederíamos edición (añadiendo NOP's, modificando un caracter en caso de ser una string...) e intentar dejarlo indetectable sin joder la funcionalidad del archivo.


Eso no me parece buena idea, nos cargariamos el 80% de los server's (asi a ojo de buen cubero  :xD) seria mejor q  una vez se conozca el offset sea el user el q lo modifike con el olly.

Pero eso ya se decidirá, yo por ahora me apunto a programarlo ;)


Título: Re: [Propuesta] Offset's Detector...
Publicado por: byebye en 17 Mayo 2007, 13:29 pm
se pueden reconocer las instrucciones y no partirlas, es decir si detectas un mov como ultimo byte del archivo agregar los bytes necesarios para escribir toda la instruccion en un archivo y no partirla.


Título: Re: [Propuesta] Offset's Detector...
Publicado por: Mad Antrax en 17 Mayo 2007, 14:16 pm
Ummmm, yo he estado haciendo pruebas. He pillado mi cactus.dll 2.5 (que es detectado por casi todos los AV's) y he modificado el caracter 0x00 por un caracter aleatório: 0x34

Solo he modificado los 0x00 que no tenían ningun otro caracter al lado que sea distinto de 0x00 y he obtenido los siguientes resultados:

1) El EXE tiene el mismo tamaño, ni más ni menos bytes
2) El EXE ha quedado completamente funciona, no se ha "roto"
3) El EXE se ha vuelto indetectable para TODOS los AntiVirus, aqui el reporte:

(http://img254.imageshack.us/img254/2092/abc123rp4.jpg)

Solo sigue siendo detectado por 2 AntiVirus, pero lo detectan como forma general (me imagino que por Heurística). Si sigo modificando un poco más, le añado NOP's se queda 100% indetctable en menos de 10 minutos. Lo malo que este proceso se tiene que hacer a mano, al menos yo no encuentro forma de programarlo :(

Haré pruebas con troyanos más famosos (bifrost, etc) a ver si consigo crear algún EXE protector "manual".


Título: Re: [Propuesta] Offset's Detector...
Publicado por: MazarD en 17 Mayo 2007, 14:40 pm
Citar
Ummmm, yo he estado haciendo pruebas. He pillado mi cactus.dll 2.5 (que es detectado por casi todos los AV's) y he modificado el caracter 0x00 por un caracter aleatório: 0x34
Raro que funcione  :huh: si lo haces con algun programa que use por ejemplo strcpy() de c que busca el 0x00 para saber hasta donde copiar te petará.
Aunque esto no tiene mucho que ver con detectar las firmas yo diria :P

Citar
se pueden reconocer las instrucciones y no partirlas, es decir si detectas un mov como ultimo byte del archivo agregar los bytes necesarios para escribir toda la instruccion en un archivo y no partirla.
Las firmas no tienen porque caer en el inicio de una instrucción concreta, imaginemos que el mov equivale a 9876 pues puede que la firma esté a partir del 76 y por tanto es un mov pero no tienes forma de detectar que realmente lo es a no ser que busques la entrada de la función y interpretes todas las instrucciones que puedas encontrarte por el camino hasta la firma (muchisimo trabajo)

Citar
El problema: independientemente del offset hasta las instrucciones consideradas como maliciosas, ciertos AVs no miran el offset si no, si contiene una serie de instrucciones independientemente de la localización de estas.
Deacuerdo, pero un archivo concreto tendrá esa serie de instrucciones en uno o varios offsets concretos. Siempre se modifica el contenido del offset (es la secuencia)... no hay problema en eso

Ahún así el asunto parece sencillo pero no lo es tanto.
Tal y como lo plantea Mad en el primer post, sigue siendo un proceso manual, te modifica el archivo, tienes que escanear las partes y debes ir ajustando el offset hasta dar con el, para esto existe el SignatureZero de Thor que tiene además un grafico del archivo y vas moviendo el rango con una barrita to xula y tal.

Yo estoy programando lo mismo pero totalmente automatico desde hace bastante, de momento ya detecto una o varias firmas aunque tiene varios errores y me falta darle soporte para kims. Está programado en C++ pero si quieres te lo paso por privado.

Si lo haces bien no importa si es el bifrost o el que te de la gana,  con el mio he pillado las de bifrost,optix, sub7 y netdevil.

Si decides hacerlo automático yo te aconsejo mi proceso que creo que poco se le puede hacer para que sea mas eficiente, en pseudocodigo:

hacer
   mientras haya partes detectadas
       Divides el archivo en X partes
       Escaneas las partes y eliges una detectada al azar
       Disminuyes el rango hasta el de la parte detectada
   fin mientras

   mientras haya partes detectadas
       Divides el archivo en 2 partes
       Escaneas las partes, las dos a la vez nunca serán detectadas
       Ajustas el rango a la parte detectada
   fin mientras

  Reestableces el rango a la ultima parte detectada que será la mas pequeña posible en divisiones

   mientras el "incremento" sea mayor que un byte
       Sobreescribes bytes desde el inicio del rango hasta el final de "incremento" bytes en "incremento" bytes
       Ajustas el final del rango a inicio del rango+incremento
       Disminuyes el "incremento"
   fin mientras

   En este punto tenemos el byte inicial de la firma pues repetimos el proceso anterior pero desde el final del rango dado por la division mas pequeña detectada hasta el inicio de la firma

Pero ahora se plantea otro problema y es que si tenemos dos firmas podemos haber detectado el inicio de una y el final de otra.
FFAAAAAAFF
Así que se sobreescribe el rango con X asi:
XFAAAAAAFF
FXAAAAAAFF
FFXAAAAAFF
....

Si alguna parte es detectada sabemos que había dos firmas.

Lo ultimo es ya, guardar esos offsets, modificarlos para que esa firma concreta ya no siga detectandola y repetir todo el proceso hasta que el archivo con las pequeñas modificaciones deje de ser detectado.




Título: Re: [Propuesta] Offset's Detector...
Publicado por: nhaalclkiemr en 17 Mayo 2007, 15:36 pm
Citar
El problema: independientemente del offset hasta las instrucciones consideradas como maliciosas, ciertos AVs no miran el offset si no, si contiene una serie de instrucciones independientemente de la localización de estas.

Eso es la heurística, no conseguireis nada modificando offsets para libraros de la heurística, para libraros de la heurística tendreis que ingienaroslas para saber que funcion del codigo es "sospechosa" para un AV y sustituirla por una alternativa


Este programa debería servir para detectar el offset que hace detectable al troyano, no para volverlo indetectable, una vez conocido el offset el resto lo tiene que hacer el user como mejor considere, aunke si k se puede añadir un editor hexadecimal...

y está claro que en ningun momento por mucho que partas no se puede modificar el contenido original...

Yo no se mucho de VB...pero weno...daré las ideas que pueda...

Lo que veo mas dificil en el proyecto y estaría muy bien es que el programa te analizase el automaticamente los archivos...o k los enviara al KIMS o Virustotal (siempre opcion voluntaria) para comprobar en cada caso...explico mejor mi idea:

-Primero analiza el archivo y guarda los resultados...lo parte en dos y analiza los dos...el k no sea detectado por el AV se desecha y el k sigue a ser detectado se vuelve a partir en 2, y así sucesivamente...cada vez un cachito (o varios) asta k al partir no sea detectado por nada...eso significa que acabas de partirlo al medio (los offset k son detectados) entonces vuelve a cojer un conjunto mas amplio y analiza, e intenta conseguir los offset que son detectados...

En vez de dos cachos se podría poner una opcion modificable...para poder elegir partir en vez de 2 por ejemplo 5 o en las partes que quieras...para acelerar el proceso...ademas así pruevas de varias maneras y mal será que si una vez lo partes en 2, otra en 3, otra en 5 y otra en 7 en alguna de ellas no partas el offset...

El problema es si parte en dos los offset que son detectados (es raro y puedes hacer lo k dije antes) Pues eso significa que donde partiste está el offset...y como sabes? Pues si al analizar las dos partes el AV no te detectará ninguna de las dos es k aí partiste el offset.


Saludos y suerte ;) ;)


Título: Re: [Propuesta] Offset's Detector...
Publicado por: [VolkS] en 17 Mayo 2007, 17:26 pm
Ummmm, yo he estado haciendo pruebas. He pillado mi cactus.dll 2.5 (que es detectado por casi todos los AV's) y he modificado el caracter 0x00 por un caracter aleatório: 0x34

Solo he modificado los 0x00 que no tenían ningun otro caracter al lado que sea distinto de 0x00 y he obtenido los siguientes resultados:

1) El EXE tiene el mismo tamaño, ni más ni menos bytes
2) El EXE ha quedado completamente funciona, no se ha "roto"
3) El EXE se ha vuelto indetectable para TODOS los AntiVirus, aqui el reporte:

(http://img254.imageshack.us/img254/2092/abc123rp4.jpg)

Solo sigue siendo detectado por 2 AntiVirus, pero lo detectan como forma general (me imagino que por Heurística). Si sigo modificando un poco más, le añado NOP's se queda 100% indetctable en menos de 10 minutos. Lo malo que este proceso se tiene que hacer a mano, al menos yo no encuentro forma de programarlo :(

Haré pruebas con troyanos más famosos (bifrost, etc) a ver si consigo crear algún EXE protector "manual".

cambio el md5 del soft y listo.
tmb para evitar algunos av's, siempre podes entrar al las propiedades del proyecto cambiar la version y todo ese tipo de info y cambiar los Sub's de lugar.


Título: Re: [Propuesta] Offset's Detector...
Publicado por: PlagaX en 18 Mayo 2007, 18:00 pm
Buenos dias a todos. :)

||MadAntrax|| me temo que lo quieres hacer ya existe, en el Troya Tools v1.3 programado por Agamanya, existen por los menos tres programas que hacen lo que tu quieres y que son perfectamente funcionales, el primero de ellos es el ZignatureZero prgramado por Thor, el segundo es el AV Fucker programado por el Sr. Sombrero, y el tercero es Zenith AV programado por -=Hipnosis=-.

La idea es buena, aunque está aplicacion ya existe, aunque está en una lengua muy rara (rumano, ruso, o algo asi)

BenRu:Si no me equivoco, la aplicación a la que haces referencia es el AV Devil 2 y el AV Devil 2.1 ambos Programados SEDDTO.

Ver imagen
http://img119.imageshack.us/my.php?image=troyatoolsue2.jpg (http://img119.imageshack.us/my.php?image=troyatoolsue2.jpg)

Ademas, el troya tools cuenta con muchas mas aplicaciones.

Ahora si quieres hacer un programa parecido, o esa es tu propuesta, lo puedes hacer.

Lo que si me pareceria relamente importante, es hacer un programa que pudiera hacer lo que en otro tiempo pasado hacia un programa que no me acuerdo como se llama, cuya funcion era la de "cantar" todos los offsets detectados por el Karpesky, seria fenomenal hacer un programa que haga exactamente lo mismo pero para varios antivirus.

Tambien seria igual de bueno pensar en si existiera la forma de ingresar a las bases de datos de las actualizaciones de los antivirus y de esa forma se podria contar con todos los offsets que detecta cada antivirus, para una aplicacion en particular.

Saludos   ;D

Suerte. :)


Título: Re: [Propuesta] Offset's Detector...
Publicado por: octalh en 20 Mayo 2007, 21:06 pm
Citar
Normalmente los archivos se parten con el olly (me lo enseñó octalh)

no se parten con olly eso nunca te lo dije, se partian con un editor HEX y con olly se hacen redirecciones de flujo para alterar las firmas.

se llama metodo RITes todo nada del otro mundo.

esa screenshot fue cuando hice unas pruebas con wollf pero desgraciadamente esta super atascado de firmas por todos lados.

acabe haciendo el rit en backdoors menos conocidas..

EL METODO ES 100% FUNCIONAL

salu2


Título: Re: [Propuesta] Offset's Detector...
Publicado por: Juza en 23 Mayo 2007, 13:57 pm
Minha ideia para offset detector


Título: Re: [Propuesta] Offset's Detector...
Publicado por: Juza en 23 Mayo 2007, 14:04 pm
Minha ideia para offset detector

idea=http://img402.imageshack.us/img402/7693/avodog2.jpg
 (http://img402.imageshack.us/img402/7693/avodog2.jpg)

estou a fazer um (programa Offset Detector) usando esta idea ;D