Skip to content

Commit 6159b05

Browse files
Update identity_trace.js with close button, text tags, and full engine compatibility
1 parent 10b6d6c commit 6159b05

1 file changed

Lines changed: 74 additions & 17 deletions

File tree

Lines changed: 74 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,86 @@
11
/**
2-
* Pinpoint Module: Identity Trace
2+
* Pinpoint Module: Identity Trace (Enhanced)
33
* Level 3: Critical Intelligence
4+
*
5+
* Detects active social platform sessions using cross‑origin resource
6+
* probes. Enhanced with a larger platform list, robust error handling,
7+
* a live visual panel, and all data kept strictly local.
48
*/
9+
510
export default {
6-
id: 'social',
11+
id: 'identity_trace', // Must match the manifest entry
712
title: 'Identity_Trace',
813
level: 3,
9-
info: "Detects active social platform logins for profile identification.",
10-
steps: ["Detect sessions via XS-Leaks.", "Map social ecosystem."],
14+
info: 'Detects active social platform logins via heuristic image probes.',
15+
steps: [
16+
'Probe protected login‑walled resources.',
17+
'Analyse load success/failure patterns.',
18+
],
1119
run: async () => {
20+
// Expanded list of platforms with detection URLs
1221
const platforms = [
13-
{ name: 'Facebook', url: 'https://www.facebook.com/favicon.ico' },
1422
{ name: 'Google', url: 'https://accounts.google.com/favicon.ico' },
15-
{ name: 'Twitter', url: 'https://twitter.com/favicon.ico' }
23+
{ name: 'Facebook', url: 'https://www.facebook.com/favicon.ico' },
24+
{ name: 'Twitter', url: 'https://twitter.com/favicon.ico' },
25+
{ name: 'Instagram', url: 'https://www.instagram.com/favicon.ico' },
26+
{ name: 'LinkedIn', url: 'https://www.linkedin.com/favicon.ico' },
27+
{ name: 'GitHub', url: 'https://github.com/favicon.ico' },
28+
{ name: 'Reddit', url: 'https://www.reddit.com/favicon.ico' },
29+
{ name: 'TikTok', url: 'https://www.tiktok.com/favicon.ico' },
30+
{ name: 'Snapchat', url: 'https://www.snapchat.com/favicon.ico' },
1631
];
17-
return new Promise((resolve) => {
18-
const results = {};
19-
let checked = 0;
20-
platforms.forEach(p => {
32+
33+
// Create a floating panel for live feedback
34+
const panel = document.createElement('div');
35+
panel.id = '__identity_trace_panel';
36+
panel.style.cssText =
37+
'position:fixed;top:10px;right:10px;z-index:2147483645;background:rgba(0,0,0,0.85);color:#0f0;' +
38+
'font-family:monospace;font-size:12px;padding:12px;border-radius:6px;max-width:350px;max-height:300px;' +
39+
'overflow-y:auto;white-space:pre-wrap;word-break:break-all;';
40+
panel.innerHTML = '<button onclick="this.parentNode.remove()" style="position:absolute;top:4px;right:6px;background:none;border:none;color:#0f0;font-size:16px;cursor:pointer;">&times;</button><strong>[SEARCH] Probing social logins...</strong><br>';
41+
document.body.appendChild(panel);
42+
43+
const probePlatform = (name, url) => {
44+
return new Promise((resolve) => {
2145
const img = new Image();
22-
img.onload = () => { results[p.name] = "LOGGED_IN"; if(++checked === platforms.length) resolve(results); };
23-
img.onerror = () => { results[p.name] = "NOT_LOGGED_IN"; if(++checked === platforms.length) resolve(results); };
24-
img.src = p.url;
46+
const timeout = setTimeout(() => {
47+
// If the image hasn't loaded or errored within 3s, treat as error
48+
img.src = ''; // abort
49+
panel.innerHTML += `[TIMEOUT] ${name}: TIMEOUT (likely blocked)<br>`;
50+
console.log(`[identity_trace] ${name}: TIMEOUT`);
51+
resolve({ [name]: 'BLOCKED' });
52+
}, 3000);
53+
54+
img.onload = () => {
55+
clearTimeout(timeout);
56+
panel.innerHTML += `[+] ${name}: LOGGED_IN<br>`;
57+
console.log(`[identity_trace] ${name}: LOGGED_IN`);
58+
resolve({ [name]: 'LOGGED_IN' });
59+
};
60+
img.onerror = () => {
61+
clearTimeout(timeout);
62+
panel.innerHTML += `[-] ${name}: NOT_LOGGED_IN<br>`;
63+
console.log(`[identity_trace] ${name}: NOT_LOGGED_IN`);
64+
resolve({ [name]: 'NOT_LOGGED_IN' });
65+
};
66+
// Append random query to avoid caching
67+
img.src = `${url}?${Date.now()}_${Math.random().toString(36).substr(2)}`;
2568
});
26-
setTimeout(() => resolve(results), 2500);
27-
});
28-
}
29-
};
69+
};
70+
71+
// Probe all platforms concurrently
72+
const probes = platforms.map(p => probePlatform(p.name, p.url));
73+
const resultsArray = await Promise.all(probes);
74+
75+
// Merge into a single object
76+
const results = Object.assign({}, ...resultsArray);
77+
78+
// Final panel update
79+
const summary = `[DONE] Probing complete. ${Object.values(results).filter(v => v === 'LOGGED_IN').length} sessions found.`;
80+
panel.innerHTML += `<br>${summary}`;
81+
console.log('[identity_trace] Final results:', results);
82+
setTimeout(() => panel.remove(), 10000);
83+
84+
return results;
85+
},
86+
};

0 commit comments

Comments
 (0)