逆向需求:實現評論功能,模擬不同的用戶評論.
開發環境:脫過殼的抖音IPA(Aweme.app), Xcode(安裝MonkeyDev), Hopper(解析執行文件), 導出抖音所有頭文件
1>運行MonkeyDev,查看抖音的層級結構,先找到評論的控制器?AWECommentListViewController
搜索頭文件,看看裏面有什麽有用的屬性,replyComment:這個可能是回復評論時候生成的模型,model:,listManager:可能是用來處理評論邏輯的,- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2:點擊發送評論,這個應該是關鍵方法,隨便發壹條評論,在該方法下壹個斷點,進行驗證
確實來到了這個方法,而且這個方法是由? AWECommentListInputView ?這個View來調起的,猜想這個View應該是文本輸入框的View,而且評論控制器實現了這個View的代理方法- (_Bool)commentInputViewShouldReturn:(id)arg1,代理方法裏面調用了評論控制器的- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2方法, 所以理論上我們可以手動調用這個方法,能實現發送評論,
2>在評論控制器添加壹個按鈕,按鈕的點擊事件設為- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2 這個方法,看是否能夠評論成功,
驗證評論可以發送成功,
3>繼續跟進方法調用,查看是哪個類來發送的評論請求,我們需要了解必須上送什麽參數,以及請求路徑. 打開Hopper 尋找突破口,搜索AWECommentListViewController userTappedSendWithContent,找到三個可疑的方法,點進去跟進
實現這三個方法,分別打入斷點,運行Xcode,當發送壹條評論時,會進到-sendCommentContent 這個方法,進到這個方法裏面,看到壹條有用信息
點進這個方法,發現壹個熟悉的味道?AWECommentListManager,方法是屬於它的,還記不記得在文章開始的那個listManager,就是它,驚不驚喜,還原成控制器的調用就是 [self.listManager?commentWithContent:?replyId:?replySubCommentID:?replySubCommentAuthorID:?extraInfo:?referString:?completion:], 順藤摸瓜,繼續往下走,最終跟進到+(void)commentAwemeItemWithID:(void *)arg2 content:(void *)arg3 replyCommentID:(void *)arg4 replySubCommentID:(void *)arg5 extraInfo:(void *)arg6 sticker:(void *)arg7 referString:(void *)arg8 completion:(void *)arg9 這個方法之後,就無法再跟進了;於是轉換思路,看看listManager裏面會不會調用其他方法,我的做法是將裏面的所有方法都打上斷點,來到了_cmd 對應的這個方法,看到了傳入的那個字典,aweme_id 是評論的id,就是妳當前刷的這條抖音,text是我評論的內容,"/aweme/v1/comment/publish/"是發送端口路徑.
在調試過程中,我發現評論完的請求發送完成之後,又會發壹個交易,通過
看到了壹個關鍵詞heartbeat,當我定在這個斷點,會發現評論會失敗,這應該是抖音的某種機制,這個心跳包如果不對,那麽妳的評論就會失效.
4>思路:(1).發送評論肯定得知道用戶的信息,比如userid,昵稱,頭像路徑,這樣才能區分是誰發的評論,找到這個"/webcast/room/live_room_id/?version_code=9.2.0&pass-region=0&pass-route=0&js_sdk_version=1.43.0.1&webcast_sdk_version=1330&app_name=aweme&vid=019C3DD5-08D3-49B6-AF5B-939154B6B148&app_version=9.2.0&language=zh-Hans-US&device_id=40613784883&channel=pp&mcc_mnc=46011&aid=1128&effect_sdk_version=5.8.0&screen_width=414&openudid=02a6db71a7ae780f226b95032b116da6852f13e8&webcast_language=zh&os_api=18&ac=WIFI&os_version=12.4.6&webcast_locale=zh-Hans_CN&device_platform=iphone&build_number=92013&iid=110910203440&device_type=iPhone%206%20Plus&idfa=25D32F6D-CBC3-42E9-9A7C-2D72277497D4", ? 它是壹個POST請求 請求參數 就是aweme_id=6812025407865425166&channel_id=0&text=%E4%BD%A0%E8%AF%B4%E7%9A%84%E5%AF%B9,這三個,接下來就得看請求頭裏面有沒有我們需要的信息,只有iid=110910203440這個參數比較可疑,
5>查看壹下評論的模型信息,點進個人主頁,查看userId的格式是怎麽樣的---待續...