教你四行代码搞定钉钉打卡

前言: 本文讲述如何用最少的代码,实现钉钉的远程打卡。

1.下载最新破解版本的钉钉打卡(当然如果你勤快也可以自己去砸壳)。

111.jpg

2.借用杨君大神的 iOS符号表恢复&逆向支付宝 (注意: 现在的App大多都是armv7、arm64双架构,符号表恢复的时候需要用到 “lipo” 命令,分别恢复再合并)。

22.jpg

3.使用XCode的lldb调试(默认情况XCode的lldb没有权限调试第三方应用)

33.jpg
提示: Ensure “XXXX” is not already running, and cardlan_yuhuajun has permission to debug it.

========== 给App添加一个可调式权限 ==========
1.将应用程序从设备上拷贝到本地
2.利用 ldid 将应用程序的 code sign 导出:ldid -e AlipayWallet >> AlipayWallet.xml
3.在 AlipayWallet.xml 文件中添加 get-task-allow 权限
<key>get-task-allow</key> <true/>
4.利用 ldid 对应用进行重签名 ldid -SAlipayWallet.xml ./AlipayWallet
5.将应用拷回设备,将设置可执行权限 chmod 755 AlipayWallet
参考:(https://blog.csdn.net/kissing_huo/article/details/78548942)

4.附加进程

44.jpg

5.分析

55.jpg
Reveal:分析出打卡这个界面是一个H5,说明是H5与原生的交互(Bridge)。 既然是H5调用原生,那么源头还是在原生,直接转到原生分析.

66.png
本地写一个demo,得到启动定位的关键函数 startUpdatingLocation

5.1 用第4步附加了钉钉打卡进程的XCode,添加一个Xcode 符号断点(Symbolic Breakpoint)
77.jpg
5.2 symbo 中添加关键字函数 startUpdatingLocation

88.png
回车后,由于恢复了符号表,XCode自动查找并列举所有调用过这个函数的类
99.jpg

这个时候再进入到打卡界面,断点会被断下:
aa.png
每次进入到打卡页面都会触发 AMapLocationManager类的startUpdatingLocation,这是启动或刷新定位,那么接收定位数据的由CLLocationManagerDelegatelocationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)location代理方法。至此我们得到的定位数据的源头,iOS系统的代理方法返回了当前的位置信息。

5.3 给代理方法添加一个断点,查看函数调用过程
bb.png

再次进入到打卡页面,得到所有的函数调用过程:

cc.jpg

H5调用原生的定位[AMapLocationManager startUpdatingLocation],在[AMapLocationManager locationManager:didUpdateLocations:]源头中得到系统定位坐标,回调给H5,至此分析结束。

Tweak.xm

通过一个demo,模拟实现一下iOS获取坐标:

dd.jpg
发现locations这个参数返回的是一个__NSArrayM类型,而这个类型实际指向的是NSMutableArray 详情请参考__NSArray0、__NSArrayI、__NSArrayM
既然是用NSArray指向一个可变数组,那么用iOS的深浅拷贝就可以实现偷梁换柱。
代码:

%hook AMapLocationManager
- (void) locationManager:(id)arg1 didUpdateLocations:(id)arg2{
    CLLocation *lar = [[CLLocation alloc] initWithLatitude:39.9072885060602 longitude:116.39123343289631];
    NSMutableArray *array = (NSMutableArray *)arg2; // 可变数组指向 NSArray指向的可变数组。
    [array removeAllObjects]; //删掉系统返回的坐标
    [array addObject:lar]; // 添加我们自己的目标坐标
    %orig;
}
%end

总结

钉钉使用的是高德地图(GCJ02坐标),iOS系统CLLocationManager得到的是WGS84坐标,在实际操作当中需要进行一次坐标的转换。
真正的逻辑代码就4句:

1122.png

这里提供两个网站:

高德地图坐标拾取系统
火星坐标在线转换

将高德地图拾取到的坐标转换成WGS84,然后赋值给CLLocation

133750x03z368taztc3ald.png

最后附上效果图,本人在上海。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,459评论 4 61
  • 一见钟情 还笼罩在春节的气息里,清晨如此的明媚。snow一个气质不凡的女孩。spring一个阳光但不失稳重的男孩(...
    雪与雄鹰阅读 3,214评论 19 5
  • 工作很悲剧,怎么办? 毕业于某大专院校,财务管理专业的廖婷婷,于2017年3月,应聘到一家医疗集团公司旗下的网络科...
    太阳姐姐阅读 4,026评论 0 0
  • 西安横穿灞河有一条不算宽敞的马路,路旁立着一座孤亭,看样子年代已经久远。那日又有车辆开至此地歇脚,一辆黑色大众,车...
    修竹里阅读 3,736评论 2 5
  • 闫清丫CG阅读 1,882评论 0 0

友情链接更多精彩内容