2011-08-12 6 views
8

He estado tryign a implementar el siguiente código anti piratería de este wiki: http://theiphonewiki.com/wiki/index.php?title=Bugging_DebuggersLa implementación del código PT_DENY_ATTACH antipiratería

Pero a pesar de seguir a la letra mis salidas de aplicaciones con un

Program exited with status value:45. 

Cuando lo pruebo. Si hago un comentario sobre la función, llamo disable_gdb(); la aplicación se ejecuta de forma normal.

¿Qué es lo que estoy haciendo mal? ¿O es que el código está funcionando como debería ... y sale mientras está conectado xcode?

#import <UIKit/UIKit.h> 
#import <dlfcn.h> 
#import <sys/types.h> 

typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data); 
#if !defined(PT_DENY_ATTACH) 
#define PT_DENY_ATTACH 31 
#endif // !defined(PT_DENY_ATTACH) 

int main(int argc, char *argv[]) 
{ 
NSLog(@"Main Called "); 
disable_gdb(); 
NSLog(@"After cracker code"); 
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, nil); 
[pool release]; 
return retVal; 
} 



void disable_gdb() 
{ 
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW); 
ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace"); 
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); 
dlclose(handle); 
} 

int main3(int argc, char *argv[]) 
{ 
return -1; 
} 

Kindest Regards, -Code

Respuesta

15

El código está funcionando como estaba previsto. Dicho eso, debería decirte que estás perdiendo el tiempo. Este enfoque solo funcionará si gdb y el atacante/programador son cooperativos. El objetivo de herramientas como gdb es que son extremadamente versátiles y si un simple "error" como este los detuviera en seco, alguien lo arreglaría muy rápido. :)

Como se describe en la página this, que sólo puede hacer lo siguiente desde dentro gdb:

(gdb) break ptrace 
commands 1 
    return 
    continue 
end 
+7

Por lo tanto, la respuesta es que no hay razón para tratar de evitar que un depurador de depuración de la aplicación? – Chicowitz

Cuestiones relacionadas