Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 660
Poder: 5
aguml Va por buen camino
Pasar este mini-codigo a C++Builder

Bueno pues sigo con el tema de los antidebuggings y ahora estoy liado con el que creo será el ultimo que mire. Se trata de este:

Código:
xor eax, eax
push offset @being_debugged
push dword fs:[eax]
mov fs:[eax], esp
//any illegal value will do
//must be dword-aligned
//on Windows Vista and later
push esp
call CloseHandle
Se supone que si le pasamos un handle invalido nos devolverá la excepcion 0xC0000008 y con eso podriamos saber si estamos siendo depurados o no ya que si estamos siendo depurado el depurador gestionará el evento STATUS_INVALID_HANDLE y es lo que quiero hacer, detectar al debugger usando ese truco pero todo lo que encuentro está en ensamblador y no me entero. ¿como podria hacer eso en C++builder?

Última edición por Casimiro Notevi fecha: 23-06-2014 a las 16:50:05.
Responder Con Cita
  #2  
Antiguo 23-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 660
Poder: 5
aguml Va por buen camino
lo que quiero es que cuando de esa excepcion poder mostrar que el debugger está presente. He probado a poner e ClosHandle con un __try ... Catch(...), catch(Exception &e), catch(ERROR_INVALID_HANDLE) y no funciona nada. El ejecutable sale de la funcion justo despues de la excepcion. ¿Como puedo hacer para controlar esa excepcion y mostrar un mensaje que diga si esta o no siendo depurado?
Responder Con Cita
  #3  
Antiguo 24-06-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 1.887
Poder: 12
escafandra Va camino a la famaescafandra Va camino a la fama
Ese fragmento de código suelto no dice mucho, quizás se refiere al PEB.BeingDebugged. Lee esto y esto otro.

Saludos.

Última edición por escafandra fecha: 24-06-2014 a las 01:12:59.
Responder Con Cita
  #4  
Antiguo 24-06-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 1.887
Poder: 12
escafandra Va camino a la famaescafandra Va camino a la fama
Te explico el código asm que expones:

Código:
xor eax, eax                 // Ponemos en eax un 0
push offset @being_debugged  // Apilamos la rutina manejadora de excepciones
push dword fs:[eax]          // y añadimos esa rutina
mov fs:[eax], esp            // al manejador de excepciones
push esp                     // Pasamos como parámetro a CloseHandle un valor cualquiera inválido
call CloseHandle             // Tratamos de cerrar el Handle que hemos pasado
Ahora tienes que implementar tu rutina begin_Debugged que si se llega a ella, es que estamos siendo debuggeados.


Saludos.
Responder Con Cita
  #5  
Antiguo 24-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 660
Poder: 5
aguml Va por buen camino
¿y como hago eso en c++?
Responder Con Cita
  #6  
Antiguo 24-06-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.606
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por aguml Ver Mensaje
¿y como hago eso en c++?
Si mal no recuerdo, puedes incrustar código asm en c++
Responder Con Cita
  #7  
Antiguo 24-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 660
Poder: 5
aguml Va por buen camino
eso tiene dos peros, el primero que tal y como está no compila si lo encapsulas. El segundo, segun me comentaron, no se podria hacer para programas de x64. Seguro que se puede hacer usando c++.
Responder Con Cita
  #8  
Antiguo 24-06-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.606
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por aguml Ver Mensaje
Seguro que se puede hacer usando c++.
Por supuesto que sí.
Responder Con Cita
  #9  
Antiguo 24-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 660
Poder: 5
aguml Va por buen camino
me han dicho que pruebe algo como esto:
Código:
HANDLE pAux; 
  __try [throw CloseHandle(pAux);]
  catch[EXCEPTION_INVALID_HANDLE)
[...]
Lo siento por no poder poner las cosas con saltos de linea pero este mobil no me lo permite.

Última edición por ecfisa fecha: 24-06-2014 a las 17:40:55. Razón: agregar etiquetas
Responder Con Cita
  #10  
Antiguo 24-06-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 1.887
Poder: 12
escafandra Va camino a la famaescafandra Va camino a la fama
Código:
  HANDLE pAux;
  __try{
    CloseHandle(pAux);
  }
  __except(EXCEPTION_EXECUTE_HANDLER){
     Beep(100, 100);
  }

Saludos.
Responder Con Cita
  #11  
Antiguo 24-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 660
Poder: 5
aguml Va por buen camino
Muchas gracias amigo, ya lo habia conseguido hacer con asm pero esto me gusta mas asi que lo he puesto asi y queda fantastico jejeje.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda a pasar este código a firemonkey. elmago00 FireMonkey 55 08-01-2015 16:25:18
Pasar pequeño codigo Delphi a Builder aguml C++ Builder 11 03-06-2013 18:13:51
pasar codigo de delphi a c++ Builder rxaxx9 C++ Builder 2 13-05-2012 07:27:17
Porque este código me da error (adjunto código) David JAVA 1 12-03-2009 21:07:27
Ejecutar aplicación en sistema que no esté instalado Builder C++ meme C++ Builder 2 11-03-2008 21:49:40


La franja horaria es GMT +2. Ahora son las 02:07:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi