Skip to content

实现icon的hash识别 #2

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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