手把手教你做iOS逆向分析,突破微信的群發多選數量限制
前言
很久沒碰iOS開發了,最近都在web前端
持續輸出,加了很多推文群,每次群發文章的時候都要受到這個最多隻能選擇9個聊天的限制。
很不爽,好歹我也曾是一名iOS開發者呀,弄它~
必備軟體
- class-dump
class-dump是進行iOS逆向開發常用的一款工具,其主要作用是匯出App的標頭檔案內容。根據這些標頭檔案可以大致分析出APP的結構和內容
- MonkeyDev
MonkeyDev是一個極為方便的逆向除錯平臺,集眾家所長
一般來說我們要通過以下步驟,才可以在沒有原始碼的情況下,更改一個APP的功能。
而MonkeyDev
把紅框中的三步都封裝了,非常簡單暴li。我們站在MonkeyDev的肩膀上,只需要準備一個砸殼後的ipa
或者app
檔案即可,只需要去分析微信APP的標頭檔案,然後hook原方法即可。當然說起來很容易,我帶大家一起來看看這個過程
第一步:找到功能所在位置
首先根據MonkeyDev
的說明,把砸殼後的ipa
檔案放到TargetApp
目錄下
然後連線你的iOS裝置,點選執行。注意,只能執行到真機上
這時候如果你更改了bundleid
,那麼你就已經得到了一個可以多開的微信了。但我們不只是想要多開這麼簡單,我們還需要加強微信的一些能力。
等APP在手機上開啟後,我們就可以在XCode中使用debug view hierarchy
功能來除錯檢視
進入我們想要調查的轉發分享介面,然後開啟debug view hierarchy
,我們就可以把當前所在介面的檢視層次結構看得一清二楚
顯然在我開篇提到的需求中,我是想更改多選功能的,那麼我們選中多選按鈕,可以看到這個按鈕繫結的方法叫onMutilSelect
,該方法定義在SessionSelectController
這個類中
先記住這兩個資訊
- 函式名叫
onShowMutilSelct
- 所在類名叫
SessionSelectController
第二步:提取應用全部的標頭檔案
~~~shell class-dump -s -S -H /Users/ezshine/Work/Playgrounds/DKWechatHelper/dkhelper/dkhelper/TargetApp/WeChat.app -o ~/Downloads/wxheaders ~~~
安裝好class-dump
並使用上述命令將應用中所有的標頭檔案都提取出來
我們可以看到,微信App的實現用到了2.3w
個類,我們用sublime
開啟它,並且從已開啟的檔案及資料夾中搜索onMutilSelect
果不其然吧!被揪出來了!
在SessionSelectController
的標頭檔案中找到了onShowMutilSelect
方法的定義,我們先給它上個hook
,也就是當這個方法被執行時,不再執行原方法實現,而是執行我們自己的實現。
第三步:上鉤子改造它
在MonkeyDev
倉庫的Logos資料夾中,找到dkhelperDylib.xm
檔案,新增如下內容
~~~objective-c %hook SessionSelectController
-
(void)onShowMultiSelect:(id)arg1 { UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"我自己的彈窗" message:@"" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction action = [UIAlertAction actionWithTitle:@"你牛逼" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alert addAction:action]; [(UIViewController)self presentViewController:alert animated:true completion:nil]; }
%end ~~~
TADA!!!!完成,這個時候再點選多選
按鈕,竟然彈出了我們自己的彈窗。我們的實現替換掉了原來多選按鈕的功能!
結語
就這樣,我們魔改了微信的功能,把原本微信app中的功能替換成了我們自己的實現。似乎我們沒提到怎麼去掉多選限制呀?其實很簡單,如果你對iOS UIKit比較熟悉,就會知道,列表控制器實現的多選,每次選擇時會有一個回撥函式叫- (_Bool)onShouldSelectContact:(id)arg1
,這個函式是一個布林型別的返回值,也就是它決定了還能不能繼續選擇,我猜測9
這個數量判定也是在這個函式裡實現的,我們只需要替換掉它的實現,不對已選數量做判斷即可
~~~objective-c %hook SessionSelectController
- (_Bool)onShouldSelectContact:(id)arg1 { return YES; }
%end ~~~
這是我在掘金的第一篇iOS相關的文章,還希望大家多多點贊鼓勵
逆向所使用的github倉庫地址:https://github.com/DKJone/DKWechatHelper
我是大帥,一個老程式猿
推薦閱讀(感謝掘友的鼓勵與支援🌹🌹🌹) - 🎑提前祝大家中秋快樂,跟我一起做一個【中秋花燈許願】💖的網站吧 62贊 - 華為主動找我合作,我放棄了!前端實現拍照識別垃圾分類最簡單的方法! 71贊 - 產品經理:你能不能用div給我畫條龍? 2371贊 - 三種前端實現VR全景看房的方案!說不定哪天就用得上! 2641贊
- 2022,38歲,裸辭,自由職業一年實況分享
- 太強了!外國小哥花16個月用Three.JS打造了一個無縫切地圖的3D開車遊戲
- 細節狂魔,用 JavaScript 復原何同學B站頭圖的創意
- 碼上摸金,用PIXI GSAP仿寫vanmoof剎車動效 | 猿創營
- 在uni-app中使用微軟的文字轉語音服務
- 萬馬奔騰隊的phaser3 戰疫小遊戲開發歷程回顧
- 用uni-app開發一個名為漢兜的遊戲
- 淺談對貪食蛇遊戲的一點微創新
- 手把手教你做iOS逆向分析,突破微信的群發多選數量限制
- 產品經理:你能不能用div給我畫條龍?
- 這個榜單我不服!終究還是錯付了這個綠茶掘金
- 前端摸魚神器,設計稿一鍵匯出 「小程式/Vue/Uni-app」程式碼
- 請收下這份原始碼,用Vue開發的一個“螞蟻森林澆水偷菜”遊戲
- 微信小程式統一分享,全域性接管頁面分享訊息的一些技巧
- 這45道面試可能被問到的JS判斷題!你能答對幾道?
- CSS邊玩邊學,這五個遊戲讓你對CSS的掌握更進一步!
- Web網站掃【小程式碼】登入的技術實現!記得收藏,要用時別找不到!
- 獻給所有技術內容創作者~猿創聚合助手小程式開發難點解析
- 花60秒給Vue3提的PR,竟然被尤大親自Merge了~
- 使用Vue開發“螞蟻森林澆水偷菜”遊戲的心得體會