360chrome:360极速浏览器和360chrome首页设置加密算法


freebuf 已经发布该文章(http://www.freebuf.com/articles/terminal/128902.html)

 

如今浏览器经常会面临被其他软件劫持主页的风险,浏览器该如何自保呢。今天给出360浏览器的主页设置算法一些分析。


360浏览器设置主页大致有两次计算机器码:一次是磁盘id,一次是计算网卡mac地址。两种md5计算方法,两次网页拼接设置主页与md51的结果,再次计算md52,两次分别得到的md52的结果再次与设置主页拼接并计算base64的编码最后写入注册表,过程很曲折,接下来我们仔细往下看。以下是列举出计算磁盘id组合生成md5的过程:

现在我们开始设置,下面是使用ollydbg截获的设置函数


我们看到一串字符串”software\360chrome\homepage”,这是360设置主页的注册表的位置。

继续跟踪:函数chrome.65b7E6CA

首先打开 “software\360chrome\homepage”的注册表。


然后计算硬件的机器吗的md5值{4dc99d403b2562e3b8e593ffe85b1ef0}:


然后拼接设置的主页+{4dc99d403b2562e3b8e593ffe85b1ef0}变成了http://www.baidu.com/{4dc99d403b2562e3b8e593ffe85b1ef0}


然后计算以上字符串的md5值:844232b6479fafa0800014bdff25d

到此计算得到的第一次拼接过程结束,还有第二次计算mac地址的机器码过程,暂时略过。两次过程得到结果再进行一次拼接:

“http://www.baidu.com/{844232b6479fafa08ba800014bdff25d}{40ee09ae51dab5e411741b80acd47150}“

最后计算的base64的编码结果:

“aHR0cDovL3d3dy5iYWlkdS5jb20vezg0NDIzMmI2NDc5ZmFmYTA4YmE4MDAwMTRiZGZmMjVkfXs0MGVlMDlhZTUxZGFiNWU0MTE3NDFiODBhY2Q0NzE1MH0=“

最后会把改字符串写入注册表的”Homepage”项目下:

至此整个设置过程计算,我们总结下大致算法:

        wchar_t szUrl[MAX_PATH] = {0};wchar_t szUrl_2[MAX_PATH ] = {0};char  Out[MAX_PATH] = {0};char md51[32] = {0};wchar_t umd51[MAX_PATH] = {'{',''};wchar_t umd52[MAX_PATH] = {'{',''};unsigned char harddisk[MAX_PATH] = {0};unsigned char tmp2[16] = {0};AnsiToUnicode( url , lstrlenA(url) , &szUrl[0] , MAX_PATH );GetHardDiskId( (char*)harddisk );do_md51( (unsigned char *)Out , 20 , (unsigned char *)md51);AnsiToUnicode( md51 , 32 , &umd51[1] , MAX_PATH );umd51[33] = '}';ZeroMemory( harddisk , MAX_PATH );GetMACreg( (TCHAR*)harddisk );do_md51( harddisk ,strlen((const char *)harddisk) ,(unsigned char *)md51);AnsiToUnicode( md51 , 32 , &umd52[1] , MAX_PATH );umd52[33] = '}';wsprintfW( szUrl_2 , L"%s%s" , szUrl, umd51 );do_md52((unsigned char*)&szUrl_2[0] , 2*lstrlenW(szUrl_2),(unsigned char *)md51 );AnsiToUnicode( md51 , 32 , &umd51[1] , MAX_PATH );wsprintfW( szUrl_2 , L"%s%s" , szUrl, umd52 );do_md52((unsigned char*)&szUrl_2[0] , 2*lstrlenW(szUrl_2),(unsigned char *)md51 );AnsiToUnicode( md51 , 32 , &umd52[1] , MAX_PATH );wsprintfW( szUrl_2 , L"%s%s%s" , szUrl, umd51,umd52 );char* pcur = new char[MAX_PATH];STLMemset(pcur , 0 , MAX_PATH);UnicodeToAnsi( szUrl_2 ,2*lstrlenW(szUrl_2),pcur , MAX_PATH );int url_size = lstrlen(pcur);long out_size = MAX_PATH;base64_encode( (const unsigned char *)&pcur[0] ,url_size , (unsigned char *)Out , (unsigned long *)&out_size);

我们验证下自己的算法结果。

计算http://www.123.com,得到的结果如下图。我们可以看到注册表里是 加密密文,跟踪调试了该算法后,写测试函数于是就有了:

把这些值填入360浏览器的对应的注册表HomePage设置,于是打开360的浏览器,看直接转到了自己填写的地址去了,打开。

验证结果成功!

最后申明:逆向是工具,是我们学习他人软件的方法,而不是用来做一些非法的事情。

*本文作者:浪子_三少,转载请注明来自FreeBuf.COM

相关推荐

相关文章