Mi cliente me pidió que escribiera un archivo ejecutable encriptado personalizado para evitar el agrietamiento fácil del sistema de licencias. Ahora, entiendo que esto es una falsa sensación de seguridad, pero a pesar de esto él insistió en ello.¿Ejecutar datos como código?
Así, Desenterré mis conocimientos de ejecutables portátiles y se acercó con esta idea:
- Cifrar el ejecutable
- palillo de esto al final de un ejecutable cargador junto con su tamaño
- El el cargador descifra los datos
- Copia el código en una página asignada con VirtualAlloc que tiene permisos ejecutables
- Encuentra el punto de entrada de la aplicación
- Salta allí y estamos listos.
Tengo un problema con la parte de saltar allí. ¿Cómo puedo hacer eso? Si tuviera que establecer un puntero a la función, ¿cuál sería la firma? ¿La firma de la función main() del ejecutable cargado? ¿O necesito recurrir al montaje?
Entiendo que podría ser necesario corregir las direcciones absolutas después de cargar el código. ¿Cómo compruebo si es necesario y cómo realizo esto?
Editar: Trabajando en Windows y compilando con GCC. Puedo cambiar el compilador de Microsoft si es necesario.
Edit2: Para aclarar: SÉ que en su mayor parte no tiene sentido. Creo que representa cualquier tipo de DRM. Depende de mi cliente decidir, y todavía lo quiere a pesar de que yo le advierto sobre esto.
Gracias de antemano.
Su solución tipada en mi punto de vista es un poco problemático, ¿qué pasa con sus funciones salta a otras funciones? Se han corregido otras direcciones y veo muchos problemas con esta solución, como ¿dónde están las bibliotecas vinculadas estáticas? ¿Quién usa el código encypted? – Svisstack
Yo diría, si realmente quieres DRM. Cómpralo. ¿Por qué? Incluso si tienes 'algo' funcionando. ¿Qué haces en seis meses cuando está roto? Mantenerse al día con las galletas es un trabajo de tiempo completo. –
Eso depende de mi cliente para decidir. Realmente no me importa si toma malas decisiones. Honestamente lo advertí y todavía lo quiere. –