|
32 | 32 | ; +hookFMDB
|
33 | 33 | ; +start
|
34 | 34 | ; }
|
35 |
| -``` |
| 35 | +``` |
| 36 | + |
| 37 | +我们先将目光转到另外一个更可疑的方法:`hookSubOfController`,具体实现如下: |
| 38 | + |
| 39 | +``` |
| 40 | +void +[_priv_NBSUIAgent hookSubOfController](void * self, void * _cmd) { |
| 41 | + r14 = self; |
| 42 | + r12 = [_subMetaClassNamesInMainBundle_c("UIViewController") retain]; |
| 43 | + var_C0 = r12; |
| 44 | + if ((r12 != 0x0) && ([r12 count] != 0x0)) { |
| 45 | + var_C8 = object_getClass(r14); |
| 46 | + if ([r12 count] != 0x0) { |
| 47 | + r15 = @selector(nbs_jump_initialize:); |
| 48 | + rdx = 0x0; |
| 49 | + do { |
| 50 | + var_98 = rdx; |
| 51 | + r12 = [[r12 objectAtIndexedSubscript:rdx, rcx, r8] retain]; |
| 52 | + [r12 release]; |
| 53 | + if ([r12 respondsToSelector:r15, rcx, r8] == 0x0) { |
| 54 | + _hookClass_CopyAMetaMethod(); |
| 55 | + } |
| 56 | + r13 = class_getName(r12); |
| 57 | + rax = [NSString stringWithFormat:@"nbs_%s_initialize", r13]; |
| 58 | + rax = [rax retain]; |
| 59 | + var_A0 = rax; |
| 60 | + rax = NSSelectorFromString(rax); |
| 61 | + var_B0 = rax; |
| 62 | + rax = objc_retainBlock(__NSConcreteStackBlock); |
| 63 | + var_A8 = rax; |
| 64 | + r15 = objc_retainBlock(rax); |
| 65 | + var_B8 = imp_implementationWithBlock(r15); |
| 66 | + [r15 release]; |
| 67 | + rax = class_getSuperclass(r12); |
| 68 | + r15 = objc_retainBlock(__NSConcreteStackBlock); |
| 69 | + rbx = objc_retainBlock(r15); |
| 70 | + r13 = imp_implementationWithBlock(rbx); |
| 71 | + [rbx release]; |
| 72 | + rcx = r13; |
| 73 | + r8 = var_B8; |
| 74 | + _nbs_Swizzle_orReplaceWithIMPs(r12, @selector(initialize), var_B0, rcx, r8); |
| 75 | + rdi = r15; |
| 76 | + r15 = @selector(nbs_jump_initialize:); |
| 77 | + [rdi release]; |
| 78 | + [var_A8 release]; |
| 79 | + [var_A0 release]; |
| 80 | + rax = [var_C0 count]; |
| 81 | + r12 = var_C0; |
| 82 | + rdx = var_98 + 0x1; |
| 83 | + } while (var_98 + 0x1 < rax); |
| 84 | + } |
| 85 | + } |
| 86 | + [r12 release]; |
| 87 | + return; |
| 88 | +} |
| 89 | +``` |
| 90 | + |
| 91 | +从 `_subMetaClassNamesInMainBundle_c` 的命名和传入的 "UIViewController" 参数,基本可以推断这个 C 函数是获取 MainBundle 中所有 `UIViewController` 的子类。 |
0 commit comments