我的收藏

Good Luck To You!

PC微信逆向分析のWeTool内部探秘

作者:zmrbak(赵庆明老师)

前言:

先不说微信在社交领域的霸主地位,我们仅从腾讯公司所透露的在研发微信过程中踩过的无数的坑,以及公开的与微信相关的填坑的源代码中,我们可以感受到,单从技术上讲,微信是一款非常伟大的产品。然而,伟大的产品,往往会被痴迷于技术的人送进实验室大卸八块,以参悟其伟大之所在!

WeTool,一款免费的微信社群管理软件,正是这群痴迷于技术的人对于这个伟大的PC微信的研究成果。在微商界,这个软件真可谓是鼎鼎大名、如雷贯耳。如果你还不知晓这个软件,那么你肯定不是微商界的人。如果你想对你的微信群进行管理,而又不想花钱,也许这个软件就是你最佳的选择。当然,免费软件的套路都是一样的,WeTool“有意地”不满足你的一些需求,会保留其中一部分功能。如果你有特殊的需求的话,当然是要付费的,那就购买“企业版”吧。

但是,对于一个对技术有强烈兴趣的人来说,研究WeTool与研究PC微信一样有趣,在这里,我把它们两个一起送进实验室,一窥其中的奥秘!

微信中的WeTool

由于腾讯干预,目前WeTool免费版本已经不再公开提供下载。但,之前的旧版本仍然可以自动升级到最新版本。如果你想获得WeTool这个软件,我想,你应该知道该怎么做了吧。如果你还是不知道,很抱歉,这篇文章对你来说太深奥了。那么我对你的建议是:关掉这个网页吧。

WeTool在启动时,会检查当前计算机上是否安装了版本匹配的PC微信。倘若找不到,或者版本不匹配,WeTool会引导你到它的官网去下载一个版本匹配的PC微信(可能比较旧,但能用)。下载完毕后,需要你手动去安装一下。

在WeTool启动的时候,还会检查微信的登录状态,如果微信还未完成登录,WeTool会等待微信登录之后,再开启自己的管理界面。

这里的问题是:WeTool是如何得知微信是否已经登录了呢?

在这里,我们使用PCHunter来检查一下微信(WeChat.exe)的进程模块。我们可以看到,在微信的进程中加载了一个特殊的DLL文件(WeHelp.dll),而它的父目录是一个特殊的字符串:“2.6.8.65”,恰好与我们当前运行的微信版本一致。再上一层的目录,“WeToolCore”,很明显,这个文件是WeTool的一部分。恰恰是这个DLL文件帮助WeTool完成了与微信之间的各种互动。也就是说,WeTool通过WeHelp.dll这个文件,可以感知到微信的各种活动,当然也包括微信是否已经登录等等…
在这里插入图片描述
我们这里要关注,来自于“sub_100030F0”函数的返回值result到底是什么?

同样,双击这个函数(sub_100030F0),进去看看呗!原来,调用了一个Windows API函数(GetModuleHandleW),查看MSDN后,发现原来这个函数的功能就是取微信的基址(WeChatWin.dll)。
在这里插入图片描述


那就简单多了,是不是说,如果我们在微信中执行“((int (__stdcall *)(_DWORD))(weChatWinBaseAddress + 0x3F2BF0))(0);”这么一句代码,就可以实现Logout功能呢?当然,我们需要验证。打开原来创建的C++的动态链接库项目,把 case分支DLL_PROCESS_ATTACH换成如下内容:

case DLL_PROCESS_ATTACH:{
		DWORD weChatWinBaseAddress = (int)GetModuleHandleW(L"WeChatWin.dll");
		((int(__stdcall*)(DWORD))(weChatWinBaseAddress + 0x3F2BF0))(0);
}

注意:把IDA中拷贝过来的代码里的“_DWORD”中的下划线去掉,就可以编译通过了。
在这里插入图片描述

启动微信,登录微信(这时候,手机微信中会显示“Windows微信已登录”)。

使用OD附加微信(确保WeTool已经退出,否则OD附加不成功)。

在OD汇编代码窗口点右键,选择”StrongOD\InjectDll\Remote Thread”,选中刚才Visual Studio中编译成功的那个dll文件。 在这里插入图片描述一秒钟!OK,神奇的事情发生了:微信提示,你已退出微信!

同时,手机微信上原来显示的 “Windows微信已登录”,也消失了。从这里我们可以确定,微信“真的”是退出了,而不是崩掉了。
在这里插入图片描述

总结:

其实逆向研究,并不只是靠苦力,更重要的是强烈的好奇心和发散的思维。也许一个瞬间,换一下思维模式,瞬间一切都开朗了。一个人的力量是有限的,融入一个圈子,去借鉴别人的成功经验,同时贡献自己成功经验,你会发现,逆向研究其实是非常好玩的一件事。当然,我研究的后编写源码都是公开的,你可以到GitHub(https://github.com/zmrbak/PcWeChatHooK)上和我一起研究和学习。

源码分享:

https://github.com/zmrbak/PcWeChatHooK

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    文章归档

    Powered By Z-BlogPHP 1.5.2 Zero

    Copyright Your WebSite.Some Rights Reserved.