zoukankan      html  css  js  c++  java
  • 微信防多开功能分析

    微信防多开分析

    序言:

    防多开的目的是为了防止多账号批量进行恶意操作(恶意营销等)。

    现在很多人都有两个微信,特别对于一些搞业务的人员。然而微信默认只能运行一个,不能同时开启两个微信。于是便有了这篇文章。防多开的方法很多,常用的可以参考这里

    微信使用的是互斥体防多开,此种技术主要就是使用API CreateMutexW或CreateMutexA创建一个以当前程序为相关名称的互斥体,如果返回NULL(创建失败)或错误码为ERROR_ALREADY_EXISTS(互斥体已存在),则退出程序

    // CreateMutexA 或 CreateMutexW 的函数原型
    HANDLE WINAPI CreateMutex(
    _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,  // 指向安全属性的指针
    _In_     BOOL                  bInitialOwner,      // 初始化互斥对象的所有者
    _In_opt_ LPCTSTR               lpName              // 指向互斥体名称的指针
    );                                                   // 返回值是句柄,返回NULL失败
    
    
    

    软件:

    微信PC 2.8.0.121

    工具:

    x64dbg(使用32位版本的)

    开始分析:

    1.首先定位到PC微信的主程序

     

    2.使用x64dbg启动WeChat.exe,然后设置API断点。使用快捷键Ctrl+G,打开跳转窗口,输入API 名称,点击确定进入对应API的代码地址处,使用快捷键F2对API设置断点(A版与W版都下断点比较好,下面图只显示了A版,W版同理)

    3.按F9让程序跑起来,等待断点的触发,我是第二次断点触发的,第一次断点停在了TLS函数断点,如果你不想程序对TLS函数下断,可以点击选项->选项,在事件中将TLS回调函数前的勾去掉

    4.此时程序断在了我们之前所下的断点处,分析堆栈信息,可以看到一个字符串,大致意思是微信APP实例标识互斥体名称,可以猜测这个就是关键的互斥体(如果不是就继续跟踪),打开调用堆栈

     

    5.根据调用堆栈窗口可以看出,对互斥体操作的模块是一个动态链接库wechatwin.dll,在调用堆栈窗口中从上到下,双击每一条调用指令,观察其中的代码,可以发现,在第二行的wechatwin.7A06AE15代码处,看起来有一个关键跳转

    6.可以测试下,先打开一个微信,然后使用x64dbg调试运行查看这个关键跳转的跳转情况,发现跳转并没有生效,直接F9运行,程序并未启动,而当其跳转生效后,第二个微信就启动了。说明这个地方是关键跳转,那么我们可以将je改为jmp,然后使用右键菜单中的补丁对修改后的程序进行保存

     

    7.x64dbg会自动识别哪些指令修改了,我们可以保存对应的二进制文件

    8.在保存文件时需要注意,修改的是哪个文件,就保存哪个文件,同时最好修改前将要修改的文件进行备份,方便以后恢复,一般此时都会报修改失败,因为x64dbg在使用这个dll,所以我们可以在名称后面加个字符或数字以示区别,退出x64dbg后再进行替换

    9.测试效果

    参考:https://www.anquanke.com/post/id/98825

    直面挫折,顽强生长
  • 相关阅读:
    Response.Redirect 打开新窗体的两种方法
    linux下coredump的产生及调试方法
    AlertDialog具体解释
    数据仓库与数据挖掘的一些基本概念
    JS中setTimeout()的使用方法具体解释
    iOS开发- 查询项目代码行数
    STM32学习之路-LCD(3)<显示图片>
    谷歌技术"三宝"之MapReduce
    [ffmpeg 扩展第三方库编译系列] 关于libvpx mingw32编译问题
    javascript笔记
  • 原文地址:https://www.cnblogs.com/ndyxb/p/12494101.html
Copyright © 2011-2022 走看看