init
This commit is contained in:
65
libs/browser-fingerprint/canvas.go
Normal file
65
libs/browser-fingerprint/canvas.go
Normal file
@@ -0,0 +1,65 @@
|
||||
package browserfingerprint
|
||||
|
||||
import "fmt"
|
||||
|
||||
func GetChangeCanvasJavaScript(rgba [4]int) string {
|
||||
return fmt.Sprintf(`
|
||||
const getImageData = CanvasRenderingContext2D.prototype.getImageData;
|
||||
|
||||
const noisify = (canvas, context) => {
|
||||
if (context) {
|
||||
const shift = {
|
||||
r: %d,
|
||||
g: %d,
|
||||
b: %d,
|
||||
a: %d,
|
||||
};
|
||||
const width = canvas.width;
|
||||
const height = canvas.height;
|
||||
|
||||
if (width && height) {
|
||||
const imageData = getImageData.apply(context, [0, 0, width, height]);
|
||||
|
||||
for (let i = 0; i < height; i++)
|
||||
for (let j = 0; j < width; j++) {
|
||||
const n = i * (width * 4) + j * 4;
|
||||
imageData.data[n + 0] = imageData.data[n + 0] + shift.r;
|
||||
imageData.data[n + 1] = imageData.data[n + 1] + shift.g;
|
||||
imageData.data[n + 2] = imageData.data[n + 2] + shift.b;
|
||||
imageData.data[n + 3] = imageData.data[n + 3] + shift.a;
|
||||
}
|
||||
|
||||
|
||||
context.putImageData(imageData, 0, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
HTMLCanvasElement.prototype.toBlob = new Proxy(HTMLCanvasElement.prototype.toBlob, {
|
||||
apply(target, self, args) {
|
||||
noisify(self, self.getContext('2d'));
|
||||
|
||||
return Reflect.apply(target, self, args);
|
||||
},
|
||||
});
|
||||
|
||||
HTMLCanvasElement.prototype.toDataURL = new Proxy(HTMLCanvasElement.prototype.toDataURL, {
|
||||
apply(target, self, args) {
|
||||
noisify(self, self.getContext('2d'));
|
||||
|
||||
return Reflect.apply(target, self, args);
|
||||
},
|
||||
});
|
||||
|
||||
CanvasRenderingContext2D.prototype.getImageData = new Proxy(
|
||||
CanvasRenderingContext2D.prototype.getImageData,
|
||||
{
|
||||
apply(target, self, args) {
|
||||
noisify(self.canvas, self);
|
||||
|
||||
return Reflect.apply(target, self, args);
|
||||
},
|
||||
}
|
||||
);
|
||||
`, rgba[0], rgba[1], rgba[2], rgba[3])
|
||||
}
|
||||
Reference in New Issue
Block a user