Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gxg en 15 Abril 2011, 13:01 pm



Título: Como cifrar llamadas a las funciones en programa C
Publicado por: gxg en 15 Abril 2011, 13:01 pm
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?



Título: Re: Como cifrar llamadas a las funciones en programa C
Publicado por: D4RIO en 15 Abril 2011, 13:56 pm
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.


Título: Re: Como cifrar llamadas a las funciones en programa C
Publicado por: gxg en 15 Abril 2011, 15:14 pm
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,


Título: Re: Como cifrar llamadas a las funciones en programa C
Publicado por: D4RIO en 15 Abril 2011, 15:55 pm
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.


Título: Re: Como cifrar llamadas a las funciones en programa C
Publicado por: gxg en 15 Abril 2011, 16:13 pm
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?


Título: Re: Como cifrar llamadas a las funciones en programa C
Publicado por: D4RIO en 15 Abril 2011, 16:47 pm
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.



Título: Re: Como cifrar llamadas a las funciones en programa C
Publicado por: jaunx en 15 Abril 2011, 21:59 pm

mira esto

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