不越狱修改钉钉位置打卡(实现除了砸壳,都可以在不越狱的前提下进行逆向工程)
Posted 大发写字的地方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不越狱修改钉钉位置打卡(实现除了砸壳,都可以在不越狱的前提下进行逆向工程)相关的知识,希望对你有一定的参考价值。
接触逆向工程也有一点时间了,从最初研究我水哥的小黄书(ios应用逆向工程),到后来自己摩拳擦掌准备实练,突然发现自己没有一款越狱手机,以至于很多iOS工具都无法使用。这就很纠结。突然发现网易的大佬 庆哥把iOSOpenDev(13年已停更)修改升级除了 MonkeyDev ,这个东西有多好用。简单来说,他就已经注入dylib,集成Reveal、Cycript等等,不需要自己搞去配置。
一切的一切,只需要自己配置好最新的 theos 环境。
1 sudo git clone --recursive https://github.com/theos/theos.git /opt/theos
安装ldid(如安装theos过程安装了ldid,跳过)
2 brew install ldid
然后安装 MonkeyDev
你可以通过以下命令选择指定的Xcode进行安装:(3.1和3.2选一个执行)
3.1 sudo xcode-select -s /Applications/Xcode-beta.app
默认安装的Xcode为:
3.2 xcode-select -p
执行安装命令:
4 git clone https://github.com/AloneMonkey/MonkeyDev.git 5 cd MonkeyDev/bin 6 sudo ./md-install
具体使用请参考
https://github.com/AloneMonkey/MonkeyDev/wiki/开始使用 庆哥在github 写的很详细了。
CoreLocation 框架,那么我们就hook它!
本文主要是分享我是如何从无从下手 到 成功 hook 钉钉的打卡机制的思想过程。
从PP助手上下载了个钉钉,直接扔到 MonkeyDev 里面,调好设置,准备调试!结果他还检测出我不是正版应用,于是我老老实实的去plist 文件吧bundle ID 复制了出来,然后粘在了Organization Identifiler 上。在跑,果然没事了。
那么说到定位,我就想到
首先是使用 CaptainHook 这个庆哥也集成好了,咱们直接拿来用
CHDeclareClass(CLLocation); CHOptimizedMethod0(self, CLLocationCoordinate2D, CLLocation, coordinate){ return CLLocationCoordinate2DMake(39.960742, 116.569844); } CHConstructor{ CHLoadLateClass(CLLocation); CHClassHook(0, CLLocation, coordinate); }
真机一跑,GG!想想也是,要是这么简单就hook 了,企业专家也不是很没面子,class dump 出所有头文件,看看都有什么吧。
于是进行谷歌搜索,高德地图禁止虚拟定位,看了几个博客,就找到 有这样一个方法,- (BOOL) detectRiskOfFakeLocation 返回YES,就检测虚拟定位,NO就不检测;
OK ,那hook 它!先查找都那几个类用它了,
搜索出来,一共就三个类, 好办,搞它!
CHDeclareClass(AMapGeoFenceManager); CHMethod(0, BOOL,AMapGeoFenceManager,detectRiskOfFakeLocation){ return NO; } CHConstructor{ CHLoadLateClass(AMapGeoFenceManager); CHClassHook(0, AMapGeoFenceManager,detectRiskOfFakeLocation); } CHDeclareClass(AMapLocationManager); CHMethod(0, BOOL,AMapLocationManager,detectRiskOfFakeLocation){ return NO; } CHConstructor{ CHLoadLateClass(AMapLocationManager); CHClassHook(0, AMapLocationManager,detectRiskOfFakeLocation); } CHDeclareClass(DTALocationManager); CHMethod(0, BOOL,DTALocationManager,detectRiskOfFakeLocation){ return NO; } CHConstructor{ CHLoadLateClass(DTALocationManager); CHClassHook(0, DTALocationManager,detectRiskOfFakeLocation); }
真机跑起来,哈哈,这次你还不出来! 结果照样GG !这么办,那我们去高德地图的api 搜索看看 这个方法,是不是方法有什么需要咱们注意东西。于是我搜索了
detectRiskOfFakeLocation 这个方法。
搜索出来 还真有! 一共六个,两个 高德检测,两个钉钉检测,不管全hook了!
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); }
真机一跑,成了!可以打卡了!
哈哈哈 ,以上是我心路历程!我也已经集成了一个pod 在 https://github.com/AloneMonkey/MonkeyDevSpecs ,你可以直接在 MonkeyDev 通过cocopods 集成它。链接里还有许多好玩的,作为彩蛋送给大家。溜了,溜了。
以上是关于不越狱修改钉钉位置打卡(实现除了砸壳,都可以在不越狱的前提下进行逆向工程)的主要内容,如果未能解决你的问题,请参考以下文章