Dump微信PC端的界面Duilib文件

Posted 万物归空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dump微信PC端的界面Duilib文件相关的知识,希望对你有一定的参考价值。

零、有啥用

网上大多数的微信逆向思路,是CE搜索数据得到地址,OD下访问断点,然后在堆栈里面大海捞针的找Call,效率太低了。

其实微信的界面是用Duilib做的,Duilib的界面布局写在XML文件。然后界面的消息处理,是通过控件名处理的。比如发送按钮,XML文件里面是"send_btn",代码里面是 if(xxx== “send_btn”)。利用这个特性,可以直接用字符串定位,省事很多。

一、资料

原版Duiib源码地址:https://github.com/duilib/duilib

二、界面创建流程

创建界面流程

窗口过程:CWindowWnd::__WndProc

消息处理函数:WindowImplBase::HandleMessage

处理创建窗口消息:WM_CREATE:    WindowImplBase::OnCreate

创建界面:CDialogBuilder::Create(加载界面) CDialogBuilder::Create(处理控件)

加载界面资源:CMarkup::Load CMarkup::LoadFromFile CMarkup::LoadFromMem

三、分析过程

1、切入点

WindowImplBase::OnCreate

MessageBox(NULL, _T(“加载资源文件失败”), _T(“Duilib”), MB_OK | MB_ICONERROR);

2、找偏移过程

IDA打开 WeChatWin.dll

搜索字符串 Duilib

参考源码备注

技术图片

调用偏移 080D8C0

builder.Create 偏移 0x08199EA

技术图片

F7进入,F8单步调试,发现乱码XML

技术图片

再F7进入,F8单步调试,两次MultiByteToWideChar就得到xml

技术图片

对应源码 这里是bool CMarkup::LoadFromMem

技术图片

四、偏移记录

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)TencentWeChatWeChatWin.dll

偏移 0FD7DC70 - 0F560000 =  81DC70?

五、Hook代码

以上是关于Dump微信PC端的界面Duilib文件的主要内容,如果未能解决你的问题,请参考以下文章

Windows逆向分析入门——实战篇(刷新二维码)

C++ UI资源

DUILIB 实现微信气泡聊天效果

网易 Duilib:功能全面的开源桌面 UI 开发框架

win10运行中出现duilib加载资源失败,又没啥影响,是啥原因啊~~

foxmail同步QQ邮箱里的所有文件夹