[我正在经历checkra1n漏洞,该漏洞使iOS越狱,并查看了一些开源库,它们警告用户您的设备已受到威胁。
是否存在可以识别该设备已越狱的安全证书,或与我们的应用在进行关键交易之前验证的Apple服务器的直接链接/ API?
基本上,这里的问题是,恶意用户不应该能够从根设备或应用的沙盒环境访问关键的交易数据。
[没有用于检查越狱设备的API,所有检查都在本地进行,但是您可以实施很多检查,以使攻击者的工作更加困难:
您可以让您的应用“询问”该操作系统,使其不在调试器上运行,如果运行,它只会崩溃。您可以阅读更多here。
您可以检查文件系统中是否存在特定文件,这些文件仅在具有FileManager
(NSFileManager
)的越狱电话中存在:
/ private / var / lib / apt /
"cydia://package/com.example.package"
如果您决定实施这些检查,请注意一些事项,例如如何将字符串存储在二进制文件中。如果您的可执行文件Mach-O在像Hopper这样的反汇编程序中查找并且您存储了说“ MobileSubstrate”的字符串,则攻击者可以在可执行文件的__TEXT区域中轻松查看该文件的使用位置,并猜测您正在尝试进行越狱检查,然后取消整个越狱测试功能。以某种方式对类似的字符串进行编码,比如说Base64。
您要进行越狱测试的其他无效赠品是函数名称,不要像isJailbroken()
那样命名函数,因为可以再次看到这些符号,请使用无意义的名称(与良好编程习惯相反)。另外,将标记__attribute__((always_inline))
添加到与越狱检查相关的c函数的声明中,并将@inline(__always)
添加到Swift中的声明中。如果您不熟悉函数内联,则可以阅读有关它的更多信息here。
我已经建立了一个包含所有这些检查的框架,这些检查模糊不清,但有很多注释,如果您愿意,可以查看一下here🙂
[越狱场景是不断追逐猫和老鼠的人,谁将赢得这场追逐,实际上取决于谁愿意为此付出更多的努力。
希望这会有所帮助!