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

Posted wwgk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

写代码

  技术图片

以上是关于Windows逆向分析入门——实战篇(刷新二维码)的主要内容,如果未能解决你的问题,请参考以下文章

Windows逆向分析入门——代码篇

逆向入门分析实战

iOS逆向工程分析与实战-开篇

Windows逆向分析入门——总篇

记一次Android App逆向入门实战(逆向思路&工具使用&CrackMe)

SO逆向入门实战教程六:s