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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Recomendaciones para evadir heuristica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Recomendaciones para evadir heuristica  (Leído 10,104 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Recomendaciones para evadir heuristica
« en: 12 Abril 2013, 07:27 am »

Buenas amigos Foreros!! Espero anden bien :)

Les cuento.. Estoy desarrollando un pequeño troyano en asm, con funciones basicas,, lo justo y necesario.. Pero la cosa se esta complicando con los antivirus..
Yo tengo una tecnica para ir haciendo estas cosas.. voy creando partes del codigo y las voy probando en, por ejemplo, Novirusthanks... Bien, la cosa es que ya tengo algunas cosas "funcionando", por ejemplo, que la aplicacion se autocopie en el disco duro.. (deteccion por heuristica), tambien logre escribir en el registro de windows, para que se autoinicie.. (deteccion por virus), y asi la lista sigue un poco mas,, por ejemplo al usar la API getcomputername..

Al parecer,, todo lo basico que un malware debe hacer, es detectado por uno o por otro antivirus..
He leido algunos hilos, foros, wikipedia, etc.. de cosas asi como el polimorfismo, encriptacion.. etc, etc

De estas tecnicas la unica que podria manejar (por ahora quizas) es la encriptacion..

Alguien tiene alguna idea de como se podria evadir un poco mejor ( sin llegar al extremo del polimorfismo ) a los AV ? Y de ser posible algun ejemplo practico, un pseudocode o idea teorica.. todo sirve..
Muchas gracias por leer toda esta maza que acabo de escribir!! jeje

Saludos!
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #1 en: 12 Abril 2013, 13:02 pm »

La clave es cargar las APIs de forma dinámica. Si abres tu binario con cualquier editor de PE podrás ver que hace directamente las importaciones en la IAT. Un AV no tiene ninguna dificultad en revisar esa lista y empezar a sospechar.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #2 en: 12 Abril 2013, 19:54 pm »

Bien,, buen consejo.. Voy a buscar info para hacer tal cosa en asm. Pero,, de casualidad podrias explicarme mas o menos como es la cosa? Porque la verdad, he realizado algun programita similar al que quiero hacer ahora, pero en vb y alguno mas sencillo en c++, pero en asm ( a pesar de que puede ser muy parecido la estructura quizas con asm ) nunca cargue dinamicamente las apis  :silbar:
Las declaraba y listo..

Gracias!!!!

EDITADO:

Citar
Call Invoke("USER32", &HBC4DA2BE, 0, StrPtr("Soy Karcrack :D"), StrPtr("Ejemplo"), 0)

Impeca,, ya tengo para empezar.. jajaja

Gracias KarcracK
« Última modificación: 12 Abril 2013, 20:22 pm por Vaagish » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #3 en: 12 Abril 2013, 23:36 pm »

Bueno,, luego de unas pares de horas buscando como hacer para llamar a las apis dinamicamente, no he podido siquiera encontrar mucha info..
Esta el manual de Karcrack pero la verdad no logro captar el mecanismo.. Si pudiera alguien explicar le estaria muy agradecido!! :)
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #4 en: 13 Abril 2013, 23:58 pm »

Si estás programando en C no tendrás que complicarte tanto la vida como toca hacer en VB6.

La forma más simple de llamar a una función de forma dinámica es obteniendo su puntero con LoadLibrary() y GetProcAddress(). Algo así:

Código
  1. FARPROC fnc = GetProcAddress(LoadLibrary("KERNEL32"), "ExitProcess");
  2. __asm{
  3.   push 0
  4.   call [fnc]
  5. }
(Puede que no compile tal cual, lo acabo de escribir sin más. Creo que la idea queda clara.)

Suerte ;)
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #5 en: 15 Abril 2013, 19:17 pm »

Gracias Karcrack otra vez!! Estoy programando en masm.. creo que entiendo,, ahora me voy a poner con eso..

Tnks!



Bueno,, estoy en esto de la carga dinamica de apis,, podrias decirme si voy bien, o si lo que estoy haciendo tiene sentido ? jaja ( Es que soy nuevo en asm )

.386
.model, etc, etc...

include windows.inc
include kernel32.inc    ---> Incluyo a kernel32 para poder utilizar LoadLibrary :/
includelib kernel32.lib

.code
Inicio:

invoke LoadLibrary, addr Lib --> "user32" (Calculo que el handle me queda en eax)
mov Hand, eax --> Hand deberia ser una estructura de tipo handle, supongo.. pero no se declararla..
invoke GetProcAddress, Hand, addr Func --> "MessageBox" (Calculo que lo que retorne, queda en eax)

push 0
push offset [Mensaje]
push offset [Titulo]
push 0

call eax ( Puede ser esto posible ?? )

invoke ExitProcess, 0

end Inicio

Bueno,, estoy muy mariado o algo de sentido tiene esto ?? Graciasss!!
« Última modificación: 15 Abril 2013, 21:07 pm por Vaagish » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #6 en: 15 Abril 2013, 22:57 pm »

Listooo !!! Solucionado !!!! :D

Gracias! Gracias!
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #7 en: 16 Abril 2013, 01:43 am »

Código:
.386
.model flat, stdcall
option casemap:none

include     \masm32\include\windows.inc
include     \masm32\include\kernel32.inc
includelib  \masm32\lib\kernel32.lib

bufSize = MAX_COMPUTERNAME_LENGTH + 1

.data

format1   db 'Computer Name is = %s',0
capt        db 'Hello',0

buffer      db 100 dup(?)
bSize       dd bufSize
getName  db bufSize dup(?)

;Nombres de los Dll utilizados y sus funciones

Lib db "user32.dll", 0
Lib2 db "kernel32.dll",0

Func         db "MessageBoxA", 0
Func2        db "wsprintfA", 0
Func3        db "GetComputerName", 0
Func4        db "ExitProcess", 0

DinamicApi Proto :DWORD, :DWORD

.data?

Hand dd ?

.code

start:

invoke GetComputerName, addr getName, addr bSize

;Error al usar la libreria kernel32.dll
;invoke DinamicApi, addr Lib2, addr Func3
;PUSH offset [bSize]
;PUSH offset [getName]
;call Hand

;**********************************************************************

invoke DinamicApi, addr Lib, addr Func2

PUSH offset [getName]
PUSH offset [format1]
PUSH offset [buffer]

call Hand

;**********************************************************************

invoke DinamicApi, addr Lib, addr Func
   
PUSH MB_OK
  PUSH offset [capt]
  PUSH offset [buffer]
  PUSH NULL
   
    call Hand

;**********************************************************************

invoke FreeLibrary, addr Hand

invoke DinamicApi, addr Lib2, addr Func4
PUSH 0
    call Hand
   
    ;**********************************************************************

DinamicApi proc Libreria:DWORD, Funcion:DWORD

invoke LoadLibrary, Libreria
invoke GetProcAddress, eax, Funcion
mov Hand, eax

ret

DinamicApi endp

END start

Bueno, algo asi quedo el code,, el unico problema es cuando quiero utilizar la API Kernel32, modulo o Dll (Como le quieran llamar)
El problema es que LoadLibrary se carga incluyendo a Kernel32,, entonces supongo yo que no puede autollamarse,, Me explico????
Y otra consulta.. Como puedo ofuscar los strings "user32", "messageboxA", etc, etc.. porque eso queda a plena vista del ollydbg, supongo que para un AV no es mayor problema leer esos string tambien..

Saludos !!
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #8 en: 16 Abril 2013, 07:36 am »

El problema es que LoadLibrary se carga incluyendo a Kernel32,, entonces supongo yo que no puede autollamarse,, Me explico????
No entendí. Si que puedes hacer LoadLibraryA("kernel32") si es lo que preguntas. Con esto obtendrías la dirección base de la DLL sin tener realmente que cargarla de nuevo. La forma correcta sería GetModuleHandle() ya que sabes que ya está cargada.

Y otra consulta.. Como puedo ofuscar los strings "user32", "messageboxA", etc, etc.. porque eso queda a plena vista del ollydbg, supongo que para un AV no es mayor problema leer esos string tambien..
Ese sería el siguiente paso a la indetección. Cifrar cadenas sospechosas :)
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Recomendaciones para evadir heuristica
« Respuesta #9 en: 16 Abril 2013, 11:37 am »

el se referira a como se llama usa LoadLibrary de forma dinamica sin importarla.

La respuesta es que tendrias que usar una implementacion propia de GetModuleHandle y GetProcAddress
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Recomendaciones para crear dvd
Multimedia
dani99 3 2,490 Último mensaje 8 Octubre 2006, 04:11 am
por eltiwas
Recomendaciones Juegos de Rol Para PC « 1 2 »
Juegos y Consolas
vincent13m 14 11,796 Último mensaje 25 Enero 2010, 13:54 pm
por Sheu-Ron
Recomendaciones para comprar NAS
Hardware
Mafmaestro 6 6,739 Último mensaje 15 Enero 2011, 21:36 pm
por imoen
Consejo para evadir Kaspersky? « 1 2 »
Análisis y Diseño de Malware
.:UND3R:. 10 6,618 Último mensaje 7 Abril 2014, 23:36 pm
por Vaagish
Ex NSA EI utiliza las revelaciones de Snowden para evadir la inteligencia de E..
Noticias
Mister12 0 1,204 Último mensaje 5 Septiembre 2014, 17:05 pm
por Mister12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines