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 |