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

  接触逆向工程也有一点时间了,从最初研究我水哥的小黄书(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 写的很详细了。

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

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

那么说到定位,我就想到
CoreLocation 框架,那么我们就hook它!
首先是使用 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 集成它。链接里还有许多好玩的,作为彩蛋送给大家。溜了,溜了。

 

posted @ 2017-09-14 19:14  大发写字的地方  阅读(7223)  评论(6编辑  收藏  举报