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


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

 

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

360.jpg

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

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

QQ图片20170309152101.png

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

继续跟踪:函数chrome.65b7E6CA

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

QQ图片20170309153128.png

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

QQ图片20170309153420.png

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

QQ图片20170309153958.png

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

QQ图片20170309160129.png

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

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

QQ图片20170309161617.png

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

aHR0cDovL3d3dy5iYWlkdS5jb20vezg0NDIzMmI2NDc5ZmFmYTA4YmE4MDAwMTRiZGZmMjVkfXs0MGVlMDlhZTUxZGFiNWU0MTE3NDFiODBhY2Q0NzE1MH0=

QQ图片20170309162117.png

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

QQ图片20170309162406.png

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

        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,得到的结果如下图。我们可以看到注册表里是 加密密文,跟踪调试了该算法后,写测试函数于是就有了:

14421093493929.png!small

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

14421094478041.png!small

验证结果成功!

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值