Autor
|
Tema: Recomendaciones para evadir heuristica (Leído 10,878 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
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
Mensajes: 2.416
Se siente observado ¬¬'
|
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
Mensajes: 875
|
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 Las declaraba y listo.. Gracias!!!! EDITADO: Call Invoke("USER32", &HBC4DA2BE, 0, StrPtr("Soy Karcrack "), 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
Mensajes: 875
|
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
Mensajes: 2.416
Se siente observado ¬¬'
|
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í: FARPROC fnc = GetProcAddress(LoadLibrary("KERNEL32"), "ExitProcess"); __asm{ push 0 call [fnc] }
(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
Mensajes: 875
|
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
Mensajes: 875
|
Listooo !!! Solucionado !!!! Gracias! Gracias!
|
|
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
.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
Mensajes: 2.416
Se siente observado ¬¬'
|
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
Mensajes: 361
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Recomendaciones para crear dvd
Multimedia
|
dani99
|
3
|
2,739
|
8 Octubre 2006, 04:11 am
por eltiwas
|
|
|
Recomendaciones Juegos de Rol Para PC
« 1 2 »
Juegos y Consolas
|
vincent13m
|
14
|
12,433
|
25 Enero 2010, 13:54 pm
por Sheu-Ron
|
|
|
Consejo para evadir Kaspersky?
« 1 2 »
Análisis y Diseño de Malware
|
.:UND3R:.
|
10
|
7,152
|
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,448
|
5 Septiembre 2014, 17:05 pm
por Mister12
|
|
|
cules son las técnicas para evadir los antivirus
Análisis y Diseño de Malware
|
chamo
|
1
|
7,717
|
24 Octubre 2024, 19:55 pm
por Bad4m_cod3
|
|