elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++/ASM] Ejemplo de cifrador de funciones y eliminador de códigos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++/ASM] Ejemplo de cifrador de funciones y eliminador de códigos  (Leído 3,259 veces)
BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
[C++/ASM] Ejemplo de cifrador de funciones y eliminador de códigos
« en: 15 Mayo 2022, 17:26 pm »

Buenas gente del foro, este código lo había hecho hace unos cuantos años por el 2014, pensando que lo había perdido hasta que lo encontré hace un par de días, finalmente he decidido liberarlo como FOSS para quien quiera probarlo.

La idea es cifrar y/o destruir parte del contenido de las funciones para evitar el análisis estático de los binarios, esto lo tome como idea hace años del antiguo sistema de protección de Themida/WinLicense de Oreans:

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "codeencryption.h"
  4.  
  5. #pragma optimize("",off)
  6. _declspec(noinline)int addOperation(int a, int b)
  7. {
  8. int iRetval;
  9. CodeEncryption cdProtection;
  10. cdProtection.dwPassWord = 0xDEADBAFF;
  11. cdProtection.biOptions = ENCRYPTION_PAGE_PROTECTIONS | ENCRYPTION_CLEAR_CODE;
  12. iRetval = a;
  13. BeginEncryption(&cdProtection);
  14. iRetval += b;
  15. EndEncryption(&cdProtection);
  16. return iRetval;
  17. }
  18.  
  19. _declspec(noinline)int addAndSquareRoot(int a, int b)
  20. {
  21. int iRetval;
  22. CodeEncryption cdProtection;
  23. cdProtection.dwPassWord = 0xDEADBAFF;
  24. cdProtection.biOptions = ENCRYPTION_PAGE_PROTECTIONS | ENCRYPTION_CLEAR_CODE;
  25. iRetval = a;
  26. BeginEncryption(&cdProtection);
  27. iRetval += b;
  28. iRetval = (int)sqrt(iRetval);
  29. EndEncryption(&cdProtection);
  30. return iRetval;
  31. }
  32. #pragma optimize("",on)
  33.  
  34. int main()
  35. {
  36. int a = 4, b = 21;
  37. printf("%i+%i=%i\n", a, b, addOperation(a, b));
  38. printf("%i+%i=%i\n", a, b, addOperation(a, b));
  39. getchar();
  40. printf("sqrt(%i+%i)=%i\n", a, b, addAndSquareRoot(a, b));
  41. printf("sqrt(%i+%i)=%i\n", a, b, addAndSquareRoot(a, b));
  42. getchar();
  43. return 0;
  44. }

Donde se puede ver el código original compilado se vé de la siguiente forma:



Sin embargo si se le pasa el mini sistema de protección que cifra y elimina las rutinas:



Como se pudo observar parte de la función que elegí queda cifrada y en ejecución si se ejecuta más de una vez esta se elimina del código asignando opcodes de NOP.

Desventaja:
Requiere deshabilitar el ASLR lo cuál no es lo usual hacerlo dado a que esto está habilitado por defecto para evitar exploits.

Cosas para terminar:
Mejorar la detección de las funciones que marcan el que código cifrar y/o eliminar.

Enlace al repositorio:
https://github.com/BloodSharp/CodeObfuscation


B#


« Última modificación: 15 Mayo 2022, 17:28 pm por BloodSharp » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necisito Un encriptador o cifrador
Software
Leon2010 2 2,254 Último mensaje 18 Mayo 2010, 11:00 am
por musicman
Cifrador root 13
Programación C/C++
Søra 7 4,375 Último mensaje 15 Diciembre 2010, 21:59 pm
por Søra
[PROYECTO]Desarrollo de un cifrador indetectable « 1 2 3 »
Análisis y Diseño de Malware
ErOzE 22 12,538 Último mensaje 5 Marzo 2011, 22:52 pm
por ErOzE
Duda de funciones mainwindow.cpp en otros códigos QT
Programación C/C++
Puntoinfinito 5 3,930 Último mensaje 22 Mayo 2013, 18:02 pm
por Puntoinfinito
El cifrador de Polybios
Java
Tronos154 2 5,552 Último mensaje 26 Enero 2016, 21:30 pm
por Tronos154
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines