Browser 是否可以通过返回虚假安装字体列表来阻止浏览器指纹识别?
是否可以编写一个程序来屏蔽安装在计算机上的字体集,使字体列表看起来“普通”,并且在创建~唯一指纹时没有多大价值 某些浏览器可能对此提供了一些支持,但对于任何浏览器,您都可以拦截winapi调用以枚举字体列表 基本上,您编写了一个dll,该dll将加载到浏览器进程中,然后它将在枚举字体时拦截浏览器对操作系统的调用。只需查找windows中用于枚举字体的函数,并在dll中伪造它们。(这可能需要一些工作,因为您必须重写字体枚举逻辑) 另外,一些浏览器可能只是读取注册表来枚举字体,而不使用专门的FontFunction,在这种情况下,您必须截取注册表winapi函数,并确保它们报告您想要的字体列表 要将dll加载到目标进程中,可以使用Windows挂钩,或使用.exe文件编辑器添加dll以导入浏览器的exe文件表。注册表中还有一个特殊的位置,如果在那里添加dll,它将加载到系统中的每个进程。(然后您必须检查浏览器进程,然后只截获api调用,这样系统上的每个程序都不会得到伪造字体列表) 此外,浏览器可能会在另一个进程中运行某些插件、activex控件、java或类似的东西(例如,chrome会在不同进程中运行每个选项卡),因此我会检查每个进程的父进程,如果您看到它是由浏览器启动的,也会截取该进程中的字体列表。这样,目标网页将无法通过flash、插件、java或其他方式获得真正的字体列表 在这里可以找到拦截winapi调用的良好开端: 所以这是一种可靠的方法,虽然不能在一小时内完成,但也不太复杂 当然,这不仅会使您的字体列表伪造,还会使浏览器无法看到并能够显示列表中没有的字体 当然,这些都适用于Windows,但在其他操作系统上也有类似的方法 另外,值得注意的是,如果禁用了javascript和插件(flash),我认为网页无法读取字体列表。Browser 是否可以通过返回虚假安装字体列表来阻止浏览器指纹识别?,browser,fonts,privacy,Browser,Fonts,Privacy,是否可以编写一个程序来屏蔽安装在计算机上的字体集,使字体列表看起来“普通”,并且在创建~唯一指纹时没有多大价值 某些浏览器可能对此提供了一些支持,但对于任何浏览器,您都可以拦截winapi调用以枚举字体列表 基本上,您编写了一个dll,该dll将加载到浏览器进程中,然后它将在枚举字体时拦截浏览器对操作系统的调用。只需查找windows中用于枚举字体的函数,并在dll中伪造它们。(这可能需要一些工作,因为您必须重写字体枚举逻辑) 另外,一些浏览器可能只是读取注册表来枚举字体,而不使用专门的Font
字体检测器
#font_检测器_框{可见性:隐藏;}
#font_detector_box span.font{填充:0px;边距:0px;边框:无;字体大小:10px;字母间距:1px;}
字体检测页面
此页面是字体检测技术的示例
计算机上安装的字体列表
嗯
嗯
嗯
嗯
嗯
嗯
var fontmasures=新数组();
//网络安全
fontMeasures[“Arial”]=新阵列(“30px”、“13px”);
fontMeasures[“Comics_Sans_MS”]=新阵列(“27px”、“14px”);
fontMeasures[“Georgia”]=新阵列(“33px”、“13px”);
fontMeasures[“Helvetica”]=新阵列(“30px”、“13px”);
fontMeasures[“Verdana”]=新阵列(“36px”、“12px”);
fontMeasures[“Times_New_Roman”]=新阵列(“27px”、“12px”);
var msg=“”;
$(“.font”和“#font_检测器_框”)。每个(函数(){
var fontFamily=$(this.attr(“class”).toString().replace(“font”),replace(“family”),replace;
var width=$(this.css(“width”);
var height=$(this.css(“height”);
//警报(宽度+高度);
如果(fontMeasures[fontFamily][0]==宽度和fontMeasures[fontFamily][1]==高度){
var family=fontFamily.replace(/ug/g,“”);
味精+=''+家族+'
;
}
});
$(“字体列表显示”).html(msg);
感谢您提供链接,并介绍了字体列表的各种组合方式。使用TamperData之类的浏览器插件,仅仅修改服务器请求是否有效?这无助于防止字体枚举。您能否详细介绍一下您在这里为解决此问题所做的工作?这里有很多代码,但描述不多。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Font detector</title>
<style type="text/css" media="screen">
#font_detector_box{ visibility: hidden; }
#font_detector_box span.font{ padding: 0px; margin: 0px; border: none; font-size: 10px; letter-spacing: 1px; }
</style>
</head>
<body>
<h1>Font Detection Page</h1>
<p>This page is a sample for font detection tecniques</p>
<h2>List of fonts installed on your machine</h2>
<span id="font_list_display">
</span>
<!-- Invisible div -->
<div id="font_detector_box">
<span class="font family_Arial" style="font-family: Arial, Verdana !important">mmm</span>
<span class="font family_Comics_Sans_MS" style="font-family: Comic Sans MS, Arial !important">mmm</span>
<span class="font family_Georgia" style="font-family: Georgia, Arial !important">mmm</span>
<span class="font family_Helvetica" style="font-family: Helvetica, Verdana !important">mmm</span>
<span class="font family_Verdana" style="font-family: Verdana, Arial !important">mmm</span>
<span class="font family_Times_New_Roman" style="font-family: Times New Roman, Arial !important">mmm</span>
</div>
</body>
<script type="text/javascript"src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript">
var fontMeasures = new Array( );
//Web safe
fontMeasures["Arial"] = new Array( "30px", "13px" );
fontMeasures["Comics_Sans_MS"] = new Array( "27px" , "14px" );
fontMeasures["Georgia"] = new Array( "33px" , "13px" );
fontMeasures["Helvetica"] = new Array( "30px" , "13px" );
fontMeasures["Verdana"] = new Array( "36px" , "12px" );
fontMeasures["Times_New_Roman"] = new Array( "27px" , "12px" );
var msg = "";
$( ".font" , "#font_detector_box" ).each( function( ){
var fontFamily = $( this ).attr( "class" ).toString( ).replace( "font " , "" ).replace( "family_" , "" );
var width = $( this ).css( "width" );
var height = $( this ).css( "height" );
//alert( width + height );
if( fontMeasures[fontFamily][0] === width && fontMeasures[fontFamily][1] === height ){
var family = fontFamily.replace( /_/g , " " );
msg += '<span class="font-family: '+ family + ';">' + family + '</span> <br/>';
}
});
$( "#font_list_display" ).html( msg );
</script>
</html>