逆向微信Mac客户端:微信情话助手初版
前言
上一篇文章《用了這個,我追到了自己的女神:Mac版QQ半自動發送情話》 發布后,有幾個朋友私信問說QQ過時了女神不用了,能不能整個微信的?有別的大神已經開發了微信網頁版的自動發消息,可以登錄網頁版微信的朋友可以去試一試把發送部分改掉就可以了,我因為不能登錄網頁版微信所以用不了,今天來嘗試用逆向Mac微信解決一下這個問題。
最新版的插件直接看這篇文章逆向Mac版微信-情話助手終版(女神邀請我恰飯了~)
最新版的插件直接看這篇文章逆向Mac版微信-情話助手終版(女神邀請我恰飯了~)
最新版的插件直接看這篇文章逆向Mac版微信-情話助手終版(女神邀請我恰飯了~)
想學習逆向過程的可以往下看
開始
工具
- Xcode(蘋果開發工具)
- IDA (逆向神器,反編譯工具 )
- Class-dump (導出可執行文件的Class Header)
過程
1.Dump 出頭文件
首先利用Class-Dump拿到微信的頭文件
打開終端執行:
執行之后就能獲取到很多頭文件了
英文好的都知道消息是Message,我就搜索一下,直接就找到了一個MessageService文件。
打開發現,發送消息的方法是在這個文件
有發送文本,發送定位,發送GIF等等方法,我們使用發送文本的方法就可以了。
2.反編譯
選擇微信APP文件,右鍵顯示包內容,找到圖中二進制可執行文件
扔Hopper Disassembler里邊開始反編譯,在漫長的等待后得到編譯結果。
配合第一步中的頭文件一頓常規查找分析之后,得到以下幾個方法:
- 登錄按鈕事件: MMLoginOneClickViewController 中的
-(void)onLoginButtonClicked:(id)arg1; - 授權狀態查詢 WeChat 下的
-(BOOL)IsAuthOK; - 服務層處理中心-獲取消息服務 : MMServiceCenter中的
-(id)getService:(Class)arg1; - 發送信息服務: MessageService中的
-(id)SendTextMessage:(id)arg1 toUsrName:(id)arg2 msgText (id)arg3 atUserList:(id)arg4;
3.hook 微信
注入Mac App 的步驟和注入iOS步驟差不多,會iOS的可以直接跳下去看最后的Hook代碼。
FQHelper.h
內容如下:
FQHelper.m
內容如下:
hook 代碼
原理就是:替換登錄按鈕事件,點擊登錄按鈕事件之后,每5秒查詢一次授權狀態,授權成功的時候發送消息
Wechat+hook.h
Wechat+hook.m
#import "Wechat+hook.h" #import "WeChatHeader.h" #import "FQHelper.h" #import <CommonCrypto/CommonDigest.h> #import <AppKit/AppKit.h> #import <objc/runtime.h>@implementation NSObject (WeChatHook) + (void)hookWeChat{hookMethod(objc_getClass("MMLoginOneClickViewController"), @selector(onLoginButtonClicked:), [self class], @selector(hook_onLoginButtonClicked:));} - (void)hook_onLoginButtonClicked:(NSButton *)btn {NSLog(@"點擊了登錄按鈕");[self hook_onLoginButtonClicked:btn];[self getAuthState]; }- (void)getAuthState{WeChat *wechat = [objc_getClass("WeChat") sharedInstance];if ([wechat IsAuthOK]) {NSLog(@"授權成功");dispatch_async(dispatch_get_main_queue(), ^{// 獲取發送用戶NSString *currentUserName = [objc_getClass("CUtility") GetCurrentUserName];// 獲取發送消息服務MessageService *service = [[objc_getClass("MMServiceCenter") defaultCenter] getService:objc_getClass("MessageService")];NSPasteboard *pb = [NSPasteboard generalPasteboard];if ([[pb types] containsObject:NSPasteboardTypeString]) {NSString *s = [pb stringForType:NSPasteboardTypeString];// do something[service SendTextMessage:currentUserName toUsrName:@"你女神的微信號" msgText:s atUserList:nil];}});}else{NSLog(@"授權失敗");dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{dispatch_async(dispatch_get_main_queue(), ^{[self getAuthState];});});} } @end在xcode的targets->BuildPhases里添加一個腳本。
腳本內容:
定義好目標app的路徑,備份好原有二進制文件。將編譯好的framework文件拷貝到目標app目錄,用insert_dylib這個工具進行注入。insert_dylib工具我放在demo項目根目錄中
7.編輯schema的excutable,選擇應用程序里的微信
8.運行程序,測試一下。
登錄微信后,立即發送成功。運行一次后,已經注入成功,以后打開微信都會發送,剪貼板第一條信息。
使用教程
使用教程大致和QQ差不多,請參考上一篇文章《用了這個,我追到了自己的女神:Mac版QQ半自動發送情話》,執行過程:開機自動啟動情話執行腳本.app->執行python獲取一句情話并啟動微信->點擊微信登錄按鈕后->遍歷查詢是否登錄完成->登錄完成發送情話
按照上一篇文章步驟,以下只敘述修改點。
結束語
因為是自動發送,爬取完情話最好自己先看一遍,把不合適的話刪掉,不然小心女神拉黑你。
看完的朋友麻煩點個關注,點個贊,需要的朋友可以點個收藏。這個教程感覺還是寫的麻煩了,寫的過程也有了點新的想法,回邊再研究研究看看能不能把教程再精簡一下,下一篇出一個使用方法更簡單的終極版插件。
如有問題可留言解決。
總結
以上是生活随笔為你收集整理的逆向微信Mac客户端:微信情话助手初版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android模拟器转方向,androi
- 下一篇: 一探B站后台架构, 他山之石, 何以攻玉