Giter VIP home page Giter VIP logo

Comments (14)

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 2

If you purchase 2 matching devices, use the same SD card, same time zone/language, same OS preferences, same browser and release, same settings/permission, same network, and don't modify storage, the fingerprints can match.

CreepJS does not showcase or even attempt more advanced techniques. There is also code that is used for analysis and does not get factored into the fingerprint, and there are also behavioral patterns not implemented here. Combine that with site-specific events, and it becomes more possible to distinguish matching browsers.

from creepjs.

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 1

Negative, it's locked down. However, you can swap out the URLs and send requests to your server environment.

from creepjs.

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 1

Sure, Fingerprint ID is a hash of browser, engine, platform, and hardware features reported by the browser. Fingerprints can be generated in a raw form or hash identifier, or both.

Raw values are great for server-side analysis. Hash identifiers are useful for snapshot history and grouping patterns.

There are many techniques, but I recommend starting out simple and fast. Give this lite fingerprint script a try. It runs in under 5ms.

function getHash(x) {
    const json = JSON.stringify(x)
	const hash = json
        .split('')
        .reduce((hash, _, i) => Math.imul(31, hash) + json.charCodeAt(i) | 0, 0x811c9dc5)
	return ('0000000' + (hash >>> 0).toString(16)).substr(-8)
}

function getLiteFingerprint() {
    const { width, height, availWidth, availHeight } = screen // OS/Engine Screen
    const {
        deviceMemory, // Memory
        hardwareConcurrency, // Cores
        maxTouchPoints, // Touch
        platform, // OS
        language, // Lang Preference 
        languages, // Lang Most Preferred
    } = navigator
    const { timeZone, locale } = Intl.DateTimeFormat().resolvedOptions() // OS/Engine Timezone and Language
    const browserAndClientFeatures = Object.getOwnPropertyNames(window); // Browser Release and Client Features
    
    return [
        width,
        height,
        availWidth,
        availHeight,
        devicePixelRatio,
        deviceMemory,
        hardwareConcurrency,
        maxTouchPoints,
        platform,
        matchMedia('(prefers-color-scheme:light)').matches, // Color Preference
        matchMedia('(prefers-reduced-motion:reduce)').matches, // Animation Preference
        timeZone,
        locale,
        language,
        languages,
        browserAndClientFeatures,
    ]
}
const start = performance.now()
const result = getLiteFingerprint()
console.clear()
console.log(`complete: ${(performance.now() - start).toFixed(2)}ms`)
console.log(`fingerprint: ${getHash(result)}`)

from creepjs.

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 1

Strings are changing.

Try commenting out the browserAndClientFeatures value or hash it separately. If you have extensions installed on your browser, such as DuckDuckGo, some store random properties on the window object.

difficulty removing useragent

User agent items are mostly in worker and navigator files.

from creepjs.

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 1

For Chrome, you can get the number of bytes allocated to the site for storage. That's over 128 Billion possible fingerprints on a 120 GB device. Not many limitations there.

from creepjs.

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 1

Chrome on Android provides a significant amount of entropy. You can get the exact device model and network condition (Wi-Fi, Ethernet, etc.). Moreover, on mobile, the device pixel ratio and screen resolution combined can hint to the device model for all browsers.

from creepjs.

abrahamjuliot avatar abrahamjuliot commented on September 26, 2024 1

The other factor to consider is the context fingerprinting occurs. A fingerprint on site A can be more unique to a user than it is on site B.

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

Could you please explain in more detail?

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

Can you elaborate on the process of creating an FP ID?
I want to make a fingerprint without looking at the useragent. While specifying which device

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

Thank you 😁 very much for your detailed answer.

However, it is not the result I want.
Every time I run the code you have guided me to
Strings are changing.

ex)
"fingerprint: afe25423"
"fingerprint: 6b722854"

The conditions I need to meet are as follows.

  1. The only key that can be specified by any browser

  2. Do not allow duplication

=============

So I created sophisticated creepjs with typescript.
After building with yarn, converting to javascript, removing useragent and api, and checking in the local environment. I am having difficulty removing useragent items during this process.

We're analyzing well-written code after the build.

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

Thank you so much for your help. I will proceed as you said on March 30th. Thank you!! I will continue to analyze the code :)

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

Closed issue as it didn't solve the problem.

What I was trying to do was a way to specify using fingerprints on mobile devices even if the browser is different.
Fingerprints seem to have limitations.

Thanks for your help. 😋

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

me and my friend
Assuming that the device model is the same and all settings are the same
Is it possible to distinguish me from my friends using fingerprints?

ex)
me friend
phonemodel phone1 phone1
fingerfirnt(chrome) aaaa bbbb
fingerfrint(edge) aaaa bbbb
fingerfrint(safari) aaaa bbbb

I think the creep.js code is really sophisticated.
But what I want is fingerprint technology
judged to be impossible.

from creepjs.

DongJu-Na avatar DongJu-Na commented on September 26, 2024

thanks for the answer 😊

from creepjs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.