这篇文章接上一篇文章进一步升华:花了4个小时获得该信息的计算方式
比方在 chrome文件夹下的\Chrome\User Data\Default文件夹下的Secure Preferences,须要设置"startup_urls":["http://www.baidu.com/"]改參数时,chrome会在该文件里生成"startup_urls":"651507D384340BD7A56E3D3D7646C797AB1593B15400B397908EF95BD2D4CB16"该校验信息,该校验信息的解说在此:http://blog.csdn.net/basketwill/article/details/47663419
该校验信息就是上一篇文章中所计算的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;
}
字符串中D0的产生:
base::SHA1HashBytes( (const unsigned char *)wcSid , 2*lstrlenW(wcSid) , (unsigned char *)szhashId );
GetCrc(szhashId );
这个结果===D0,就是计算szhashId 的 8位crc
ULONG GetCrc( unsigned char* szhashId , int len )
{
ULONG crc = 0;
if ( len )
{
for ( int i = 0 ; i < len ; i++ )
{
crc &= 0xFF;
crc ^= ( szhashId[i] & 0xFF);
crc = (g_crc_list[crc] ^ 0xFF);
}
}
crc ^= 0x0055;
}
那个 unsigned char g_crc_list{
0,7,0x0E,0x9,0x1C,0x1B,
0x12,
0x15,
0x38,
0x3F,
0x36,
31h,
24h ,
23h,
2Ah,
2Dh,
70h,
77h,
7Eh ,
79h,
6Ch,
6Bh,
62h,
65h,
48h,
4Fh,
46h,
41h,
54h,
53h,
5Ah,
5Dh,
0E0h,
0E7h,
0EEh,
0E9h,
0FCh,
0FBh,
0F2h,
0F5h ,
0D8h,
0DFh,
0D6h,
0D1h ,
0C4h ,
0C3h,
0CAh,
0CDh,
90h,
.rdata:03407FB1 db 97h ; ?
.rdata:03407FB2 db 9Eh ; ?
.rdata:03407FB3 db 99h ; ?
.rdata:03407FB4 db 8Ch ; ?
.rdata:03407FB5 db 8Bh ; ?
.rdata:03407FB6 db 82h ; ?
.rdata:03407FB7 db 85h ; ?
.rdata:03407FB8 db 0A8h ; ?
.rdata:03407FB9 db 0AFh ; ?
.rdata:03407FBA db 0A6h ; ?
.rdata:03407FBB db 0A1h ; ?
.rdata:03407FBC db 0B4h ; ?
.rdata:03407FBD db 0B3h ; ?
.rdata:03407FBE db 0BAh ; ?
.rdata:03407FBF db 0BDh ; ?
.rdata:03407FC0 db 0C7h ; ?
.rdata:03407FC1 db 0C0h ; ?
.rdata:03407FC2 db 0C9h ; ?
.rdata:03407FC3 db 0CEh ; ?
.rdata:03407FC4 db 0DBh ; ?
.rdata:03407FC5 db 0DCh ; ?
.rdata:03407FC6 db 0D5h ; ?
.rdata:03407FC7 db 0D2h ; ?
.rdata:03407FC8 db 0FFh
.rdata:03407FC9 db 0F8h ; ?
.rdata:03407FCA db 0F1h ; ?
.rdata:03407FCB db 0F6h ; ?
.rdata:03407FCC db 0E3h ; ?
.rdata:03407FCD db 0E4h ; ?
.rdata:03407FCE db 0EDh ; ?
.rdata:03407FCF db 0EAh ; ?
.rdata:03407FD0 db 0B7h ; ?
.rdata:03407FD1 db 0B0h ; ?
.rdata:03407FD2 db 0B9h ; ?
.rdata:03407FD3 db 0BEh ; ?
.rdata:03407FD4 db 0ABh ; ?
.rdata:03407FD5 db 0ACh ; ?
.rdata:03407FD6 db 0A5h ; ?
.rdata:03407FD7 db 0A2h ; ?
.rdata:03407FD8 db 8Fh ; ?
.rdata:03407FD9 db 88h ; ?
.rdata:03407FDA db 81h ; ?
.rdata:03407FDB db 86h ; ?
.rdata:03407FDC db 93h ; ?
.rdata:03407FDD db 94h ; ?
.rdata:03407FDE db 9Dh ; ?
.rdata:03407FDF db 9Ah ; ?
.rdata:03407FE0 db 27h ; ‘
.rdata:03407FE1 db 20h
.rdata:03407FE2 db 29h ; )
.rdata:03407FE3 db 2Eh ; .
.rdata:03407FE4 db 3Bh ; ;
.rdata:03407FE5 db 3Ch ; <
.rdata:03407FE6 db 35h ; 5
.rdata:03407FE7 db 32h ; 2
.rdata:03407FE8 db 1Fh
.rdata:03407FE9 db 18h
.rdata:03407FEA db 11h
.rdata:03407FEB db 16h
.rdata:03407FEC db 3
.rdata:03407FED db 4
.rdata:03407FEE db 0Dh
.rdata:03407FEF db 0Ah
.rdata:03407FF0 db 57h ; W
.rdata:03407FF1 db 50h ; P
.rdata:03407FF2 db 59h ; Y
.rdata:03407FF3 db 5Eh ; ^
.rdata:03407FF4 db 4Bh ; K
.rdata:03407FF5 db 4Ch ; L
.rdata:03407FF6 db 45h ; E
.rdata:03407FF7 db 42h ; B
.rdata:03407FF8 db 6Fh ; o
.rdata:03407FF9 db 68h ; h
.rdata:03407FFA db 61h ; a
.rdata:03407FFB db 66h ; f
.rdata:03407FFC db 73h ; s
.rdata:03407FFD db 74h ; t
.rdata:03407FFE db 7Dh ; }
.rdata:03407FFF db 7Ah ; z
.rdata:03408000 db 89h ; ?
.rdata:03408001 db 8Eh ; ?
.rdata:03408002 db 87h ; ?
.rdata:03408003 db 80h ; €
.rdata:03408004 db 95h ; ?
.rdata:03408005 db 92h ; ?
.rdata:03408006 db 9Bh ; ?
.rdata:03408007 db 9Ch ; ?
.rdata:03408008 db 0B1h ; ?
.rdata:03408009 db 0B6h ; ?
.rdata:0340800A db 0BFh ; ?
.rdata:0340800B db 0B8h ; ?
.rdata:0340800C db 0ADh ; ?
.rdata:0340800D db 0AAh ; ?
.rdata:0340800E db 0A3h ; ?
.rdata:0340800F db 0A4h ; ?
.rdata:03408010 db 0F9h ; ?
.rdata:03408011 db 0FEh ; ?
.rdata:03408012 db 0F7h ; ?
.rdata:03408013 db 0F0h ; ?
.rdata:03408014 db 0E5h ; ?
.rdata:03408015 db 0E2h ; ?
.rdata:03408016 db 0EBh ; ?
.rdata:03408017 db 0ECh ; ?
.rdata:03408018 db 0C1h ; ?
0C6h ; ?
0CFh ; ?
.rdata:0340801B db 0C8h ; ?
.rdata:0340801C db 0DDh ; ?
.rdata:0340801D db 0DAh ; ?
.rdata:0340801E db 0D3h ; ?
0D4h ; ?
69h ; i
6Eh ; n
67h ; g
60h ; `
75h ; u
72h ; r
7Bh ; {
.rdata:03408027
db 7Ch ; |
.rdata:03408028
db 51h ; Q
.rdata:03408029
db 56h ; V
.rdata:0340802A
db 5Fh ; _
.rdata:0340802B
db 58h ; X
.rdata:0340802C
db 4Dh ; M
.rdata:0340802D
db 4Ah ; J
.rdata:0340802E
db 43h ; C
.rdata:0340802F
db 44h ; D
.rdata:03408030
db 19h
.rdata:03408031
db 1Eh
.rdata:03408032
db 17h
.rdata:03408033
db 10h
.rdata:03408034
db 5
.rdata:03408035
db 2
.rdata:03408036
db 0Bh
.rdata:03408037
db 0Ch
.rdata:03408038
db 21h ; !
.rdata:03408039
db 26h ; &
.rdata:0340803A
db 2Fh ; /
.rdata:0340803B
db 28h ; (
.rdata:0340803C
db 3Dh ; =
.rdata:0340803D
db 3Ah ; :
.rdata:0340803E
db 33h ; 3
.rdata:0340803F
db 34h ; 4
.rdata:03408040
db 4Eh ; N
.rdata:03408041
db 49h ; I
.rdata:03408042
db 40h ; @
.rdata:03408043
db 47h ; G
.rdata:03408044
db 52h ; R
.rdata:03408045
db 55h ; U
.rdata:03408046
db 5Ch ; \
.rdata:03408047
db 5Bh ; [
.rdata:03408048
db 76h ; v
.rdata:03408049
db 71h ; q
.rdata:0340804A
db 78h ; x
.rdata:0340804B
db 7Fh ;
.rdata:0340804C
db 6Ah ; j
.rdata:0340804D
db 6Dh ; m
.rdata:0340804E
db 64h ; d
.rdata:0340804F
db 63h ; c
.rdata:03408050
db 3Eh ; >
.rdata:03408051
db 39h ; 9
.rdata:03408052
db 30h ; 0
.rdata:03408053
db 37h ; 7
.rdata:03408054
db 22h ; "
.rdata:03408055
db 25h ; %
.rdata:03408056
db 2Ch ; ,
.rdata:03408057
db 2Bh ; +
.rdata:03408058
db 6
.rdata:03408059
db 1
.rdata:0340805A
db 8
.rdata:0340805B
db 0Fh
.rdata:0340805C
db 1Ah
.rdata:0340805D
db 1Dh
.rdata:0340805E
db 14h
.rdata:0340805F
db 13h
.rdata:03408060
db 0AEh ; ?
.rdata:03408061
db 0A9h ; ?
.rdata:03408062
db 0A0h ; ?
.rdata:03408063
db 0A7h ; ?
.rdata:03408064
db 0B2h ; ?
.rdata:03408065
db 0B5h ; ?
.rdata:03408066
db 0BCh ; ?
.rdata:03408067
db 0BBh ; ?
.rdata:03408068
db 96h ; ?
.rdata:03408069
db 91h ; ?
.rdata:0340806A
db 98h ; ?
.rdata:0340806B
db 9Fh ; ?
.rdata:0340806C
db 8Ah ; ?
.rdata:0340806D
db 8Dh ; ?
.rdata:0340806E
db 84h ; ?
.rdata:0340806F
db 83h ; ?
.rdata:03408070
db 0DEh ; ?
.rdata:03408071
db 0D9h ; ?
.rdata:03408072
db 0D0h ; ?
.rdata:03408073
db 0D7h ; ?
.rdata:03408074
db 0C2h ; ?
.rdata:03408075
db 0C5h ; ?
.rdata:03408076
db 0CCh ; ?
.rdata:03408077
db 0CBh ; ?
.rdata:03408078
db 0E6h ; ?
.rdata:03408079
db 0E1h ; ?
.rdata:0340807A
db 0E8h ; ?
.rdata:0340807B
db 0EFh ; ?
.rdata:0340807C
db 0FAh ; ?
.rdata:0340807D
db 0FDh ; ?
.rdata:0340807E
db 0F4h ; ?
.rdata:0340807F
db 0F3h ; ?
2.第二个隐含数据
第二个隐含数据是在文件夹下resources.pak文件鼠标框的位置,取64个字节。放入sha256的计算第一个字符窜參数
算法例如以下
unsigned char* GetResourcePak()
{
//unsigned long source_id = 0x269;
//读取并映射resource pak 文件
//校验
//Resource.pak
/*
0x4CB0000--->0x4CB03D1
if( head == 4 )
{
if( 0x486*6 + 15 < size )
{
0x486++;
if( (heade += 0xB) == 0x486*6 + 15 )
{
heade += 6;
}
}
}
}
*/
//31F5BD
//获得地址
chrome_resource_pak sb_pak;
sb_pak.sb_id = 0x269;
GetSourceId0(&sb_pak,
(unsigned char *)0x4cb00000+9,
0x486,
sizeof(chrome_resource_hash_pak));
return NULL;
}