PC微信逆向分析——內存直接讀取通訊錄

前言

  聊下函數的調用關係是分叉的,應該怎麼分析。目的是內存直接讀取通訊錄。

分析

  1.   通訊錄,是數據。
  2.   全局數據直接讀取,局部數據間接攔截。
  3.   通訊錄要經常用到,寫成全局數據,方便讀取。
  4.   看著和個人信息一樣,是全局數據,內存裡直接搜索。
  5.   但用什麼搜索呢?並沒有一個明確的數據可以代表通訊錄。
  6.   一般說,通訊錄裡面有很多好友信息,要獲取某個好友信息,在裡面搜索。
  7.   也就是說,通訊錄可以是一個數組,鏈表,或者一棵樹,而這個集合的開頭寫成全局數據。

切入點

  從獲取某個好友的信息入手。

  要獲取某個好友信息,得在通訊錄裡面搜索。

  順藤摸瓜,知道獲取單個人的信息,就知道通訊錄的了。

  依然是從日誌入手,看下有什麼線索。

日誌

  和上一篇一樣,注入打開日誌模塊的插件,點擊通訊錄某個好友,看看日誌有什麼。

  有一個字符串:NetSceneBatchGetContact,表示通過網絡獲取聯繫人的信息。

  對字符串進行下斷點:NetSceneBatchGetContact

PC微信逆向分析——內存直接讀取通訊錄

  點擊通訊錄某個好友的頭像,觸發到斷點

PC微信逆向分析——內存直接讀取通訊錄

  堆棧往下翻,發現這裡已經有好友的多個信息

PC微信逆向分析——內存直接讀取通訊錄

  已經有信息,還需要網絡獲取,意味著本地存儲了一些基本信息,然後還需要去網絡獲取。

  可以猜測,WX獲取好友信息的函數大概是

    獲取好友信息(參數:好友ID)

      調用函數:獲取好友本地信息

      如果消息不全

        調用函數:通過網絡獲取

  而我們現在斷點到的是:通過網絡獲取,要找的函數是:獲取好友本地信息。也就是遇到的是分叉情況,獲取好友本地信息這個函數不在堆棧裡面。

  所以要回到分叉點,也就是已經有基本信息的函數里面,從函數頭開始分析。

分析

  1、返回分叉的地方(已經有好友的基本信息)

PC微信逆向分析——內存直接讀取通訊錄

  2、往上翻翻代碼,到函數的頭部,定下斷點

PC微信逆向分析——內存直接讀取通訊錄

  前兩個函數都沒有wxid,直到第三個才有

PC微信逆向分析——內存直接讀取通訊錄

  但這個函數里面只是對數據處理,沒有調用別的函數,排除掉

PC微信逆向分析——內存直接讀取通訊錄

  接下來的兩個函數和剛才的一樣,也排除掉

PC微信逆向分析——內存直接讀取通訊錄

  接下來的函數還是沒有微信ID,到了第二個才有。

PC微信逆向分析——內存直接讀取通訊錄

  3、F7進入函數,F8單步執行,到這個函數,才有微信ID

PC微信逆向分析——內存直接讀取通訊錄

  函數里面是拿到一個寫死的全局變量 0x10995060

PC微信逆向分析——內存直接讀取通訊錄

  執行結果eax,又給下一個函數使用:mov ecx,eax

PC微信逆向分析——內存直接讀取通訊錄

  4、跟蹤進去下一個函數,裡面有很多字符串和jnz,這裡應該是對微信ID的過濾

  跳過字符串,到這個函數又有微信ID,但執行完這個函數,只是把微信ID傳入堆棧。

PC微信逆向分析——內存直接讀取通訊錄

  5、繼續F7進入下一個的函數,到這裡又有微信ID

PC微信逆向分析——內存直接讀取通訊錄

  6、再進入這個函數,注意這裡有個je是向上的,意味著是一個循環

PC微信逆向分析——內存直接讀取通訊錄

  單步進行分析,確實是在對通訊錄進行遍歷,並且通訊錄是一個先序排列的二叉樹。

PC微信逆向分析——內存直接讀取通訊錄

  在前面有一個全局變量,跟蹤這個數據的傳遞過程

  (中間重啟過,基址變了,全局變量不一樣)

  5A279D03 A1 6050615B mov eax,dword ptr ds:[0x5B615060]

  5A279D08 83C0 28 add eax,0x28

  5A22E5FD 8BC8 mov ecx,eax

  5A4026AB 8BD9 mov ebx,ecx

  5A40276C 8BCB mov ecx,ebx

  5A400E87 8BF1 mov esi,ecx

  5A400EAE 8D9E 84000000 lea ebx,dword ptr ds:[esi+0x84]

  5A400EB5 8BCB mov ecx,ebx

  59FB2584 8B19 mov ebx,dword ptr ds:[ecx] ; WeChatWi.5B3B4994

  59FB2587 8B73 04 mov esi,dword ptr ds:[ebx+0x4]

  通訊錄第一個節點 = [[[0x5B615060] + 0x28+0x84]+0x4]

  左節點:mov esi,dword ptr ds:[esi]

  右節點:mov esi,dword ptr ds:[esi+0x8]

  節點是否有效:cmp byte ptr ds:[esi+0xD],0x0

算偏移

  基址:59F60000

    Executable modules, 條目 7

    基址=59F60000

    大小=01946000 (26501120.)

    入口=5ACB4A63 WeChatWi.

    名稱=WeChatWi

    文件版本=2.9.0.123

    路徑=C:\Program Files (x86)\Tencent\WeChat\WeChatWin.dll

  偏移 = 內存地址 - 基址

    通訊錄偏移:5B615060 - 59F60000 = 16B5060

代碼

PC微信逆向分析——內存直接讀取通訊錄

PC微信逆向分析——內存直接讀取通訊錄

PC微信逆向分析——內存直接讀取通訊錄

最新版本2.9.5.41的偏移量,請私信我


原文地址:https://www.cnblogs.com/wwgk/p/13199553.html


分享到:


相關文章: