Dump微信PC端的界面Duilib文件

零、有啥用

網上大多數的微信逆向思路,是CE搜索數據獲得地址,OD下訪問斷點,而後在堆棧裏面大海撈針的找Call,效率過低了。git

其實微信的界面是用Duilib作的,Duilib的界面佈局寫在XML文件。而後界面的消息處理,是經過控件名處理的。好比發送按鈕,XML文件裏面是"send_btn",代碼裏面是 if(xxx== 「send_btn」)。利用這個特性,能夠直接用字符串定位,省事不少。github

1、資料

原版Duiib源碼地址:https://github.com/duilib/duilib微信

2、界面建立流程

建立界面流程函數

窗口過程:CWindowWnd::__WndProc佈局

消息處理函數:WindowImplBase::HandleMessageui

處理建立窗口消息:WM_CREATE:    WindowImplBase::OnCreatespa

建立界面:CDialogBuilder::Create(加載界面) CDialogBuilder::Create(處理控件)調試

加載界面資源:CMarkup::Load CMarkup::LoadFromFile CMarkup::LoadFromMemorm

3、分析過程

一、切入點

WindowImplBase::OnCreate

MessageBox(NULL, _T(「加載資源文件失敗」), _T(「Duilib」), MB_OK | MB_ICONERROR);

二、找偏移過程

IDA打開 WeChatWin.dll

搜索字符串 Duilib

參考源碼備註

圖片

調用偏移 080D8C0

builder.Create 偏移 0x08199EA

圖片

F7進入,F8單步調試,發現亂碼XML

圖片

再F7進入,F8單步調試,兩次MultiByteToWideChar就獲得xml

圖片

對應源碼 這裏是bool CMarkup::LoadFromMem

圖片

4、偏移記錄

0FD7DC62    53              push ebx

0FD7DC63    6A 00           push 0x0

0FD7DC65    68 E9FD0000     push 0xFDE9

0FD7DC6A    FF15 B4A47510   call dword ptr ds:[<&KERNEL32.MultiByteT>; kernel32.MultiByteToWideChar

0FD7DC70    8B5D FC         mov ebx,dword ptr ss:[ebp-0x4]

0FD7DC73    33C9            xor ecx,ecx

Executable modules, item 6

Base=0F560000

Size=018A2000 (25829376.)

Entry=1023AA01 WeChatWi.

Name=WeChatWi

File version=2.8.0.121

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

偏移 0FD7DC70 - 0F560000 =  81DC70‬

5、Hook代碼

相關文章
相關標籤/搜索