2017-07-02 31 views
-1

我有一個簽名的mac應用程序可執行文件。我用代碼簽名的可執行文件的內容初始化了NSMutableData。然後我修改了一部分可執行文件,並保存了修改後的可執行文件。當我嘗試使用此修改的可執行文件運行原始應用程序時,應用程序崩潰。從mac應用程序可執行文件中刪除代碼簽名

崩潰日誌,

System Integrity Protection: disabled 

Crashed Thread:  0 Dispatch queue: com.apple.main-thread 

Exception Type:  EXC_CRASH (Code Signature Invalid) 
Exception Codes:  0x0000000000000001, 0x0000000000000000 
Exception Note:  EXC_CORPSE_NOTIFY 

Termination Reason: Namespace CODESIGNING, Code 0x2 

從崩潰日誌很顯然,它崩潰,因爲無效的代碼簽名。 我沒有應用程序的源代碼,我只是試圖解決某人的舊應用程序中的一些錯誤。

所以我的問題是如何刪除目標c中的二進制代碼簽名?

+0

代碼簽名的全部問題是讓這樣的事情變得不可能。這是驗證應用程序未被篡改的一種方式。 –

+0

@ItaiFerber我的目標不是在應用程序商店分發這個應用程序。在Hopper反彙編器中,我們可以從可執行文件中刪除代碼簽名並將其保存爲新的可執行文件。那麼如何在objective-c中做到這一點? –

+1

這裏你的實際目標是什麼? – Ssswift

回答

2

對於所有的道德傳道人,感謝我的生活和展示道德生活的道路。

它不能很好地在所有記錄在案,從我所知道的,但你可以刪除代碼通過簽名:

 codesign --remove-signature appName 

另一種方法:

修修補補解密的文件(除去LC_CODE_SIGNATURE) ------------------------------

確保你已經細化了文件(同上--arch i386)在繼續之前。

要刪除你需要做以下步驟的代碼簽名: 注:英特爾的Mach-O二進制文件開始0xCEFAEDFE PPC的Mach-O二進制文件0xFEEDFACE開始

    • 修改號碼的加載命令(從偏移量0x10/16,4B尺寸開始)。

    • 如果加載命令是例如, 0x2C減去0x1 - > 0x2B。

    • 修改負荷指令的大小(從偏移0x14的/ 20,4B的大小)。
    • 記得英特爾需要交換字節來獲取值... 如果它的內容FC 17 00 00,它實際上是0x000017FC
    • 減爲0x10或16從價值。在上面的情況下 - > 0x000017EC
    • 再次交換字節(對於英特爾)。 0x000017EC因此EC 17 00 00
    • 修改從LC_CODE_SIGNATURE加載命令條目中的16個字節。 將它們替換爲16 x 0x00。 此條目以Intel上的0x1D000000和PPC上的0x0000001D開頭。
    • 修改加載命令(8B)和加載命令(8B)的內容。 在這種情況下在總負荷命令應該是永諾: 英特爾:0x1D00000010000000 PPC:0x0000001D00000010
    • 刪除的實際代碼簽名。 在Intel和PPC上都以0xFADE0CC0開頭。 用0x00字節替換整個代碼簽名。
相關問題