目前,我正在尝试为我公司的开发人员创建一个可重用的objC安全库。在这个库中,我希望有一个API来检测他们的iOS设备是否已越狱。我注意到GregH的一个聪明的回答,类似于iBooks正在做的事情;你运行一个未签名版本的可执行文件(iOS通过execve sys调用启动应用程序),如果它返回你知道设备已越狱。
问题:是否可以在iOS库中打包可执行文件并通过某些功能调用它?如果是这样,最好的方法是什么呢?
感谢您的帮助, KC
答案 0 :(得分:1)
最后我检查过,沙盒应用甚至不能fork()
。我不确定他们是否可以致电execve()
。如果他们也做不到,那么只需调用execve()
即可。
我不确定越狱干扰了多少。可以进行越狱,允许您从未签名的应用程序运行未签名的应用程序,但如果调用者已签名则行为正常。
很明显可以在库中“打包”可执行文件:只需要static unsigned char const data [] = { ... };
,将其写入文件chmod()
,然后尝试执行它。
但是,在一天结束时,这可能会对您的用户造成伤害。越狱手机并不意味着您的应用程序已被盗版。除非你认识一个有越狱手机的人愿意做一些测试(以及不同的越狱测试),否则你可能会为自己做好准备“它只会崩溃!”评论
(如果它确实崩溃了,那么有人会来破解你的应用程序。在决定是否需要修复之前,最好谨慎并监控“问题”。)
越狱发生的次数比你想象的要多。我已经将MobileSubstrate的检查添加到我们的自动崩溃报告符号脚本中,因为我们已经在很大比例的崩溃中看到过它。 OTOH,将应用程序安装到/ Applications中的崩溃比例(以前是破解应用程序的传统应用程序;可能已经不再存在)可以忽略不计。
答案 1 :(得分:0)
我试图通过从项目中添加可执行文件来在IOS应用程序中打包可执行文件,该项目的main()函数只是向我的项目返回一个整数。 部署时将此文件复制到手机上,但在没有执行权限的情况下复制。 尽管文件所有者与当前用户(移动)相同,但尝试chmod文件以使其执行会导致“不允许操作”错误。