zoukankan      html  css  js  c++  java
  • 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代码

  • 相关阅读:
    NoSuchElementException if input is exhausted 报错
    批量更改文件后缀名
    初识Java
    简单cmd
    电脑操作简易快捷键
    java学习 Markdown+开始写博客
    JavaScript基础知识
    当数位数不够这,前面补0
    vs code 设置
    json日期格式转换为 2019-11-27 格式
  • 原文地址:https://www.cnblogs.com/wwgk/p/12870690.html
Copyright © 2011-2022 走看看