iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性

按下home实现截屏.gif

系统iOS9.3.2,与书中作者的的案例有些出入。但思路相同。一个简单的案例带你入门

1.class-dump -H SpringBoard -o 路径
2.书中SBScreenShotter不存在,只有SBScreenshotManager。SBScreenshotManager是不是之前的SBScreenShotter,在头文件中找到saveScreenshots方法。在cycript -p SpringBoard验证,SBScreenshotManager就是之前的SBScreenShotter。
iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性_第1张图片
saveScreenshots.png
3.如何调用SBScreenshotManager中的saveScreenshots方法?
iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性_第2张图片
书中的方法.png

方法名都改了,SBScreenshotManager中也没有sharedInstance。在按书中的写法必然不能生效。

只需要声明相同的方法和属性:
@interface SBScreenshotManager:NSObject
- (void)saveScreenshots;
@end
@interface SpringBoard
- (void)hookMethod;
@property(readonly, nonatomic) SBScreenshotManager *screenshotManager;
@end

勾住SpringBoard _menuButtonDown方法
%hook
- (void)_menuButtonDown:(id)down{
NSLog(@"You've pressed home button.");
SBScreenshotManager * screenshotManager = [self screenshotManager];
[screenshotManager saveScreenshots];
%orig;
}
%end

4.效果图中闪光颜色也被改变了,是因为勾住了SBScreenFlash的flashColor方法。

%hook SBScreenFlash
- (void)flashColor:(id)arg1 withCompletion:(id)arg2{
NSLog(@"iOSRE:flashColor: %s,%@,",object_getClassName(arg1),arg1);
CGFloat red = (arc4random() % 256) / 255.0;
CGFloat green = (arc4random() % 256) / 255.0;
CGFloat blue = (arc4random() % 256) / 255.0;
UIColor *c = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
%orig(c, arg2);
}
%end

结论:

1.对于新手来说,最难的是如何调用对象里的属性和方法,我google许久也没有一个好的办法,也没有找到官方文档。例如自己init一个对象,用runtime去获取对象都没有生效。这个方法来自于书中后面的案例,简单又好使。如果遇到困难,好几天都没有解决,还是先保留,也许后面就自然而然的解决了。

2.哈哈,微信的零钱也可以更改,不过只能看不能用。


iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性_第3张图片
修改零钱1.png

iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性_第4张图片
修改零钱2.png

3.微信改零钱功能是中看不中用的,也就自己高兴,当然银行app的余额也同理。我们应该做些实用性的功能:如蚂蚁森林自动收取好友能量,钉钉改个位置定时打个卡(不要让老板知道就好)。

4.当然如果是自己分析,定位自己想要的类名和函数是最难的,想要深入,最好还是学习汇编。

5.有任何问题欢迎留言交流。

本文案例来自于《iOS应用逆向工程 第2版》

iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性
iOS逆向实战二:微信聊天界面实现飘气球效果
iOS逆向实战三:修改微信钱包零钱
iOS逆向实战四:去优酷广告

你可能感兴趣的:(iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性)