Soluciones para cifrar mi propio codigo fuente

Iniciado por DarkSeer, 23 Mayo 2017, 22:57 PM

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

DarkSeer

Código (asm) [Seleccionar]
;AYUDENME POR FAVOR
;Lo que quiero lograr con este programa es que se encripte a si mismo
;Pero no logro hacerlo T_T Si hay otra forma de hacerlo serian tan amables de
;Explicarme SOLUCIONES A MI PROBLEMA
;Por lo que he visto cuando intenta abrirse a si mismo solo lo permite
;en modo lectura y no en modo escritura - -- y en modo lectura no
;puedo usar la función (0x5a) = mmap

global _start
section .text
_start:
pop eax ;argc
pop ebx ;argv[0] => programa
mov eax,0x5 ;sys_open
xor ecx,ecx ;O_RDONLY => modo lectura
xor edx,edx
int 0x80

mov ebx,eax
mov eax,0x13 ;sys_lseek
xor ecx,ecx
mov edx,0x2 ;final del fichero
int 0x80

;eax => contiene el tamaño del dichero

mov ecx,eax ;contador para el loop
lea esi,[_start + ebp] ;direccion donde empieza
sub esi,0x60 ;apunte al principio del fichero

cifrar:
;Por lo que he visto aqui el programa no tiene permisos de 'w'
;Lo he intentado usando la interrupcion '0x5a' pero no pasa nada
;a otros programas los puede cifrar pero asi mismo no puedo

mov byte[esi],0xff ;0xff es la llave
inc esi
loop cifrar

mov eax,0x1
xor ebx,ebx
int 0x80



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

Serapis

#1
¿Qué crees que es la protección de procesos????.
- Si un programa en memoria y ejecutándose pudiera modificarse alegremente, los problemas de seguridad serían enormes.

- De todos modos, incluso escribiendo drivers propios, existen límites y complicaciones:

- ¿Puede una báscula pesarse a sí misma?
- ¿..qué si tienes en la pila una serie de retornos y a la vuelta se deben hacer los correspondientes POPs?... tu código cifrado, ahora sería rescrito e indescifrable por tí mismo.
- ¿..qué si el registro IP, está apuntando a la instrucción pongamos 9999, y tu te empeñas en cambiar la dirección 9999?... supongamos que la consigues cambiar... ahora que se ejecutará...? ¿Cómo seguir cifrando el resto del programa cuando el algoritmo de cifrado, ya ha sido sobrescrito, las instrucciones que se encargan de cifrarlo ( y que ya están cifradas)?

- Supongamos que aún así se consiguiera cifrar por completo el programa... hemos dicho que el programa está ejecutando la instrucción 9999, pero el procesador, que como sabes (o deberías saber), tiene una cascada de instrucciones en diferentes estados (esto es, la 9999, se está ejecutando, pero la 10000 y la 10001 y... también, de hecho hay varias instrucciones que mientras una se está ejecutando, están en diferentes fases de la decodificación... incluso hay instrucciones que se ejecutan en paralelo, aunque nosotros las vemos o consideramos que se ejecutan en serie... si hay un salto, desde luego, se rompe la cascada que es despreciada... pero que pasaría con esas instrucciones que ya están fuera de nuestro control?. Bueno, al menos ya te indico que para descartarlas, deberías hacer un salto, para que sean descartadas, pero cómo hacer un salto y a dónde, si el código ha sido rescrito, por un contenido cifrado, quién le da las siguientes órdenes si ya no existen?

- Vamos un paso más allá, y olvidemos también la pipeline... Si hubieras logrado 'cifrar' todo tu programa, y estábamos en que la siguiente instrucción posterior a la 9999, empieza a decodificarse... No crees que no habrá modo de saber que sucederá?. Dando por cierto... que es cifrado y no simplemente remplazo de código 'sano' por otro 'malicioso', es decir si realmente es cifrado, el contenido en memoria para ser ejecutado, será pseudoaleatorio, luego el procesador puede 'volverse loco', impredecible.... podrías incluso borrar el disco sin darte cuenta, lo menos grave es que el cifrado se decodificara curiosamente como un bucle for, con un incremento del contador de 0, es decir un bucle infinito... en fin, aún suponiendo que nada te impidera cifrarlo tal como tu quieres, el resultado sería impredecible...

...y eso que soy generoso y doy por bueno, que solo quieras cifrarlo, y no remplazarlo por código   ::)>:D ::) >:D

Para terminar, ¿podrías decirme cuál es el objetivo de cifrar un ejecutable (en ejecución) en memoria y no en disco????

MCKSys Argentina

Hola!

No programo ASM en linux pero creo que esto te puede ser útil: http://asm.sourceforge.net/articles/smc.html

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


cpu2

Lo que sucede es que la sección text esta protegida contra escritura, lo que significa que no podras modificar ningun valor de esa sección en ejecucion.

Puedes modificar la flag de la sección text para que se pueda escribir, si estas en linux echale un vistazo con readelf y veras los permisos de las secciones etc...

Coloca el code en la sección data mismo, esta si se puede modificar en ejecucion, pero vijila a que se pueda ejecutar, si no al hacer la llamada o el salto, te dara una violacion de segmento.

Un saludo.

DarkSeer

#4
gracias por sus comentarios me sirvio de mucho ( soluciones mi problema )


· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex