Hands Off!破解笔记
wx 31C0FFC0C390 @0x1000037a1
wx 0F85 @0x1000038be
Demo注册码:
HDOF4-00416E746F3274E65204D6973736F2018-01B2674DAC6F2D5CA1529B318C3014E36D331CA45458DA92-8E090D1B5E105F716CF0A2A44EE05F261E45C80C257E8C86
注册码前缀:
HDOF1 HDOF2 HDOF3 HDOF4
int sub_100009973(int arg0, int arg1, int arg2, int arg3) { rbx = arg3; r15 = arg2; r12 = arg1; r14 = arg0; if (((arg2 != 0x0) && (rbx != 0x0)) && ([rbx isEqual:@"User-Agent"] != 0x0)) { rax = [NSDictionary dictionaryWithContentsOfFile:@"/Library/Handsoff/Preferences.plist"]; if (rax != 0x0) { rax = [rax objectForKey:@"a_serials"]; if (rax != 0x0) { r13 = rax; if ([rax count] != 0x0) { var_50 = rbx; var_48 = r14; rax = [r13 objectAtIndex:0x0]; r13 = rax; rax = [rax rangeOfString:@"HDOF1-"]; if (rax == 0x7fffffffffffffff) { rax = [r13 rangeOfString:@"HDOF2-"]; if (rax == 0x7fffffffffffffff) { rax = [r13 rangeOfString:@"HDOF3-"]; if (rax == 0x7fffffffffffffff) { rax = [r13 rangeOfString:@"HDOF4-"]; if (rax != 0x7fffffffffffffff) { r14 = [r13 substringFromIndex:rax + 0x6]; rdx = [NSCharacterSet whitespaceCharacterSet]; rax = [r14 stringByTrimmingCharactersInSet:rdx]; r14 = rax; if ([rax length] != 0x0) { var_58 = r12; rax = [r14 UTF8String]; var_40 = intrinsic_movaps(var_40, 0x0); CC_MD5(rax, strlen(rax), &var_40); rax = [NSMutableString stringWithString:r15]; r15 = rax; [rax appendString:@" ["]; r12 = 0x0; do { [r15 appendFormat:@"%02X", *(int8_t *)(rbp + (r12 - 0x40)) & 0xff]; r12 = r12 + 0x1; } while (r12 != 0x10); [r15 appendString:@"]"]; r12 = var_58; } } } else { r14 = [r13 substringFromIndex:rax + 0x6]; rdx = [NSCharacterSet whitespaceCharacterSet]; rax = [r14 stringByTrimmingCharactersInSet:rdx]; r14 = rax; if ([rax length] != 0x0) { var_58 = r12; rax = [r14 UTF8String]; var_40 = intrinsic_movaps(var_40, 0x0); CC_MD5(rax, strlen(rax), &var_40); rax = [NSMutableString stringWithString:r15]; r15 = rax; [rax appendString:@" ["]; r12 = 0x0; do { [r15 appendFormat:@"%02X", *(int8_t *)(rbp + (r12 - 0x40)) & 0xff]; r12 = r12 + 0x1; } while (r12 != 0x10); [r15 appendString:@"]"]; r12 = var_58; } } } else { r14 = [r13 substringFromIndex:rax + 0x6]; rdx = [NSCharacterSet whitespaceCharacterSet]; rax = [r14 stringByTrimmingCharactersInSet:rdx]; r14 = rax; if ([rax length] != 0x0) { var_58 = r12; rax = [r14 UTF8String]; var_40 = intrinsic_movaps(var_40, 0x0); CC_MD5(rax, strlen(rax), &var_40); rax = [NSMutableString stringWithString:r15]; r15 = rax; [rax appendString:@" ["]; r12 = 0x0; do { [r15 appendFormat:@"%02X", *(int8_t *)(rbp + (r12 - 0x40)) & 0xff]; r12 = r12 + 0x1; } while (r12 != 0x10); [r15 appendString:@"]"]; r12 = var_58; } } } else { r14 = [r13 substringFromIndex:rax + 0x6]; rdx = [NSCharacterSet whitespaceCharacterSet]; rax = [r14 stringByTrimmingCharactersInSet:rdx]; r14 = rax; if ([rax length] != 0x0) { var_58 = r12; rax = [r14 UTF8String]; var_40 = intrinsic_movaps(var_40, 0x0); CC_MD5(rax, strlen(rax), &var_40); rax = [NSMutableString stringWithString:r15]; r15 = rax; [rax appendString:@" ["]; r12 = 0x0; do { [r15 appendFormat:@"%02X", *(int8_t *)(rbp + (r12 - 0x40)) & 0xff]; r12 = r12 + 0x1; } while (r12 != 0x10); [r15 appendString:@"]"]; r12 = var_58; } } r14 = var_48; rbx = var_50; } } } } var_30 = **___stack_chk_guard; (*qword_100055570)(r14, r12, r15, rbx); rax = *___stack_chk_guard; rax = *rax; if (rax != var_30) { rax = __stack_chk_fail(); } return rax; }
__int64 __fastcall sub_100009973(__int64 a1, __int64 a2, void *a3, void *a4) { void *v4; // rbx void *v5; // r15 __int64 v6; // r12 __int64 v7; // r14 void *v8; // rax void *v9; // rax void *v10; // r13 void *v11; // rax void *v12; // r13 char *v13; // rax void *v14; // r14 void *v15; // rax void *v16; // r14 const char *v17; // rax __int64 v18; // r14 unsigned int v19; // eax __int64 v20; // r12 __int128 v22; // [rsp+20h] [rbp-40h] v4 = a4; v5 = a3; v6 = a2; v7 = a1; if ( a3 ) { if ( a4 ) { if ( (unsigned __int8)objc_msgSend(a4, "isEqual:", CFSTR("User-Agent")) ) { v8 = objc_msgSend( &OBJC_CLASS___NSDictionary, "dictionaryWithContentsOfFile:", CFSTR("/Library/Handsoff/Preferences.plist")); if ( v8 ) { v9 = objc_msgSend(v8, "objectForKey:", CFSTR("a_serials")); if ( v9 ) { v10 = v9; if ( objc_msgSend(v9, "count") ) { v11 = objc_msgSend(v10, "objectAtIndex:", 0LL); v12 = v11; v13 = (char *)objc_msgSend(v11, "rangeOfString:", CFSTR("HDOF1-")); //序列号以HDOF1-,HDOF2-,HDOF3-,HDOF4-开头 if ( v13 != (char *)0x7FFFFFFFFFFFFFFFLL || (v13 = (char *)objc_msgSend(v12, "rangeOfString:", CFSTR("HDOF2-")), v13 != (char *)0x7FFFFFFFFFFFFFFFLL) || (v13 = (char *)objc_msgSend(v12, "rangeOfString:", CFSTR("HDOF3-")), v13 != (char *)0x7FFFFFFFFFFFFFFFLL) || (v13 = (char *)objc_msgSend(v12, "rangeOfString:", CFSTR("HDOF4-")), v13 != (char *)0x7FFFFFFFFFFFFFFFLL) ) { v14 = objc_msgSend(v12, "substringFromIndex:", v13 + 6); //从序列号第六位开始取字符串值赋值给v14 v15 = objc_msgSend(&OBJC_CLASS___NSCharacterSet, "whitespaceCharacterSet"); v16 = objc_msgSend(v14, "stringByTrimmingCharactersInSet:", v15); //去掉字符串中除数字以外的字符赋值给v16 if ( objc_msgSend(v16, "length") ) //取v16的长度 { v17 = (const char *)objc_msgSend(v16, "UTF8String"); //将v16的unicode值赋值给v17 v18 = (__int64)v17; //将v17转换成整形 v22 = 0LL; v19 = strlen(v17); //取v17的长度 CC_MD5(v18, v19, (__int64)&v22); //CC_MD5(v18,v19,0) v5 = objc_msgSend(&OBJC_CLASS___NSMutableString, "stringWithString:", v5); objc_msgSend(v5, "appendString:", CFSTR(" [")); v20 = 0LL; do objc_msgSend(v5, "appendFormat:", CFSTR("%02X"), *((unsigned __int8 *)&v22 + v20++)); while ( v20 != 16 ); objc_msgSend(v5, "appendString:", CFSTR("]")); v6 = a2; } } v7 = a1; } } } } } } qword_100055570(v7, v6, v5, v4); return __stack_chk_guard; }
wx 90 @0x10000b49a
wx eb59 @0x10000A01B