目录
微信界面分析
微信版本:3.9.0.28
下载链接:链接:https://pan.baidu.com/s/1eUR9hoaJ8o_NMRybJ-MYpA?pwd=iofu
提取码:iofuduilib:链接:https://pan.baidu.com/s/1_cuB7e2bBbIZrKexfmKBag?pwd=qx7x
提取码:qx7x一、缘由
微信的白色背景页面实在是对像笔者这样眼睛不太好的用户不太友好,所以就有自己给他改改界面的打算,就改个颜色,应该不会太麻烦,所以就写了这篇文章记录一下过程。受限于笔者水平以及时间问题,这篇文章最终没有实现目的,但是理论上文章中所讲方法是可以实现的,并可以提取大部分微信界面UI布局,并且对其他功能的分析也有帮助。笔者将在文中给出使用frida进行简单内存dump的方式获取xml以及静态解密的方式拿到XML
二、一些已掌握的信息
- 微信界面使用了Duilib库
- Duilib<font color=red>实现了从XML中加载页面布局</font>的能力
- 本质上是<font color=red>封装了一层MFC</font>并自写了解析器来完成相关布局设置
- 微信的主要功能模块是WeChatWIn.dll
比较笼统的资料即以上四点,这对我们帮助还是比较多的:
- Duilib库是开源的,官方已经停止了对Duilib的维护,现在的版本基本上都是由个人维护的
- Duilib从XML中加载布局,这给了我们很好的着手点,我们可以试着找到XML文件对其更改来达到更改背景颜色的目的
- 本质是一层MFC封装,那么免不了从资源中加载文件,会不会它吧XML文件放到rc里的呢?
- 我们的主要分析应该是在WeChatWIn中进行。
三、准备冻手
1)搞一下源码
微信团队之前开源过Duilib的源码,但是现在Github上应该是找不到了,笔者这里有一份,出于学习的目的需要请联系笔者。拿到源码后笔者简单看了一下,对比官方原来来说改动不算太大。
2)资源加载方式
因为我们的关注点是微信是从哪里获取XML资源的,所以我们需要大致了解一下Duilib的资源加载方式,微信之前开源的Duilib中有四种资源加载方式:
1
2
3
4
5
6
7
enum UILIB_RESTYPE
{
UILIB_FILE
=
1
,
/
/
来自磁盘文件
UILIB_ZIP,
/
/
来自磁盘
zip
压缩包
UILIB_RESOURCE,
/
/
来自资源
UILIB_ZIPRESOURCE,
/
/
来自资源的
zip
压缩包
};
从磁盘上以及从ZIP中加载资源基本上是不可能的,我们在微信的根目录里没有发现相关信息,保险一点,我们通过火绒剑来监控一下文件操作,防止搞错方向。
我们只关注文件操作,设置好相关过滤后,我们记录微信启动完成的相关信息,搜索关键字“.xml”,”zip”,,没有发现什么有用的信息,但是在我们搜索“Resource”时,我们留意到
微信加载了这两个非常可疑的dll,我们索性用Resource Hacker看看里面有什么
首先WeChatResource.dll里面有一些较为简单的资源以及一个不明所以的奇怪资源,资源类型为WXZ,如下图:
WeUIResource.dll中同样含有此种资源类型,如下图:
其中,在其十六进制流中我们可以看到有PNG格式文件头如下
我们在010Editor中进行简单的提取
可以看到其中确实隐藏着png图片,但是我们没有发现xml的影子,应该是有加密的(不然也不会有这篇文章)
我们留意资源的类型为wxz
,尝试在IDA中搜索相关字符串,并查找相关引用,如下图
可以看到加载了这种资源,但是如果从这里分析的话并不优雅,一般资源的加载是在初始化过程中,从这里跟下去不一定能找到解密点。
比较幸运的是我们有源码,我们可以试着从源码中找到一个xml文件明文出现的位置(对xml文件进行解析渲染,一定在某一个时刻会出现xml文件的明文信息),找到明文出现的位置逆向回溯找出密文解密点应该是比正着死磕分析要简单一点。
3)从源码入手
笔者结合网上对duilib的一些介绍进行了一些简单分析,我们关注点来到函数签名为LRESULT WindowImplBase::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
的函数中,这个函数所属的类被创建窗口的类继承,并且创建窗口时应当调用OnCreate()