Pasar de Static Linking a Dynamic Linking.

Iniciado por APOKLIPTICO, 28 Julio 2012, 20:31 PM

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

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

APOKLIPTICO

Cita de: Alex Mtx 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.


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.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Foxy Rider

Cita de: APOKLIPTICO en  7 Agosto 2012, 02:58 AM
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.

APOKLIPTICO

Bueno, pero eso sumado a técnicas anti emulacion, evita que sea detectado.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Foxy Rider

Cita de: APOKLIPTICO en  7 Agosto 2012, 17:46 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

APOKLIPTICO

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.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

david_BS

Cita de: 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.


esta idea es para considerar APOKLIPTICO, resolvería el tema de los imports
Cita de: [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.


Cita de: APOKLIPTICO en  7 Agosto 2012, 02:58 AM
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


The Swash

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.

[Zero]

http://foro.elhacker.net/analisis_y_diseno_de_malware/clase_encryptapi_haz_tus_codigos_indetectables_facilmente-t255039.0.html

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche