mirror of
https://github.com/qeeqbox/social-analyzer.git
synced 2026-05-26 05:28:39 +00:00
Add files via upload
This commit is contained in:
@@ -8,6 +8,7 @@ The analysis and public extracted information from this OSINT tool could help in
|
||||
|
||||
`This project is currently used by some law enforcement agencies in countries where resources are limited`
|
||||
|
||||
- [New] Works on nodejs v18.4.0
|
||||
- [New] Meta nested module is queued for testing
|
||||
- [New] Updates queued for testing
|
||||
- [Info] Feel free to fork and contribute
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
// -------------------------------------------------------------
|
||||
// contributors list qeeqbox/social-analyzer/graphs/contributors
|
||||
// -------------------------------------------------------------
|
||||
|
||||
const argv = require('yargs')
|
||||
.usage('Usage: $0 --username "johndoe" --websites "youtube tiktok"\nUsage: $0 "fast" --username "johndoe"')
|
||||
"use strict";
|
||||
import yargs from 'yargs'
|
||||
import { hideBin } from 'yargs/helpers'
|
||||
const yarg_ = yargs(hideBin(process.argv))
|
||||
const argv = yarg_.usage('Usage: $0 --username "johndoe" --websites "youtube tiktok"\nUsage: $0 "fast" --username "johndoe"')
|
||||
.describe('gui', 'Reserved for a gui')
|
||||
.default('gui', false)
|
||||
.boolean('gui')
|
||||
@@ -62,7 +64,8 @@ if (argv.output !== 'json') {
|
||||
console.log('[init] Detections are updated very often, make sure to get the most up-to-date ones')
|
||||
}
|
||||
|
||||
const semver = require('semver')
|
||||
import semver from 'semver'
|
||||
|
||||
if (semver.satisfies(process.version, '>13 || <13')) {
|
||||
if (argv.output !== 'json') {
|
||||
console.log('[init] NodeJS Version Check')
|
||||
@@ -74,29 +77,30 @@ if (semver.satisfies(process.version, '>13 || <13')) {
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const express = require('express')
|
||||
const fs = require('fs')
|
||||
const tokenizer = require('wink-tokenizer')
|
||||
const generatorics = require('generatorics')
|
||||
const HttpsProxyAgent = require('https-proxy-agent')
|
||||
const PrettyError = require('pretty-error')
|
||||
import express from 'express'
|
||||
import fs from 'fs'
|
||||
import tokenizer from 'wink-tokenizer'
|
||||
import generatorics from 'generatorics'
|
||||
import HttpsProxyAgent from 'https-proxy-agent'
|
||||
import PrettyError from 'pretty-error'
|
||||
|
||||
const pe = new PrettyError()
|
||||
require('express-async-errors')
|
||||
import 'express-async-errors'
|
||||
//const _tokenizer = tokenizer()
|
||||
|
||||
if (!fs.existsSync('logs')) {
|
||||
fs.mkdirSync('logs')
|
||||
}
|
||||
|
||||
const helper = require('./modules/helper.js')
|
||||
const fastScan = require('./modules/fast-scan.js')
|
||||
const slowScan = require('./modules/slow-scan.js')
|
||||
const specialScan = require('./modules/special-scan.js')
|
||||
const externalApis = require('./modules/external-apis.js')
|
||||
const stringAnalysis = require('./modules/string-analysis.js')
|
||||
const nameAnalysis = require('./modules/name-analysis.js')
|
||||
const visualize = require('./modules/visualize.js')
|
||||
const stats = require('./modules/stats.js')
|
||||
import helper from './modules/helper.js'
|
||||
import fastScan from './modules/fast-scan.js'
|
||||
import slowScan from './modules/slow-scan.js'
|
||||
import specialScan from './modules/special-scan.js'
|
||||
import externalApis from './modules/external-apis.js'
|
||||
import stringAnalysis from './modules/string-analysis.js'
|
||||
import nameAnalysis from './modules/name-analysis.js'
|
||||
import visualize from './modules/visualize.js'
|
||||
import stats from './modules/stats.js'
|
||||
|
||||
const app = express()
|
||||
app.set('etag', false)
|
||||
|
||||
+3
-6
@@ -1,7 +1,5 @@
|
||||
const helper = require('./helper.js')
|
||||
const {
|
||||
createWorker
|
||||
} = require('tesseract.js')
|
||||
import helper from './helper.js'
|
||||
import createWorker from 'tesseract.js'
|
||||
|
||||
function merge_dicts (temp_dict) {
|
||||
const result = {}
|
||||
@@ -39,7 +37,6 @@ async function detect (type, uuid, username, options, site, source = '', text_on
|
||||
temp_profile.push(val1)
|
||||
temp_detected.push(val2)
|
||||
detections_count += val3
|
||||
// console.log(temp_profile,merge_dicts(temp_detected),detections_count)
|
||||
return [merge_dicts(temp_profile), merge_dicts(temp_detected), detections_count]
|
||||
}
|
||||
|
||||
@@ -130,6 +127,6 @@ async function detect_logic (type, uuid, username, options, site, source = '', t
|
||||
return [temp_profile, temp_detected, detections_count]
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
detect
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const helper = require('./helper.js')
|
||||
const async = require('async')
|
||||
import helper from './helper.js'
|
||||
import async from 'async'
|
||||
|
||||
async function get_words_info (all_words, words_info) {
|
||||
const temp_added = []
|
||||
@@ -145,7 +145,7 @@ async function custom_search_ouputs_website (uuid, name, key) {
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
check_engines,
|
||||
get_words_info,
|
||||
custom_search_ouputs
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
const helper = require('./helper.js')
|
||||
const cheerio = require('cheerio')
|
||||
import helper from './helper.js'
|
||||
import cheerio from 'cheerio'
|
||||
|
||||
|
||||
const strings_meta = new RegExp('regionsAllowed|width|height|color|rgba\\(|charset|viewport|refresh|equiv', 'i')
|
||||
async function extract_metadata (site, source) {
|
||||
try {
|
||||
@@ -84,7 +86,7 @@ async function extract_patterns (site, source) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
extract_patterns,
|
||||
extract_metadata
|
||||
}
|
||||
|
||||
+12
-12
@@ -1,12 +1,10 @@
|
||||
const helper = require('./helper.js')
|
||||
const extraction = require('./extraction.js')
|
||||
const async = require('async')
|
||||
const sanitizeHtml = require('sanitize-html')
|
||||
const {
|
||||
htmlToText
|
||||
} = require('html-to-text')
|
||||
const cheerio = require('cheerio')
|
||||
const engine = require('./engine.js')
|
||||
import helper from './helper.js'
|
||||
import extraction from './extraction.js'
|
||||
import async from 'async'
|
||||
import sanitizeHtml from 'sanitize-html'
|
||||
import {convert} from 'html-to-text'
|
||||
import cheerio from 'cheerio'
|
||||
import engine from './engine.js'
|
||||
|
||||
async function find_username_normal (req) {
|
||||
helper.log_to_file_queue(req.body.uuid, '[init] Selected websites: ' + helper.websites_entries.filter((item) => item.selected === 'true').length + ' for username: ' + req.body.string)
|
||||
@@ -87,7 +85,7 @@ async function find_username_site (uuid, username, options, site) {
|
||||
if (!options.includes('json')) {
|
||||
helper.log_to_file_queue(uuid, '[Checking] ' + helper.get_site_from_url(site.url))
|
||||
}
|
||||
const source = await helper.get_url_wrapper_text(site.url.replace('{username}', username))
|
||||
const [ret, source] = await helper.get_url_wrapper_text(site.url.replace('{username}', username))
|
||||
if (source !== 'error-get-url') {
|
||||
let title = 'unavailable'
|
||||
let language = 'unavailable'
|
||||
@@ -99,7 +97,8 @@ async function find_username_site (uuid, username, options, site) {
|
||||
if (temp_profile.found >= helper.detection_level[helper.detection_level.current].found && detections_count >= helper.detection_level[helper.detection_level.current].count) {
|
||||
temp_profile.good = 'true'
|
||||
}
|
||||
temp_profile.text = sanitizeHtml(htmlToText(source, {
|
||||
|
||||
temp_profile.text = sanitizeHtml(convert(source, {
|
||||
wordwrap: false,
|
||||
hideLinkHrefIfSameAsText: true,
|
||||
ignoreHref: true,
|
||||
@@ -109,6 +108,7 @@ async function find_username_site (uuid, username, options, site) {
|
||||
temp_profile.text = 'unavailable'
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
const $ = cheerio.load(source)
|
||||
title = sanitizeHtml($('title').text())
|
||||
@@ -210,6 +210,6 @@ async function find_username_site (uuid, username, options, site) {
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default {
|
||||
find_username_normal
|
||||
}
|
||||
|
||||
+24
-20
@@ -54,28 +54,31 @@ const detected_websites = {
|
||||
|
||||
const header_options = {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0'
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
|
||||
}
|
||||
}
|
||||
|
||||
const https = require('follow-redirects').https
|
||||
const fs = require('fs')
|
||||
const url = require('url')
|
||||
const franc = require('franc')
|
||||
const langs = require('langs')
|
||||
const cheerio = require('cheerio')
|
||||
const path = require('path')
|
||||
const slash = require('slash')
|
||||
const colors = require('colors/safe')
|
||||
const ixora = require('ixora').QBIxora
|
||||
|
||||
import https from 'follow-redirects'
|
||||
import fs from 'fs'
|
||||
import url from 'url'
|
||||
import {franc} from 'franc'
|
||||
import langs from 'langs'
|
||||
import cheerio from 'cheerio'
|
||||
import path from 'path'
|
||||
import slash from 'slash'
|
||||
import colors from 'colors/safe.js'
|
||||
import {QBIxora} from 'ixora'
|
||||
import {fileURLToPath} from 'url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const sites_json_path = slash(path.join(__dirname, '..', 'data', 'sites.json'))
|
||||
const names_json_path = slash(path.join(__dirname, '..', 'data', 'names.json'))
|
||||
const dict_json_path = slash(path.join(__dirname, '..', 'data', 'dict.json'))
|
||||
const countries_json_path = slash(path.join(__dirname, '..', 'data', 'names.json'))
|
||||
const public_graph_path = slash(path.join(__dirname, '..', 'public', 'graph.html'))
|
||||
|
||||
let temp_ixora = new ixora('Social-Analyzer', false)
|
||||
let temp_ixora = new QBIxora('Social-Analyzer', false)
|
||||
temp_ixora.save_base_html(public_graph_path)
|
||||
temp_ixora = null
|
||||
|
||||
@@ -189,7 +192,7 @@ function get_site_from_url (_url) {
|
||||
async function get_url_wrapper_json (url, time = 2) {
|
||||
try {
|
||||
const http_promise = new Promise((resolve, reject) => {
|
||||
const request = https.get(url, header_options, function (res) {
|
||||
const request = https.https.get(url, header_options, function (res) {
|
||||
let body = ''
|
||||
res.on('data', function (chunk) {
|
||||
body += chunk
|
||||
@@ -227,15 +230,16 @@ async function get_url_wrapper_json (url, time = 2) {
|
||||
|
||||
async function get_url_wrapper_text (url, time = 2) {
|
||||
const response_body = 'error-get-url'
|
||||
const ret = 500
|
||||
try {
|
||||
const http_promise = new Promise((resolve, reject) => {
|
||||
const request = https.get(url, header_options, function (res) {
|
||||
const request = https.https.get(url, header_options, function (res) {
|
||||
let body = ''
|
||||
res.on('data', function (chunk) {
|
||||
body += chunk
|
||||
})
|
||||
res.on('end', function () {
|
||||
resolve(body)
|
||||
resolve([res.statusCode,body])
|
||||
})
|
||||
})
|
||||
const timeout = (time !== 0) ? time * 1000 : 5000
|
||||
@@ -256,11 +260,11 @@ async function get_url_wrapper_text (url, time = 2) {
|
||||
})
|
||||
})
|
||||
})
|
||||
const response_body = await http_promise
|
||||
return response_body
|
||||
const [ret, response_body] = await http_promise
|
||||
return [ret, response_body]
|
||||
} catch (err) {
|
||||
verbose && console.log(err)
|
||||
return response_body
|
||||
return [ret, response_body]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -300,7 +304,7 @@ async function setup_tecert () {
|
||||
if (!fs.existsSync('eng.traineddata')) {
|
||||
const file = fs.createWriteStream('eng.traineddata')
|
||||
const http_promise = new Promise((resolve, reject) => {
|
||||
const request = https.get('https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.traineddata', function (response) {
|
||||
const request = https.https.get('https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.traineddata', function (response) {
|
||||
response.pipe(file)
|
||||
resolve(1)
|
||||
request.setTimeout(12000, function () {
|
||||
@@ -328,7 +332,7 @@ async function setup_tecert () {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default {
|
||||
strings_pages,
|
||||
strings_titles,
|
||||
top_websites,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const helper = require('./helper.js')
|
||||
const stringSimilarity = require('string-similarity')
|
||||
import helper from './helper.js'
|
||||
import stringSimilarity from 'string-similarity'
|
||||
|
||||
async function find_origins (req) {
|
||||
const found = []
|
||||
for (const key in helper.parsed_names_origins) {
|
||||
@@ -73,6 +74,6 @@ async function find_origins (req) {
|
||||
return found
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
find_origins
|
||||
}
|
||||
|
||||
+10
-13
@@ -1,15 +1,12 @@
|
||||
const helper = require('./helper.js')
|
||||
const extraction = require('./extraction.js')
|
||||
const async = require('async')
|
||||
const sanitizeHtml = require('sanitize-html')
|
||||
const firefox = require('selenium-webdriver/firefox')
|
||||
const {
|
||||
Builder,
|
||||
By,
|
||||
Key
|
||||
} = require('selenium-webdriver')
|
||||
const path = require('path')
|
||||
const engine = require('./engine.js')
|
||||
|
||||
import helper from './helper.js'
|
||||
import extraction from './extraction.js'
|
||||
import async from 'async'
|
||||
import sanitizeHtml from 'sanitize-html'
|
||||
import firefox from 'selenium-webdriver/firefox.js'
|
||||
import {Builder,By,Key} from 'selenium-webdriver'
|
||||
import path from 'path'
|
||||
import engine from './engine.js'
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
const package_path = path.join(path.dirname(require.resolve('geckodriver')), '..')
|
||||
@@ -194,6 +191,6 @@ async function find_username_site (uuid, username, options, site) {
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
find_username_advanced
|
||||
}
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
const helper = require('./helper.js')
|
||||
const async = require('async')
|
||||
const firefox = require('selenium-webdriver/firefox')
|
||||
const {
|
||||
Builder,
|
||||
By,
|
||||
Key
|
||||
} = require('selenium-webdriver')
|
||||
import helper from './helper.js'
|
||||
import async from 'async'
|
||||
import {Builder,By,Key} from 'selenium-webdriver'
|
||||
|
||||
async function find_username_special (req) {
|
||||
const time = new Date()
|
||||
@@ -192,6 +187,6 @@ async function find_username_site_special_google_1 (uuid, username, site) {
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
find_username_special
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
const helper = require('./helper.js')
|
||||
import helper from './helper.js'
|
||||
|
||||
function group_by_value (list, key) {
|
||||
return list.reduce(function (x, y) {
|
||||
@@ -108,6 +108,6 @@ async function get_stats (req, data) {
|
||||
return { categories: categories, countries: countries, metadata: metadata}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
get_stats
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
const helper = require('./helper.js')
|
||||
const {
|
||||
findWord
|
||||
} = require('most-common-words-by-language')
|
||||
|
||||
const WordsNinjaPack = require('wordsninja')
|
||||
import helper from './helper.js'
|
||||
import {findWord} from 'most-common-words-by-language'
|
||||
import WordsNinjaPack from 'wordsninja'
|
||||
const WordsNinja = new WordsNinjaPack()
|
||||
|
||||
function most_common1 (all_words, temp_words) {
|
||||
@@ -272,7 +269,7 @@ async function guess_age_from_string(req) {
|
||||
return results
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export default{
|
||||
get_maybe_words,
|
||||
find_symbols,
|
||||
find_numbers,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const ixora = require('ixora').QBIxora
|
||||
const helper = require('./helper.js')
|
||||
import {QBIxora} from 'ixora'
|
||||
import helper from './helper.js'
|
||||
|
||||
async function visualize_force_graph (req, detected, type) {
|
||||
try {
|
||||
const graph = new ixora('Social-Analyzer', false)
|
||||
const graph = new QBIxora('Social-Analyzer', false)
|
||||
const temp_filtered = detected.filter(item => item.status === 'good')
|
||||
if (temp_filtered.length > 0) {
|
||||
if (req.body.group) {
|
||||
@@ -83,6 +83,6 @@ async function visualize_force_graph (req, detected, type) {
|
||||
}
|
||||
}
|
||||
}
|
||||
module.exports = {
|
||||
export default{
|
||||
visualize_force_graph
|
||||
}
|
||||
|
||||
Generated
+20
@@ -25,6 +25,7 @@
|
||||
"langs": "2.0.0",
|
||||
"lodash": ">=4.17.21",
|
||||
"most-common-words-by-language": "3.0.10",
|
||||
"n": "^8.2.0",
|
||||
"prettier": "2.7.1",
|
||||
"pretty-error": "4.0.0",
|
||||
"sanitize-html": ">=2.7.0",
|
||||
@@ -2987,6 +2988,20 @@
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"node_modules/n": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/n/-/n-8.2.0.tgz",
|
||||
"integrity": "sha512-qv+jwJoXaV94C+uASaLS/Qe/iprgvQKe+5hqg6YvUH8mqe5ysgjby875pUVLLWieGFywipEO/J/bgekYbC18Jw==",
|
||||
"os": [
|
||||
"!win32"
|
||||
],
|
||||
"bin": {
|
||||
"n": "bin/n"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/n-gram": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/n-gram/-/n-gram-2.0.1.tgz",
|
||||
@@ -6504,6 +6519,11 @@
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"n": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/n/-/n-8.2.0.tgz",
|
||||
"integrity": "sha512-qv+jwJoXaV94C+uASaLS/Qe/iprgvQKe+5hqg6YvUH8mqe5ysgjby875pUVLLWieGFywipEO/J/bgekYbC18Jw=="
|
||||
},
|
||||
"n-gram": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/n-gram/-/n-gram-2.0.1.tgz",
|
||||
|
||||
+3
-1
@@ -24,6 +24,7 @@
|
||||
"langs": "2.0.0",
|
||||
"lodash": ">=4.17.21",
|
||||
"most-common-words-by-language": "3.0.10",
|
||||
"n": "^8.2.0",
|
||||
"prettier": "2.7.1",
|
||||
"pretty-error": "4.0.0",
|
||||
"sanitize-html": ">=2.7.0",
|
||||
@@ -48,5 +49,6 @@
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user