2011-08-12 9 views
8

の実装: http://theiphonewiki.com/wiki/index.php?title=Bugging_Debuggersは、私がこのウィキから次の反海賊行為のコードを実装するtryignてきたPT_DENY_ATTACH著作権侵害防止コード

しかし

Program exited with status value:45. 
と手紙私のアプリは終了し、それを次のようにもかかわらず、

私はそれをテストします。私が関数呼び出しdisable_gdb()をコメントアウトした場合;アプリは正常に実行されます。

私は間違っているとは何ですか?それとも、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; 
} 

親切よろしく、

-code

答えて

15

コードが機能しています。それは、あなたの時間を無駄にしていると言わなければならないと言いました。このアプローチは、gdbと攻撃者/プログラマが協力している場合にのみ機能します。 gdbのようなツールの全体的な点は、極端にであり、このような単純な「バグ」がそれらをトラックで止めれば、誰かが非常に迅速にそれを修正するだろうということです。 thisページで説明したように:)

、あなただけのgdb内から次の操作を行うことができます。

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

だから、答えはあなたのアプリケーションをデバッグするからデバッガを防ぐためにしようではない点が存在しないということですか? – Chicowitz

関連する問題