最近公司有個需求,在抖音裏如何宣傳本身的網站,而且不要有攔截域名的提示,截圖以下。web
經過ida反編譯抖音的app後,將下載後的ipa文件用解壓縮軟件(如7zip等)解壓,從解壓後的目錄Payload/Aweme.app/找到Aweme可執行文件,拖入ida進行反編譯,ida能夠檢測objective-c語法。
而後進入主題,既然是聊天發消息,就嘗試在ida裏搜索"message",看看可否找到對應的類或函數。
這裏找到了messageBaseViewController,發現一個名爲didSendContent: 的函數,根據名字能夠大概推斷出這應是發送消息的入口,此函數又調用了checkAndSendMessage,
應該是發送前的檢查操做,如消息長度等,重點關注回調block,獲得objective-c
能夠看到im消息是走的google的protobuf協議(不熟悉的能夠找相關資料瞭解一下,就是一個序列化協議),發送消息的protobuf
消息結構大體以下圖,消息內容,類型等參數都是設置在TIMPBNSendMessageRequestBody裏。而後要作的就是找到上述幾個結構是什麼樣的,這裏咱們能夠經過逆向出抖音代碼的頭文件進行查看。
使用class-dump工具(使用方法請自行查找)從第1步中的可執行文件中dump出頭文件。
這裏貼出來,構建protobuf消息體只須要將頭文件中的字段聯繫起來就行。算法
總結一下:抖音聊天消息發送過程就是:
第一步:調用cloud/token接口獲取im token
第二步:登陸im服務,登陸過程參考【7】的調用鏈
第三步:構建建立對話protobuf,建立對話
第四步:使用獲取到的對話信息,構建發送消息protobuf,發送消息api
就能夠直接生成出短域名鏈接了。app
消息發送這塊主要是找到消息體的構建方法,自己不涉及複雜的算法,只有發送post中才會用到通用算法as/mas、x-gorgon、x-ss-stub等,
這些算法有時間,能夠整理一下源碼(純c源碼),另外看到論壇上已經有朋友分享了用過hook 方式搭建webServer方式來調用app 內部api
來進行加密,也是很巧妙、省時省力的方式。函數