本帖最后由 zhufeixing 于 2018-12-13 15:16 编辑
第一步
安装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] 纯文本查看 复制代码 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会报错哦,大家可以根据打卡地点修改经纬度。
期待得到小伙伴们的好评和喜欢
后续=>非越狱手机钉钉搭建修改经纬度的UI界面
https://www.52pojie.cn/forum.php?mod=viewthread&tid=838180&extra=page%3D1%26filter%3Dtypeid%26typeid%3D195 |