Skip to content

Commit 8e3b8ad

Browse files
author
dev-aozhimin
committed
[Add] Add hookSubOfController
1 parent f542206 commit 8e3b8ad

File tree

1 file changed

+57
-1
lines changed

1 file changed

+57
-1
lines changed

README.md

+57-1
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,60 @@
3232
; +hookFMDB
3333
; +start
3434
; }
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

Comments
 (0)