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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM