检测iOS应用是否遭到入侵

时间:2012-07-23 09:20:03

标签: ios xcode app-store jailbreak

我的朋友有一个越狱的iPad。当他从Installous安装Business Model Generation App并尝试使用它时,应用程序显示UIAlertView,其中包含以下消息: Hacked Version

有人知道怎么做吗?

我有两个想法:

  1. 如果从App Store下载应用程序时有一些设置标记,则可以使用此标记:如果flag = NO,则显示UIAlertView
  2. 使用服务器的东西(但在这种情况下,您应该知道所有设备ID以及谁从App Store安装了您的应用程序)。
  3. 我是对的吗?我该如何实现此功能?

5 个答案:

答案 0 :(得分:9)

您可以检测到两个文件:SC_InfoiTunesMetadata.​plist

如果找不到它们,那么您的应用就是盗版:从App Store下载后会安装这些文件。

这是要检查的代码:

NSString * bundlePath = [ [NSBundle mainBundle] bundlePath ];
if ( ! [ [NSFileManager defaultManager] fileExistsAtPath: ( @"%@/SC_Info", bundlePath ) ] )
{
    // jailbroken
}
if ( ! [ [NSFileManager defaultManager] fileExistsAtPath: ( @"%@/iTunesMetadata.​plist", bundlePath ) ] )
{
    // jailbroken
}

答案 1 :(得分:2)

有一些库可以检测一个应用程序是否被破解(以及越狱),这个question提供了一个很好的概述,但基本上是通过检查签名者身份来完成的

一个库是AntiCrack。我没有使用过这个库,所以我不知道它有多好用

答案 2 :(得分:1)

我正在迅速使用此代码:

if Bundle.main.infoDictionary?["SignerIdentity"] != nil
     || !FileManager.default.fileExists(atPath: ("\(Bundle.main.bundlePath)/SC_Info"))
     || !FileManager.default.fileExists(atPath: ("\(Bundle.main.bundlePath)/iTunesMetadata.​plist")){
        // Jailbroken
}

答案 3 :(得分:1)

这是一个古老的问题,但是我自己是一名越狱开发人员,我认为它可以帮助那些偶然发现它的人们在寻找越狱检测绕过之类的东西时,这些东西如今越来越相关。现在,OP所面临的问题比以前更多了。

这类应用程序甚至在2020年的今天,都可以检测到各种越狱实用程序。我本人是一名越狱开发商。在为任何iOS版本构建越狱功能时,我们都会添加一些基本二进制文件以进一步提供帮助。

如今,我们将它们放置在/jb/bin/jailbreak/binbag//jb/jbstuff/等各种隐藏文件夹中,而在过去,它们通常原样放置在默认的iOS目录中,例如/ bin /sbin

具有越狱检测功能的应用程序执行[NSFileManager defaultManager] fileExistsAtPath:...检查这些基本二进制文件是否存在Cydia(大多数情况下,它们检查/bin/bash,但如今更多) ,今天,他们甚至检查ROOT FS是否已重新安装为R/W(通常为RO,只有/var是可写的)。

Cydia下载的调整通常不会检查越狱检测(好吧,在大多数情况下-越狱开发人员之间存在戏剧性,因此即使在今天也存在人为的限制),但它们会检查您下载的回购协议来自。

大多数情况下,它就像AppSync Unified所做的调整一样简单。

在调整的代码中某处有一个变量或#define,带有正确的Cydia回购URL或标识符,该调整检查Cydia列表以查看该调整是否具有从那里下载。如果没有,它将发出警报。

某些调整实现了奇怪的DRM,每次重启电话时都会从服务器端下载许可证(这很奇怪,在越狱社区中很少使用)。

以下是AppSync统一调整功能的示例:

#define DPKG_PATH "/var/lib/dpkg/info/net.angelxwind.appsyncunified.list"

....

if (access(DPKG_PATH, F_OK) == -1) {
        NSLog(@"You seem to have installed AppSync Unified from a Cydia/APT repository that is not cydia.akemi.ai (package ID net.angelxwind.appsyncunified).");
        NSLog(@"If someone other than Linus Yang (laokongzi) or Karen/あけみ is taking credit for the development of this tweak, they are likely lying.");
        NSLog(@"Please only download AppSync Unified from the official repository to ensure file integrity and reliability.");

}

....

因此,在此越狱调整的情况下,它仅检查从中下载的回购。这里的一个简单补丁就是将AppSyncUnified.dylib加载到Hop64或IDA甚至Radare2之类的arm64 / arm反汇编程序中,并对分支进行补丁。将其设置为B而不是条件分支,这样就不会考虑比较结果。就如此容易。如果您想分析AppSync Unified的完整源代码,则有GitHub repo

当然,正如我所说,许多调整使用服务器端DRM之类的更复杂的方案,但是它们都不是防故障的。

**请务必理解,我不会纵容调整盗版行为。作出此回复是为了帮助新手进入此页面,其目的是提供一些有关越狱检测和DRM越狱调整的当前状态的见解。请从适当的存储库中购买付费的调整项,它们只需花费大约1美元。

答案 4 :(得分:-3)

这很简单,但您可以检查是否安装了cydia应用程序(通过检查它是否存在文件夹)。如果已安装,则您不信任该设备。这样就有可能无法正确发布从应用程序商店下载应用程序的越狱iPhone / iPad。