Skip to content

实现icon的hash识别 #2

@4ESTSEC

Description

@4ESTSEC

这里我借用了https://github.com/zR00t1/iconhash的第三方库,然后实现对网站icon进行hash编码
第三方库:
var MurmurHash3={mul32:function(m,n){var nlo=n&0xffff;var nhi=n-nlo;return((nhi*m|0)+(nlo*m|0))|0;},hashBytes:function(data,len,seed){var c1=0xcc9e2d51,c2=0x1b873593;var h1=seed;var roundedEnd=len&~0x3;for(var i=0;i<roundedEnd;i+=4){var k1=(data.charCodeAt(i)&0xff)|((data.charCodeAt(i+1)&0xff)<<8)|((data.charCodeAt(i+2)&0xff)<<16)|((data.charCodeAt(i+3)&0xff)<<24);k1=this.mul32(k1,c1);k1=((k1&0x1ffff)<<15)|(k1>>>17);k1=this.mul32(k1,c2);h1^=k1;h1=((h1&0x7ffff)<<13)|(h1>>>19);h1=(h1*5+0xe6546b64)|0;}k1=0;switch(len%4){case 3:k1=(data.charCodeAt(roundedEnd+2)&0xff)<<16;case 2:k1|=(data.charCodeAt(roundedEnd+1)&0xff)<<8;case 1:k1|=(data.charCodeAt(roundedEnd)&0xff);k1=this.mul32(k1,c1);k1=((k1&0x1ffff)<<15)|(k1>>>17);k1=this.mul32(k1,c2);h1^=k1;}h1^=len;h1^=h1>>>16;h1=this.mul32(h1,0x85ebca6b);h1^=h1>>>13;h1=this.mul32(h1,0xc2b2ae35);h1^=h1>>>16;return h1;},};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){module.exports=MurmurHash3;}
content.js文件中的getFaviconHash()函数实现:
`async function getFaviconHash() {
try {
// 获取favicon的URL
let faviconUrl = '';
const faviconElement = document.querySelector('link[rel="icon"], link[rel="shortcut icon"]');

if (faviconElement) {
  faviconUrl = faviconElement.href;
} else {
  // 如果没有找到favicon标签,使用默认路径
  faviconUrl = new URL('/favicon.ico', window.location.origin).href;
}

// 获取favicon的内容
const response = await fetch(faviconUrl);
const blob = await response.blob();

// 转换为base64
return new Promise((resolve, reject) => {
  const reader = new FileReader();
  reader.onload = function(e) {
    try {
      // 移除base64前缀(data:image/xxx;base64,)
      const base64String = e.target.result.split(',')[1];
      // 每76个字符插入换行符
      const formattedBase64 = base64String.replace(/.{76}/g, '$&\n') + '\n';
      // 计算hash
      const hash = MurmurHash3.hashBytes(formattedBase64, formattedBase64.length, 0);
      resolve(hash.toString());
      console.log('Favicon Hash:', hash.toString());
    } catch (error) {
      reject(error);
    }
  };
  reader.onerror = reject;
  reader.readAsDataURL(blob);
});

} catch (error) {
console.error('获取favicon hash失败:', error);
return null;
}
}`

Image
这里自定义的ruoyi的hash值为:-1231872293

Image

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions