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

    xiaoxiao2021-04-17  29

    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

    转载请注明原文地址: https://ju.6miu.com/read-673574.html

    最新回复(0)