记录一次逆向360极速浏览器修改主页设置

看到FreeBUF上有一篇文章逆向360极速浏览器和360首页设置加密算法,http://www.freebuf.com/articles/terminal/128902.html。当时对这个很感兴趣,想尝试一下。这里在WindowsXP下以360极速浏览器8.5.0.144为例进行分析。

从文章中可以获取的信息

按照文章所说,其设置流程为(这里把要设置的主页记作url):

  1. 计算硬件的机器码的MD5值,此处记为MD5-1

  2. 将MD5-1与url进行拼接,后计算MD5值,记为MD5-2

  3. 计算网卡的机器码的MD5值,记为MD-3

  4. 将MD5-1,MD-2与url拼接,计算base64

然后文章中还可以了解的信息是360极速浏览器设置主页的注册表目录为:software\360chrme\homepage。然后在几个作者发的OD图中可以发现调用了chrome。

找到入口线索

首先看看chrome是个什么程序。在安装目录中%360Chrome\Chrome\Application\8.7.0.306%中可以发现找到chrome.dll文件,由此可以推断出主程序调用了这个DLL文件。

还有一个入口线索,上文可知360极速浏览器设置主页的注册表目录,用string或者OD载入360chrome主程序都无法找到这个注册表目录的字符串。而在chrome.dll是可以找到的。

既然已经查到了字符串是在chrome.dll文件中出现,那就找到运行这个DLL的入口吧。OD载入360chrome.exe主程序,选项-调试选项-事件中勾选中断在新模块(DLL)。F9运行,观察上下文,看是否为chrome.dll程序。OK,程序停在0x1c51161处,这里就是chrome.dll的领空啦。

取消勾选中断在新模块(DLL)。F8跟踪到第一个返回,然后Alt+F9返回用户代码领空。程序停在了0x417dea地址处。F8继续跟踪可以然后接一个返回直接到了0x4180fa地址处。经过多次分析和跑飞,发现正常的流程应该是跳到0x418ad1处挂断点跑程序,完成对chrome.dll的加载,

进入chrome.dll

F7进入。这样就来到了0x1c597c4地址处。搜索字符串“Software\360Chrome\Homepage,可以发现在0x1de48df;0x1de48f2;0x1d2e51f地址处有push
chrome.03821320指令,而 chrome.03821320存放的就是要搜索的字符串。

前两个指令

Ctrl+G跳转到0x1de48df地址处,0x1de48eb地址处下断点

在第四个call下断点,运行然后进入。来到了地址0x1de4984地址处。

在0x1de498b0地址处call了一个打开注册表的函数,这个函数正是打开Homepage\Default这个目录。参数详见栈空间。

上面的分析没找到什么有关于加密的算法实现。

0x1d2e51f

这样就剩下最后的0x1d2e51f出的地址,挂断点跑程序。

首先进入第一个call函数分析,0x1d2e52a。

0x627ee28存放的是360极速浏览器用户数据目录。

找到下面的第四个函数,发现其调用chrome.0x1d2e57d地址,Ctrl+G转到chrome.0x1d2e57d地址,挂断点跑程序。这个函数要找的设置主页的函数。

chrome.0x1d2e57d详细分析

首先打开注册表

打开注册表<span
data-label="360-999"></span>

如图[360-999]可以发现打开注册表并不是homepage键值,而是urls_to_restore_on_startup键值。

接着开始得到MD5-1值,进行了第一次拼接[360-998]

得到MD5-1<span
data-label="360-998"></span>

得到MD5-2<span
data-label="360-997"></span>

接着进行第二次拼接操作[360-996],[360-995]

url+MD5-2<span
data-label="360-996"></span>

url+MD5-2<span
data-label="360-995"></span>

进行base64编码[360-994]

<span data-label="360-994"></span>

最后设置注册表的操作[360-993]

最后进行注册表的操作<span
data-label="360-993"></span>{width=”80.00000%”}

分析了一圈,可以发现在我的机器上,主要是设置urls_to_restore_on_startup。这个地址其实是我IE的主页urlhttp://www.msn.com/zh-cn

一些发现

当然,这期间的分析过程中是碰到诸多的麻烦,当然也会有一些意外的收获。

解析各种文件

这段代码主要在chrome.0x1e516dc chrome.0x1e51b06。

加载chrome.dll文件

继续跟踪,发现注释多次提到了chrome.01c50000,数据窗口跟随下,发现是个PE文件,根据其PE文件头中文件属性,可知值是0x2122[],这样就可以知道是个32位的DLL文件。

chrome.01c50000 PE头文件属性<span
data-label="360-PE1"></span>{width=”80.00000%”}

单步进入0x464390。首先会验证是否是PE文件,检查0x5a4d[360-PE2]。

chrome.01c50000验证是否为PE文件<span
data-label="360-PE2"></span>

图 chrome.01c50000验证是否为PE文件

而在0x001bb530处则存储了DLL路径数据[360-PE3]。

chrome.01c50000路径信息存储位置<span
data-label="360-PE3"></span>{width=”80.00000%”}

当然也会获取关于PE文件内存映像大小[360-PE4]。

chrome.01c50000PE文件内存映像大小获取<span
data-label="360-PE4"></span>{width=”80.00000%”}

注册表的homepage值

OK,既然可以设置注册表位置,更改主页设置,可以找到这几个homepage值

http://www.msn.com/zh-cn:
aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2lzYXBpL3JlZGlyLmRsbD9wcmQ9aWUmcHZlcj02JmFyPW1zbmhvbWV7MGY4YWFjZmExMzg3ZTNmYzFmMGI1MDUyNmE2NDk0MDh9ezViZWM0NmQ1YzA0Y2ZlYjVkZjkyYjBiMWU1NGJiMjk0fQ==

e2ZjMzYwMTE1NTJjNjA2ZjBhNDFkOTg0Nzk5YzkyNjVhfXswMTI5Zjg5NjE3N2Q1ZDVjZWI1MmJjMjU3ZmEyZGZkNn0=

https://www.baidu.com/:
aHR0cDovL3d3dy5iYWlkdS5jb20vezIzMmMxN2U1OTI0NTY5ZjA1NzIwYjE5YzI3MGYwNWE1fXtmOTgxZmViY2RiMWNhMzdkNGFiODRiZTViNGUxMmFmYX0=