首页
社区
课程
招聘
[原创]2025企业微信4.1.36.6011调试Duilib获取界面XML
发表于: 2025-4-12 13:21 3095

[原创]2025企业微信4.1.36.6011调试Duilib获取界面XML

2025-4-12 13:21
3095

起因: 最近公司某个项目 需要根据用户在群里的聊天 处理OA工单状态 所以需要获取聊天数据 然后老板又不想花钱买聊天存档 所以只能让技术部做一个可以拦截企业微信聊天内容的插件 第一步 当然是解决登录问题 那就是获取登录二维码

然后我一个Java开发 开始学习逆向了 网上大部分都是 微信相关的教程 企业微信的很少 看到大佬的一篇文章[原创]Dump微信PC端的界面Duilib文件 就尝试在企业微信里面拦截试试

怎么学习 怎么踩坑的 暂时没时间写了 先直接上主要流程吧

企业微信的 duilib 是直接单独一个 dll 不是像微信一样打包在 WeChatWin.dll 里面的
企业微信的 XML 是存在 WxWorkResources.dll 里面的

打开 企业微信 用 x32dbg 附加上 根据大佬的文章 找到微信修改过的 Duilib 代码
Utils/WinImplBase.cpp

回到 x32dbg 找到 duilib.dll 模块 然后在当前模块搜索字符串
图片描述
右键 转到反汇编
图片描述
可以看到 这里反汇编的代码 和 Github 上面的代码并不是一致的 但是大致逻辑差不多
往上几行反汇编代码 可以看到

由于连C++都没怎么写过 所以只能根据 Java 的经验猜测 这是一个 类的方法
看到上面有一行 lea ecx,dword ptr ss:[ebp-1A8] 尝试在这里下了断点(老手应该看出来 这个是 this 指针(应该) 但是刚开始我反汇编都没咋学过 所以不知道)
下了断点之后重新启动一下微信

运行之后 在断点处停下来了 然后 F7 执行一下 lea 指令
图片描述
可以看到 ECX 是一个地址 然后跳到这个地址
然后用 看到有 xml 我就尝试换了一个编码加载 最后 UTF-16 可以加载出来
选中数据 Ctrl+E 切换到字符串界面
图片描述
然后我尝试复制内容出来 结果 出现问题了 怎么都没办法复制内容出来
一开始我还以为是远程桌面的问题 后来发现 如果我只是选择中间几个单词 可以复制
大概这样子 蓝色是我复制的内容 记事本是我黏贴的内容
图片描述
然后在这里卡了很久 因为有别的工作要做 所以暂时摆烂了

之后每天晚上到家 我就开始去B站看汇编和C++的基础教程 大概花了一周左右 期间也是一直卡在这里
偶然间还发现了这个看雪知识库
把可能用到的知识都看了看 然后我们回到上次那个位置 根据这几天学习的内容
我大概知道了 ecx 可能是一个 对象的 this 指针
那么上面应该有创建对象的相关内容 或者加载这个对象的内容
图片描述
然后就发现了一个 XML 的文件名称 login\wechat_login.xml
往下几行看到了一个 感觉应该是 CDialogBuilder 的构造函数

图片描述
高亮了一下 ecx 感觉应该是同一个对象
于是就在这里打了断点 然后进入调试
图片描述
里面发了一个疑似加载XML的方法

执行到这里之后看了看堆栈和寄存器 发现就一个名称没有其他的数据 于是 F7 进入这个方法
图片描述
根据反汇编的代码 看到一个 LoadContent 应该是加载XML的 下断点

执行到断点之后 发现在右侧 有 XML 内容 地址是 0019ED08
图片描述

对比了一下地址 发现就是 EAX 存的指针
在 x64dbg 命令那边 执行一下 log {utf16@[eax]}
图片描述
感觉是读取出来了 切换到日志页面看看
图片描述
看起来像是正常的 XML 内容
右键 EAX 寄存器 跳转到内存窗口
图片描述
然后在内存窗口 把内存窗口2转到这个地址
图片描述
切换展示格式 文本->代码页 选择 UTF16
图片描述
然后选择XML的内容 右键 二进制编辑->编辑
图片描述
这个时候 发现这里的内容可以正常被复制出来了
图片描述

经过上面的折腾 断点处拦截手动获取 XML 没问题了
但是会发现 刚启动的时候加载了很多 style/****.xml 的样式文件
这些文件不需要 所以 利用 x64dbg 的条件断点功能
往上几行 在call 了字符串处理的函数后 下条件断点 strstr(utf16([esp+4]),"login")
图片描述
然后重复3里面的步骤 就可以手动把登录界面的XML都保存下来了(技术有限 还没学会怎么用代码拦截保存 希望大佬们可以指导一下)
图片描述

CControlUI* pRoot = NULL;
if (GetResourceType() == UILIB_RESOURCE)
{
    STRINGorID xml(_ttoi(GetSkinFile().GetData()));
    pRoot = builder.Create(xml, _T("xml"), this, &m_pm);
}
else {
    pRoot = builder.Create(GetSkinFile().GetData(), (UINT)0, this, &m_pm);
}
ASSERT(pRoot);
if (pRoot == NULL)
{
    MessageBox(NULL, _T("加载资源文件失败"), _T("Duilib"), MB_OK | MB_ICONERROR);
    ExitProcess(1);
    return 0;
}
m_pm.AttachDialog(pRoot);
// 添加Notify事件接口
m_pm.AddNotifier(this);
CControlUI* pRoot = NULL;
if (GetResourceType() == UILIB_RESOURCE)
{
    STRINGorID xml(_ttoi(GetSkinFile().GetData()));
    pRoot = builder.Create(xml, _T("xml"), this, &m_pm);
}
else {
    pRoot = builder.Create(GetSkinFile().GetData(), (UINT)0, this, &m_pm);
}

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2025-4-14 13:21 被MiaoWoo编辑 ,原因:
收藏
免费 28
支持
分享
最新回复 (21)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2

感谢你的积极参与,期待更多精彩内容!
2025-4-22 13:58
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
m
2025-4-24 16:54
0
雪    币: 2779
活跃值: (4483)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
4
牛批
2025-4-30 14:32
0
雪    币: 67
活跃值: (1996)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享
2025-5-4 16:49
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
谢谢分享
2025-5-4 17:33
0
雪    币: 370
活跃值: (1525)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢分享
2025-5-8 18:49
0
雪    币: 193
活跃值: (892)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
1
2025-5-13 10:16
0
雪    币: 31
活跃值: (730)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
围观中
2025-5-13 13:31
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
1
2025-5-13 20:34
0
雪    币: 208
活跃值: (1282)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
11
最近都在搞企微逆向了吗?我也搞了些功能
2025-5-15 11:30
0
雪    币: 4257
活跃值: (2680)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
学习了 
2025-6-5 19:32
0
雪    币: 135
活跃值: (2561)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习
2025-6-5 19:36
0
雪    币: 21
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了 
2025-6-7 14:13
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
好的
2025-6-10 18:43
0
雪    币: 5903
活跃值: (2699)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢分享!
6天前
0
雪    币: 6243
活跃值: (4382)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢分享!
6天前
0
雪    币: 0
活跃值: (206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢分享
6天前
0
雪    币: 8944
活跃值: (4220)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
感谢分享
6天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
感谢分享
6天前
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
感谢
4天前
0
雪    币: 5248
活跃值: (3329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
666
4天前
0
游客
登录 | 注册 方可回帖
返回