tft每日頭條

 > 科技

 > 微信ios測試版本

微信ios測試版本

科技 更新时间:2025-01-21 15:32:27

問:我想用回舊版本的微信!

答:為什麼要用舊版本微信呢?

問:你不知道,我裝一個舊版本的可共存的微信,再裝一個最新版本的微信,我就可以同時登陸兩個賬号, 然後就可以在群裡面互粉裝逼了。但微信5.0版本提示我版本太低,不給用,要升級!有沒有辦法騙過微信的服務器呢?

本文解決一個問題:讓低版本的微信可以使用。

(1)安裝與運行

在網上搜索微信的曆史版本,下載一個兼容多開的版本(實際上是bundleID不一樣),比如5.0版本。當然也可以通charles等,在AppStore上下載微信舊版本,再重簽名。

通過pp助手之類的工具,把舊版本微信安裝到手機。

啟動微信,登陸賬号,遇到這樣的提示:

微信ios測試版本(突破微信強制升級機制)1

版本過低,無法使用。

問題出現了,那怎麼解決呢?

小程很自然地猜測,客戶端有一個邏輯,是把當前的版本号與服務器返回的版本号作對比,如果發現當前的版本号過低,就提示升級。那麼,當前的版本号是怎麼獲取到的呢,它是不是從一個函數返回的呢?如果小程把這個值改掉會怎麼樣呢?

(2)突破限制

同樣,先要通過classdump拿到微信的所有類的聲明。

然後搜索"version"關鍵字,對可能是返回版本值的函數進行注入,觀察各個地方的輸出。

注入的辦法,用小程上一篇介紹的iOSOpenDev來做即可,而觀察輸出則使用之前介紹的socat。

這裡給出部分注入的代碼的截圖:

微信ios測試版本(突破微信強制升級機制)2

最終可以确認,CUtility::GetVersion就是目标函數,通過一個公共類來返回版本值,這在設計上是很合理的事情了。

運行微信時,可以在系統日志中看到這樣的輸出:

Oct 18 15:14:46 yeah MicroMessenger[2506] : -------CUtility::GetVersion in

Oct 18 15:14:46 yeah MicroMessenger[2506] : -------CUtility::GetVersion out, ret=352321792

Oct 18 15:14:46 yeah MicroMessenger[2506] : -------MicroMessengerAppDelegate::didFinishLaunchingWithOptions in

其中,352321792就是當前的版本值。

對CUtility::GetVersion這個函數的返回值作修改,嘗試返回452321792(這個值是簡單地把最高位加1而來):

微信ios測試版本(突破微信強制升級機制)3

再次運行微信,低版本的限制消失了,看到這樣的界面:

微信ios測試版本(突破微信強制升級機制)4

身份驗證之後,進入到陳舊的5.0界面:

微信ios測試版本(突破微信強制升級機制)5

微信ios測試版本(突破微信強制升級機制)6

bundleID是一個APP的唯一标識,比如微信6.x版本的bundleID是這樣的:

微信ios測試版本(突破微信強制升級機制)7

因為微信6.x的bundleID與5.0版本的不一樣,這就意味着,同時安裝5.0版本與6.x版本的微信是可行的,比如小程就安裝了兩個(微信多開),運行起來的效果是這樣的(錄制時的幀率有點低,實際上是兩個APP在切換):

微信ios測試版本(突破微信強制升級機制)8

總結一下,通過classdump拿到類的信息,然後進行猜測與跟蹤注入,用socat觀察輸出,最終鎖定目标函數并完成注入修改,這個過程就是一般的hook過程。重點在于跟蹤與iOSOpenDev注入的使用。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved