QQ浏览器10.0最新版首页逆向分析



 背景:
        又是某一天,突然发现QQ浏览器又tmd的首页收藏夹失败,按照这几年的QQ浏览器的惯例,每次失败都会郁闷很久!
        说实话除了360浏览器之外,QQ浏览器就算难搞的了,每次更新加密方式都与之前完全不一样,对抗企鹅真的是头疼!
        不过头疼归头疼,有问题还是要解决掉才行。

顺便说个题外话:
        “搞定的含义就是对结果负责,如果你靠别人的鼓励才能发光,那你最多算是个灯泡。我们必须成为发动机,去影响其他人发光。”
        很欣赏这句话,记一下!

开搞:
        首先肉眼观察大概产生的变化,发现了两点
        第一:注册表中多出了一个StartupUrls_01和CustomURL_01 如图
        QQ浏览器10.0最新版首页逆向分析1

        第二:配置文件目录多出了一个Preferences_01和Bookmarks_01 如图
        QQ浏览器10.0最新版首页逆向分析2

        对比第一和第二两点,我们可以发现这些涉及到的内容都加密了,至于是什么加密我们现在不得而知,但是我们
        可以看到有个共同特征,那就是都有QBCI01这个字符串。

        但是到底是哪个PE文件在操作这个事情呢?还是Procmon.exe监视QQBrowser.exe对WriteFile和RegSetValue
        然后打开QQBrowser.exe自己手工设置一个url,根据栈属性的上下关系,可以顺利的定位到文件路径如下:
        QQBrowser\10.0.1125.400\F1Frame.dll

        第三:拖入IDA进行分析,根据上文的
QBCI01进行搜索,并没有找到,然后对QBCI进行操作,然后xref交叉引用
        找出所有的操作QBCI的函数,最后定位到了sub_233B380函数,打上断点,如果是重新分析的话,可能是
        sub_xxxB380的地址,反正相对距离不变!如图
        QQ浏览器10.0最新版首页逆向分析3

        第四:开始本地调试模式,直接打开QQBrowser,遇到错误忽略。然后自己输入一个url为http://www.126.com/
        继续运行会到断点处,如图
        QQ浏览器10.0最新版首页逆向分析4
        
        由这里可见流程划分
        1: pwbuf = c2w(sid + "#@#" + base64("[\"http://www.126.com/\""))

        继续往下走
      QQ浏览器10.0最新版首页逆向分析5
        
        会看到初始化了一个随机占16位字节的key,方便来初始化rc5的initkey,为什么这里会是rc5呢?当然是经过好几天的分析确认的
        并从里面扣出来了它的算法。
        2:rc5_initkey(ctx,16,key,12) 得到ctx

        继续往下
        QQ浏览器10.0最新版首页逆向分析6
        
        3:用2中得到的ctx并且加上iv为8个空字节 对1中的pwbuf进行 rc5_encrypt_01得到首次 rc5buf

        继续往下走:
        QQ浏览器10.0最新版首页逆向分析7
        
        发现这步如果直接步过的话v15直接就出结果了,看来这个函数必须要进入
        那么我们重新从头来一次之后,到这里,我们跟进去。然后忽略过无用信息继续往下走。
        QQ浏览器10.0最新版首页逆向分析8
        
        4:对3得到的rc5buf需要多扩充16个字节在开头上然后把1中的随机key填充上去组合成一个新的字符串
             rc5buf2 = key + rc5buf

        继续往下
        QQ浏览器10.0最新版首页逆向分析9

        5:给了一个固定16字节的固定值key1然后对其rc5_initkey得到 ctx1
             ctx1 = rc5_initkey(key1)

        6: iv1也用了固定8个字节的固定字符,然后通过5中的ctx1 和 6中的 iv1 以及 4中的rc5_buf2进行rc5_encrypt
            得到kernelbuf
            kernelbuf = rc5_encrypt(rc5_buf2,ctx1,iv1)

        继续往下走
        QQ浏览器10.0最新版首页逆向分析10

        QQ浏览器10.0最新版首页逆向分析11

        QQ浏览器10.0最新版首页逆向分析12
        
        7:对6中的kernelbuf进行crc32校验,但是结果取逆序得到 reverse_crc32
             reverse_crc32 = reverse(crc32(kernelbuf))

        对照最终结果得出
        8:out = "QBCI01" + reverse_crc32 + kernelbuf

        总结整个流程如下:
        1:pwbuf = c2w(sid + "#@#" + base64("[\"http://www.126.com/\""))
        2:rc5_initkey(ctx,16,key,12) 得到ctx
        3:rc5buf = rc5_encrypt_01(pwbuf,ctx,ivNULL)
        4:rc5buf2 = key + rc5buf
        5:ctx1 = rc5_initkey(key1)
        6:kernelbuf = rc5_encrypt(rc5_buf2,ctx1,iv1)
        7:reverse_crc32 = reverse(crc32(kernelbuf))
        8:out = "QBCI01" + reverse_crc32 + kernelbuf

        最终得出结果:上图为证
        QQ浏览器10.0最新版首页逆向分析13

        QQ浏览器10.0最新版首页逆向分析14

        QQ浏览器10.0最新版首页逆向分析15

        QQ浏览器10.0最新版首页逆向分析16

        
总结:经历了7天的时间,这几天里脑袋真的很郁闷,干啥都干不下去,只想搞明白。这是不是就是强迫症,这个病真的
           让人蛋疼。人到中年的我,竟然又一次熬夜了。。。

            企鹅er快来咬我吧,弄死你,当里个当,睡觉。。


CopyRight @2018, Www.LiuLanQiCode.Com, Inc.All Rights Reserved. QQ:8560851 转载请标明来源,否则木有小jj

鲁ICP备18034788号-1

鲁公网安备 37078302000299号