es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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++.

  1. Agrego el inyector en c++ como un recurso dentro del cargador en c#.
  2. Luego, en tiempo de ejecución, exporto el inyector en c++ desde los recursos del cargador en c# hacia la carpeta %tmp%.
  3. 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.

  1. 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.
  2. ¿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 🙂

Tags:  ,

Answer

  1. Avatar for 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:

    1. Obtener un certificado digital de una autoridad de certificación de confianza (CA) como VeriSign, Thawte o GlobalSign.
    2. Firmar el archivo binario del inyector de C++ con el certificado digital.

    3. Verificar la firma digital en tiempo de ejecución en el cargador de C# antes de ejecutar el inyector de C++.

    4. 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.

Comments are closed.