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、看下登陆界面

    Windows逆向分析入门(七)——实战篇(刷新二维码)Windows逆向分析入门(七)——实战篇(刷新二维码)

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

    Windows逆向分析入门(七)——实战篇(刷新二维码)

 

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

    qrcodeBackBtn

 

  4、用OD下断点

    1、双击WeChatWin.dll模块

       Windows逆向分析入门(七)——实战篇(刷新二维码)

    2、查看所有字符串

       Windows逆向分析入门(七)——实战篇(刷新二维码)

    3、右键搜索字符串

      Windows逆向分析入门(七)——实战篇(刷新二维码)

      Windows逆向分析入门(七)——实战篇(刷新二维码)

    4、得到搜索结果

       Windows逆向分析入门(七)——实战篇(刷新二维码)

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

       Windows逆向分析入门(七)——实战篇(刷新二维码)

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

       Windows逆向分析入门(七)——实战篇(刷新二维码)

  5、重新打开微信

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

       Windows逆向分析入门(七)——实战篇(刷新二维码)

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

       Windows逆向分析入门(七)——实战篇(刷新二维码)

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

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

    OD看比较清晰

       Windows逆向分析入门(七)——实战篇(刷新二维码)

 

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

       Windows逆向分析入门(七)——实战篇(刷新二维码)

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

       Windows逆向分析入门(七)——实战篇(刷新二维码)

       

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

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

     Windows逆向分析入门(七)——实战篇(刷新二维码)

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

    Windows逆向分析入门(七)——实战篇(刷新二维码)

  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

     Windows逆向分析入门(七)——实战篇(刷新二维码)

 

  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)\Tencent\WeChat\WeChatWin.dll

  

  偏移 =  内存地址 - 基址

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

    第二个call   5C124170 - 5BDE0000 =  344170

 

写代码

  Windows逆向分析入门(七)——实战篇(刷新二维码)

Windows逆向分析入门(七)——实战篇(刷新二维码)

上一篇:windows:shellcode生成框架和加载


下一篇:Win10 L2TP连接不上的第二种办法