小白逆向实战—微信去除多开限制

在吾爱破解网上看到一个小白向的微信逆向过程,之前一直对逆向有点兴趣,因此跟着教程实操了一次,受益匪浅,在此记录一下。

准备工具

x64dbg

微信3.9.10.27 (不同版本的具体操作存在一定区别,但大致思路相同)

参考

https://www.52pojie.cn/thread-1951224-1-1.html

具体过程

1. 找到一个切入点

参考博客中,博主先调查出Windows下微信实现多开限制的方式——调用Windows的CreateMutex api来构建一个互斥体,之后便是通过追踪CreateMutex函数来打下第一个断点。

2.在x64dbg中打开微信

  1. 打开微信,不用登陆

  2. 打开xdbg64, 附加微信

  3. 先搜索wechat 选择 “附加”

    请添加图片描述请添加图片描述

    附加后,x64dbg就可以对微信进行调试

  4. 重新打开微信,无需登陆。这一步是为了使得之后x64dbg所操作的微信会进入多开限制相关的代码段中

  5. 选择断点页面, 删除所有默认断点

    请添加图片描述

  6. 选择cpu页面 CTRL + G 跳转搜索函数CreateMutex,有四个结果

    请添加图片描述

  7. 一个一个选择,并跳转到对应位置后,发现来源于同一处,都打一个断点

    请添加图片描述

  8. 先点击循环箭头重启调试微信

    请添加图片描述

  9. 多次点击运行或者按快捷键F9,直到到达我们设定断点处。(之所以按多次,是因为在运行过程中,会自动创建一些断点)

    请添加图片描述

    到达设定的断点处

    请添加图片描述

    可以看到,是直接停在第四个红点处,这意味着微信调用的是CreateMutexW接口,而没有用另外三个。

  10. 接下来开始按F8, 一步一步执行程序,直到出现多开限制导致的现象——即第4步中打开的微信窗口被唤起

    请添加图片描述

    执行到图中标记的这一句时(该行右侧的“打开窗口”为我自己注释所得,并非原来就有),右边的微信窗口自动唤起,此时我们就能确定多开限制相关的代码段的大致范围,从 CreateMutexW 所在的代码行,到窗口被唤起时,所执行到的代码行。

  11. 接下来要收缩代码范围,根据模块进行收缩

    窗口的左上角会显示模块的名称,如微信窗口被唤起时,所在的模块为wechatwin.dll

    请添加图片描述

    而根据之前的图,CreateMutex断点所在模块为kernel32.dll, 在执行过程中,还加载过名为ntdll.dll等的其他模块,kernel32.dll与ntdll.dll模块等是系统模块(判断的方式请见第15步),不应该进行修改,否则可能会影响到其他软件甚至系统的使用,而wechatwin.dll是只有微信用的模块(判断的方式请见第15步),修改时无需担心影响到其他软件。因此我们需要重新执行一次8、9、10步,实时观察所在模块,找到第一次进入到wechatwin.dll是在哪一行,给该行加入注释,如下图

    请添加图片描述

    可以看到,我们将范围缩短到了32行。

  12. 接下来就按F8逐步执行这个范围里的语句,并打注释记录条件跳转语句(je与jne)是否进行了跳转,如图,其中,“有不跳”意味着:在已经有一个微信窗口的情况下,该语句不会进行跳转

请添加图片描述

  1. 关闭第4步中打开的微信窗口,则之后x64dbg所启动的微信就不会进入导致多开限制相关的代码段,重新测试第9步范围内的条件跳转语句,并进行标注。其中,“无不跳”意为:“在无其他微信窗口的情况下,该语句不会进行跳转”,“无跳”意为:“在无其他微信窗口的情况下,该语句会进行跳转”

    请添加图片描述

    在第二个条件跳转语句,“已有微信窗口”与“无其他微信窗口”的行为就有了区分;但无法排除剩下两个跳转语句会产生影响的可能性,因此对剩下的两个跳转语句打上断点,不断按“F9”,观察在微信窗口出现之前,这两个断点是否会激活。

    请添加图片描述

    在该过程中,断点并未激活,因此可以排除剩下两个条件跳转语句对结果会起影响的可能性。

  2. 修改跳转条件,将jne修改为jmp
    请添加图片描述

    请添加图片描述

  3. 构建补丁

    请添加图片描述

    请添加图片描述

    请添加图片描述

    点击修补文件后,弹出的文件管理器所在的路径即为当前模块所在的路径,可以根据该路径判断模块是系统模块还是单个应用的模块。将文件名设置为 模块名+New.dll,进行保存。

  4. 备份源文件,启用补丁

    打开文件管理器,进入文件保存路径,将原来的模块(即WeChatWin.dll)命名为WeChatWin.dll.bak, 用于出问题时软件恢复,再将我们保存的文件(即WeChatWinNew.dll)命名为WeChatWin.dll。

  5. 重启微信,可以进行多开,预期目标完成

    请添加图片描述

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值