基本下已经无用的防破解方法
基本上已经无用的防破解方法
//First Method #import <dlfcn.h> #import <mach-o/dyld.h> #import <TargetConditionals.h> /* The encryption info struct and constants are missing from the iPhoneSimulator SDK, but not from the iPhoneOS or * Mac OS X SDKs. Since one doesn't ever ship a Simulator binary, we'll just provide the definitions here. */ #if TARGET_IPHONE_SIMULATOR && !defined(LC_ENCRYPTION_INFO) #define LC_ENCRYPTION_INFO 0x21 struct encryption_info_command { uint32_t cmd; uint32_t cmdsize; uint32_t cryptoff; uint32_t cryptsize; uint32_t cryptid; }; #endif int main (int argc, char *argv[]); static BOOL is_encrypted () { const struct mach_header *header; Dl_info dlinfo; /* Fetch the dlinfo for main() */ if (dladdr(main, &dlinfo) == 0 || dlinfo.dli_fbase == NULL) { NSLog(@"Could not find main() symbol (very odd)"); return NO; } header = dlinfo.dli_fbase; /* Compute the image size and search for a UUID */ struct load_command *cmd = (struct load_command *) (header+1); for (uint32_t i = 0; cmd != NULL && i < header->ncmds; i++) { /* Encryption info segment */ if (cmd->cmd == LC_ENCRYPTION_INFO) { struct encryption_info_command *crypt_cmd = (struct encryption_info_command *) cmd; /* Check if binary encryption is enabled */ if (crypt_cmd->cryptid < 1) { /* Disabled, probably pirated */ return NO; } /* Probably not pirated? */ return YES; } cmd = (struct load_command *) ((uint8_t *) cmd + cmd->cmdsize); } /* Encryption info not found */ return NO; } //Second Method #if !TARGET_IPHONE_SIMULATOR int root = getgid(); if (root == 0) { exit(0); } #endif //Third Method #import <dlfcn.h> #import <sys/types.h> #import <Foundation/Foundation.h> #import <TargetConditionals.h> // The iPhone SDK doesn't have <sys/ptrace.h>, but it does have ptrace, and it // works just fine. 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 ZNDebugIntegrity() { // If all assertions are enabled, we're in a legitimate debug build. #if TARGET_IPHONE_SIMULATOR || defined(DEBUG) || (!defined(NS_BLOCK_ASSERTIONS) && !defined(NDEBUG)) return; #endif // Lame obfuscation of the string "ptrace". char* ptrace_root = "socket"; char ptrace_name[] = {0xfd, 0x05, 0x0f, 0xf6, 0xfe, 0xf1, 0x00}; for (size_t i = 0; i < sizeof(ptrace_name); i++) { ptrace_name[i] += ptrace_root[i]; } void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW); ptrace_ptr_t ptrace_ptr = dlsym(handle, ptrace_name); ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0); dlclose(handle); } //Fourth Method #define kInfoSize 500 //Place your NSLog Plist Size into the above Define statment NSString* bundlePath = [[NSBundle mainBundle] bundlePath]; NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath ]; NSDictionary *fileInfo = [[NSBundle mainBundle] infoDictionary]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSDictionary *fileAttributes = [fileManager fileAttributesAtPath:path traverseLink:YES]; if (fileAttributes != nil) { NSNumber *fileSize; if(fileSize = [fileAttributes objectForKey:NSFileSize]){ NSLog(@"File Size: %qi\n", [fileSize unsignedLongLongValue]); //Best to see the File Size and change it accordingly first NSString *cSID = [[NSString alloc] initWithFormat:@"%@%@%@%@%@",@"Si",@"gne",@"rIde",@"ntity",@""]; BOOL checkedforPir = false; if([fileInfo objectForKey:cSID] == nil || [fileInfo objectForKey:cSID] != nil) { if([fileSize unsignedLongLongValue] == kInfoSize) { checkedforPir = true; } } if(!checkedforPir){ //Pirated } [cSID release]; } } //Fifth Method NSString* bundlePath = [[NSBundle mainBundle] bundlePath]; NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath]; NSString* path2 = [NSString stringWithFormat:@"%@/AppName", bundlePath]; NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileModificationDate]; NSDate* infoModifiedDate2 = [[[NSFileManager defaultManager] fileAttributesAtPath:path2 traverseLink:YES] fileModificationDate]; NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"PkgInfo"] traverseLink:YES] fileModificationDate]; if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) { //Pirated } if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) { //Pirated } //Sixth Method NSString* bundlePath = [[NSBundle mainBundle] bundlePath]; BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:(@"%@/_CodeSignature", bundlePath)]; if (!fileExists) { //Pirated NSLog(@"Pirated"); } BOOL fileExists2 = [[NSFileManager defaultManager] fileExistsAtPath:(@"%@/CodeResources", bundlePath)]; if (!fileExists2) { //Pirated NSLog(@"Pirated2"); } BOOL fileExists3 = [[NSFileManager defaultManager] fileExistsAtPath:(@"%@/ResourceRules.plist", bundlePath)]; if (!fileExists3) { //Pirated NSLog(@"Pirated3"); } //Covert exits close(0); [[UIApplication sharedApplication] terminate]; [[UIApplication sharedApplication] terminateWithSuccess]; UIWebView *a = [UIWebView alloc]; UIWindow *b = [UIWindow alloc]; UIView *c = [UIView alloc]; UILabel *d = [UILabel alloc]; UITextField *e = [UITextField alloc]; UIImageView *f = [UIImageView alloc]; UIImage *g = [UIImage alloc]; UISwitch *h = [UISwitch alloc]; UISegmentedControl *i = [UISegmentedControl alloc]; UITabBar *j = [UITabBar alloc]; [a alloc]; [b alloc]; [c alloc]; [d alloc]; [e alloc]; [f alloc]; [g alloc]; [h alloc]; [i alloc]; [j alloc]; system("killall SpringBoard");