如何检测破解的iPhone应用程序和越狱设备(不同的方法)

如何检测破解的iPhone应用程序和越狱设备(不同的方法),iphone,detection,protection,cracking,piracy-protection,Iphone,Detection,Protection,Cracking,Piracy Protection,我正在为破解的iPhone应用程序建立一个黑名单服务,我很好奇我是否错过了一个检测破解应用程序的方法 目前,以下app裂纹检测方法可用于服务: 正在检查plist大小 检查签名者身份 检查二进制文件是否已加密(由于没有通过这种方式检测到已破解的应用程序,因此不确定是否正常工作) 根据包的修改日期检查info.plist的修改日期(不确定这是否有效-使用类似:的代码执行此操作) 我还想知道是否有可能检查设备是否越狱? 这也会有所帮助,因为这项服务的工作原理很像垃圾邮件黑名单,越狱可以用来提高分数

我正在为破解的iPhone应用程序建立一个黑名单服务,我很好奇我是否错过了一个检测破解应用程序的方法

目前,以下app裂纹检测方法可用于服务:

  • 正在检查plist大小
  • 检查签名者身份
  • 检查二进制文件是否已加密(由于没有通过这种方式检测到已破解的应用程序,因此不确定是否正常工作)
  • 根据包的修改日期检查info.plist的修改日期(不确定这是否有效-使用类似:的代码执行此操作)
  • 我还想知道是否有可能检查设备是否越狱? 这也会有所帮助,因为这项服务的工作原理很像垃圾邮件黑名单,越狱可以用来提高分数

    我还包括了一个蜜罐,它向我展示了破解者使用的工具消除了我做的一些检查。例如,plist检查大小或签名者身份

    我现在的问题是:

    • 我应该使用更多的“好”支票吗?

    • 有没有办法检测越狱?

    谢谢你的帮助

    永远不要试图阻止越狱设备使用你的应用程序,只要是破解的。如果您阻止越狱设备,他们将被迫使用已修补版本,并删除所有检查。
    此外,我所有的设备都是越狱的,所以如果开发人员阻止越狱设备,我将不得不忽略他们的应用程序。 超过10%的创意是越狱的,所以这是一个非常糟糕的主意

    编辑:由于我在这方面获得了很多反对票,我将发布一些检测越狱的方法

    - (BOOL)fileExistsAtPath:(NSString *)path{
        NSLog(@"Check if file '%@' exists", path);
    
        struct stat buffer;   
        return stat([path UTF8String], &buffer) == 0;
    }
    
    - (BOOL)jailbroken{
        return ([self fileExistsAtPath:@"/Applications/Cydia.app"]);
    }
    
    示例代码:

    本问题中讨论了许多用于检测开裂应用程序的技术:。当涉及越狱检测时,请看这里:谢谢Brad,这是很好的资源。否则他们将被迫删除越狱,禁用网络,并停止使用App Store中的应用。这10%中有9%是因为盗版而入狱的……我不理解那些投票反对你的人。我自己,我越狱是为了测试我的应用程序的盗版保护。那些投反对票的家伙现在会把我送到关塔那摩吗?我知道很多人越狱只是为了添加应用商店中不允许的调整和特定应用程序。这些人仍然选择从应用商店购买应用。@免费运行这不是个坏主意。从法律角度来看,您将在不安全的设备上使用安全应用程序的责任交给最终用户。越狱设备非常不安全,因为代码签名是mibile设备上唯一可用的防御措施。@Nodef如果你不知道什么,至少不要假装知道。您听说过通过SSH更改默认密码吗?我也不明白法律怪胎的意义。很好。但哇,那一定是旧代码!RockApp是cydia在一年多前购买的&icy已经被废弃很久了(+blackra1n是3.1的越狱者)。此外,当
    root
    打印出来时,你只能看到
    [[NSFileManager defaultManager]fileExistsAtPath:@”/private/var/lib/cydia]的结果@“y”:“n”,即数组中的最后一个元素。此代码将忽略/覆盖/丢弃所有其他结果。
    
    -(IBAction)rootCheck:(id)sender {
    
        NSArray *jailbrokenPath = [NSArray arrayWithObjects:
                                   @"/Applications/Cydia.app",
                                   @"/Applications/RockApp.app",
                                   @"/Applications/Icy.app",
                                   @"/usr/sbin/sshd",
                                   @"/usr/bin/sshd",
                                   @"/usr/libexec/sftp-server",
                                   @"/Applications/WinterBoard.app",
                                   @"/Applications/SBSettings.app",
                                   @"/Applications/MxTube.app",
                                   @"/Applications/IntelliScreen.app",
                                   @"/Library/MobileSubstrate/DynamicLibraries/Veency.plist",
                                   @"/Applications/FakeCarrier.app",
                                   @"/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",
                                   @"/private/var/lib/apt",
                                   @"/Applications/blackra1n.app",
                                   @"/private/var/stash",
                                   @"/private/var/mobile/Library/SBSettings/Themes",
                                   @"/System/Library/LaunchDaemons/com.ikey.bbot.plist",
                                   @"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",
                                   @"/private/var/tmp/cydia.log",
                                   @"/private/var/lib/cydia", nil];
    
        NSString *rooted;
        for(NSString *string in jailbrokenPath)
            if ([[NSFileManager defaultManager] fileExistsAtPath:string])
                rooted=@"y";
            else
                rooted=@"n";
    
        NSLog(@"%@", rooted);
    }