本此练习破解对象为AppDelete 3.2.9,是Mac OS X上用于卸载软件的App,同时也是一款商业软件,所以没用最新版。破解的目的不是为了免费使用,还是要支持正版的。
下载地址:http://www.reggieashworth.com/buy。
Trial version有使用次数限制,当达到限制时,会弹出如下提示。
点击注册,会让用户输入Name 和Serial Number。如下。
当然,暴力破解是相对容易的,这里开始实战分析,如何产生注册码。
0x1 代码分析
在Hopper中打开,可以找到,判断Serial Number是否合法的方法如下。
-[ADDropController orphansArray:]:
0000000100010ee2 push rbp ; Objective C Implementation defined at 0x100020cb8 (instance method), DATA XREF=0x100020cb8
0000000100010ee3 mov rbp, rsp
0000000100010ee6 mov qword [rbp+var_18], rbx
0000000100010eea mov qword [rbp+var_10], r12
0000000100010eee mov qword [rbp+var_8], r13
0000000100010ef2 sub rsp, 0x2b0
0000000100010ef9 mov r12, rdx
0000000100010efc lea rsi, qword [0x10001f008] ; @selector(length), argument "selector" for method _objc_msgSend_fixup
0000000100010f03 mov rdi, rdx ; argument "instance" for method _objc_msgSend_fixup
0000000100010f06 call qword [0x10001f008] ; @selector(length),_objc_msgSend_fixup
0000000100010f0c cmp rax, 0x16
0000000100010f10 jne loc_100011e05
0000000100010f16 mov qword [rbp+var_28], 0x3
0000000100010f1e mov qword [rbp+var_30], 0x0
0000000100010f26 xor edx, edx
0000000100010f28 mov ecx, 0x3
0000000100010f2d lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100010f34 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100010f37 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100010f3d mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100010f40 lea rdx, qword [cfstring_AD_] ; @"AD-"
0000000100010f47 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100010f4e call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100010f54 dec al
0000000100010f56 jne loc_100011e05
0000000100010f5c mov qword [rbp+var_38], 0x1
0000000100010f64 mov qword [rbp+var_40], 0x3
0000000100010f6c mov edx, 0x3
0000000100010f71 mov ecx, 0x1
0000000100010f76 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100010f7d mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100010f80 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100010f86 mov rbx, rax
0000000100010f89 mov r13, qword [objc_cls_ref_NSArray]
0000000100010f90 mov qword [rsp+0x2b0+var_248], 0x0
0000000100010f99 lea rax, qword [cfstring_Y] ; @"Y"
0000000100010fa0 mov qword [rsp+0x2b0+var_250], rax
0000000100010fa5 lea rax, qword [cfstring_X] ; @"X"
0000000100010fac mov qword [rsp+0x2b0+var_258], rax
0000000100010fb1 lea rax, qword [cfstring_W] ; @"W"
0000000100010fb8 mov qword [rsp+0x2b0+var_260], rax
0000000100010fbd lea rax, qword [cfstring_V] ; @"V"
0000000100010fc4 mov qword [rsp+0x2b0+var_268], rax
0000000100010fc9 lea rax, qword [cfstring_S] ; @"S"
0000000100010fd0 mov qword [rsp+0x2b0+var_270], rax
0000000100010fd5 lea rax, qword [cfstring_R] ; @"R"
0000000100010fdc mov qword [rsp+0x2b0+var_278], rax
0000000100010fe1 lea rax, qword [cfstring_Q] ; @"Q"
0000000100010fe8 mov qword [rsp+0x2b0+var_280], rax
0000000100010fed lea rax, qword [cfstring_P] ; @"P"
0000000100010ff4 mov qword [rsp+0x2b0+var_288], rax
0000000100010ff9 lea rax, qword [cfstring_O] ; @"O"
0000000100011000 mov qword [rsp+0x2b0+var_290], rax
0000000100011005 lea rax, qword [cfstring_N] ; @"N"
000000010001100c mov qword [rsp+0x2b0+var_298], rax
0000000100011011 lea rax, qword [cfstring_M] ; @"M"
0000000100011018 mov qword [rsp+0x2b0+var_2A0], rax
000000010001101d lea rax, qword [cfstring_H] ; @"H"
0000000100011024 mov qword [rsp+0x2b0+var_2A8], rax
0000000100011029 lea rax, qword [cfstring_G] ; @"G"
0000000100011030 mov qword [rsp+0x2b0+var_2B0], rax
0000000100011034 lea r9, qword [cfstring_F] ; @"F"
000000010001103b lea r8, qword [cfstring_D] ; @"D"
0000000100011042 lea rcx, qword [cfstring_C] ; @"C"
0000000100011049 lea rdx, qword [cfstring_B] ; @"B"
0000000100011050 lea rsi, qword [0x10001ebc8] ; @selector(arrayWithObjects:), argument "selector" for method _objc_msgSend_fixup
0000000100011057 mov rdi, r13 ; argument "instance" for method _objc_msgSend_fixup
000000010001105a xor eax, eax
000000010001105c call qword [0x10001ebc8] ; @selector(arrayWithObjects:),_objc_msgSend_fixup
0000000100011062 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011065 mov rdx, rbx
0000000100011068 lea rsi, qword [0x10001e998] ; @selector(containsObject:), argument "selector" for method _objc_msgSend_fixup
000000010001106f call qword [0x10001e998] ; @selector(containsObject:),_objc_msgSend_fixup
0000000100011075 dec al
0000000100011077 jne loc_100011e05
000000010001107d mov qword [rbp+var_48], 0x1
0000000100011085 mov qword [rbp+var_50], 0x8
000000010001108d mov edx, 0x8
0000000100011092 mov ecx, 0x1
0000000100011097 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
000000010001109e mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000110a1 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000110a7 mov rbx, rax
00000001000110aa mov qword [rsp+0x2b0+var_220], 0x0
00000001000110b6 lea rax, qword [cfstring_Z] ; @"Z"
00000001000110bd mov qword [rsp+0x2b0+var_228], rax
00000001000110c5 lea rax, qword [cfstring_Y] ; @"Y"
00000001000110cc mov qword [rsp+0x2b0+var_230], rax
00000001000110d4 lea rax, qword [cfstring_X] ; @"X"
00000001000110db mov qword [rsp+0x2b0+var_238], rax
00000001000110e0 lea rax, qword [cfstring_W] ; @"W"
00000001000110e7 mov qword [rsp+0x2b0+var_240], rax
00000001000110ec lea rax, qword [cfstring_V] ; @"V"
00000001000110f3 mov qword [rsp+0x2b0+var_248], rax
00000001000110f8 lea rax, qword [cfstring_U] ; @"U"
00000001000110ff mov qword [rsp+0x2b0+var_250], rax
0000000100011104 lea rax, qword [cfstring_T] ; @"T"
000000010001110b mov qword [rsp+0x2b0+var_258], rax
0000000100011110 lea rax, qword [cfstring_S] ; @"S"
0000000100011117 mov qword [rsp+0x2b0+var_260], rax
000000010001111c lea rax, qword [cfstring_R] ; @"R"
0000000100011123 mov qword [rsp+0x2b0+var_268], rax
0000000100011128 lea rax, qword [cfstring_Q] ; @"Q"
000000010001112f mov qword [rsp+0x2b0+var_270], rax
0000000100011134 lea rax, qword [cfstring_P] ; @"P"
000000010001113b mov qword [rsp+0x2b0+var_278], rax
0000000100011140 lea rax, qword [cfstring_O] ; @"O"
0000000100011147 mov qword [rsp+0x2b0+var_280], rax
000000010001114c lea rax, qword [cfstring_N] ; @"N"
0000000100011153 mov qword [rsp+0x2b0+var_288], rax
0000000100011158 lea rax, qword [cfstring_M] ; @"M"
000000010001115f mov qword [rsp+0x2b0+var_290], rax
0000000100011164 lea rax, qword [cfstring_I] ; @"I"
000000010001116b mov qword [rsp+0x2b0+var_298], rax
0000000100011170 lea rax, qword [cfstring_H] ; @"H"
0000000100011177 mov qword [rsp+0x2b0+var_2A0], rax
000000010001117c lea rax, qword [cfstring_G] ; @"G"
0000000100011183 mov qword [rsp+0x2b0+var_2A8], rax
0000000100011188 lea rax, qword [cfstring_F] ; @"F"
000000010001118f mov qword [rsp+0x2b0+var_2B0], rax
0000000100011193 lea r9, qword [cfstring_E] ; @"E"
000000010001119a lea r8, qword [cfstring_C] ; @"C"
00000001000111a1 lea rcx, qword [cfstring_B] ; @"B"
00000001000111a8 lea rdx, qword [cfstring_A] ; @"A"
00000001000111af lea rsi, qword [0x10001ebc8] ; @selector(arrayWithObjects:), argument "selector" for method _objc_msgSend_fixup
00000001000111b6 mov rdi, r13 ; argument "instance" for method _objc_msgSend_fixup
00000001000111b9 xor eax, eax
00000001000111bb call qword [0x10001ebc8] ; @selector(arrayWithObjects:),_objc_msgSend_fixup
00000001000111c1 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000111c4 mov rdx, rbx
00000001000111c7 lea rsi, qword [0x10001e998] ; @selector(containsObject:), argument "selector" for method _objc_msgSend_fixup
00000001000111ce call qword [0x10001e998] ; @selector(containsObject:),_objc_msgSend_fixup
00000001000111d4 dec al
00000001000111d6 jne loc_100011e05
00000001000111dc mov qword [rbp+var_58], 0x1
00000001000111e4 mov qword [rbp+var_60], 0x7
00000001000111ec mov edx, 0x7
00000001000111f1 mov ecx, 0x1
00000001000111f6 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000111fd mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011200 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011206 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011209 lea rdx, qword [cfstring___10001dcc8] ; @"-"
0000000100011210 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011217 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
000000010001121d dec al
000000010001121f jne loc_100011e05
0000000100011225 mov qword [rbp+var_68], 0x1
000000010001122d mov qword [rbp+var_70], 0xc
0000000100011235 mov edx, 0xc
000000010001123a mov ecx, 0x1
000000010001123f lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011246 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011249 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001124f mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011252 lea rdx, qword [cfstring___10001dcc8] ; @"-"
0000000100011259 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011260 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011266 dec al
0000000100011268 jne loc_100011e05
000000010001126e mov qword [rbp+var_78], 0x1
0000000100011276 mov qword [rbp+var_80], 0x11
000000010001127e mov edx, 0x11
0000000100011283 mov ecx, 0x1
0000000100011288 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
000000010001128f mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011292 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011298 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001129b lea rdx, qword [cfstring___10001dcc8] ; @"-"
00000001000112a2 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
00000001000112a9 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
00000001000112af dec al
00000001000112b1 jne loc_100011e05
00000001000112b7 mov qword [rbp+var_88], 0x1
00000001000112c2 mov qword [rbp+var_90], 0x12
00000001000112cd mov edx, 0x12
00000001000112d2 mov ecx, 0x1
00000001000112d7 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000112de mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000112e1 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000112e7 mov rbx, rax
00000001000112ea mov qword [rsp+0x2b0+var_238], 0x0
00000001000112f3 lea rax, qword [cfstring_Z] ; @"Z"
00000001000112fa mov qword [rsp+0x2b0+var_240], rax
00000001000112ff lea rax, qword [cfstring_Y] ; @"Y"
0000000100011306 mov qword [rsp+0x2b0+var_248], rax
000000010001130b lea rax, qword [cfstring_X] ; @"X"
0000000100011312 mov qword [rsp+0x2b0+var_250], rax
0000000100011317 lea rax, qword [cfstring_W] ; @"W"
000000010001131e mov qword [rsp+0x2b0+var_258], rax
0000000100011323 lea rax, qword [cfstring_V] ; @"V"
000000010001132a mov qword [rsp+0x2b0+var_260], rax
000000010001132f lea rax, qword [cfstring_U] ; @"U"
0000000100011336 mov qword [rsp+0x2b0+var_268], rax
000000010001133b lea rax, qword [cfstring_T] ; @"T"
0000000100011342 mov qword [rsp+0x2b0+var_270], rax
0000000100011347 lea rax, qword [cfstring_S] ; @"S"
000000010001134e mov qword [rsp+0x2b0+var_278], rax
0000000100011353 lea rax, qword [cfstring_P] ; @"P"
000000010001135a mov qword [rsp+0x2b0+var_280], rax
000000010001135f lea rax, qword [cfstring_O] ; @"O"
0000000100011366 mov qword [rsp+0x2b0+var_288], rax
000000010001136b lea rax, qword [cfstring_K] ; @"K"
0000000100011372 mov qword [rsp+0x2b0+var_290], rax
0000000100011377 lea rax, qword [cfstring_J] ; @"J"
000000010001137e mov qword [rsp+0x2b0+var_298], rax
0000000100011383 lea rax, qword [cfstring_I] ; @"I"
000000010001138a mov qword [rsp+0x2b0+var_2A0], rax
000000010001138f lea rax, qword [cfstring_H] ; @"H"
0000000100011396 mov qword [rsp+0x2b0+var_2A8], rax
000000010001139b lea rax, qword [cfstring_G] ; @"G"
00000001000113a2 mov qword [rsp+0x2b0+var_2B0], rax
00000001000113a6 lea r9, qword [cfstring_D] ; @"D"
00000001000113ad lea r8, qword [cfstring_C] ; @"C"
00000001000113b4 lea rcx, qword [cfstring_B] ; @"B"
00000001000113bb lea rdx, qword [cfstring_A] ; @"A"
00000001000113c2 lea rsi, qword [0x10001ebc8] ; @selector(arrayWithObjects:), argument "selector" for method _objc_msgSend_fixup
00000001000113c9 mov rdi, r13 ; argument "instance" for method _objc_msgSend_fixup
00000001000113cc xor eax, eax
00000001000113ce call qword [0x10001ebc8] ; @selector(arrayWithObjects:),_objc_msgSend_fixup
00000001000113d4 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000113d7 mov rdx, rbx
00000001000113da lea rsi, qword [0x10001e998] ; @selector(containsObject:), argument "selector" for method _objc_msgSend_fixup
00000001000113e1 call qword [0x10001e998] ; @selector(containsObject:),_objc_msgSend_fixup
00000001000113e7 dec al
00000001000113e9 jne loc_100011e05
00000001000113ef mov qword [rbp+var_98], 0x1
00000001000113fa mov qword [rbp+var_A0], 0xd
0000000100011405 mov edx, 0xd
000000010001140a mov ecx, 0x1
000000010001140f lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011416 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011419 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001141f mov rbx, rax
0000000100011422 mov qword [rsp+0x2b0+var_250], 0x0
000000010001142b lea rax, qword [cfstring_Z] ; @"Z"
0000000100011432 mov qword [rsp+0x2b0+var_258], rax
0000000100011437 lea rax, qword [cfstring_W] ; @"W"
000000010001143e mov qword [rsp+0x2b0+var_260], rax
0000000100011443 lea rax, qword [cfstring_V] ; @"V"
000000010001144a mov qword [rsp+0x2b0+var_268], rax
000000010001144f lea rax, qword [cfstring_U] ; @"U"
0000000100011456 mov qword [rsp+0x2b0+var_270], rax
000000010001145b lea rax, qword [cfstring_T] ; @"T"
0000000100011462 mov qword [rsp+0x2b0+var_278], rax
0000000100011467 lea rax, qword [cfstring_S] ; @"S"
000000010001146e mov qword [rsp+0x2b0+var_280], rax
0000000100011473 lea rax, qword [cfstring_R] ; @"R"
000000010001147a mov qword [rsp+0x2b0+var_288], rax
000000010001147f lea rax, qword [cfstring_Q] ; @"Q"
0000000100011486 mov qword [rsp+0x2b0+var_290], rax
000000010001148b lea rax, qword [cfstring_P] ; @"P"
0000000100011492 mov qword [rsp+0x2b0+var_298], rax
0000000100011497 lea rax, qword [cfstring_O] ; @"O"
000000010001149e mov qword [rsp+0x2b0+var_2A0], rax
00000001000114a3 lea rax, qword [cfstring_N] ; @"N"
00000001000114aa mov qword [rsp+0x2b0+var_2A8], rax
00000001000114af lea rax, qword [cfstring_M] ; @"M"
00000001000114b6 mov qword [rsp+0x2b0+var_2B0], rax
00000001000114ba lea r9, qword [cfstring_H] ; @"H"
00000001000114c1 lea r8, qword [cfstring_F] ; @"F"
00000001000114c8 lea rcx, qword [cfstring_E] ; @"E"
00000001000114cf lea rdx, qword [cfstring_D] ; @"D"
00000001000114d6 lea rsi, qword [0x10001ebc8] ; @selector(arrayWithObjects:), argument "selector" for method _objc_msgSend_fixup
00000001000114dd mov rdi, r13 ; argument "instance" for method _objc_msgSend_fixup
00000001000114e0 xor eax, eax
00000001000114e2 call qword [0x10001ebc8] ; @selector(arrayWithObjects:),_objc_msgSend_fixup
00000001000114e8 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000114eb mov rdx, rbx
00000001000114ee lea rsi, qword [0x10001e998] ; @selector(containsObject:), argument "selector" for method _objc_msgSend_fixup
00000001000114f5 call qword [0x10001e998] ; @selector(containsObject:),_objc_msgSend_fixup
00000001000114fb dec al
00000001000114fd jne loc_100011e05
0000000100011503 mov qword [rbp+var_A8], 0x1
000000010001150e mov qword [rbp+var_B0], 0xe
0000000100011519 mov edx, 0xe
000000010001151e mov ecx, 0x1
0000000100011523 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
000000010001152a mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
000000010001152d call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011533 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011536 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
000000010001153d call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011543 dec eax
0000000100011545 jle loc_100011e05
000000010001154b mov qword [rbp+var_B8], 0x1
0000000100011556 mov qword [rbp+var_C0], 0xe
0000000100011561 mov edx, 0xe
0000000100011566 mov ecx, 0x1
000000010001156b lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011572 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011575 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001157b mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001157e lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011585 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
000000010001158b cmp eax, 0x9
000000010001158e jg loc_100011e05
0000000100011594 mov qword [rbp+var_C8], 0x1
000000010001159f mov qword [rbp+var_D0], 0x9
00000001000115aa mov edx, 0x9
00000001000115af mov ecx, 0x1
00000001000115b4 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000115bb mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000115be call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000115c4 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000115c7 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000115ce call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000115d4 test eax, eax
00000001000115d6 js loc_100011e05
00000001000115dc mov qword [rbp+var_D8], 0x1
00000001000115e7 mov qword [rbp+var_E0], 0x9
00000001000115f2 mov edx, 0x9
00000001000115f7 mov ecx, 0x1
00000001000115fc lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011603 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011606 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001160c mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001160f lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011616 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
000000010001161c cmp eax, 0x7
000000010001161f jg loc_100011e05
0000000100011625 mov qword [rbp+var_E8], 0x1
0000000100011630 mov qword [rbp+var_F0], 0x13
000000010001163b mov edx, 0x13
0000000100011640 mov ecx, 0x1
0000000100011645 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
000000010001164c mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
000000010001164f call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011655 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011658 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
000000010001165f call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011665 test eax, eax
0000000100011667 js loc_100011e05
000000010001166d mov qword [rbp+var_F8], 0x1
0000000100011678 mov qword [rbp+var_100], 0x13
0000000100011683 mov edx, 0x13
0000000100011688 mov ecx, 0x1
000000010001168d lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011694 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011697 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001169d mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000116a0 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000116a7 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000116ad cmp eax, 0x6
00000001000116b0 jg loc_100011e05
00000001000116b6 mov qword [rbp+var_108], 0x1
00000001000116c1 mov qword [rbp+var_110], 0x14
00000001000116cc mov edx, 0x14
00000001000116d1 mov ecx, 0x1
00000001000116d6 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000116dd mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000116e0 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000116e6 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000116e9 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000116f0 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000116f6 test eax, eax
00000001000116f8 js loc_100011e05
00000001000116fe mov qword [rbp+var_118], 0x1
0000000100011709 mov qword [rbp+var_120], 0x4
0000000100011714 mov edx, 0x4
0000000100011719 mov ecx, 0x1
000000010001171e lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011725 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011728 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001172e mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011731 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011738 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
000000010001173e cmp eax, 0x5
0000000100011741 jle loc_100011e05
0000000100011747 mov qword [rbp+var_128], 0x1
0000000100011752 mov qword [rbp+var_130], 0x4
000000010001175d mov edx, 0x4
0000000100011762 mov ecx, 0x1
0000000100011767 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
000000010001176e mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011771 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011777 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001177a lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011781 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011787 cmp eax, 0x9
000000010001178a jg loc_100011e05
0000000100011790 mov qword [rbp+var_138], 0x1
000000010001179b mov qword [rbp+var_140], 0x5
00000001000117a6 mov edx, 0x5
00000001000117ab mov ecx, 0x1
00000001000117b0 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000117b7 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000117ba call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000117c0 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000117c3 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000117ca call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000117d0 cmp eax, 0x2
00000001000117d3 jle loc_100011e05
00000001000117d9 mov qword [rbp+var_148], 0x1
00000001000117e4 mov qword [rbp+var_150], 0x5
00000001000117ef mov edx, 0x5
00000001000117f4 mov ecx, 0x1
00000001000117f9 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011800 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011803 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011809 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001180c lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011813 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011819 cmp eax, 0x6
000000010001181c jg loc_100011e05
0000000100011822 mov qword [rbp+var_158], 0x1
000000010001182d mov qword [rbp+var_160], 0x6
0000000100011838 mov edx, 0x6
000000010001183d mov ecx, 0x1
0000000100011842 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011849 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
000000010001184c call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011852 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011855 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
000000010001185c call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011862 test eax, eax
0000000100011864 js loc_100011e05
000000010001186a mov qword [rbp+var_168], 0x1
0000000100011875 mov qword [rbp+var_170], 0x6
0000000100011880 mov edx, 0x6
0000000100011885 mov ecx, 0x1
000000010001188a lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011891 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011894 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001189a mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001189d lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000118a4 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000118aa cmp eax, 0x5
00000001000118ad jg loc_100011e05
00000001000118b3 mov qword [rbp+var_178], 0x1
00000001000118be mov qword [rbp+var_180], 0xf
00000001000118c9 mov edx, 0xf
00000001000118ce mov ecx, 0x1
00000001000118d3 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000118da mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000118dd call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000118e3 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000118e6 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000118ed call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000118f3 cmp eax, 0x4
00000001000118f6 jle loc_100011e05
00000001000118fc mov qword [rbp+var_188], 0x1
0000000100011907 mov qword [rbp+var_190], 0xf
0000000100011912 mov edx, 0xf
0000000100011917 mov ecx, 0x1
000000010001191c lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011923 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011926 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
000000010001192c mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
000000010001192f lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011936 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
000000010001193c cmp eax, 0x8
000000010001193f jg loc_100011e05
0000000100011945 mov qword [rbp+var_198], 0x1
0000000100011950 mov qword [rbp+var_1A0], 0x10
000000010001195b mov edx, 0x10
0000000100011960 mov ecx, 0x1
0000000100011965 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
000000010001196c mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
000000010001196f call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011975 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011978 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
000000010001197f call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011985 cmp eax, 0x2
0000000100011988 jle loc_100011e05
000000010001198e mov qword [rbp+var_1A8], 0x1
0000000100011999 mov qword [rbp+var_1B0], 0x10
00000001000119a4 mov edx, 0x10
00000001000119a9 mov ecx, 0x1
00000001000119ae lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000119b5 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
00000001000119b8 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
00000001000119be mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
00000001000119c1 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
00000001000119c8 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
00000001000119ce cmp eax, 0x8
00000001000119d1 jg loc_100011e05
00000001000119d7 mov qword [rbp+var_1B8], 0x1
00000001000119e2 mov qword [rbp+var_1C0], 0xa
00000001000119ed mov edx, 0xa
00000001000119f2 mov ecx, 0x1
00000001000119f7 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
00000001000119fe mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011a01 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011a07 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011a0a lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011a11 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011a17 cmp eax, 0x3
0000000100011a1a jle loc_100011e05
0000000100011a20 mov qword [rbp+var_1C8], 0x1
0000000100011a2b mov qword [rbp+var_1D0], 0xa
0000000100011a36 mov edx, 0xa
0000000100011a3b mov ecx, 0x1
0000000100011a40 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011a47 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011a4a call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011a50 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011a53 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011a5a call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011a60 cmp eax, 0x7
0000000100011a63 jg loc_100011e05
0000000100011a69 mov qword [rbp+var_1D8], 0x1
0000000100011a74 mov qword [rbp+var_1E0], 0xb
0000000100011a7f mov edx, 0xb
0000000100011a84 mov ecx, 0x1
0000000100011a89 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011a90 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011a93 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011a99 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011a9c lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011aa3 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011aa9 test eax, eax
0000000100011aab js loc_100011e05
0000000100011ab1 mov qword [rbp+var_1E8], 0x1
0000000100011abc mov qword [rbp+var_1F0], 0xb
0000000100011ac7 mov edx, 0xb
0000000100011acc mov ecx, 0x1
0000000100011ad1 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011ad8 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011adb call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011ae1 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011ae4 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011aeb call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011af1 cmp eax, 0x8
0000000100011af4 jg loc_100011e05
0000000100011afa mov qword [rbp+var_1F8], 0x1
0000000100011b05 mov qword [rbp+var_200], 0x15
0000000100011b10 mov edx, 0x15
0000000100011b15 mov ecx, 0x1
0000000100011b1a lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011b21 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011b24 call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011b2a mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011b2d lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011b34 call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011b3a test eax, eax
0000000100011b3c jle loc_100011e05
0000000100011b42 mov qword [rbp+var_208], 0x1
0000000100011b4d mov qword [rbp+var_210], 0x15
0000000100011b58 mov edx, 0x15
0000000100011b5d mov ecx, 0x1
0000000100011b62 lea rsi, qword [0x10001f168] ; @selector(substringWithRange:), argument "selector" for method _objc_msgSend_fixup
0000000100011b69 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011b6c call qword [0x10001f168] ; @selector(substringWithRange:),_objc_msgSend_fixup
0000000100011b72 mov rdi, rax ; argument "instance" for method _objc_msgSend_fixup
0000000100011b75 lea rsi, qword [0x10001f178] ; @selector(intValue), argument "selector" for method _objc_msgSend_fixup
0000000100011b7c call qword [0x10001f178] ; @selector(intValue),_objc_msgSend_fixup
0000000100011b82 cmp eax, 0x8
0000000100011b85 jg loc_100011e05
0000000100011b8b lea rdx, qword [cfstring_AD_W942_Q543_S665_O306] ; @"AD-W942-Q543-S665-O306"
0000000100011b92 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011b99 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011b9c call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011ba2 test al, al
0000000100011ba4 jne loc_100011e05
0000000100011baa lea rdx, qword [cfstring_AD_F961_U165_H585_C643] ; @"AD-F961-U165-H585-C643"
0000000100011bb1 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011bb8 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011bbb call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011bc1 test al, al
0000000100011bc3 jne loc_100011e05
0000000100011bc9 lea rdx, qword [cfstring_AD_C750_B974_T684_A445] ; @"AD-C750-B974-T684-A445"
0000000100011bd0 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011bd7 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011bda call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011be0 test al, al
0000000100011be2 jne loc_100011e05
0000000100011be8 lea rdx, qword [cfstring_AD_V840_H043_M864_I181] ; @"AD-V840-H043-M864-I181"
0000000100011bef lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011bf6 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011bf9 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011bff test al, al
0000000100011c01 jne loc_100011e05
0000000100011c07 lea rdx, qword [cfstring_AD_N634_T340_D886_I656] ; @"AD-N634-T340-D886-I656"
0000000100011c0e lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011c15 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011c18 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011c1e test al, al
0000000100011c20 jne loc_100011e05
0000000100011c26 lea rdx, qword [cfstring_AD_G732_E873_H967_C266] ; @"AD-G732-E873-H967-C266"
0000000100011c2d lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011c34 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011c37 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011c3d test al, al
0000000100011c3f jne loc_100011e05
0000000100011c45 lea rdx, qword [cfstring_AD_G750_U070_R463_V001] ; @"AD-G750-U070-R463-V001"
0000000100011c4c lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011c53 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011c56 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011c5c test al, al
0000000100011c5e jne loc_100011e05
0000000100011c64 lea rdx, qword [cfstring_AD_G632_R255_T474_C687] ; @"AD-G632-R255-T474-C687"
0000000100011c6b lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011c72 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011c75 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011c7b test al, al
0000000100011c7d jne loc_100011e05
0000000100011c83 lea rdx, qword [cfstring_AD_V941_W447_Z777_O017] ; @"AD-V941-W447-Z777-O017"
0000000100011c8a lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011c91 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011c94 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011c9a test al, al
0000000100011c9c jne loc_100011e05
0000000100011ca2 lea rdx, qword [cfstring_AD_N950_C058_Q257_C294] ; @"AD-N950-C058-Q257-C294"
0000000100011ca9 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011cb0 mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011cb3 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011cb9 test al, al
0000000100011cbb jne loc_100011e05
0000000100011cc1 lea rdx, qword [cfstring_AD_R645_A141_O564_O175] ; @"AD-R645-A141-O564-O175"
0000000100011cc8 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011ccf mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011cd2 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011cd8 test al, al
0000000100011cda jne loc_100011e05
0000000100011ce0 lea rdx, qword [cfstring_AD_G852_S763_F676_O457] ; @"AD-G852-S763-F676-O457"
0000000100011ce7 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011cee mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011cf1 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011cf7 test al, al
0000000100011cf9 jne loc_100011e05
0000000100011cff lea rdx, qword [cfstring_AD_V934_S244_S568_O574] ; @"AD-V934-S244-S568-O574"
0000000100011d06 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011d0d mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011d10 call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011d16 test al, al
0000000100011d18 jne loc_100011e05
0000000100011d1e lea rdx, qword [cfstring_AD_O754_W647_E775_S550] ; @"AD-O754-W647-E775-S550"
0000000100011d25 lea rsi, qword [0x10001e7c8] ; @selector(isEqualTo:), argument "selector" for method _objc_msgSend_fixup
0000000100011d2c mov rdi, r12 ; argument "instance" for method _objc_msgSend_fixup
0000000100011d2f call qword [0x10001e7c8] ; @selector(isEqualTo:),_objc_msgSend_fixup
0000000100011d35 test al, al
0000000100011d37 jne loc_100011e05
... ...
这个逻辑判断显得非常长,并没有校验Name,可以得出的信息是注册码格式如下:
AD-G632-R255-T474-C687
开头固定为AD,每节字符串开头字母随机选择生成,而且每位数字取值有大小限制。
0x2 Keygen算法
根据分析,编写了一个Keygen App。其中部分算法如下。
NSString *string0 = @"AD";
NSArray *array1 = @[@"B", @"C", @"D", @"F", @"G", @"H", @"M", @"N", @"O", @"P", @"Q", @"R"];
NSArray *array2 = @[@"A", @"B", @"C", @"E", @"F", @"G", @"H", @"I", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U"];
NSArray *array3 = @[@"A", @"B", @"C", @"D", @"G", @"H", @"I", @"J", @"K", @"O", @"P", @"S", @"T", @"U"];
NSArray *array4 = @[@"D", @"E", @"F", @"H", @"M", @"N", @"O", @"P", @"Q", @"R", @"S"];
NSMutableString *string1 = [NSMutableString stringWithString:[self randomItemInArray:array1]];
[string1 appendString:[self randomBetween:0x5 andUpper:0x9]];
[string1 appendString:[self randomBetween:0x2 andUpper:0x6]];
[string1 appendString:[self randomBetween:0x0 andUpper:0x5]];
NSMutableString *string2 = [NSMutableString stringWithString:[self randomItemInArray:array2]];
[string2 appendString:[self randomBetween:0x0 andUpper:0x7]];
[string2 appendString:[self randomBetween:0x3 andUpper:0x7]];
[string2 appendString:[self randomBetween:0x0 andUpper:0x8]];
NSMutableString *string3 = [NSMutableString stringWithString:[self randomItemInArray:array3]];
[string3 appendString:[self randomBetween:0x0 andUpper:0x6]];
[string3 appendString:[self randomBetween:0x4 andUpper:0x8]];
[string3 appendString:[self randomBetween:0x2 andUpper:0x8]];
NSMutableString *string4 = [NSMutableString stringWithString:[self randomItemInArray:array4]];
[string4 appendString:[self randomBetween:0x0 andUpper:0x6]];
[string4 appendString:[self randomBetween:0x0 andUpper:0x9]];
[string4 appendString:[self randomBetween:0x0 andUpper:0x8]];
NSArray *array = @[string0,string1,string2,string3,string4];
NSString *key =[array componentsJoinedByString:@"-"];
运行,可以得出一个有效Serial。测试验证Success!