上一篇文章我们准备了逆向所需的所有工具和文件,接着我们开始对于企业微信的代码进行分析,这里没有使用ida进行反汇编分析是由于企业微信的代码比较容易定位。
(一)cycript定位打卡页面控制器
1. ssh到手机,如果有不知道怎么用电脑连接手机的可以去看我上一篇文章或者百度一下,进入企业微信所在进程,cycript -p wework,查看企业微信的页面结构(图1),我们可以看到tabBarController(图2)
点击进入到打卡页面,查看当前控制器,并且在导出的企业微信头文件中找到对应控制器的.h文件(图3),不难发现打卡控制器叫做WWKAttendanceBinaryCheckViewController。
(二)hook定位方法
找到WWKAttendanceBinaryCheckViewController对应的.h文件,查看头文件的相关方法属性和引入很容易发现涉及到定位功能的类分别有WWKAttendanceBinaryCheckViewController ,WWKLocationRetriever,WWKLocationRetrieverBaseTask,他们之间的关系为WWKLocationRetrieverBaseTask使用腾讯地图定位功能获取当前经纬度代理回调到WWKLocationRetriever中,WWKAttendanceBinaryCheckViewController获取WWKLocationRetriever中代理得到的最新经纬度进行地图api接口调用得到当前位置信息,判断是否在打卡范围内。
我们hook出对应的方法,将经纬度修改为打卡范围内的任意经纬度即可(图4),这里我创建了一个单例,用于存放经纬度,并且进行是否hook该方法的判断
(三)增加功能开关
到这里为止我们已经能够达到预期的目的了,但是为了方便能够随时进行切换修改定位功能,我在企业微信首页的右上角弹窗中增加了一个开关,增加bool值判断,增加一个item的方法也是获取到当前页面中呈现的视图类,hook了mItemsArray的set方法和tableView的点击方法(图5,图6)
(四)总结
大功告成,command+r运行在手机上,不管是越狱还是非越狱手机都没有问题,大家自己进行尝试吧,如果有任何的问题欢迎沟通。
注:对于修改经纬度实现不在范围内打卡不是本人的初衷,只是为了研究ios逆向,不会将此功能应用在生活中,诚信为本。