浏览器指纹js代码实现重写(WebRtc,WebGl,Rect,Audio)

    JS获取浏览器的指纹,个人总结如下几个方案

1、Canvas:用Canvas画一张10X10像素的图片,随便找几个位置加写黑点。把这张图片转成base64字符串,用360浏览器和谷歌浏览器得到的结果,是不一样的,2台不同电脑的360浏览器结果也不一样。我自己想,应该是生成一张图片,关系到浏览器,主板,显卡,cpu都有参与,所以稍微有点不一致,base64的结果就会有出入。

2、Plugins:获取浏览器的navigator.plugins(浏览器插件)

3、UserAgent:最典型的UA

4、Audio:和canvas类似,把一段音频转成base64,不同环境会有差异

5、Font:通过获取你本地电脑所有的字体,来生成一段指纹。但是js哪有读取字体的功能呢,这个就比较妖了。首先先把全世界的所有字体名字都找出来(假设有100个),然后定义100个span,每个span一个字体,然后再获取这些span的宽度,如果这些字体存在,那么和不存在的字体,宽度是不一样的,比如m、l这种字母,不同字体的宽度是不同的。这是css字体。还有canvas字体,逻辑也是类似,用canvas创建一个字符串,然后定义不同字体获取宽度。

6、Rect:定义一块区域,让这块区域是斜的,然后求这块区域的坐标和宽高。因为这个可以精确到小数点好多位,所以不同环境下的结果也会稍有不同。

7、WebGl:和canvans类似,也是画图,看base64结果

8、WebRtc:这个其实不是浏览器指纹,但是用他的目的是和指纹一样,为了识别客户端的唯一新。这东西能获取到你的真实IP(就是你挂了代理,也能获取得到)。我一开始觉得这太牛逼了吧,细研究发现原理其实很简单,这东西用了一个新的协议stun,代理代的是http协议,所以自然和stun协议不挨着,stun协议在谷歌控制台里也没显示,所以很容易忽略。

现在有很多指纹浏览器,通过对chrome的二次开发,实现指纹重写。但是感觉太重了,完全可以用纯js来实现这个东西

通过几天的学习,做了一个浏览器插件(其实就是纯js代码),来实现指纹重写
在这里插入图片描述
功能其实比较简单(我也没想出啥什么牛逼功能,有需要的可以留言,好建议就改)
1,创建环境,设置要重写哪些项目
2,查看当前网站是否用了指纹检测,注意,这个检测只是参考,因为网站可能就用了这个功能,所以要自己去识别
3,清空cookie。这个虽然可指纹没啥关系,但是实际应该有用,如果cookie不换,只改了指纹,这不还是一个人
4,获取本机ip,这个只是为了验证webrtc可以在代理情况下获取本机ip

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
以下是使用WebRTC实现浏览器录音并保存文件的详细代码: HTML部分: ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>WebRTC录音</title> </head> <body> <button id="startButton">开始录音</button> <button id="stopButton" disabled>停止录音</button> <script src="app.js"></script> </body> </html> ``` JavaScript部分: ``` let audioRecorder; let audioChunks = []; const startButton = document.getElementById('startButton'); const stopButton = document.getElementById('stopButton'); startButton.addEventListener('click', startRecording); stopButton.addEventListener('click', stopRecording); function startRecording() { navigator.mediaDevices.getUserMedia({audio: true}) .then(stream => { audioRecorder = new MediaRecorder(stream); audioRecorder.addEventListener('dataavailable', event => { audioChunks.push(event.data); }); audioRecorder.start(); startButton.disabled = true; stopButton.disabled = false; }).catch(err => { console.log('getUserMedia Error:', err); }); } function stopRecording() { audioRecorder.stop(); audioRecorder.stream.getTracks().forEach(track => track.stop()); startButton.disabled = false; stopButton.disabled = true; saveRecordedAudio(); } function saveRecordedAudio() { const audioBlob = new Blob(audioChunks, {type: 'audio/wav'}); const audioUrl = URL.createObjectURL(audioBlob); const link = document.createElement('a'); link.href = audioUrl; link.download = 'recorded_audio.wav'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } ``` 代码解释: 1. 首先,我们定义了两个按钮:开始录音和停止录音,并将它们添加到HTML中。 2. 然后,我们定义了一个`audioRecorder`变量和一个`audioChunks`数组来存储录制的音频数据。 3. 当用户单击“开始录音”按钮时,我们使用`getUserMedia()`方法请求访问麦克风,并将流传递给`MediaRecorder`对象。我们还为`MediaRecorder`对象添加了一个`dataavailable`事件监听器,以便在音频数据可用时将它们推入`audioChunks`数组中。 4. 当用户单击“停止录音”按钮时,我们停止`MediaRecorder`对象,停止流并调用`saveRecordedAudio()`函数来保存录制的音频数据。 5. 在`saveRecordedAudio()`函数中,我们将`audioChunks`数组中的音频数据转换为一个Blob对象,并创建一个URL以便下载该文件。我们创建一个链接元素,并将其添加到HTML中,然后触发click事件来下载该文件。最后,我们从HTML中删除链接元素。 注意:由于浏览器安全限制,必须在服务器上运行此代码,否则将无法访问麦克风。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值