网上大多数的微信逆向思路,是CE搜索数据得到地址,OD下访问断点,然后在堆栈里面大海捞针的找Call,效率太低了。
其实微信的界面是用Duilib做的,Duilib的界面布局写在XML文件。然后界面的消息处理,是通过控件名处理的。比如发送按钮,XML文件里面是"send_btn",代码里面是 if(xxx== "send_btn")。利用这个特性,可以直接用字符串定位,省事很多。
原版Duiib源码地址:f2fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6V1N6h3W2D9K9h3u0Q4x3V1k6V1N6h3W2D9K9h3t1`.
微信Duilib源码地址:36cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6@1k6h3&6U0k6h3&6@1P5i4g2F1i4K6u0r3g2p5W2y4f1@1c8w2i4K6u0r3N6s2u0W2k6g2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3y4J5L8%4y4K6i4K6u0V1M7r3I4S2N6r3k6G2M7X3#2Q4x3V1k6i4K9h3&6V1L8%4N6K6i4K6u0r3d9f1#2m8M7s2m8Q4x3V1k6n7j5i4y4A6j5#2)9J5c8X3c8#2K9h3I4A6j5R3`.`.
创建界面流程
窗口过程:CWindowWnd::__WndProc
消息处理函数:WindowImplBase::HandleMessage
处理创建窗口消息:WM_CREATE: WindowImplBase::OnCreate
创建界面:CDialogBuilder::Create(加载界面) CDialogBuilder::Create(处理控件)
加载界面资源:CMarkup::Load CMarkup::LoadFromFile CMarkup::LoadFromMem
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
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
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
柒雪天尚 网上的 C++逆向分析连IDA都不用,更别谈C++了,上来就是一手,我们先用CE搜XXXX,然后下断。然后这个call
yimingqpa 逆向分析 和 c++别扯一起。 ida只是静态分析工具,这样的工具还有很多。 楼主说的CE OD 一样也可以用其它的代替。
零下八度 nice,谢谢分享,又学到了一招~ 我尝试写段OD脚本来dump,在您说的 xor ecx,ecx 处下段,xml的内容确实是直接用dm命令dump下来了, 想再请教下,在这时候怎么读到正确文件名 ...