iOS ptrace 對 APP進(jìn)行反調(diào)試處理

今天有一個需求,需要對項目進(jìn)行反調(diào)試處理 ?查看了很多的博客,終于找到了,大多寫的不是很全.我總結(jié)下.

一般使用

? ? ptrace_ptr(PT_DENY_ATTACH,0,0,0);來反調(diào)試。

首先要在工程的main.m類中導(dǎo)入頭文件#include<dlfcn.h>,

我查找了幾篇博客都沒寫這個,導(dǎo)致了很多錯誤.

然后就是代碼部分了

typedefint(*ptrace_ptr_t)(int_request,pid_t_pid,caddr_t_addr,int_data);

void* dlopen(constchar* pathname,intmode );

#if !defined(PT_DENY_ATTACH)

#define PT_DENY_ATTACH31

#endif? // !defined(PT_DENY_ATTACH)

voiddisable_gdb() {

? ? void* handle =dlopen(0,RTLD_GLOBAL|RTLD_NOW);

? ? ptrace_ptr_tptrace_ptr =dlsym(handle,"ptrace");

? ? ptrace_ptr(PT_DENY_ATTACH,0,0,0);

? ? dlclose(handle);

}

最后在 main 函數(shù)中調(diào)用

intmain(intargc,char* argv[]) {

?? ?/**防止GDB掛起*/

#ifndef DUBUG

? ? disable_gdb();

#endif

? ? @autoreleasepool {

? ? ? ? return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

? ? }

}

不過還有反反調(diào)試,可以破解反調(diào)試的.

1,ptrace這個函數(shù)很容易修改,幾種破解方式

運行時期,斷點ptrace,直接返回 :

通過tweak,替換disable_gdb函數(shù)

在二進(jìn)制文件中 ,修改 PT_DENY_ATTACH的31,改成 任意一個值,如PT_ATTACH 0.

2,開發(fā)者要達(dá)到反調(diào)試的目的,必然是在某個地方(大多數(shù)還是在main函數(shù))執(zhí)行了ptrace(PT_DENY_ATTACH, 0, 0, 0)。所以反反調(diào)試的思路非常簡單,就是阻止這個執(zhí)行的發(fā)生。

既然lldb有-w這個選項來等待一個進(jìn)程的啟動,你可以使用lldb來捕獲到一個進(jìn)程的啟動并在程序執(zhí)行到ptrace命令之前修改或忽略PT_DENY_ATTACH命令。

命令行執(zhí)行:? ~ sudo lldb -n "helloptrace" -w。這里用sudo是因為lldb的一個bug,當(dāng)你讓lldb等待某個進(jìn)程的啟動時不用sudo會出錯。

找到上述項目的二進(jìn)制文件,拖到命令行中執(zhí)行,然后lldb就應(yīng)該能夠成功attach上去:

?? ~ sudo lldb -n"helloptrace"-w(lldb) process attach --name"helloptrace"--waitforProcess 8336 stopped* thread#1, stop reason = signal SIGSTOPframe#0: 0x0000000109522b9a dyld`__ioctl + 10dyld`__ioctl:->? 0x109522b9a <+10>: jae? ? 0x109522ba4? ? ? ? ? ? ? ; <+20>? ? 0x109522b9c <+12>: mov? ? rdi, rax? ? 0x109522b9f <+15>: jmp? ? 0x109522325? ? ? ? ? ? ? ; cerror? ? 0x109522ba4 <+20>: retExecutable modulesetto"/Users/gogleyin/Library/Developer/Xcode/DerivedData/helloptrace-bjtaxdebpzdyraaogpbcrihdgwku/Build/Products/Debug/helloptrace".Architecturesetto: x86_64h-apple-macosx.

創(chuàng)建如下斷點:

(lldb) rb ptrace -s libsystem_kernel.dylib

continue繼續(xù)執(zhí)行后你就會在ptrace函數(shù)將要執(zhí)行時停下來。你可以用lldb來讓程序不執(zhí)行那個函數(shù)并提前返回:

(lldb) thread return 0

continue繼續(xù)執(zhí)行,一個反反調(diào)試就達(dá)成了!雖然程序進(jìn)入了ptrace函數(shù),但你是告訴lldb讓它提前返回使得函數(shù)邏輯沒有得到執(zhí)行。

參考博客:

鏈接:http://m.itdecent.cn/p/75776311ae36

鏈接:http://m.itdecent.cn/p/13e90ec55234

鏈接:https://segmentfault.com/a/1190000012216003

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 調(diào)試器究竟是怎么工作的?如何阻止一個進(jìn)程attach(掛載)到app上以及又如何破解這些保護(hù)(所謂反調(diào)試和反反調(diào)試...
    blueshadow閱讀 7,193評論 8 10
  • 前提 眾所周知,iOS系統(tǒng)安全性非常高,很少出現(xiàn)漏洞,幾乎不會中毒。大家認(rèn)為蘋果系統(tǒng)的封閉性會使iOS APP安全...
    小楓123閱讀 1,542評論 0 10
  • layout: wikititle: iOS逆向分析筆記categories: Reverse_Engineeri...
    超哥__閱讀 11,538評論 3 16
  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,738評論 2 6
  • 我還是很喜歡你。 八月底了我從湖北到內(nèi)蒙古還不滿十天 四年了我們依舊糾纏不清藕斷絲連 2013年高一與你相遇,那時...
    深海鈴閱讀 243評論 0 0

友情鏈接更多精彩內(nèi)容