美文网首页
PC端VX消息防撤回 之 逆向分析(一)

PC端VX消息防撤回 之 逆向分析(一)

作者: Sharkchilli | 来源:发表于2020-07-12 23:26 被阅读0次

    前言

    主要思路是在VX代码中撤回消息函数将撤回的消息和撤回的消息提示当做参数压栈,我们只需要hook这个撤回消息的函数即可在栈中得到我们想要的信息。要hook这个撤回消息的函数我们就需要获得以下关键信息:
    调用关键call的相对地址
    关键call下一条汇编指令的相对地址
    要hook函数的相对地址(即关键call的相对地址)
    调用关键call时,撤回信息和撤回提示相对ESP的栈位置
    因为地址随机化原因这个关键函数的地址会变化的,但是它相对于其dll模块的位置是不会发生变化,所以我们只需要获得他的相对地址,再在代码中动态获取dll模块的基地址,两者相加即可得到函数在虚拟内存中的地址,再通过dll注入到vx就可以修改他的代码从而实现hook
    本文将讨论如何获得这些关键信息

    使用工具

    • OD
    • CE

    CE

    使用CE附加到VX


    image.png

    发送一条消息


    image.png

    选择Value Type 为 String,并勾选UTF-16

    image.png

    撤回消息后,找到值变为<revok(这个是撤回消息的提示内容),这个就是存储本次会话消息的内存地址(042BF650):


    image.png

    OD动态调试

    使用OD附加到VX:

    image.png
    使用dd 042BF650,跟踪到数据窗口:
    image.png
    下一个内存写入断点
    image.png
    发送消息再撤回,发送消息也会在这段内存中断下来所以请先将其放行,在撤回处断下:
    观察栈的变化,这里我是两次F9后看到了关键信息,就是撤回消息的提示和撤回的内容
    image.png
    WeChatWi.56BA6F9A 中我们的关键信息压栈了,在反汇编窗口跟随这个Call
    image.png
    下面是call WeChatWi.56BA6F9A的两条汇编指令
    55EFD358    E8 3D9CCA00     call WeChatWi.56BA6F9A
    55EFD35D    8B07            mov eax,dword ptr ds:[edi]
    

    在call WeChatWi.56BA6F9A处下断点(暂时设置为禁用),并删除上面设置的内存断点(避免干扰调试)
    重新发送消息并且撤回,在撤回消息时启用F2断点,观察栈上的数据直到出现我们想要的关键数据。(这里可能出现程序崩溃的情况请多次尝试),在多次F9后看见如下关键信息:

    image.png
    esp + 0x0 :撤回消息的内容
    esp + 0x4 : 撤回消息的提示
    

    call WeChatWi.56BA6F9A 调用的是WeChatWi.dll的函数,我们在可以在od中看到WeChatWi.dll模块的基址为559D0000

    image.png
    计算出call指令和其下一条指令的相对地址(hook时需要用到,基址都会变所以我们要用到相对地址):
    call WeChatWi.56BA6F9A的相对地址:55EFD358 - 559D0000   = 52 D358
    mov eax,dword ptr ds:[edi]的相对地址:55EFD35D - 559D0000   = 52 D35D
    要hook函数的相对地址(也就是关键call的相对地址):56BA6F9A - 559D0000  = 11D 6F9A
    

    尾言

    至此我们就拿到了我们需要的关键信息,分别为:
    调用关键call的相对地址
    关键call下一条汇编指令的相对地址
    要hook函数的相对地址(即关键call的相对地址)
    调用关键call时,撤回信息和撤回提示相对ESP的栈位置

    相关文章

      网友评论

          本文标题:PC端VX消息防撤回 之 逆向分析(一)

          本文链接:https://www.haomeiwen.com/subject/zcincktx.html