[Propuesta] Offset's Detector...

Iniciado por Mad Antrax, 16 Mayo 2007, 20:58 PM

0 Miembros y 1 Visitante están viendo este tema.

¿Que os parece la propuesta?

No he entendido el proyecto
1 (7.1%)
No le veo utilidad
2 (14.3%)
Demasiado complicado, se quedará a medias...
3 (21.4%)
Ok, me apunto al proyecto!!
8 (57.1%)

Total de votos: 14

Votación cerrada: 31 Mayo 2007, 20:59 PM

Mad Antrax

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)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

BenRu

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

ANELKAOS

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 :)

Hans el Topo

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.
 

Mad Antrax

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.

Cita de: Hans el Topo en 16 Mayo 2007, 22:58 PM
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?
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

WHK

#5
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á:



y luego injectar bites vacios como lo hace el topo:



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:
CitarDemasiado 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.

~~

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.

CitarUna 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 ;)

byebye

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.

Mad Antrax

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:



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".
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

MazarD

CitarUmmmm, 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

Citarse 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)

CitarEl 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.


-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net