基于MonkeyDev实现不越狱修改钉钉位置打卡和签到
第一步
安装MonkeyDev
详细教程可参考https://www.jianshu.com/p/8ecbafb8abc0或者https://github.com/AloneMonkey/MonkeyDev/wiki
第二步获取砸壳后的钉钉APP
获取方法:
1.如果没有越狱手机,可通过PP助手直接下载钉钉
2.如果有越狱手机,可通过Clutch等命令对APPStore上下载的钉钉进行砸壳Clutch砸壳详细教程可参考https://www. jianshu.com/p/979fe886e28e
砸壳前越狱手机需要打开SSH通道
第三步
对砸壳后的钉钉进行hook操作
1.有了MonkeyDev就简单多了,首先打开Xcode创建一个MonkeyApp项目
2.进入新建的项目,右键Show in Finder
3.把通过PP助手下载的ipa包放到上面新建的dingding项目的TargetAPP目录下,(由于我没有越狱手机,此处使用的是PP助手下载的钉钉)
4.需要一台iPhone手机,越狱或者非越狱均可,此处使用非越狱的iPhone,运行项目,安装成功,输入账号密码登录时,钉钉会提示“你当前登录的非官方客端,已禁止该客户端的登录使用。请下载并使用官方客户端”。原因是我们创建项目是的Bundle ID与正版的钉钉的Bundle ID不一致。
5.把项目的Bundle ID改为“ com.laiwang.DingTalk ”,再次运行,登录成功。
6.运行项目是Xcode可能会提示“ The file “ XXX.app ” couldn’t be opened because you don’t have permission to view it. ” •解决办法:将info.plist的文件中的Executable.file中的文件修改为:$ ( PRODUCT_NAME )改完后记得clear一下再次运行就行了。
7.核心Hook操作hook代码写在哪里?我们可以hook代码写在项目的xxxDylib.m文件下,我创建的项目名为“ dingding ”,因此我写在“ dingdingDylib.m ”文件下
hook的历程1.说到定位,我们肯定会想起苹果原生的CoreLocation框架,参照MonkeyDev的使用教程,我们对钉钉APP里的CoreLocation进行hook操作,定位的经纬度为深圳南山智园代码如下:
真机一跑,定位变都没变,伤心的很。。。。
2.如果那么简单就没有这篇教程啦哈哈。。,我们可以利用class dump出所有钉钉ipa的所有头文件,从里面找出一点蛛丝马迹。(class-dump安装及获取app头文件教程https://www.jianshu.com/p/d0ebed2d937a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation)
通过class dump出来的头文件,发现钉钉使用的是高德地图,搜索发现,高德地图是禁止虚拟定位的。查找了几个博客,发现高德地图中有这样一个方法:- ( BOOL ) detectRiskOfFakeLocation返回YES,就检测虚拟定位,NO就不检测,因此我们可以对使用了这个方法的所有类进行hook操作。(搜索出来,一共三个类)
真机跑起来,哈哈,结果照样凉凉!再去高德地图的api搜索看看这个方法,是不是方法有什么需要注意的。于是我搜索了detectRiskOfFakeLocation这个方法。
于是我们把上面的六个全hook了,代码如下:
全部代码如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | CHDeclareClass ( CLLocation ) CHOptimizedMethod0 ( self , CLLocationCoordinate2D , CLLocation , coordinate ) { return CLLocationCoordinate2DMake ( 22.5955580000 , 114.0056150000 ); } CHConstructor { CHLoadLateClass ( CLLocation ); CHClassHook ( 0 , CLLocation , coordinate ); } CHDeclareClass ( AMapGeoFenceManager ); CHMethod ( 0 , BOOL , AMapGeoFenceManager , detectRiskOfFakeLocation ) { return NO ; } CHMethod ( 0 , BOOL , AMapGeoFenceManager , pausesLocationUpdatesAutomatically ) { return NO ; } CHConstructor{ CHLoadLateClass ( AMapGeoFenceManager ); CHClassHook ( 0 , AMapGeoFenceManager , detectRiskOfFakeLocation ); CHClassHook ( 0 , AMapGeoFenceManager , pausesLocationUpdatesAutomatically ); } CHDeclareClass ( AMapLocationManager ); CHMethod ( 0 , BOOL , AMapLocationManager , detectRiskOfFakeLocation ) { return NO ; } CHMethod ( 0 , BOOL , AMapLocationManager , pausesLocationUpdatesAutomatically ) { return NO ; } CHConstructor{ CHLoadLateClass ( AMapLocationManager ); CHClassHook ( 0 , AMapLocationManager , detectRiskOfFakeLocation ); CHClassHook ( 0 , AMapLocationManager , pausesLocationUpdatesAutomatically ); } CHDeclareClass ( DTALocationManager ); CHMethod ( 0 , BOOL , DTALocationManager , detectRiskOfFakeLocation ) { return NO ; } CHMethod ( 0 , BOOL , DTALocationManager , dt_pausesLocationUpdatesAutomatically ) { return NO ; } CHConstructor{ CHLoadLateClass ( DTALocationManager ); CHClassHook ( 0 , DTALocationManager , detectRiskOfFakeLocation ); CHClassHook ( 0 , DTALocationManager , dt_pausesLocationUpdatesAutomatically ); } |
真机跑一跑,打卡签到的位置都是代码写死的经纬度!复制代码的小伙伴不要忘记导入#import <CoreLocation/CoreLocation.h>框架,不然Xcode会报错哦,大家可以根据打卡地点修改经纬度。
从52pojie论坛拿来的,非原创,原文链接 https://www.52pojie.cn/thread-837108-1-1.html
本站所有的下载内容都包含解压密码,解压密码均为:123456
本文链接地址: 基于MonkeyDev实现不越狱修改钉钉位置打卡和签到
有很多内容是从互联网采集的,如果触动了您的利益,请一定告知我,我会在第一时间删除数据,联系方式:aws01@ctfile.cn