本站所有的下载内容都包含解压密码,解压密码均为:123456
第一步
安装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了,代码如下:

全部代码如下:

[Objective-C] 纯文本查看 复制代码
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实现不越狱修改钉钉位置打卡和签到

点击量:501