检测iOS应用程序是否被黑客攻击

9

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

Hacked Version

有人知道如何实现这个功能吗?

我有两个想法:

  1. 如果在从App Store下载应用程序时设置了某个标志,则可以使用此标志:如果flag = NO,则显示UIAlertView
  2. 与服务器相关的某些内容(但在这种情况下,您应该知道所有设备ID以及谁从App Store安装了您的应用程序)。

我对吗?如何实现此功能?


1
我敢打赌第二种方法在大多数情况下都是使用的。 - Roman Rdgz
我应该如何知道所有正确的ID? - Eugene Trapeznikov
也许他们在越狱商店添加了一个特殊版本的应用程序,带有特殊的警报视图,并使正常的应用商店版本不受影响。 - CarlJ
5个回答

12

你可以检测到两个文件: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
}

奇怪的事情,@Eugene,我在自己的ipa中找不到SC_Info和iTunesMetadata.plist。 - Tertium
2
@Tertium,这些文件将被添加到AppStore中。因此,您应该从AppStore下载您的应用程序,然后您将找到它们。 - Eugene Trapeznikov
1
你如何在提交之前进行测试?例如,我认为代码本身存在错误,应该是:[NSFileManager defaultManager] fileExistsAtPath:([NSString stringWithFormat:@"%@/SC_Info", bundlePath])。 - Idan
我也很好奇如果Xcode构建不会创建SC_Info文件,你是如何在本地设备上测试SC_Info的,然后再提交到应用商店的呢? - Basil Bourque

2
有一些库可以检测应用程序是否被破解(以及是否越狱),这个问题提供了一个很好的概述,但基本上是通过检查签名者身份来完成的。
其中一个库是AntiCrack。我没有使用过这个库,所以不知道它的效果如何。

2

我正在使用这段代码在Swift中:

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
}

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列表以查看是否已从那里下载了该调整。如果没有,则会显示警报。

一些调整实现了奇怪的数字版权管理技术,每次重新启动手机时都需要从服务器下载许可证(这很奇怪,在越狱社区中使用非常少)。
以下是AppSync Unified Tweak的示例:
#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加载到像Hopper或IDA甚至Radare2这样的arm64/arm反汇编器中并修补分支。将其变为B而不是条件分支,以便比较结果不被计算。就这么简单。如果您想分析AppSync Unified的完整源代码,可以访问GitHub存储库
当然,正如我所说,许多调整使用更复杂的方案,如服务器端DRM,但它们都不是万无一失的。
*请理解我不赞成调整盗版。此回复旨在帮助新手,并旨在提供有关越狱检测和越狱调整DRM的当前状态的一些见解。请从适当的存储库购买付费调整,它们只需花费一美元左右。

-3

这很简单,但你可以检查 Cydia 应用是否已安装(通过检查其文件夹是否存在)。如果已安装,则不信任该设备。这会导致从应用商店下载您的应用程序的越狱 iPhone/iPad 有错误地被释放的风险。


1
但是有些人可以在越狱后购买应用程序... 这就是为什么这不是一个选项。 - Eugene Trapeznikov
1
这也行不通,因为App Store应用程序是沙盒化的,因此检查沙盒之外的目录不是一个选项。 - WrightsCS
1
@WrightsCS 这就是整个问题的关键。越狱后,沙盒限制被移除,因此检查Cydia是有效越狱测试的一部分。它只是不能表明应用程序是否已破解。 - wattson12
2
实际上,@wattson12,你是错的。越狱设备上的应用商店要访问其沙盒之外的文件,唯一的方法是安装“沙堡”(sandcastle)。除此之外,即使在越狱设备上,应用商店应用程序仍然处于沙盒中。Cydia应用程序安装在~/Applications(没有沙盒的位置),只有这些应用程序才能访问整个文件系统。你对越狱工作原理的看法似乎有所偏差。越狱本身不会消除沙盒限制。你为什么认为Cydia应用程序安装在不同的位置——因为沙盒限制 - WrightsCS
@WrightsCS 我承认我不知道标准越狱安装是什么样子的,但我看到的每个越狱测试都包括检查应用程序是否可以访问某些目录以及是否存在像Cydia这样的应用程序。这样做有意义吗? - wattson12
是的,就像我上面解释的那样,这是没有意义的。标准越狱并不会移除沙盒限制。那个“沙堡”包允许应用商店应用程序访问某些目录,因此您的应用商店应用程序也无法完全访问文件系统。 - WrightsCS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接