非越獄手機修改釘釘定位

公司要求使用釘釘定位打卡,可是由于經(jīng)常晚上加到很晚后,匆忙回家,忘記打卡,因此想著能不能修改一下定位呢,這樣哪怕忘了,到家躺在床上也能打卡,畢竟咱們程序員都很辛苦,不能再因為打卡添加煩惱了。下面直接進入正題。
需要提前配置:
安裝MonkeyDev
安裝class-dump

幾張圖片展示:


頁面中增加可調(diào)試的懸浮球.png

點擊懸浮球彈出調(diào)試頁面.png

地圖點選位置.png

步驟一:
之前經(jīng)常逛iOSRE,參考這篇文章 iOS 逆向?qū)崙?zhàn) - 釘釘簽到遠程“打卡”,便著手動工了。為了省去砸殼等一系列步驟,直接在PP助手越獄商店下載應(yīng)用,Cydia中安裝Reveal2Loader,看了下UI,打卡那塊是webView,直接class-dump出頭文件,不管用的是什么地圖,最終也會調(diào)用系統(tǒng)的地方方法,所以直接找下面這個方法:

locationManager:didUpdateLocations:

搜索didUpdateLocations,可以看到我們的搜索范圍很小了

搜索didUpdateLocations.jpeg

使用Hopper Disassembler搜索得到的結(jié)果也是一致,且可以看到更多細節(jié),方便我們進一步縮小范圍
Hopper.png

簡單分析一下,我們要找的方法是locationManager:didUpdateLocations:,排除LAPLocationInfoDTLocationJSAPIHandler,定位頁面沒有地圖,排除MAMapView,LocData看一下里面內(nèi)容應(yīng)該只是保存和提供數(shù)據(jù)的也可以排除。剩下的5個AMapLocationCLMDelegate,AMapLocationManagerDTCLocationManager,LALocationManagerVILocationManager,分別hook嘗試一下,發(fā)現(xiàn)修改AMapLocationCLMDelegate,AMapLocationManager中的定位信息可以生效。

CHDeclareClass(AMapLocationCLMDelegate)

CHOptimizedMethod2(self, void, AMapLocationCLMDelegate, locationManager, id, arg1, didUpdateLocations, id, arg2) {
    
    CHSuper2(AMapLocationCLMDelegate, locationManager, arg1, didUpdateLocations, @[location]);
}

CHConstructor {
    CHLoadLateClass(AMapLocationCLMDelegate);
    CHHook2(AMapLocationCLMDelegate, locationManager, didUpdateLocations);
}

步驟二:
找到可以生效的地方,接下來就是加個地圖進去,方便點選位置進行打卡。在Monkeydev中使用pod,參考MonkeyDevSpecs,本項目中只使用了MDSettingCenter(慶神寫的方便調(diào)試和動態(tài)配置),AMap3DMap(高德地圖),SCLAlertView-Objective-C(帶動效的alertView),注意,pod要寫在Dylib中。

# Uncomment the next line to define a global platform for your project
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/AloneMonkey/MonkeyDevSpecs.git'  #不可少

use_frameworks!                     #不可少
platform :ios, '8.0'

target 'DingTalkLocation' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for DingTalkLocation

end

target 'DingTalkLocationDylib' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for DingTalkLocationDylib

  pod 'MDSettingCenter' #設(shè)置中心
  
  pod 'AMap3DMap' #3D地圖SDK
  pod 'SCLAlertView-Objective-C' #好看的AlertView

end

偷了個懶,懸浮球直接在接收到UIApplicationDidFinishLaunchingNotification后添加到keyWindow上了,這樣第一次打開登錄后就看不到了,可以選擇hook一下首頁的viewDidLoad方法。后面也沒啥好說的了,地圖就按照高德地圖官方操作就好了,有一點需要注意,我們拿到的經(jīng)緯度直接賦值會產(chǎn)生偏移,這點挺讓人糾結(jié)的,我們項目和釘釘同樣是高德地圖,應(yīng)該不存在偏移問題,后來根據(jù)偏移大致推算了一下,釘釘在獲取到位置經(jīng)緯度之后,會調(diào)用坐標(biāo)轉(zhuǎn)換,所以咱們傳入經(jīng)緯度之后,被轉(zhuǎn)換了,自然就偏移了。坐標(biāo)轉(zhuǎn)換代碼如下:

CLLocationCoordinate2D amapcoord = AMapCoordinateConvert(CLLocationCoordinate2DMake(39.989612,116.480972), AMapCoordinateTypeGPS);

也沒啥關(guān)系,坐標(biāo)是朝右上角偏移的,所以定位的時候往左下角選一點就可以了。
最后放出源碼,直接將ipa導(dǎo)入就可以使用了。(BundleID修改成:com.laiwang.DingTalk,對應(yīng)的版本號最好也要修改一下,否則釘釘會彈出警告。)
釘釘定位修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容