QQ浏览器10.0最新版首页逆向分析
背景:
又是某一天,突然发现QQ浏览器又tmd的首页收藏夹失败,按照这几年的QQ浏览器的惯例,每次失败都会郁闷很久!
说实话除了360浏览器之外,QQ浏览器就算难搞的了,每次更新加密方式都与之前完全不一样,对抗企鹅真的是头疼!
不过头疼归头疼,有问题还是要解决掉才行。
顺便说个题外话:
“搞定的含义就是对结果负责,如果你靠别人的鼓励才能发光,那你最多算是个灯泡。我们必须成为发动机,去影响其他人发光。”
很欣赏这句话,记一下!
开搞:
首先肉眼观察大概产生的变化,发现了两点
第一:注册表中多出了一个StartupUrls_01和CustomURL_01 如图

第二:配置文件目录多出了一个Preferences_01和Bookmarks_01 如图

对比第一和第二两点,我们可以发现这些涉及到的内容都加密了,至于是什么加密我们现在不得而知,但是我们
可以看到有个共同特征,那就是都有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的地址,反正相对距离不变!如图

第四:开始本地调试模式,直接打开QQBrowser,遇到错误忽略。然后自己输入一个url为http://www.126.com/
继续运行会到断点处,如图

由这里可见流程划分
1: pwbuf = c2w(sid + "#@#" + base64("[\"http://www.126.com/\""))
继续往下走

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

3:用2中得到的ctx并且加上iv为8个空字节 对1中的pwbuf进行 rc5_encrypt_01得到首次 rc5buf
继续往下走:

发现这步如果直接步过的话v15直接就出结果了,看来这个函数必须要进入
那么我们重新从头来一次之后,到这里,我们跟进去。然后忽略过无用信息继续往下走。

4:对3得到的rc5buf需要多扩充16个字节在开头上然后把1中的随机key填充上去组合成一个新的字符串
rc5buf2 = key + rc5buf
继续往下

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)
继续往下走



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
最终得出结果:上图为证




总结:经历了7天的时间,这几天里脑袋真的很郁闷,干啥都干不下去,只想搞明白。这是不是就是强迫症,这个病真的
让人蛋疼。人到中年的我,竟然又一次熬夜了。。。
企鹅er快来咬我吧,弄死你,当里个当,睡觉。。
又是某一天,突然发现QQ浏览器又tmd的首页收藏夹失败,按照这几年的QQ浏览器的惯例,每次失败都会郁闷很久!
说实话除了360浏览器之外,QQ浏览器就算难搞的了,每次更新加密方式都与之前完全不一样,对抗企鹅真的是头疼!
不过头疼归头疼,有问题还是要解决掉才行。
顺便说个题外话:
“搞定的含义就是对结果负责,如果你靠别人的鼓励才能发光,那你最多算是个灯泡。我们必须成为发动机,去影响其他人发光。”
很欣赏这句话,记一下!
开搞:
首先肉眼观察大概产生的变化,发现了两点
第一:注册表中多出了一个StartupUrls_01和CustomURL_01 如图

第二:配置文件目录多出了一个Preferences_01和Bookmarks_01 如图

对比第一和第二两点,我们可以发现这些涉及到的内容都加密了,至于是什么加密我们现在不得而知,但是我们
可以看到有个共同特征,那就是都有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的地址,反正相对距离不变!如图

第四:开始本地调试模式,直接打开QQBrowser,遇到错误忽略。然后自己输入一个url为http://www.126.com/
继续运行会到断点处,如图

由这里可见流程划分
1: pwbuf = c2w(sid + "#@#" + base64("[\"http://www.126.com/\""))
继续往下走

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

3:用2中得到的ctx并且加上iv为8个空字节 对1中的pwbuf进行 rc5_encrypt_01得到首次 rc5buf
继续往下走:

发现这步如果直接步过的话v15直接就出结果了,看来这个函数必须要进入
那么我们重新从头来一次之后,到这里,我们跟进去。然后忽略过无用信息继续往下走。

4:对3得到的rc5buf需要多扩充16个字节在开头上然后把1中的随机key填充上去组合成一个新的字符串
rc5buf2 = key + rc5buf
继续往下

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)
继续往下走



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
最终得出结果:上图为证




总结:经历了7天的时间,这几天里脑袋真的很郁闷,干啥都干不下去,只想搞明白。这是不是就是强迫症,这个病真的
让人蛋疼。人到中年的我,竟然又一次熬夜了。。。
企鹅er快来咬我吧,弄死你,当里个当,睡觉。。
CopyRight @2018, Www.LiuLanQiCode.Com, Inc.All Rights Reserved. QQ:8560851 转载请标明来源,否则木有小jj