2012-02-21 70 views
3

我正在調試和iPhone應用程序沒有符號表。該設備越獄,我通過傳遞pid在設備上本地附加gdb(在gdb中啓動應用程序似乎不適用於iOS 5)。我設定的斷點都沒有被觸發。我設置了我從班級轉儲中獲得的偏移量,但我認爲他們沒有因爲iOS 5中的ASLR而被擊中。gdb在iPhone設備上不停在斷點處

我嘗試使用此處的腳本http://src.chromium.org/viewvc/chrome/trunk/src/build/mac/change_mach_o_flags.py?view=markup刪除MH_PIE標誌,並且otool顯示正確完成。但是,更改後應用程序不再啓動。

我是否設置斷點錯誤或這是因爲ASLR?如果是隨機分配,那麼我如何有效地在設備上禁用它?

回答

1

如果您只想用GDB調試應用程序,那麼通過MH_PIE標誌禁用ASLR就可以了。由於該程序會修補二進制文件,因此您需要退出應用程序。使用名爲ldid的程序(來自Cydia中名爲「Link Identity Editor」的軟件包),您可以對應用程序進行僞代碼簽名。

root# cd /var/mobile/Applications/*/Example.app/ 
root# mach_flags --no-pie Example 
root# ldid -s Example 
root# gdb 
(gdb) attach -waitfor Example 

然後只需點擊應用程序的圖標。該應用程序將顯示掛起。從這一點,回到GDB,它應該被加載。現在,只需使用b *0x<address>設置斷點即可,因爲它被禁用,您可以完全忽略ASLR。

-1

我剛剛也被這個問題困住了。我找不到任何簡單的解決方法,到目前爲止,我發現的最佳解決方法是使用include assert.h並在整個過程中使用它。

更新:

你說得對。我在考慮擁有自己的資料來源。但是,iOS jail破壞的設備上的gdb有這個已知的問題,不會觸及斷點。我曾與那些最初將gdb帶到Cydia的人討論過這個問題,他們建議我自己試着解決這個問題。沒有任何空閒時間,我現在已經放棄了。

這是對所有嘗試通過監獄破解iOS上的gdb進行調試的人的警告,要麼自己調查問題,要麼放棄。如果您正在開發自己的源代碼,而不是嘗試對其他人的應用程序進行逆向工程,則不應期望它能夠正常工作,並且使用斷言是次好的事情。

我並沒有試圖回答這個問題,所以我確實值得讚賞。但不管怎樣,這些信息都應該放在那裏。

+0

他沒有應用程序的來源,那麼他會如何包含assert.h?這並沒有回答這個問題。 – C0deH4cker 2013-09-18 17:37:18