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


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como cifrar llamadas a las funciones en programa C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como cifrar llamadas a las funciones en programa C  (Leído 3,822 veces)
gxg

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Como cifrar llamadas a las funciones en programa C
« en: 15 Abril 2011, 13:01 »

Si abro un ejecutable compilado por C en modo te texto, y este tiene llamadas a la api de windows, al final del texto aparecen todas estas funciones.

¿hay alguna forma de ocultar esto?



En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Como cifrar llamadas a las funciones en programa C
« Respuesta #1 en: 15 Abril 2011, 13:56 »

Si, pero no del todo. Si algo de información de este tipo queda oculta en el ejecutable, deberá existir una forma de que el ejecutable lo desenrede (desencripte) cuando se ejecute, y por ende, la forma de desencriptarlo estará dentro del código mismo. No será legible a simple vista, pero cualquiera podría descifrarlo.


En línea

OpenBSDFreeBSD
gxg

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Como cifrar llamadas a las funciones en programa C
« Respuesta #2 en: 15 Abril 2011, 15:14 »

Ya, pero yo lo que estoy preguntando es como se hace eso.

Un string si que lo se cifrar porque es manipulable, pero una llamada a una funcion no se como.

Lo que quiero saber es como se hace esto:

char s[]="lkjashdkljashdklajsd"

Descifrar(s);

//s=="FreeConsole()"

ejecutar(s)//<<==Esto es lo que quiero saber como se hace,
En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Como cifrar llamadas a las funciones en programa C
« Respuesta #3 en: 15 Abril 2011, 15:55 »

De hecho, no preguntate cómo se hace  :rolleyes: ... preguntaste:
Citar
¿hay alguna forma de ocultar esto?

A lo que la rta es "si, hay".

Pero ya que ahora preguntas esto. Puedes simplemente ocultarlo cifrando todo el ejecutable. Busca algun crypter por inet, o escribe uno. Parece poca ayuda, pero ahora conoces la palabra crypter, y te bastará para buscarlo.
En línea

OpenBSDFreeBSD
gxg

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Como cifrar llamadas a las funciones en programa C
« Respuesta #4 en: 15 Abril 2011, 16:13 »

Lo he cifrado con Themida y aparte de ocupar el doble el ejecutable al final del todo siguen apareciendo las llamadas a la api de wiindows.

Esto es lo que veo:

Código:
__gnu_exception_handler@4 ___mingw_CRTStartup _mainCRTStartup _WinMainCRTStartup ___do_sjlj_init __pei386_runtime_relocator __fpreset _initialized ___do_global_dtors ___do_global_ctors pseudo-reloc-list.c _w32_atom_suffix ___w32_sharedptr_default_unexpected ___w32_sharedptr_get dw2_object_mutex.0 dw2_once.1 sjl_fc_key.2 sjl_once.3 ___w32_sharedptr_initialize ___eprintf ___sjlj_init_ctor ___RUNTIME_PSEUDO_RELOC_LIST__ __imp___setmode __data_start__ ___DTOR_LIST__ __imp___onexit __head_libwinmm_a ___p__fmode _SetUnhandledExceptionFilter@4 ___w32_sharedptr_terminate ___tls_start__ __libmsvcrt_a_iname __imp__FindAtomA@4 __imp__abort __size_of_stack_commit__ __size_of_stack_reserve__ __major_subsystem_version__ __imp__GetAsyncKeyState@4 ___crt_xl_start__ _AddAtomA@4 ___crt_xi_start__ ___chkstk ___crt_xi_end__ __imp__AllocConsole@0 __imp____p__environ __head_libuser32_a __imp___iob __libmoldname_a_iname __bss_start__ ___RUNTIME_PSEUDO_RELOC_LIST_END__ __size_of_heap_commit__ ___p__environ ___crt_xp_start__ ___crt_xp_end__ __imp__signal __minor_os_version__ __imp__atexit __head_libmsvcrt_a __image_base__ __section_alignment__ __head_libmoldname_a __RUNTIME_PSEUDO_RELOC_LIST__ __imp____p__fmode _ExitProcess@4 __data_end__ ___getmainargs ___w32_sharedptr __CTOR_LIST__ ___set_app_type __bss_end__ __CRT_fmode __imp__scanf ___crt_xc_end__ ___crt_xc_start__ ___CTOR_LIST__ __imp__GetAtomNameA@12 _AllocConsole@0 _mciSendStringA@16 __imp__system __file_alignment__ __imp__malloc __major_os_version__ __imp__itoa __DTOR_LIST__ __imp__fprintf __imp__fclose __size_of_heap_reserve__ ___crt_xt_start__ __subsystem__ __imp__fflush __libwinmm_a_iname _FreeConsole@0 ___w32_sharedptr_unexpected __imp__fopen __imp____getmainargs ___tls_end__ __imp__ExitProcess@4 __imp__free __imp__SetUnhandledExceptionFilter@4 __major_image_version__ __loader_flags__ __libuser32_a_iname __CRT_glob __setmode __imp__AddAtomA@4 __head_libkernel32_a __imp___cexit __minor_subsystem_version__ __minor_image_version__ __imp____set_app_type __imp__mciSendStringA@16 _FindAtomA@4 __imp__sleep _GetAtomNameA@12 __RUNTIME_PSEUDO_RELOC_LIST_END__ __libkernel32_a_iname _GetAsyncKeyState@4 __imp__FreeConsole@0 ___crt_xt_end__


¿Entonces no hay ninguna forma de ejecutar una llamada a una funcion que este guardada en un string?
« Última modificación: 15 Abril 2011, 16:15 por gxg » En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Como cifrar llamadas a las funciones en programa C
« Respuesta #5 en: 15 Abril 2011, 16:47 »

Primero:
¿Son las mismas llamadas? Obviamente el crypter usara llamadas al sistema, aunque pocas (si es bueno, sino tendrás que codificar uno mejor)

Segundo:
Hay otra manera, que seria:

 a) Abrir las bibliotecas con funciones del linker (no se si en Windows tendrán lo mismo, pero en Unix hay "dlopen", "dlsym", "dlclose"), y obtener los símbolos. En el caso sería con dlsym, que recibe como parámetro el nombre del símbolo.
 b) Guardas los nombres de los simbolos cifrados como te guste (es ASCII) y los usas en una funcion cargar_simbolo_encriptado, el que los descifra, y luego los busca y carga.

El resultado sería que tu programa solo llamaría realmente a las funciones del linker, todo lo demas serían pedazos codificados y sin sentido. Tomarian sentido a la hora de cargarse.

En línea

OpenBSDFreeBSD
jaunx

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Como cifrar llamadas a las funciones en programa C
« Respuesta #6 en: 15 Abril 2011, 21:59 »


mira esto

http://foro.elhacker.net/analisis_y_diseno_de_malware/clase_encryptapi_haz_tus_codigos_indetectables_facilmente-t255039.0.html
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines