不越狱修改钉钉位置打卡(实现除了砸壳,均可以在不越狱的前提下进行逆向工程)

  接触逆向工程也有一点时间了,从最初研究我水哥的小黄书(iOS应用逆向工程),到后来本身摩拳擦掌准备实练,忽然发现本身没有一款越狱手机,以致于不少iOS工具都没法使用。这就很纠结。忽然发现网易的大佬 庆哥把iOSOpenDev(13年已停更)修改升级除了 MonkeyDev ,这个东西有多好用。简单来讲,他就已经注入dylib,集成Reveal、Cycript等等,不须要本身搞去配置。git

    一切的一切,只须要本身配置好最新的 theos 环境。github

  1 sudo git clone --recursive https://github.com/theos/theos.git /opt/theosapi

 

    安装ldid(如安装theos过程安装了ldid,跳过)xcode

2 brew install ldid

   而后安装 MonkeyDevapp

   你能够经过如下命令选择指定的Xcode进行安装:(3.1和3.2选一个执行框架

   默认安装的Xcode为:3.1 sudo xcode-select -s /Applications/Xcode-beta.app

3.2 xcode-select -p

     执行安装命令:工具

CoreLocation 框架,那么咱们就hook它!
首先是使用 CaptainHook 这个庆哥也集成好了,我们直接拿来用
4 git clone https://github.com/AloneMonkey/MonkeyDev.git 5 cd MonkeyDev/bin 6 sudo ./md-install

具体使用请参考https://github.com/AloneMonkey/MonkeyDev/wiki/开始使用 庆哥在github 写的很详细了。

本文主要是分享我是如何从无从下手 到 成功 hook 钉钉的打卡机制的思想过程。

从PP助手上下载了个钉钉,直接扔到 MonkeyDev 里面,调好设置,准备调试!结果他还检测出我不是正版应用,因而我老老实实的去plist 文件吧bundle ID 复制了出来,而后粘在了Organization Identifiler 上。在跑,果真没事了。

那么说到定位,我就想到
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 搜索看看 这个方法,是否是方法有什么须要我们注意东西。因而我搜索了spa

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);
}

 

 

真机一跑,成了!能够打卡了!code

 哈哈哈 ,以上是我心路历程!我也已经集成了一个pod 在 https://github.com/AloneMonkey/MonkeyDevSpecs  ,你能够直接在 MonkeyDev 经过cocopods 集成它。连接里还有许多好玩的,做为彩蛋送给你们。溜了,溜了。

相关文章
相关标签/搜索