Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: APOKLIPTICO en 28 Julio 2012, 20:31 pm



Título: Pasar de Static Linking a Dynamic Linking.
Publicado por: APOKLIPTICO en 28 Julio 2012, 20:31 pm
Hola! Como va, estoy desarrollando un programa y me gustaría saber si es posible hacer que todas las llamadas estáticas a APIs se conviertan en dinámicas, es decir, poder cargarlas en tiempo de ejecución. La razón es que quiero obfuscar las apis para que no aparezcan adentro del ejecutable si uno lo abriese con un editor hexadecimal. Hay alguna manera de hacer esto que no sea manualmente hacer todas las llamadas en el código??

Un abrazo
APOKLIPTICO.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: [L]ord [R]NA en 29 Julio 2012, 15:27 pm
Si es posible... hay varios metodos de obtener la direccion base del Kernel, luego de esto obtener GetProcAddress y LoadLibrary; despues de eso simplemente es obtener las APIs que necesitas.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: APOKLIPTICO en 30 Julio 2012, 01:46 am
Sisi, obvio, pero mi pregunta es si hay alguna manera de automáticamente modificar en el código los linkeos estáticos por dinámicos, de esta manera se pueden obfuscar las llamadas para que no se puedan leer fácilmente si uno abre el ejecutable con un visor hexadecimal.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: Eternal Idol en 30 Julio 2012, 13:35 pm
UPX (http://upx.sourceforge.net/).


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: APOKLIPTICO en 30 Julio 2012, 15:50 pm
Mi idea es que no sea tan fácilmente visible. Aparte no me gusta mucho trabajar con UPX porque hace saltar falsos positivos en algunos AV. Lo que quiero es obfuscarlos en tiempo de diseño y desobfuscarlos cuando arranque el programa sólo para cargar las funciones necesarias.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: david_BS en 6 Agosto 2012, 03:14 am
Hola APOKLIPTICO, no se si usás Visual Studio, pero te muestro una imagen del Visual C++ 6.0 que lo tengo para algunas cosas, en verdad uso el 2010 por supuesto. pero te muestro algo, más la explicación de la msdn

(http://img839.imageshack.us/img839/9433/multia.png) (http://imageshack.us/photo/my-images/839/multia.png/)

http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.80).aspx (http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.80).aspx)
http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx (http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx)

en mi caso usé ese modo obviamente para el tamaño del ejecutable en cuestión, pero vos sabrás usar ese modo para tu conveniencia..
espero haberte ayudado


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: Foxy Rider en 6 Agosto 2012, 03:20 am
Pero .... es al pedo, estás cambiando de donde hay que fijarse que APIs usás.
No lo estás ni ocultando ni ofuscando.

Saludos.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: тαптяα en 6 Agosto 2012, 10:09 am
¿En que consiste UPX?

Gracias


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: Eternal Idol en 6 Agosto 2012, 10:20 am
¿En que consiste UPX?

Gracias

Fijate aca:UPX (http://lmgtfy.com/?q=upx&l=1).


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: тαптяα en 6 Agosto 2012, 12:44 pm
Fijate aca:UPX (http://lmgtfy.com/?q=upx&l=1).
¿Gracias?


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: Eternal Idol en 6 Agosto 2012, 12:59 pm
¿Gracias?

Si la proxima vez buscas antes de preguntar de nada  ;)


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: APOKLIPTICO en 7 Agosto 2012, 02:58 am
Pero .... es al pedo, estás cambiando de donde hay que fijarse que APIs usás.
No lo estás ni ocultando ni ofuscando.

Saludos.


Si en vez de cargarlas en tiempo de diseño las APIs, lo cual se puede ver con depends o algún otro programa que vea las funciones que importa el programa, se cargan dinámicamente en tiempo de ejecución, estos ya no aparecen. Si uno abre con un editor hexadecimal el ejecutable, va a haber en la parte de los strings las apis. Si uno lo cifra y luego lo descifra en tiempo de ejecución, sólo se va a poder saber esto si se debuggea el programa, si uno evita que el programa se pueda debuggear o emular, no hay manera de saber qué APIs se cargan.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: Foxy Rider en 7 Agosto 2012, 17:20 pm
Si en vez de cargarlas en tiempo de diseño las APIs, lo cual se puede ver con depends o algún otro programa que vea las funciones que importa el programa, se cargan dinámicamente en tiempo de ejecución, estos ya no aparecen. Si uno abre con un editor hexadecimal el ejecutable, va a haber en la parte de los strings las apis. Si uno lo cifra y luego lo descifra en tiempo de ejecución, sólo se va a poder saber esto si se debuggea el programa, si uno evita que el programa se pueda debuggear o emular, no hay manera de saber qué APIs se cargan.

Tanto baile .... para hookear un par de funciones (o más fácil? correr el binario sobre wine con APIs modificadas, menos drama), y saltearse todo el asunto del depurador ... Apenas se vea LoadLibrary() y GetProcAddress() en la tabla y "garbage" en el editor, unx sabe en dónde esperar la versión descifrada de ese garbage.

Saludos.

P.S → Lo del cifrado no lo habías mencionado, aún así sigue siendo al pedo.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: APOKLIPTICO en 7 Agosto 2012, 17:46 pm
Bueno, pero eso sumado a técnicas anti emulacion, evita que sea detectado.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: Foxy Rider en 7 Agosto 2012, 17:52 pm
Bueno, pero eso sumado a técnicas anti emulacion, evita que sea detectado.
Seguís dependiendo de lo que hay debajo de tus pies para sustentar todo el boliche (mi mensaje sigue siendo válido para esto que acabas de acotar), pero como gustes ... se vé que no aprendimos nada de la industria de los videojuegos. Eso o queremos un mejor marketing :D


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: APOKLIPTICO en 7 Agosto 2012, 17:58 pm
La idea de obfuscar las llamadas a las API es para que no se pueda rápidamente saber qué APIs están siendo cargadas. Es para evitar heurística y firmas.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: david_BS en 7 Agosto 2012, 19:21 pm
La idea de obfuscar las llamadas a las API es para que no se pueda rápidamente saber qué APIs están siendo cargadas. Es para evitar heurística y firmas.


esta idea es para considerar APOKLIPTICO, resolvería el tema de los imports
Si es posible... hay varios metodos de obtener la direccion base del Kernel, luego de esto obtener GetProcAddress y LoadLibrary; despues de eso simplemente es obtener las APIs que necesitas.


Si en vez de cargarlas en tiempo de diseño las APIs, lo cual se puede ver con depends o algún otro programa que vea las funciones que importa el programa, se cargan dinámicamente en tiempo de ejecución, estos ya no aparecen. Si uno abre con un editor hexadecimal el ejecutable, va a haber en la parte de los strings las apis. Si uno lo cifra y luego lo descifra en tiempo de ejecución, sólo se va a poder saber esto si se debuggea el programa, si uno evita que el programa se pueda debuggear o emular, no hay manera de saber qué APIs se cargan.

sobre eso que te dijeron de usar apis modificadas, podés usar tu propia GetProcAddress y tu propia LoadLibrary.

y recordá que programas que actuén en modo ring 0 pueden igualmente detectar o determinar si creás un hilo remoto o si cargás una dll, no necesitan solamente spoofear tus llamadas a apis a nivel usuario



Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: The Swash en 7 Agosto 2012, 22:30 pm
Hola,

Creo que automáticamente no puedes hacerlo pero sí a mano, debes definir punteros a funciones de cada API a cargar dinámicamente y luego asignarle la dirección de la función que debes obtener bien con GetModuleHandle, GetProcAddress, EAT, etc.

Un saludo,
Iván Portilla.


Título: Re: Pasar de Static Linking a Dynamic Linking.
Publicado por: [Zero] en 9 Agosto 2012, 23:46 pm
Código:
http://foro.elhacker.net/analisis_y_diseno_de_malware/clase_encryptapi_haz_tus_codigos_indetectables_facilmente-t255039.0.html

Saludos