Autor
|
Tema: Como cifrar llamadas a las funciones en programa C (Leído 5,671 veces)
|
gxg
Desconectado
Mensajes: 37
|
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
Mensajes: 1.004
U N I X
|
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
|
|
|
|
gxg
Desconectado
Mensajes: 37
|
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
Mensajes: 1.004
U N I X
|
De hecho, no preguntate cómo se hace ... preguntaste: ¿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
|
|
|
|
gxg
Desconectado
Mensajes: 37
|
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: __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 pm por gxg »
|
En línea
|
|
|
|
D4RIO
Desconectado
Mensajes: 1.004
U N I X
|
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
|
|
|
|
jaunx
Desconectado
Mensajes: 20
|
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como acceder a las funciones de Windows por medio de un programa hecho en java
Java
|
porris
|
7
|
4,240
|
24 Septiembre 2010, 17:46 pm
por porris
|
|
|
¿Como crear un programa con estas funciones?
Programación Visual Basic
|
SD.-
|
1
|
2,071
|
22 Septiembre 2012, 19:42 pm
por ~.L.~
|
|
|
¿cifrar en base64 como el script spoiler de identi y hackstore como se hace?
PHP
|
Weeken
|
2
|
5,383
|
4 Marzo 2013, 03:43 am
por Weeken
|
|
|
[C] Argumentos anónimos en llamadas a funciones
Programación C/C++
|
MAFUS
|
4
|
2,292
|
23 Diciembre 2015, 17:26 pm
por 0xFer
|
|
|
Problema con llamadas entre funciones.
« 1 2 »
Programación C/C++
|
doitunkboo
|
10
|
3,553
|
19 Diciembre 2018, 21:48 pm
por doitunkboo
|
|