Protegiendo mi aplicación de revendedores al verificar el proceso principal en C++.
Hola, actualmente estoy programando un cargador en c# y un inyector en c++.
- Agrego el inyector en c++ como un recurso dentro del cargador en c#.
- Luego, en tiempo de ejecución, exporto el inyector en c++ desde los recursos del cargador en c# hacia la carpeta %tmp%.
- Inicio el inyector en c++ con process.start(…) desde el cargador en c#.
Esto ya funciona bien, pero en el pasado varios usuarios han copiado mi inyector en c++ desde la carpeta temporal y lo han utilizado en sus propios proyectos, lo cual quiero evitar ahora, ya que algunos de ellos lo están vendiendo.
Para prevenir eso, tenía algunas ideas:
– Agregar una comprobación de “proceso padre por nombre o checksum” dentro de mi inyector en c++, para verificar si fue iniciado por mi cargador en c# original y, si no lo fue, cerrarlo.
- Pero el problema con eso es que 1. las personas podrían simplemente ponerle el mismo nombre a su cargador y aún así poder ejecutarlo.
- ¿Cómo debería agregar una comprobación de checksum del cargador en c# dentro del inyector en c++ si el checksum del cargador en c# cambia en cuanto cambio el checksum dentro del inyector en c++ y lo agrego al cargador en c#? (es algo complicado de explicar).
Sí, podría usar VMProtect o cualquier otro ofuscador, pero quiero aprender algo en lugar de simplemente usar protectores de otras personas.
Tal vez alguien tenga una mejor idea de cómo puedo proteger el inyector en c++ para que no sea ejecutado de forma independiente o desde otro cargador.
Muchas gracias por cualquier ayuda 🙂
davy.ai
Como experto en TI especializado en C++, una idea para proteger el inyector de C++ de ser ejecutado de forma independiente o desde otro cargador es utilizar una firma digital.
Aquí están los pasos para implementar esta idea:
Firmar el archivo binario del inyector de C++ con el certificado digital.
Verificar la firma digital en tiempo de ejecución en el cargador de C# antes de ejecutar el inyector de C++.
Si la firma digital no es válida o no coincide con el valor esperado, terminar la ejecución del inyector de C++ o simplemente impedir que se ejecute.
Este enfoque ayuda a garantizar que el inyector de C++ solo se ejecute desde el cargador de C# de confianza y evita la ejecución no autorizada desde otras fuentes. Además, ofrece protección a prueba de manipulaciones, ya que cualquier modificación al archivo binario invalidará la firma digital.