手把手教你做iOS逆向分析,突破微信的群發多選數量限制

語言: CN / TW / HK

前言

很久沒碰iOS開發了,最近都在web前端持續輸出,加了很多推文群,每次群發文章的時候都要受到這個最多隻能選擇9個聊天的限制。

image.png

很不爽,好歹我也曾是一名iOS開發者呀,弄它~

image.png

必備軟體

  • class-dump

class-dump是進行iOS逆向開發常用的一款工具,其主要作用是匯出App的標頭檔案內容。根據這些標頭檔案可以大致分析出APP的結構和內容

  • MonkeyDev

MonkeyDev是一個極為方便的逆向除錯平臺,集眾家所長

一般來說我們要通過以下步驟,才可以在沒有原始碼的情況下,更改一個APP的功能。

image.png

MonkeyDev把紅框中的三步都封裝了,非常簡單暴li。我們站在MonkeyDev的肩膀上,只需要準備一個砸殼後的ipa或者app檔案即可,只需要去分析微信APP的標頭檔案,然後hook原方法即可。當然說起來很容易,我帶大家一起來看看這個過程

第一步:找到功能所在位置

首先根據MonkeyDev的說明,把砸殼後的ipa檔案放到TargetApp目錄下

image.png

然後連線你的iOS裝置,點選執行。注意,只能執行到真機上

image.png

這時候如果你更改了bundleid,那麼你就已經得到了一個可以多開的微信了。但我們不只是想要多開這麼簡單,我們還需要加強微信的一些能力。

等APP在手機上開啟後,我們就可以在XCode中使用debug view hierarchy功能來除錯檢視

image.png

進入我們想要調查的轉發分享介面,然後開啟debug view hierarchy,我們就可以把當前所在介面的檢視層次結構看得一清二楚

image.png

顯然在我開篇提到的需求中,我是想更改多選功能的,那麼我們選中多選按鈕,可以看到這個按鈕繫結的方法叫onMutilSelect,該方法定義在SessionSelectController這個類中 image.png

先記住這兩個資訊

  • 函式名叫onShowMutilSelct
  • 所在類名叫SessionSelectController

第二步:提取應用全部的標頭檔案

~~~shell class-dump -s -S -H /Users/ezshine/Work/Playgrounds/DKWechatHelper/dkhelper/dkhelper/TargetApp/WeChat.app -o ~/Downloads/wxheaders ~~~

安裝好class-dump並使用上述命令將應用中所有的標頭檔案都提取出來

image.png

我們可以看到,微信App的實現用到了2.3w個類,我們用sublime開啟它,並且從已開啟的檔案及資料夾中搜索onMutilSelect

image.png

果不其然吧!被揪出來了!

SessionSelectController的標頭檔案中找到了onShowMutilSelect方法的定義,我們先給它上個hook,也就是當這個方法被執行時,不再執行原方法實現,而是執行我們自己的實現。

第三步:上鉤子改造它

image.png

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!!!!完成,這個時候再點選多選按鈕,竟然彈出了我們自己的彈窗。我們的實現替換掉了原來多選按鈕的功能!

2021-09-09 22_10_17.gif

結語

就這樣,我們魔改了微信的功能,把原本微信app中的功能替換成了我們自己的實現。似乎我們沒提到怎麼去掉多選限制呀?其實很簡單,如果你對iOS UIKit比較熟悉,就會知道,列表控制器實現的多選,每次選擇時會有一個回撥函式叫- (_Bool)onShouldSelectContact:(id)arg1,這個函式是一個布林型別的返回值,也就是它決定了還能不能繼續選擇,我猜測9這個數量判定也是在這個函式裡實現的,我們只需要替換掉它的實現,不對已選數量做判斷即可

~~~objective-c %hook SessionSelectController

  • (_Bool)onShouldSelectContact:(id)arg1 { return YES; }

%end ~~~

image.png

這是我在掘金的第一篇iOS相關的文章,還希望大家多多點贊鼓勵

逆向所使用的github倉庫地址:http://github.com/DKJone/DKWechatHelper

我是大帥,一個老程式猿


推薦閱讀(感謝掘友的鼓勵與支援🌹🌹🌹) - 🎑提前祝大家中秋快樂,跟我一起做一個【中秋花燈許願】💖的網站吧 62贊 - 華為主動找我合作,我放棄了!前端實現拍照識別垃圾分類最簡單的方法! 71贊 - 產品經理:你能不能用div給我畫條龍? 2371贊 - 三種前端實現VR全景看房的方案!說不定哪天就用得上! 2641贊