songdh
1
通过class dump将app所有的头文件全部导出来了。
进入到某一个界面进行操作,怎么才能获取到当前界面ViewController的类名呢?
1,在头文件里搜索,没有找到相关的名字
2,对UIViewController做了hook,打印出当前的类名
%hook UIViewController
-(void)viewDidLoad
{
%orig;
NSLog(@"controllerName=%@",NSStringFromClass([self class]));
}
%end
打印出当前的ViewController的类名,但是这个类在头文件里却搜索不到。
另外写一个xm文件hook这个类,发现也没有调用到。
请问下 怎么对指定页面进行hook操作,通过在UIViewController里获取到的类名,为什么不能hook呢?
songdh
3
我用Reavel只能获取到当前的UIView,但是拿不到它所在的ViewController。
[#内存地址 nextResponder]不断调用,总能知道这个view的controller。。
1 个赞
第二版第170页。
在cycript中,通过页面view不断调用nextResponder获得。同楼上。
songdh
6
我看了这篇帖子 http://bbs.iosre.com/t/iosrelottery/46
我用cycript或者hook住UIViewDidLoad得到controller类名是相同的。比如得到的类名是testViewController。为什么我class-dump出的头文件中没有这个类。
并且我去hook testViewController的viewDidLoad方法,也并没有效果
可能这个类不在你classdump的文件中。
参考170页。
grep -r XXXXController /System/Library/
grep -r XXXXController /Some Directory
songdh
9
还想到一个问题。我已经打印出当前的congroller名字了,虽然在头文件里没有找到它,但这个类应该是确实存在的。我去hook这个类,和有没有头文件也没有关系,为什么会调用不到呢?
songdh
13
UIViewController.xm
@interface UIViewController(Extension)
-(void)log;
@end
@implementation UIViewController(Extension)
-(void)log
{
NSLog(@"controllerName=%@",NSStringFromClass([self class]));
}
@end
%hook UIViewController
-(void)viewDidLoad
{
%orig;
[self log];
}
%end
通过上面的方法查看日志 controllerName=XSDKLoginController
然后hook这个类
XSDKLoginController.xm
%hook XSDKLoginController
-(void)viewDidLoad
{
%orig;
NSLog(@"XSDKLoginController viewDidLoad");
}
%end
然后重新运行程序,发现viewDidLoad方法没有被调用到
新增方法,不能用extension(应该是不能)。
需要用%new。
例如这个
%hook XXXXXController
%new
- (void)evt_alert:(id)msg{
// todo
}
%end
songdh
15
我是给UIViewController添加的类别,类别里的日志是打印出来的。所以添加类别是可以用的。打印出了 XSDKLoginController这个名字。
XSDKLoginController是继承自UIViewController,那么理论上,在XSDKLoginController的viewDidLoad方法里应该打印出两条日志才对。但现在只是打印出父类的日志。即XSDKLoginController类还是没有被调用到。这个情况感觉特别困惑
另外我去掉类别,结果是一样的
哦这个意思。
如果不去hook UIViewController 的viewDidLoad,直接hook XSDKLoginController的呢?
不知道这里的Hook能否叠加。找时间我也试试。
songdh
17
我测试过了,只去hook XSDKLoginController就看不到viewDidLoad的日志了。
这个问题觉得挺奇怪的,刚学习逆向一段时间,觉得会很多东西,现在出了这个问题,都有点怀疑自己了,不知道是自己理解的不对,还是这个工程太nb了
hook是可以叠加的,这个我写了个测试工程测试过了,其实就是一个继承的关系
先去hook个别的app,别只在这个上使劲呀。
或者你这个app,能告诉我么,我也研究研究
songdh
19
手头刚好有这个企业版的app,省去了砸壳嘛,就试试 叫战龙之刃
我再去试试别的