不越獄修改釘釘位置打卡(實現除了砸殼,均可以在不越獄的前提下進行逆向工程)

  接觸逆向工程也有一點時間了,從最初研究我水哥的小黃書(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 集成它。連接裏還有許多好玩的,做爲彩蛋送給你們。溜了,溜了。

相關文章
相關標籤/搜索