Is it possible to tear down browser fingerprints by returning a list of dummy fonts?

Is it possible to write a program that disguises a set of fonts installed on a computer, so "plain vanilla" will appear in the font list and will not matter much when creating a unique fingerprint? https://panopticlick.eff.org/

+3
source share
2 answers

Some browsers have some support, but with any browser you can intercept winapi calls to list the fonts.

Basically you write a DLL that will be loaded into the browser process and then intercepts the calls that the browser will make in the OS when it will list the fonts. Just find out what functions in the windows are used to enumerate fonts and fake them in your DLL. (this may be some work, because you have to rewrite the font enumeration logic).

In addition, some of the browsers can read the registry very simply to list the fonts, rather than using specialized font functions, in which case you will have to intercept the winapi registry functions and ensure that they list the font list that you want.

DLL Windows .exe, dll exe . , , dll, . ( api, ).

, , activex java - (, chrome ), "", , , . , - flash, , java - .

winapi : http://www.codeproject.com/KB/system/InterceptWinAPICalls.aspx

, , , .

, , , .

Windows, , , , .

, , , - , javascript (flash).

+1
<!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>
0

Source: https://habr.com/ru/post/1784069/


All Articles