Stalker
JavaScript
Mengambil informasi data profile user tiktok menggunakan username
/**
* Judul : TikTok Stalker
* Base URL : https://www.tiktok.com
* Author : Cx99 - t.me/exploit99
* Deskripsi : Mengambil informasi data profile user tiktok menggunakan username
* Channel : https://whatsapp.com/channel/0029VbCSF8sA89MopCVOYW06
*/
const axios = require('axios');
const cheerio = require('cheerio');
async function stalkTikTok(username) {
username = username.replace(/^@/, '');
const url = `https://www.tiktok.com/@${username}`;
const userAgent = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36';
try {
const response = await axios.get(url, {
headers: {
'User-Agent': userAgent,
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
}
});
const $ = cheerio.load(response.data);
const scriptData = $('#__UNIVERSAL_DATA_FOR_REHYDRATION__').text();
if (!scriptData) {
return {
status: false,
message: "Gagal memproses data: Data rehydration tidak ditemukan (mungkin terblokir WAF)."
};
}
const data = JSON.parse(scriptData);
if (!data['__DEFAULT_SCOPE__'] || !data['__DEFAULT_SCOPE__']['webapp.user-detail']) {
return {
status: false,
message: "Data user tidak ditemukan. Pastikan username TikTok yang dimasukkan benar."
};
}
const userDetail = data['__DEFAULT_SCOPE__']['webapp.user-detail'];
if (userDetail.statusCode !== 0 || !userDetail.userInfo) {
return {
status: false,
message: "User tidak ditemukan atau akun di-private."
};
}
const user = userDetail.userInfo.user;
const stats = userDetail.userInfo.stats;
return {
status: true,
data: {
username: user.uniqueId,
nickname: user.nickname,
avatar: user.avatarLarger || user.avatarMedium,
signature: user.signature,
verified: user.verified,
stats: {
followers: stats.followerCount,
following: stats.followingCount,
video_upload: stats.videoCount,
likes: stats.heartCount,
friends: stats.friendCount
},
profile_url: url
}
};
} catch (error) {
return {
status: false,
message: `Gagal memproses data: ${error.message}`
};
}
}
module.exports = stalkTikTok;
if (require.main === module) {
const args = process.argv.slice(2);
if (args.length === 0) {
console.log("? Penggunaan: node stalktt.js <username>");
console.log("? Contoh: node stalktt.js asololepisanwan");
process.exit(1);
}
const username = args[0];
stalkTikTok(username)
.then(res => console.log(JSON.stringify(res, null, 2)))
.catch(err => console.error(err));
}
Cx99 • 4 views
Stalker
JavaScript
Mengambil informasi data profile user Threads
/**
* Judul : Threads Stalker
* Base URL : https://www.threads.net
* Author : Cx99 - t.me/exploit99
* Deskripsi : Mengambil informasi data profile user Threads
* Channel : https://whatsapp.com/channel/0029VbCSF8sA89MopCVOYW06
*/
const axios = require('axios');
const cheerio = require('cheerio');
async function stalkThreads(username) {
username = username.replace(/^@/, '');
const url = `https://www.threads.net/@${username}`;
// Headers lengkap untuk bypass blokir dari server
const headers = {
"authority": "www.threads.net",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "en-US,en;q=0.9",
"sec-ch-ua": "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
};
try {
const response = await axios.get(url, { headers });
const html = response.data;
const $ = cheerio.load(html);
let userData = null;
$('script[type="application/json"]').each((i, el) => {
const text = $(el).html();
// Data profile Threads tersimpan di script dengan follower_count
if (text && text.includes('follower_count')) {
try {
// Ekstraksi data menggunakan regex karena JSON aslinya sangat besar (Relay cache)
const usernameMatch = text.match(/"username":"([^"]+)"/);
const pkMatch = text.match(/"pk":"([^"]+)"/);
const hdPpMatch = text.match(/"hd_profile_pic_version":\{"url":"([^"]+)"/);
const ppMatch = text.match(/"profile_pic_url":"([^"]+)"/);
const nameMatch = text.match(/"full_name":"([^"]*)"/);
const followersMatch = text.match(/"follower_count":(\d+)/);
const bioMatch = text.match(/"biography":("(?:[^"\\]|\\.)*")/);
const verifiedMatch = text.match(/"is_verified":(true|false)/);
if (usernameMatch) {
let bio = "";
if (bioMatch) {
try {
bio = JSON.parse(bioMatch[1]);
} catch(e) {
bio = bioMatch[1];
}
}
let avatar = hdPpMatch ? hdPpMatch[1] : (ppMatch ? ppMatch[1] : "");
try { avatar = JSON.parse(`"${avatar}"`); } catch(e) {}
userData = {
username: usernameMatch[1],
id: pkMatch ? pkMatch[1] : null,
full_name: nameMatch ? JSON.parse(`"${nameMatch[1]}"`) : null,
profile_pic: avatar,
followers: followersMatch ? parseInt(followersMatch[1]) : 0,
biography: bio,
is_verified: verifiedMatch ? verifiedMatch[1] === 'true' : false,
profile_url: url
};
}
} catch (e) {
// Abaikan error parsing per chunk
}
}
});
if (!userData) {
return {
status: false,
message: "Data user tidak ditemukan. Pastikan username valid."
};
}
return {
status: true,
data: userData
};
} catch (error) {
return {
status: false,
message: `Gagal memproses data: ${error.message}`
};
}
}
module.exports = stalkThreads;
if (require.main === module) {
const args = process.argv.slice(2);
if (args.length === 0) {
console.log("? Penggunaan: node stalkthreads.js <username>");
console.log("? Contoh: node stalkthreads.js clarissadaily.ig");
process.exit(1);
}
const username = args[0];
stalkThreads(username)
.then(res => console.log(JSON.stringify(res, null, 2)))
.catch(err => console.error(err));
}
Cx99 • 3 views
Stalker
JavaScript
Mengambil data profile channel YouTube
/**
* Judul : YouTube Stalker
* Base URL : https://www.youtube.com
* Author : Cx99 - t.me/exploit99
* Deskripsi : Mengambil data profile channel YouTube
* Channel : https://whatsapp.com/channel/0029VbCSF8sA89MopCVOYW06
*/
const axios = require('axios');
const cheerio = require('cheerio');
async function stalkYT(username) {
if (!username.startsWith('@')) {
username = '@' + username;
}
const url = `https://www.youtube.com/${username}`;
const headers = {
"accept-language": "en-US,en;q=0.9",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
};
try {
const response = await axios.get(url, { headers });
const html = response.data;
const match = html.match(/var ytInitialData = ({.*?});<\/script>/);
if (!match) {
return {
status: false,
message: "Gagal menemukan data ytInitialData. Pastikan username YouTube valid."
};
}
const data = JSON.parse(match[1]);
const metadata = data.metadata.channelMetadataRenderer;
const channelId = metadata.externalId;
const channelUrl = metadata.channelUrl;
const title = metadata.title;
const description = metadata.description;
const avatar = metadata.avatar.thumbnails[metadata.avatar.thumbnails.length - 1].url;
let banner = "";
function findKey(obj, key) {
let result = null;
function search(o) {
if (o && typeof o === 'object') {
if (o[key] !== undefined) {
result = o[key];
return true;
}
for (let k in o) {
if (search(o[k])) return true;
}
}
return false;
}
search(obj);
return result;
}
const bannerImg = findKey(data.header, 'imageBannerViewModel');
if (bannerImg && bannerImg.image && bannerImg.image.sources) {
banner = bannerImg.image.sources[bannerImg.image.sources.length - 1].url;
}
let subscribers = "0";
let videos = "0";
const strData = JSON.stringify(data.header);
const subMatch = strData.match(/"content":"([^"]+ subscribers)"/i);
if (subMatch) {
subscribers = subMatch[1];
} else {
const subMatchID = strData.match(/"content":"([^"]+ subscriber)"/i);
if (subMatchID) subscribers = subMatchID[1];
}
const vidMatch = strData.match(/"content":"([^"]+ videos?)"/i);
if (vidMatch) {
videos = vidMatch[1];
}
return {
status: true,
data: {
id: channelId,
username: username,
title: title,
avatar: avatar,
banner: banner,
subscribers: subscribers,
videos: videos,
description: description,
channel_url: channelUrl
}
};
} catch (error) {
return {
status: false,
message: `Gagal memproses data: ${error.message}`
};
}
}
module.exports = stalkYT;
if (require.main === module) {
const args = process.argv.slice(2);
if (args.length === 0) {
console.log("? Penggunaan: node stalkyt.js <username>");
console.log("? Contoh: node stalkyt.js @kingronal21");
process.exit(1);
}
const username = args[0];
stalkYT(username)
.then(res => console.log(JSON.stringify(res, null, 2)))
.catch(err => console.error(err));
}
Cx99 • 4 views
Stalker
JavaScript
Mengambil informasi data profile user Twitter
/**
* Judul : X (Twitter) Stalker
* Base URL : https://x.com
* Author : Cx99 - t.me/exploit99
* Deskripsi : Mengambil informasi data profil user X
* Channel : https://whatsapp.com/channel/0029VbCSF8sA89MopCVOYW06
*/
const axios = require('axios');
const cheerio = require('cheerio');
async function stalkX(username) {
username = username.replace(/^@/, '');
const url = `https://x.com/${username}`;
const headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"accept-language": "en-US,en;q=0.9",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1"
};
try {
const response = await axios.get(url, { headers });
const html = response.data;
const $ = cheerio.load(html);
let profile = {
username: username,
name: "",
description: "",
avatar: "",
banner: "",
posts: "0",
joined: "",
followers: 0,
following: 0,
profile_url: url
};
$('meta').each((i, el) => {
const name = $(el).attr('name') || $(el).attr('property');
const content = $(el).attr('content');
if (name === 'profile:first_name') profile.name = content;
if (name === 'description') profile.description = content;
if (name === 'og:image') {
profile.avatar = content;
profile.avatar_hd = content.replace('_200x200', '').replace('_normal', '');
}
if (name === 'twitter:image' && content.includes('profile_banners')) {
profile.banner = content;
profile.banner_hd = content + "/1500x500";
}
if (name === 'twitter:data1') profile.posts = content;
if (name === 'twitter:data2') profile.joined = content;
});
const folMatch = html.match(/followers:(\d+),following:(\d+)/);
if (folMatch) {
profile.followers = parseInt(folMatch[1]);
profile.following = parseInt(folMatch[2]);
}
if (!profile.name && profile.followers === 0) {
return {
status: false,
message: "Data user tidak ditemukan. Pastikan username valid."
};
}
return {
status: true,
data: profile
};
} catch (error) {
return {
status: false,
message: `Gagal memproses data: ${error.message}`
};
}
}
module.exports = stalkX;
if (require.main === module) {
const args = process.argv.slice(2);
if (args.length === 0) {
console.log("? Penggunaan: node stalkx.js <username>");
console.log("? Contoh: node stalkx.js mrbeast");
process.exit(1);
}
const username = args[0];
stalkX(username)
.then(res => console.log(JSON.stringify(res, null, 2)))
.catch(err => console.error(err));
}
Cx99 • 2 views
Stalker
JavaScript
Mengambil informasi user lewat username instagram
/**
* Judul : Instagram Stalker
* Base URL : https://igwatcher.com
* Author : Cx99 - t.me/exploit99
* Deskripsi : Mengambil informasi profil, post, reels, stories, highlights dan tagged Instagram
* Channel : https://whatsapp.com/channel/0029VbCSF8sA89MopCVOYW06
*/
'use strict'
const BASE = 'https://igwatcher.com'
const headers = {
'user-agent': 'Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
'accept': 'application/json, text/plain, */*',
'accept-language': 'en-US,en;q=0.9',
'referer': 'https://igwatcher.com/',
'origin': 'https://igwatcher.com'
}
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
function extractUsername(input) {
const raw = input.trim()
.replace(/^@/, '')
.replace(/^https?:\/\/(www\.)?instagram\.com\//i, '')
.replace(/^https?:\/\/instagr\.am\//i, '')
.replace(/\/$/, '')
.split('/')[0]
.split('?')[0]
if (!/^[a-zA-Z0-9._]{1,30}$/.test(raw)) {
throw new Error(`Invalid username: "${raw}"`)
}
return raw.toLowerCase()
}
async function jget(url, timeout = 50000) {
const controller = new AbortController()
const timer = setTimeout(() => controller.abort(), timeout)
try {
const response = await fetch(url, {
method: 'GET',
headers,
cache: 'no-store',
signal: controller.signal
})
const text = await response.text()
let data
try {
data = JSON.parse(text)
} catch {
data = text
}
return {
ok: response.ok,
status: response.status,
data
}
} catch (error) {
if (error.name === 'AbortError') {
throw new Error('Request timeout')
}
throw error
} finally {
clearTimeout(timer)
}
}
async function request(path, params = {}, timeout = 50000) {
const query = new URLSearchParams(params)
const response = await jget(`${BASE}${path}?${query}`, timeout)
if (!response.ok) {
const message = typeof response.data === 'object'
? response.data?.message || JSON.stringify(response.data)
: response.data
throw new Error(`HTTP ${response.status}: ${message}`)
}
return response.data
}
const getProfile = username =>
request('/wp-json/igw/v1/search', { username }, 40000)
const getPosts = username =>
request('/wp-json/igw/v1/posts', {
username,
limit: 24,
lazy: 1
}, 55000)
const getReels = username =>
request('/wp-json/igw/v1/reels', {
username,
limit: 24,
lazy: 1
}, 55000)
const getStories = username =>
request('/wp-json/igw/v1/stories', { username }, 55000)
const getHighlights = username =>
request('/wp-json/igw/v1/highlights', { username }, 55000)
const getTagged = username =>
request('/wp-json/igw/v1/tagged', {
username,
limit: 24,
lazy: 1
}, 50000)
async function processStep(fn) {
await sleep(350)
try {
return {
success: true,
data: await fn()
}
} catch (error) {
return {
success: false,
error: error.message
}
}
}
async function igstalk(input) {
if (!input) {
return {
status: false,
message: 'Username kosong'
}
}
try {
const username = extractUsername(input)
const result = { username }
const profile = await processStep(() => getProfile(username))
profile.success
? result.profile = profile.data
: result.profile_error = profile.error
const posts = await processStep(() => getPosts(username))
posts.success
? result.posts = posts.data
: result.posts_error = posts.error
const reels = await processStep(() => getReels(username))
reels.success
? result.reels = reels.data
: result.reels_error = reels.error
const stories = await processStep(() => getStories(username))
stories.success
? result.stories = stories.data
: result.stories_error = stories.error
const highlights = await processStep(() => getHighlights(username))
highlights.success
? result.highlights = highlights.data
: result.highlights_error = highlights.error
const tagged = await processStep(() => getTagged(username))
tagged.success
? result.tagged = tagged.data
: result.tagged_error = tagged.error
return {
status: true,
result
}
} catch (error) {
return {
status: false,
message: error.message
}
}
}
module.exports = { igstalk }
;(async () => {
const { igstalk } = require('./igstalk')
const result = await igstalk('rfkaansyah_')
console.log(JSON.stringify(result, null, 2))
})()
Cx99 • 9 views