zoukankan      html  css  js  c++  java
  • Windows逆向分析入门(七)——实战篇(刷新二维码)

    前言

      这一篇,用到找偏移的第二个方法:界面;第四个方法:字符串;第六个方法:第三方库。目标是刷新二维码。

     

    Duilib

      WX的界面模块是第三方库:Duilib。

      关于Duilib的介绍和分析,已经分享了《Dump微信PC端的界面Duilib文件》。

     

    这里梳理一下Duilib的主要流程:

      1、Duilib加载配置文件,生成界面。

      2、用户点击界面的的按钮,会产生click事件。

      3、Duilib接收到事件,会判断是点个哪个按钮,然后触发对应的函数。

      4、比如发送按钮,配置文件里面是"send_btn",判断代码就是 if(xxx== "send_btn")。

      5、通过拦截按钮的名字"send_btn",就可以定位到按钮的对应的函数是哪一个。

     

    分析思路

      1、找到登陆界面的配置文件

      2、确定刷新二维码的按钮名字

      3、在软件中对按钮的名字进行下断点

      4、看是否触发断点,如果触发,进一步确认对应函数

     

    找偏移

      1、看下登陆界面

        

      2、对应的登陆界面的配置文件

        

     

      3、刷新二维码的按钮的名字

        qrcodeBackBtn

     

      4、用OD下断点

        1、双击WeChatWin.dll模块

           

        2、查看所有字符串

           

        3、右键搜索字符串

          

          

        4、得到搜索结果

           

        5、双击,然后右键看下用到这个字符串的地方

           

        6、对用到这个字符串的地方下断点

           

      5、重新打开微信

        第一个断点断下来,这里是生成界面,不是我们想要的,跳过。

           

      6、点击登陆界面的切换账号,触发刷新二维码

           

        这里可以看到,会有各个按钮的名字,也有je的汇编

        对应的就是C++的if(xxx== "xxxBtn")

        OD看比较清晰

           

     

        这样就可以定位到,刷新二维码的函数,是je之后这一块

           

        具体是哪一个,可以用排除法,把函数注释掉,如果没有刷新,那个这个函数就是目标函数。

           

           

      7、继续执行,确实没有刷新二维码,这个函数是目标函数,看下参数

         传递的参数ecx,ecx是个指针,并且指向的是一个虚表,意味着这是一个类的对象,构造对象麻烦。F7进入函数跟踪进行,看下有没有不需要自己构建参数的函数。

         

         这里把ecx传给esi,然后有很多[esi+ 0xxxx],意味着还是在用这个对象,跳过。  

        

      8、往下翻,到了这里,就没用到esi的数据了。

        参数ecx没指向虚表,不是上面的对象。试试注释掉,结果还是有刷新二维码,排除掉。

        5C00FA79    8D4D E0         lea ecx,dword ptr ss:[ebp-0x20]

        5C00FA7C    C745 FC FFFFFFF>mov dword ptr ss:[ebp-0x4],-0x1

        5C00FA83    E8 F8DEE1FF     call WeChatWi.5BE2D980

         

     

      9、而接下来,是两个函数,第一个函数运算,结果返回到eax,接下来又传给ecx,给第二个函数用,可以看出这两个函数是一起的,两个都注释掉之后,没刷新二维码,因此这两个函数就是我们要的刷新二维码的函数。

        5C00FA88    E8 83C5FFFF     call WeChatWi.5C00C010

        5C00FA8D    8BC8            mov ecx,eax

        5C00FA8F    E8 DC461100     call WeChatWi.5C124170

     

    算偏移

      基址:5BDE0000

        Executable modules, 条目 7

        基址=5BDE0000

        大小=01946000 (26501120.)

        入口=5CB34A63 WeChatWi.<ModuleEntryPoint>

        名称=WeChatWi

        文件版本=2.9.0.123

        路径=C:Program Files (x86)TencentWeChatWeChatWin.dll

      

      偏移 =  内存地址 - 基址

        第一个call   5C00C010 - 5BDE0000 = 22C010

        第二个call   5C124170 - 5BDE0000 =  344170

     

    写代码

      

     

    工具和教程,放群里(163419350),方便交流。

    实战代码也会放在github:https://github.com/KongKong20/WeChatPCHook

  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/wwgk/p/13197983.html
Copyright © 2011-2022 走看看