首页
社区
课程
招聘
[原创]chrome配置文件校验的逆向
发表于: 2015-8-17 18:02 17501

[原创]chrome配置文件校验的逆向

2015-8-17 18:02
17501
比如在 chrome目录下的\Chrome\User Data\Default目录下的Secure Preferences,需要设置"startup_urls":["http://www.baidu.com/"]改参数时,chrome会在该文件中生成"startup_urls":"651507D384340BD7A56E3D3D7646C797AB1593B15400B397908EF95BD2D4CB16"该校验信息,
该校验信息就是上一篇文章中所计算的hash sha256值怎么计算呢

chrome会组合这样的参数 ASCII "0A52ED0B71E75641568A87D0663A83205BA78F88FC2363B9D0session.startup_urls
["http://www.baidu.com/"]
" ,对该字符窜计算sha256 就会生成 startup_urls":"651507D384340BD7A56E3D3D7646C797AB1593B15400B397908EF95BD2D4CB16"这样的hash校验值,
注意  红色的字符窜中 0A52ED0B71E75641568A87D0663A83205BA78F88FC2363B9是如何生成的呢
计算方法如下:
1.先获得用户电脑名称
2.然后对该用户去取的Security id 即sid
3.对获得sid进行标准的sha1 hash值
由于简单我直接贴代码: 代码相当简单

bool GetComputerSecurityId( wchar_t security_id[64] )
{
wchar_t account_name[MAX_PATH] = {0};
unsigned long account_len = MAX_PATH;
wchar_t sid[MAX_PATH] = {0};
char sid_buffer[24] = {0};
if ( GetComputerNameW(
account_name,
&account_len ))
{
if( AddAccessRights( account_name , &sid , 2*MAX_PATH ))
{
ConvertSidToStringSidW( &sid,
  (LPWSTR *)sid_buffer );
if ( security_id && (*(unsigned long*)sid_buffer) )
{
memcpy( security_id , (const void *)(*(unsigned long*)sid_buffer) , MAX_PATH );

LocalFree( (HLOCAL)(*(unsigned long*)sid_buffer) );
}
}
}

return false;
}

bool AddAccessRights(wchar_t* lpAccountName,
PSID Sid,
unsigned long cb_sid_len )
{
wchar_t* account_name = (wchar_t*)HeapAlloc( GetProcessHeap(),0, 2*MAX_PATH );
unsigned long cchReferencedDomainName ;
SID_NAME_USE peUse;
unsigned long cbSid;
BOOLisSuccess = 0;

cbSid = cb_sid_len;
cchReferencedDomainName = 2*MAX_PATH;
if ( account_name )
{
isSuccess = LookupAccountNameW(
NULL,
lpAccountName,
Sid,
&cbSid,
account_name,
&cchReferencedDomainName,
&peUse );

if ( !isSuccess )
{
if ( GetLastError() == 122 )
{
if ( cbSid <= cb_sid_len )
{
if ( cchReferencedDomainName > 128 )
{
cchReferencedDomainName = 2 * cchReferencedDomainName;
}

isSuccess = LookupAccountNameW(
NULL,
lpAccountName,
Sid,
&cbSid,
account_name,
&cchReferencedDomainName,
&peUse);
}
}
}
}

if ( account_name )
{
HeapFree( GetProcessHeap() , 0 , account_name );
account_name = NULL;
}

return isSuccess;
}

bool GetVolumeSerialNumber( unsigned long* serial )
{
char root_name[MAX_PATH] = {0};
char* root_disk = 0;
unsigned long VolumeSerialNumber = 0;
if( GetSystemDirectory( root_name ,
MAX_PATH ) && serial )
{
if ( root_disk = strstr( root_name, "\\") )
{
root_disk[1] = 0;
*serial = 0;
if ( GetVolumeInformation(
&root_name[0],
0,
0,
&VolumeSerialNumber,
0,
0,
0,
0) )
{
*serial = VolumeSerialNumber;
return true;
}

}
}

return false;
}

bool GetComputerHashSha1(char* hash_id )
{
wchar_t wcSid[200] = {0};
unsigned long SerialNumber = 0;

GetComputerSecurityId( wcSid );
GetVolumeSerialNumber(&SerialNumber);

char szhashId[40] = {0};
base::SHA1HashBytes( (const unsigned char *)wcSid , 2*lstrlenW(wcSid) , (unsigned char *)szhashId );
return true;
}

2.第二个隐含数据
第二个隐含数据是在目录下resources.pak文件鼠标框的位置,取64个字节,放入sha256的计算第一个字符窜参数




2..chrome的配置文件加密校验的hash算法

chrome的代码开源的,但是代码量有2g,懒得看,经过一个多星期的逆向获得了其加密校验配置文件的算法:

有四、五轮的 sha256非标准的加密算法,下面是我的逆向的代码调试与程序调试的对比
第一轮:hash
图片
图片

第二轮:hash
图片

图片

图片

图片

第三轮 hash
图片

图片

第四轮:hash
图片
图片

第五轮 也就是最后一轮:输出结果hash值
图片

图片

整体代码展示:(截图)逆向出来的代码
图片

最后来个图: 图片

传附件

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 3
支持
分享
最新回复 (24)
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
晕.........图片没传上来。。。。。。。。。。。。
2015-8-17 18:03
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
看我的博客:把 这里有图
http://blog.csdn.net/basketwill/article/details/47663419
2015-8-17 18:14
0
雪    币: 18
活跃值: (1009)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
牛逼,学习学习.
2015-8-17 18:34
0
雪    币: 6179
活跃值: (3351)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
干得不错,  文主有恒心
2015-8-20 10:19
0
雪    币: 3334
活跃值: (1667)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
6
嘿嘿,我也干了这事(被公司逼的啊)
楼主好像漏了super_mac的hash计算吧,不然启动会提示配置检验失败。
chrome有源码还是看源码吧,我一个星期包含编码都搞定了,而且源码没下载下来看,只利用github的搜索功能看的代码。特别推荐c++两个库rapidjson和cryptopp

另外,猎豹浏览器的配置加解密算法也弄了,用的是bson,甚至里面都不加密
2015-9-27 09:22
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
嗯 我动态调式的,chrome是异步执行的,貌似我xp系统没碰到super mac,的计算,只碰到sid的计算
2015-9-28 16:54
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
360的浏览器有phsicdrive 和 mac计算,然后非标准md5  4次计算然后+base64计算得到结果写注册表
2015-9-28 16:56
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
我知道你说的super_hash,啥了,那个hash校验逆向出来了,我第二部分图片没有传上来,那个hash算法图片传失败了!
2015-9-28 21:39
0
雪    币: 32
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大哥,能知道你的base::SHA1HashBytes和chrome_resource_pak, chrome_resource_hash_pak是从哪来的么?
2015-11-16 15:07
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
附件里,发给你了
上传的附件:
2015-12-24 09:03
0
雪    币: 277
活跃值: (106)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
12
LZ能介绍下定位算法的思路么。。。我只能定位到写文件那里,离加密的地方有点远。
2016-1-21 17:35
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谷歌算法我已经逆向完了,寻找Pak ID是个API来的,只需要还原里边的比较函数还是就行了
2016-1-25 09:51
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不知道楼主有逆向过QQ浏览器没?我还原里面的算法,发现可以修改首页了,但是发现QQ浏览器开启后,不显示我设置的首页,而是显示QQ浏览器本身的首页,而设置选择里面的首页栏里确确实实填的是我的首页。很蛋疼
2016-1-25 09:54
0
雪    币: 277
活跃值: (106)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
15
我现在看的是opera,虽然是谷歌的内核,但是算法全改了,找了几天还没找到hash算法的位置
2016-1-25 14:40
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
16
你找到了读写文件是吧 那就 对读出来数据下硬件断点 看看什么地方访问了,甚至可以全局搜素数据找到一处下一次硬件断点,慢慢找到对应的代码,你甚至还能搜索md5 sha1等等一些算法的代码特征去定位代码,怎么定位到具体代码都是经验!
2016-1-25 18:03
0
雪    币: 277
活跃值: (106)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
17
恩,我按照这个思路再找找。。。确实经验不足
2016-1-26 18:17
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
18
chrome不用逆向吧。。直接都开源的。。

为了静默安装当初我扣了N久的代码。。
2016-1-29 13:00
0
雪    币: 272
活跃值: (2478)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
大哥,360度冰天雪地求静默安装chrome插件的源代码。。。
2016-3-8 16:00
0
雪    币: 1991
活跃值: (1506)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
20
..........
2016-3-8 16:45
0
雪    币: 272
活跃值: (2478)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
楼主也搞定了的吧,发个码呗,有偿也行。
2016-3-8 17:16
0
雪    币: 104
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
求给点提示   谷歌代码太多了 还没找到
2016-5-24 09:42
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
你好,我最近也在研究静默安装chrome插件,但是在写入secure preference文件中的64位码时遇到了问题,不清楚这个是如何写入了,能交流一下吗
2016-8-23 14:39
0
雪    币: 58
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
猎豹浏览器有服务保护的,无法修改preferences文件吧?
2016-8-23 14:49
0
雪    币: 277
活跃值: (106)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
25
找到一篇老外写的图文并茂的说明,虽然俄文看不懂,但是有翻译软件哈。。。
https://kaimi.io/2015/04/google-chrome-and-secure-preferences/
2016-10-13 19:53
0
游客
登录 | 注册 方可回帖
返回
//