iOS逆向实战二:微信聊天界面实现飘气球效果

这个效果在逆向中难度是最低的,适合新手练习。涉及一些基础的知识,如如何读取本地图片,imageNamed可不行;如何调用oc文件,实现多文件操作,避免多个文件在一起显得臃肿,另外动画的实现可要花一些时间调试。
1.先找到聊天界面的Controller及view,了解其层级结构
1.1打开Reveal

一眼就看到YYTableView,从这里切入好了。
1.2 通过Cycript查找聊天界面的Contrller

ssh连接手机终端->cycript -p WeChat->查找YYTableView->通过nextResponder找到BaseMsgContentViewController
1.3通过setTitle方法来验证下BaseMsgContentViewController是不是我们要的

2.调用OC文件需要做哪些配置呢?
2.1 BalloonFlyView是动画类,这个在XCode调好
2.2 如何调用BalloonFlyView类呢?
工程目录下新建src文件夹,把BalloonFlyView放入该文件夹下

2.3Makefile配置src文件
找到Makefile->iOSREProject_FILES
.m文件改.xm,xm与oc中的.mm类似,这样Tweak可引用到OC文件
*是通配符,及src下的所有.m文件都可以引用

2.4 引入头文件并调用
#import "src/BalloonFlyView.h"
BalloonFlyView *vi = [[BalloonFlyView alloc] initWithFrame:CGRectZero];
[vi showAnimationInView:self.view];
2.5如何引用图片?
1.图片需要放在/Library/PreferenceLoader/Preferences/路径

2.可再项目中定义宏:#define CHFile(path) [NSString stringWithFormat:@"/Library/PreferenceLoader/Preferences/%@",path]
3.调用[UIImage imageWithContentsOfFile:CHFile(imageNamed)]
3.hook聊天界面方法,插入动画
hook BaseMsgContentViewController
3.1在viewWillAppear设置背景,添加定时器调用动画

3.2 在viewWillDisappear释放定时器

总结:
1.没有源码的技术文章就是刷流氓,附上demo
2.文中flyTimer使用的是静态全局变量,如何给hook的类添加属性,请读者思考。
3.如果方法在protocol,我们如何hook;如果是block回调,我们怎么hook;请读者再思考。
4.有任何问题可留意交流
iOS逆向实战一:实现按下home键截屏,如何使用hook的对象属性
iOS逆向实战二:微信聊天界面实现飘气球效果
iOS逆向实战三:修改微信钱包零钱
iOS逆向实战四:去优酷广告