Ir al contenido


Foto

Como proteger mi aplicacion de Copia?


  • Por favor identifícate para responder
13 respuestas en este tema

#1 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 03 agosto 2009 - 06:58

Hola a todos, yo nuevamente y disculpen si les caigo pesado.

En esta opurtunidad, quiero preguntar a ustedes maestros sobre el tema de proteccion de aplicacion(en mi caso dll).

Es decir, tengo mi dll la cual inyecto al proceso y que es utilizada por el proceso, pero ocurre que e notado que la dll que esta siendo usada por el proceso el cual e inyectado, puedo copiarla a mi antojo, lo cual no quiero que eso ocurra.

Ahora lo siguiente es mi manera de protegerla:
  • Como puedo hacer que mi dll solo sea inyectada por mi inyector que yo e creado.
  • Como puedo hacer que mi dll, cuando es inyectada no sea copiada  y te diga que dicha aplicacion(dll) esta siendo usada.
  • Como hago que mi dll, una ves termina el proceso al cual se inyecto se borre de la faz de la PC.

Esto seria mi manera de proteccion, nose si alguien podria ayudarme o darme otras ideas.

Gracias :embarrassed:
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 03 agosto 2009 - 07:19

Hola
Yo una vez protegí­ un programa usando un numero tomado del disco duro.
El programa se instalaba y ocultaba dicho proceso, obtení­a el numero del disco duro y si se trasladaba a otro ordenador no funcionaba si no estaba instalado.
No se, pero me imagino que se pude hacer algo parecido con la dll, por inyección de código.
Saludos
  • 0

#3 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 03 agosto 2009 - 08:32

Si, pero si yo deseo que la dll sea usada solamente cuando es inyectada por mi inyector?, porque detectado el ID del procesador y solo corra en dicho ID seria restringir a los posibles users que desean usar mi dll, lo que yo deseo es que usen el paquete completo no una parte.

Nose si me dejo explicar. :grin:
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 03 agosto 2009 - 08:37

Hola
Yo se que me meto en camisa de once varas, de estas cosas no se. :$
Como no se y siempre trato de hacer las cosas mas sencillas posibles lo que se me ocurre es hacer una comparación, me explico:
Tengo una aplicación, esta tiene un numero escondido en donde sea, muy sencillo.
Tengo una dll, esta solo funcionara si encuentra ese numero en el programa, inyector o lo que quieras, de lo contrario, no hará nada.
Se que no te sirve de nada, pero tal vez se te ocurra algo de estas cosas. :p
Saludos
  • 0

#5 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 03 agosto 2009 - 08:52

No esta bien, eso justo estaba pensando en estos momentos, es decir, tener algo en mi Inyector(ahi me perdi, es decir, como puedo hacer que mi inyector tenga un label o algo en especial que se pueda detectar por mi dll?), de ahi que cuando la dll que uso la inyecto en X proceso, ni bien se cree la dll lo que primero haga es buscar dicho proceso de mi Inyector y que de mi Inyector saque alguna informacion que me diga que es mi Inyector(imagino que no puede ser ni Titulo, ni nombre del Inyector ya que seria algo sencillo pasar esa proteccion).

Otra dia que se me viene a la mente es, hacer que mi inyecter comparta memoria o como lo encuentro en google "Shared Memory", de tal forma, que mi inyector escriba 1 y mi dll ni bien es creada que lea en memoria compartida el numero 1, si no encuentra el numero 1 entonces que se cierre.

Pero ahora el problemilla es codearlo :p
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 03 agosto 2009 - 08:57

Hola
Yo en realidad estaba pensando en una variable privada dentro del inyector que cree un numero.
Cuando se ejecute la dll busque esta variable, si es igual al la que tenga ella en algún lado entonces se ejecute.
Te repito amigo, solo esto elucubrando, cuando lleguen los maestros te darán una respuesta buena. (y)
Saludos
  • 0

#7 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 03 agosto 2009 - 09:28

Podrias hacer un ejemplo de lo que me comentas? ya que no habia hecho nada similar a lo que me dices. Gracias
  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 04 agosto 2009 - 12:04

Otra dia que se me viene a la mente es, hacer que mi inyecter comparta memoria o como lo encuentro en google "Shared Memory", de tal forma, que mi inyector escriba 1 y mi dll ni bien es creada que lea en memoria compartida el numero 1, si no encuentra el numero 1 entonces que se cierre.

Pero ahora el problemilla es codearlo :p


Sencillo.

Saludos.
  • 0

#9 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 04 agosto 2009 - 07:14

Gracias escafandra

e implementado algo similar pero mas corto, es decir, que mi inyector comparta algun valor y que luego de inyectar la dll, espere 3segundos para que la dll se cree y en Create puso que lea el valor compartido y existe o es el valor que yo asigne que continue si no que se cierre.

Es la unica solucion o existe otras alternativas?
  • 0

#10 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 04 agosto 2009 - 08:42

Alternativas puede haber tantas como aparezcan en tu imaginación. Paro como bien dice Caral es mejor simplificar el tema.

El meollo es conseguir que tu aplicación y la dll se comuniquen. Una dll cargada en otro proceso, no comparte el mismo espacio de memoria. Por otro lado cada proceso que cargue dicha dll tiene una copia de la misma diferente. No podrás compartir variables de las copias de dicha dll.

La comunicación se puede conseguir de forma sencilla almacenando algo en un archivo de disco, por ejemplo. El problema es que ese archivo puede ser identificado por el usuario y estropearte el sistema de protección. Un poco mas complejo es crear un espacio de memoria compartida. En ese caso ambos procesos pueden leer y escribir en dicho espacio y por tanto establecer una comunicación util y discreta a los ojos del usuario. La inyección de memoria WriteProcessMemory te puede resultar util pero engorrosa. También podrí­as establecer mensajes privados tipo SendMessage siempre que conozcas los Hanles de las ventanas implicadas. O bien usar DDE. Otra posibilidad es la comunicación mediante socket, pero es mas complejo. Como digo las posibilidades pueden ser muchas.

Yo me quedarí­a con un espacio de memoria compartida, es un método fiable discreto y no muy complejo. ;)

Saludos.
  • 0

#11 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 04 agosto 2009 - 09:41

Muchas Gracias escafandra, opto por la memoria compartida.

Una consulta adicional, algun metodo de inyeccion dll que no utilice:

CreateRemoteThread
WriteProcessMemory

Gracias
  • 0

#12 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 agosto 2009 - 12:31

Una consulta adicional, algun metodo de inyeccion dll que no utilice:

CreateRemoteThread
WriteProcessMemory

Gracias


Obligar a las aplicaciones a cargar tu dll mediante un Hook de Windows (SetWindowsHookEx)

Saludos.
  • 0

#13 c0lo

c0lo

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 241 mensajes
  • LocationLima-Peru

Escrito 05 agosto 2009 - 01:07

Si e estado temas referente a ello, y encontre un tutorial que bueno la mayoria esta en C o expresado en el y que me interesa o me atrae mucho, pero desearia si hay ejemplos para delphi.

Inyecciones:
4.1.-Appinit_dlls
4.2.-Setwindowshookex
4.3.-CreateRemoteThread
4.4.-Inyección por trampolí­n
4.5.-Redirección de Threads

Existen otros tipos de inyecciones, pero que se podrian hacer desde delphi?

Archivos adjuntos


  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 agosto 2009 - 05:05

Las inyecciones tipo Appinit_dlls y SetWindowsHookEx, son las mas sencillas. Yo me quedo con SetWindowsHookEx. Este tipo se puede hacer perfectamente desde delphi. En la Web tienes numerosos ejemplos, concretamente en CD de mano del maestro seoane.

Sabes que mi preferencia a la hora de escribir código es el C/C++. Para los otros tipos de inyección, desconozco si puedes encontrar ejemplos en delphi. Pero en cualquier caso percisas de echar mano del ASM.

En CD tienes un tutorial de inyección directa sin dll, aunque inconcluso.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.