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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Ayuda con la API VirtualProtect para protejer un programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con la API VirtualProtect para protejer un programa  (Leído 4,320 veces)
sasske

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Ayuda con la API VirtualProtect para protejer un programa
« en: 1 Marzo 2014, 05:36 am »

Hola a todos, primero que todo, pensé en poner este post en el foro de C++ pero como mas que todo lo quiero para proteger el programa no sabia, porque hasta donde investigue (y lo poquito que logre entender) esta API tienen infinidad de usos.

Estaba viendo algunas formas de proteger un programa y la verdad que avance bastante en esto de la protección y yo que se bastante poquito, estoy bastante emocionado y quería saber esto de lograr bloquear los BP, que hasta donde lei se puede hacer con esta API ya que evitamos que se ponga el INT3, pero seguro eso ya lo saben así que voy al caso...

Me podrían ayudar a como usar correctamente esta API, definir sus dimensiones y si se puede algun ejemplo o consejo?, se los agradecería muchísimo porque me encariñe con el tema de proteger una aplicación(va, un CrackMe)

S2 y gracias de ante mano.

PD: Y si me dicen como detectar los HBP esta mas que bueno, mas que todo saque esto del post de karmany y el resto de los métodos los investigue por mi cuenta y los logre utilizar con un muy buen resultado, pero estos 2 no.
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con la API VirtualProtect para protejer un programa
« Respuesta #1 en: 1 Marzo 2014, 05:57 am »

Un metodo eficaz para detectar los int3 es hacer un checksum del codigo que quieres proteger.
Luego, puedes crear un thread que realice el checksum y compare el valor obtenido con el original.
Un int3 modificaria el valor calculado.

Con los HBPs es mas complejo, pues (hablando de OllyDbg) los plugines pueden detectar y evitar a la perfeccion el borrado de los registros de debug.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

sasske

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Ayuda con la API VirtualProtect para protejer un programa
« Respuesta #2 en: 1 Marzo 2014, 07:01 am »

Un metodo eficaz para detectar los int3 es hacer un checksum del codigo que quieres proteger.
Luego, puedes crear un thread que realice el checksum y compare el valor obtenido con el original.
Un int3 modificaria el valor calculado.

Con los HBPs es mas complejo, pues (hablando de OllyDbg) los plugines pueden detectar y evitar a la perfeccion el borrado de los registros de debug.

Saludos!

Me darias un ejemplo de este metodo para C++?

Gracias por la respuesta :)
En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Ayuda con la API VirtualProtect para protejer un programa
« Respuesta #3 en: 1 Marzo 2014, 07:56 am »

VirtualProtect te serviría específicamente para aludir bp on memory, ya que estos dejan de funcionar cuando se modifica el permiso de una sección. Durante el arranque podrías ir cambiando los permisos, aun así quedan los BP int3 y hardware breakpoint, ahora en sí podrás mitigar el porcentaje de éxito de un ataque a tu aplicación aun así no esperes tener una aplicación incrackeable, es cosa de decir la palaba mágia MCKSys Argentina o Fly y el programa se autocrackea  y te da un keygen  :laugh:

Saludos y suerte
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con la API VirtualProtect para protejer un programa
« Respuesta #4 en: 1 Marzo 2014, 09:26 am »

Me darias un ejemplo de este metodo para C++?

Gracias por la respuesta :)

Bueno, no programo en C++ por lo que no podría darte un ejemplo concreto en ese lenguaje.
Por otro lado, lo que puedes hacer es usar, por ej. el algoritmo Adler32 (el de zlib) para calcular el checksum de una parte de tu codigo (digamos, por ej., el sector de codigo que se encarga de comprobar el serial de tu aplicacion.).
Lo que haces es pasarle Adler a los bytes de ese codigo y guardas ese valor en alguna parte (puede ser en un solo DWORD o en varias partes. Mientras mas tedioso sea, mejor.)
Luego haces una función que verifique cada tanto ese codigo con Adler (el trigger lo elijes tu. Podria ser aleatorio.). Como te dije antes, puedes hacer un thread que verifique los bytes y si encuentra una diferencia, puedes setear un flag que haga que el programa se comporte de forma extraña, que haga calculos incorrectos, en fin, que se corrompa de forma "sutil" (eso es mejor a cerrar todo. Si cierras todo, el cracker se dará cuenta de que hay algo mal!)

Otra cosa que puedes usar es codigo automodificable/autoencriptable. Por ej. partes la rutina de registracion/verificacion en partes y cada parte se descifra antes de ejecutarse y la anterior se vuelve a cifrar.

Tambien convendria que no pongas todo el codigo junto. Como te dije antes, mientras mas tedioso, mejor para ti.

Otra idea es que pongas chequeos aleatorios al serial, que no esten en la rutina principal de registracion/verificacion, pero que sean necesarios para la correcta registracion del proggie.

En fin, hay millones de cosas que puedes hacer...  :P

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

sasske

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Ayuda con la API VirtualProtect para protejer un programa
« Respuesta #5 en: 1 Marzo 2014, 16:43 pm »

VirtualProtect te serviría específicamente para aludir bp on memory, ya que estos dejan de funcionar cuando se modifica el permiso de una sección. Durante el arranque podrías ir cambiando los permisos, aun así quedan los BP int3 y hardware breakpoint, ahora en sí podrás mitigar el porcentaje de éxito de un ataque a tu aplicación aun así no esperes tener una aplicación incrackeable, es cosa de decir la palaba mágia MCKSys Argentina o Fly y el programa se autocrackea  y te da un keygen  :laugh:

Saludos y suerte

Pense que para lo que me servia era para bloquear los Int3, y los hadware breackpoints si me quedaban, pero bueno e.e

PD: Ya se que no puede ser incrackeable, en algun momento tengo que checkear la key, y alguien va a sber donde, pero la cosa es hacerlo complejo :p

Bueno, no programo en C++ por lo que no podría darte un ejemplo concreto en ese lenguaje.
Por otro lado, lo que puedes hacer es usar, por ej. el algoritmo Adler32 (el de zlib) para calcular el checksum de una parte de tu codigo (digamos, por ej., el sector de codigo que se encarga de comprobar el serial de tu aplicacion.).
Lo que haces es pasarle Adler a los bytes de ese codigo y guardas ese valor en alguna parte (puede ser en un solo DWORD o en varias partes. Mientras mas tedioso sea, mejor.)
Luego haces una función que verifique cada tanto ese codigo con Adler (el trigger lo elijes tu. Podria ser aleatorio.). Como te dije antes, puedes hacer un thread que verifique los bytes y si encuentra una diferencia, puedes setear un flag que haga que el programa se comporte de forma extraña, que haga calculos incorrectos, en fin, que se corrompa de forma "sutil" (eso es mejor a cerrar todo. Si cierras todo, el cracker se dará cuenta de que hay algo mal!)

Otra cosa que puedes usar es codigo automodificable/autoencriptable. Por ej. partes la rutina de registracion/verificacion en partes y cada parte se descifra antes de ejecutarse y la anterior se vuelve a cifrar.

Tambien convendria que no pongas todo el codigo junto. Como te dije antes, mientras mas tedioso, mejor para ti.

Otra idea es que pongas chequeos aleatorios al serial, que no esten en la rutina principal de registracion/verificacion, pero que sean necesarios para la correcta registracion del proggie.

En fin, hay millones de cosas que puedes hacer...  :P

Saludos!

Muchas gracias por todas las ideas, ire investigando una por una, luego posteare mis resultados de como me fue, muchas gracias a los 2.

S2
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
protejer cd multimedia
Multimedia
shimonx 1 2,245 Último mensaje 27 Octubre 2007, 12:08 pm
por Sourraund
[Ayuda] Protejer datos en atake a sistema
Hacking
laiox 2 3,095 Último mensaje 26 Noviembre 2010, 23:15 pm
por laiox
Duda con VirtualProtect
Ingeniería Inversa
.:UND3R:. 8 5,771 Último mensaje 7 Septiembre 2011, 20:43 pm
por .:UND3R:.
Duda api VirtualProtect
Ingeniería Inversa
eduagre 0 2,083 Último mensaje 26 Junio 2014, 08:08 am
por eduagre
DEP bypass sin VirtualProtect?
Bugs y Exploits
Shout 1 3,249 Último mensaje 19 Septiembre 2015, 09:52 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines