PC微信逆向:分析发送xml名片call
文章目錄
- 微信版本
- 定位發送xml名片call
- 發送xml名片call的切入點
- 定位選擇聯系人的call
- 定位發送xml名片的call
- 定位接收者的微信ID
- 定位發送xml名片的call
- 驗證發送xml名片的call
- 方法擴展
微信版本
定位發送xml名片call
發送xml名片call的切入點
在發送xml名片時,需要先選擇一個對象,我們首先要找的是選擇的call。找到了選擇的call,就能確定要發送的對象的微信ID的地址了。有了要發送對象的微信ID的地址之后就能下一個內存訪問斷點,通過棧回溯找到發送xml名片的call
定位選擇聯系人的call
那么如何定位到選擇聯系人的call呢?
可以通過上面的字符串的區別從而定位到字符串的位置,然后下內存寫入斷點,再定位到選擇的call
在CE中搜索已選擇了1個聯系人,找到存放字符串的地址
變化選擇的聯系人,最終確定字符串的地址,接著在OD中對這個地址下內存寫入斷點
然后在微信選擇一個聯系人,程序斷下。此時刪除斷點。既然要找選擇聯系人的call,那么這個call里面必定有一個參數是當前選中的微信ID,根據這個線索,我們在堆棧中找一個帶有微信ID的返回地址
反匯編窗口跟隨,這個call就是選擇聯系人的call
定位發送xml名片的call
定位接收者的微信ID
接著我們在選擇聯系人的call下斷,在微信中選擇文件助手,讓程序斷下
此時堆棧的參數中有選中的微信ID,我們只要通過對這個微信ID下內存訪問斷點,棧回溯分析,就能找到發送xml名片的call。
但是,這個ID我們是不能用的,因為它被當作一個參數傳入函數中,這個微信ID是個局部變量,只要函數一結束,微信ID會自動銷毀。所以我們需要找到函數調用后被賦值為微信ID的變量地址,然后對這個微信ID的地址下內存訪問斷點
我們首先在CE中添加這個地址
接著將這個微信ID修改為一個比較獨特的值,然后F8步過這個函數
搜索修改之后的微信ID,此時多了1個地址。這個多出來的1個地址就是我們所需要的。如果多出來兩個地址,可以直接按F9讓程序運行,此時地址只剩下一個。
定位發送xml名片的call
對找到的微信ID的地址下內存訪問斷點,F9運行程序
點擊發送,此時程序斷下,分析附近堆棧
在堆棧的地址中找到一個參數,里面有微信ID,那么這個很有可能就是我們需要的call。在這個地方下斷點
程序斷下,此時eax為微信ID,ecx為空。那么這個不是我們需要的call,繼續F8單步往下走
此時我們看到這個call將ForwardShareCard這個字符串傳入了堆棧,這個英文的意思是轉發分享名片,那么可以猜測這個函數應該和發送xml名片的call有關系。繼續往下單步
這里有個call eax,此時ecx指向我們分享的名片的微信ID,那么這個函數應該和發送xml名片是有關系的,我們F7進入函數。
一直單步到這里我們找到了一個call,此時eax指向一個xml的數據
edx指向接收者的微信ID,那么這個call就非常有可能是我們要找的發送名片的call
驗證發送xml名片的call
那么怎么驗證呢?我們修改接收者的微信ID,讓原本發送給文件助手的xml名片發給好友,如果xml名片發給了微信好友,那么可以證明這個就是我們要的發送xml名片的call
方法擴展
依次類推,這種方法可以定位大多數的微信功能的call,只要是帶有這種選擇框的call,都可以通過這種方法,先找到選擇的函數,然后再通過微信接收者的ID,下內存訪問斷點,棧回溯分析附近代碼找到所需要的call
目前微信機器人的成品已經發布,需要代碼請移步Github。還請親們幫忙點個star
https://github.com/TonyChen56/WeChatRobot
總結
以上是生活随笔為你收集整理的PC微信逆向:分析发送xml名片call的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PC微信逆向:分析@群成员call
- 下一篇: PC微信逆向:分析微信发送文件call