检查是运行环境是模拟器或越狱环境
+ (BOOL)checkRuntimeEnvironment {
NSString *message = nil;
if (TARGET_OS_SIMULATOR && !TFDEBUG) {
// 模拟器环境
message = TFLocalizedString(@"environment.simulator");
} else if ([self isJailBreak]) {
message = TFLocalizedString(@"environment.jailBreak");
}
if (message.length > 0) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:TFLocalizedString(@"tf.hint.title") message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:TFLocalizedString(@"tf.sure"), nil];
[alert show];
return NO;
}
return YES;
}
+ (BOOL)isJailBreak {
if ([[NSFileManager defaultManager] fileExistsAtPath:@"User/Applications/"]) {
NSLog(@"The device is jail broken!");
NSArray *appList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"User/Applications/" error:nil];
NSLog(@"appList = %@", appList);
return YES;
}
NSLog(@"The device is NOT jail broken!");
return NO;
}
+ (BOOL)checkBundleTeamIdentifier {
NSString *teamIdentifier = [self bundleTeamIdentifier];
if (teamIdentifier.length > 0) {
teamIdentifier = [teamIdentifier md5String];
}
if (teamIdentifier != nil && ![teamIdentifier isEqualToString:@"d92554cdc5fc16c74e880cd81"]) {
return NO;
}
return YES;
}
+ (NSString *)bundleTeamIdentifier {
NSString *mobileProvisionPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"embedded.mobileprovision"];
FILE *fp=fopen([mobileProvisionPath UTF8String],"r");
char ch;
if(fp==NULL) {
printf("file cannot be opened/n");
return NULL;
}
NSMutableString *str = [NSMutableString string];
while((ch=fgetc(fp))!=EOF) {
[str appendFormat:@"%c",ch];
}
fclose(fp);
NSString *teamIdentifier = nil;
NSRange teamIdentifierRange = [str rangeOfString:@"<key>com.apple.developer.team-identifier</key>"];
if (teamIdentifierRange.location != NSNotFound) {
NSInteger location = teamIdentifierRange.location + teamIdentifier.length;
NSInteger length = [str length] - location;
if (length > 0 && location >= 0) {
NSString *newStr = [str substringWithRange:NSMakeRange(location, length)];;
NSArray *val = [newStr componentsSeparatedByString:@"</string>"];
NSString *v = [val firstObject];
NSRange startRange = [v rangeOfString:@"<string>"];
NSInteger newLocation = startRange.location + startRange.length;
NSInteger newLength = [v length] - newLocation;
if (newLength > 0 && location >= 0) {
teamIdentifier = [v substringWithRange:NSMakeRange(newLocation, newLength)];
}
}
}
return teamIdentifier;
}
在main.m 修改 仿调试
#import <dlfcn.h>
typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif // !defined(PT_DENY_ATTACH)
void disable_gdb() {
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
int main(int argc, char * argv[]) {
#ifndef DEBUG
disable_gdb();
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
网友评论