【发布时间】:2015-04-08 10:26:49
【问题描述】:
我正在(尝试)学习开发越狱调整。目标是摆脱应用程序中的越狱保护(拒绝与越狱一起工作)。
我已经反编译了应用程序,并将以下代码识别为“越狱检查”:
v24 = objc_msgSend(&OBJC_CLASS___NSMutableDictionary, "new");
v0 = "defaultManager";
v1 = objc_msgSend(&OBJC_CLASS___NSFileManager, "defaultManager");
v2 = objc_retainAutoreleasedReturnValue(v1);
v3 = (void *)v2;
v23 = v2;
v4 = (int)"stringWithFormat:";
v5 = objc_msgSend(
&OBJC_CLASS___NSString,
"stringWithFormat:",
CFSTR("/%@%@%@%@%@%@%@"),
CFSTR("App"),
CFSTR("lic"),
CFSTR("ati"),
CFSTR("ons/"),
CFSTR("Cyd"),
CFSTR("ia."),
CFSTR("app"));
v6 = objc_retainAutoreleasedReturnValue(v5);
v7 = v6;
v8 = objc_msgSend(v3, "fileExistsAtPath:", v6);
if ( (unsigned __int8)v8 )
{
v9 = 1;
v10 = 0;
v21 = v8;
v11 = 0;
v22 = (void *)v8;
}
应用程序检查 /Applications/Cydia.app 是否存在
这里是 Tweak.xm 的代码:
%hook NSFileManager
- (BOOL)fileExistsAtPath:(NSString *)path{
if ([path rangeOfString:@"cydia"].location == NSNotFound) {
return %orig (path);
} else {
%log
return FALSE;
}
}
%end
虽然我可以从 syslog 中看到正在检查其他文件,但我没有看到我们正在检查 /Applications/Cydia.app。这是我的代码有问题,还是仅仅是因为其他原因,这段代码永远不会执行?
【问题讨论】:
-
您正在检查字符串
@"cydia",全小写,而该方法将使用包含@"Cydia",大写C的路径调用 -
@stonesam92: 我已经尝试过一直使用 %log 但日志中什么也没有
-
即使
%log作为函数的第一行? (目前永远不会到达%log语句,因为它位于一个只有在参数包含@"cydia"时才会执行的块中) -
会不会和获取NSFileManager类的defaultManager实例的代码有关?
-
不,你正在挂钩一个实例方法,所以任何 NSFileManager 实例都应该使用你的替换方法。如果您将调试器附加到进程并在方法上设置断点,您能否验证它是否真正被调用过?
标签: ios objective-c jailbreak theos