2017-04-20 31 views
1

在設備中運行時,iOS應用程序會連接到許多運行時庫。我們如何保護我們的iOS應用程序免受任何其他調試器攻擊到應用程序進程中。 就像使用GDB一樣,我們可以進入應用程序進程並操作運行時。我們可以停止使用任何設置或代碼嗎? 或者有沒有辦法檢查是否有其他運行時庫正在連接到進程? 我們可以在這種情況下完成應用程序嗎?保護iOS應用程序免於運行時鉤子

+1

答案是一個深刻的沒有。即使你能以某種方式設法做到這一點,只需要有人剝離/替換磁盤上的二進制文件的相關部分,以消除可能存在的任何對策。 你必須對iOS操作系統有一定程度的信任,這就是'圍牆花園'生態系統的整個基礎。 如果有人惡意擁有對設備的根訪問權限,則所有投注都關閉 - 您不再控制它。 –

+0

感謝您的回覆@ RichardJ.RossIII。有沒有一種方法可以至少保護二進制文件不被另一方辭職? –

+0

@DebasishChowdhury你的程序是一個字節數組。您無法保護修改的字節數組。 – Siguza

回答

0

我們可以檢查Info.plist文件和Appname的修改日期,並將其與軟件包修改日期進行比較。如果發現錯過匹配,我們可以得出結論,應用程序二進制文件已被修改。

//Check date of modifications in files (if different - app cracked) 
NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath]; 
NSString* path2 = [NSString stringWithFormat:@"%@/AppName", bundlePath]; 
NSDate* infoModifiedDate = [[manager attributesOfFileSystemForPath:path error:nil] fileModificationDate]; 
NSDate* infoModifiedDate2 = [[manager attributesOfFileSystemForPath:path2 error:nil] fileModificationDate]; 
NSDate* pkgInfoModifiedDate = [[manager attributesOfFileSystemForPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"PkgInfo"] error:nil] fileModificationDate]; 
if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) { 
    return YES; 
} 
if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) { 
    return YES; 
} 
+0

如果應用程序二進制文件已被修改,則該代碼可能不再存在。 – Siguza

相關問題