前言
我们对微信进行逆向分析,日志是非常关键的,腾讯在发布的版本中对调试信息进行了屏蔽,那么我们需要强制输出这些调试信息,协助我们逆向分析微信找到关键点~
需要工具
1.ida (静态源码分析)
2.ollydbg或者x64dbg (动态调试分析)
微信的主模块是WeChatWin.dll 我们用ida载入分析,这个分析的时间比较久需要数个小时~ 分析完成后
在view->open subviews->strings(或者按快捷键 shieft+F12)到字符出串查找界面,那么我们知道在输出日志的时候 通常会输出源代码所在的位置,我们在这里按下control+f键进行搜索,搜索内容.cpp(PC微信是C++开发 duilib做的界面开发库 所以搜索.CPP)
如下图所示
拉过方框中那段
Mars 是微信官方的跨平台跨业务的终端基础组件。
具体参考
GitHub - Tencent/mars: Mars is a cross-platform network component developed by WeChat.
在任意一行 双击进入
用快捷键 control+X 查看交叉引用
在弹出来的所有交叉引用,随便双击一条进入
按下F5分析伪c源码,到这里我相信基本就知道了~
sub_57326c90 这个函数几乎非常接近我们的日志函数 双击进入这个函数
我们拉到最后,我们自己一般在编写一个函数的时候 前面都是判断 等其他处理,在 sub_581BFC90 传入了两个参数,看上面这个函数传入的参数基本就是我们需要的日志调试信息~ 具体看前面的代码,就知道为什么是这里,他上面几个函数你进去看看就明白了
我们只需要断在 sub_581BFC90这个call 此时堆栈中压入的参数便是我们需要的信息
接下来 用OD载入微信 将OD和IDA 基地址同步
选择红框中的E 也就是符号 右键选择wechatwin.dll 复制基地址
到ida中 设置基地址同步
设置基址同步,这里需要等一两分钟,等他同步完成后,OD和IDA地址就会同步
AC 的值不在变化了 就设置完成了
同步完成后 之前的sub_581BFC90 地址变成了 sub_5988FC90
在反汇编窗口 按下快捷键 control+G 输入地址前面加上0x表示16进制
F2在这里断下来,这里调试信息很多 很快就会断下来
在堆栈窗口直接返回到函数要执行的下一条地址,当然你也可以control+f9执行到返回在单步跳出这个函数~
589F6F2D 894424 50 mov dword ptr ss:[esp+0x50],eax
589F6F31 8D4424 20 lea eax,dword ptr ss:[esp+0x20]
589F6F35 56 push esi
589F6F36 50 push eax
589F6F37 895424 5C mov dword ptr ss:[esp+0x5C],edx
589F6F3B E8 508DE900 call WeChatWi.5988FC90
我们在这个call 再次让程序断下,观察堆栈~
esp+0x18
esp+0x2c
esp+0x30
esp+0x34
esp+0x78
在这里基本就拿到了 ~