mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 04:15:26 +00:00
337 lines
11 KiB
Plaintext
337 lines
11 KiB
Plaintext
|
import os
|
||
|
import requests
|
||
|
import sys
|
||
|
import subprocess
|
||
|
import re
|
||
|
import face_recognition
|
||
|
import json
|
||
|
|
||
|
done_checks = []
|
||
|
social_media = []
|
||
|
usernames = []
|
||
|
emails = []
|
||
|
twitter = []
|
||
|
instagram = []
|
||
|
steam = []
|
||
|
urls = []
|
||
|
urls_stalk = []
|
||
|
urls_done = []
|
||
|
name = ""
|
||
|
adresse = ""
|
||
|
compare = False
|
||
|
first_dl = False
|
||
|
|
||
|
def stalk(user):
|
||
|
if len(user) > 1:
|
||
|
global urls_stalk
|
||
|
pastebin_url = "https://pastebin.com/u/" + user
|
||
|
pastebin_str = "s Pastebin - Pastebin.com"
|
||
|
patreon_url = "https://www.patreon.com/" + user
|
||
|
patreon_str = 'created_at'
|
||
|
gutefrage_url = "https://www.gutefrage.net/nutzer/" + user
|
||
|
gutefrage_str = '<meta name="title" content="Profil von'
|
||
|
ebay_url = "https://www.ebay.de/usr/" + user
|
||
|
ebay_str = '<span>Angemeldet seit: </span>'
|
||
|
twitter_url = "https://twitter.com/" + user
|
||
|
twitter_str = '<link rel="canonical" href="https://twitter.com/' + user + '">'
|
||
|
facebook_url = 'https://facebook.com/' + user
|
||
|
facebook_str = ' hreflang="sv" href="https://sv-se.facebook.com/' + user
|
||
|
instagram_url = "https://www.instagram.com/" + user + "/"
|
||
|
instagram_str = '<link rel="alternate" href="https://www.instagram.com/' + user + '/?hl=en" hreflang="en" />'
|
||
|
steam_url = "https://steamcommunity.com/id/" + user
|
||
|
steam_str = 'https://steamcommunity-a.akamaihd.net/public/images/skin_1/arrowDn9x5.gif'
|
||
|
twitch_url = "https://www.twitch.tv/" + user
|
||
|
twitch_str = "content='twitch://stream/" + user
|
||
|
lachschon_url = "https://www.lachschon.de/community/user/" + user + "/"
|
||
|
lachschon_str = '<label>Rang</label>'
|
||
|
|
||
|
URLS = [pastebin_url, patreon_url, gutefrage_url, ebay_url, facebook_url, twitter_url, instagram_url, steam_url, twitch_url, lachschon_url]
|
||
|
STRS = [pastebin_str, patreon_str, gutefrage_str, ebay_str, facebook_str, twitter_str, instagram_str, steam_str, twitch_str, lachschon_str]
|
||
|
|
||
|
for i in range(0, len(URLS)):
|
||
|
html = getResponse(URLS[i])
|
||
|
if STRS[i].lower() in str(html).lower():
|
||
|
print("\t> " + URLS[i])
|
||
|
urls_stalk.append(URLS[i])
|
||
|
|
||
|
def get_twitter_img(user):
|
||
|
url = "https://twitter.com/" + user
|
||
|
html = subprocess.getoutput("phantomjs html.js " + url)
|
||
|
image = find_between(html, '<img class="ProfileAvatar-image " src="', '" alt="')
|
||
|
r = requests.get(image)
|
||
|
with open('Twitter.jpg', 'wb') as f:
|
||
|
f.write(r.content)
|
||
|
|
||
|
def get_instagram_img(user):
|
||
|
data = {
|
||
|
'username': user,
|
||
|
'submit': 'View DP'
|
||
|
}
|
||
|
response = requests.post('https://fullinstadp.com/index.php', data=data)
|
||
|
html = response.text
|
||
|
f = open("Out.html", "w")
|
||
|
f.write(html)
|
||
|
f.close
|
||
|
img_url = find_between(html, '<img class="loading img-rounded center-block img-responsive" src="', '" alt=""')
|
||
|
r = requests.get(img_url)
|
||
|
with open('Instagram.jpg', 'wb') as f:
|
||
|
f.write(r.content)
|
||
|
|
||
|
def check_mail(string):
|
||
|
EMAIL_REGEX = re.compile(r"[^@]+@[^@]+\.[^@]+")
|
||
|
if EMAIL_REGEX.match(string):
|
||
|
return True
|
||
|
else:
|
||
|
return False
|
||
|
|
||
|
def check_string_mail(string):
|
||
|
global emails
|
||
|
splitted = string.split(" ")
|
||
|
for word in splitted:
|
||
|
if check_mail(word):
|
||
|
emails.append(word)
|
||
|
|
||
|
def check_string_url(string):
|
||
|
global urls
|
||
|
for word in string.split(" "):
|
||
|
try:
|
||
|
url = re.search("(?P<url>https?://[^\s]+)", word).group("url")
|
||
|
if '//t.co/' in url:
|
||
|
last = url[-1:]
|
||
|
if last == ".":
|
||
|
url = url.rstrip('.')
|
||
|
r = requests.get(url)
|
||
|
url = r.url
|
||
|
urls.append(url)
|
||
|
except:
|
||
|
e = ""
|
||
|
|
||
|
def check_string_socialmedia(string):
|
||
|
global social_media
|
||
|
count = 0
|
||
|
next = 0
|
||
|
for word in string.split(" "):
|
||
|
next = count + 2
|
||
|
if 'facebook' in word.lower():
|
||
|
print(string.split(" ")[next])
|
||
|
count +=1
|
||
|
|
||
|
def youtube(url):
|
||
|
url = url + "/about"
|
||
|
html = subprocess.getoutput("phantomjs html.js " + url)
|
||
|
tmp_str = html.split('"}},"urlEndpoint":')
|
||
|
for url in tmp_str:
|
||
|
#print(url)
|
||
|
url = find_between(url, '{"url":"', '","target":')
|
||
|
print(html)
|
||
|
|
||
|
def grab_instagram(profile):
|
||
|
global done_checks
|
||
|
global urls
|
||
|
global instagram
|
||
|
global usernames
|
||
|
global compare
|
||
|
if not "instagram: " + profile in done_checks:
|
||
|
if not profile in usernames:
|
||
|
usernames.append(profile)
|
||
|
url = "https://www.instagram.com/" + profile + "/"
|
||
|
html = subprocess.getoutput("phantomjs html.js " + url)
|
||
|
if '"@type":"Person","name":"' in html:
|
||
|
display_name = find_between(html, '"@type":"Person","name":"', '","alternateName":"')
|
||
|
if not display_name in usernames:
|
||
|
usernames.append(display_name)
|
||
|
if not "instagram: " + display_name in done_checks:
|
||
|
print(display_name)
|
||
|
stalk(display_name)
|
||
|
instagram.append("Display Name: " + display_name)
|
||
|
description = find_between(html, '"user":{"biography":"', '","blocked_by_viewer')
|
||
|
follower = find_between(html, 'edge_followed_by":{"count":', '},"followed_by_viewer')
|
||
|
check_string_mail(description)
|
||
|
check_string_url(description)
|
||
|
instagram.append("Description: " + description)
|
||
|
instagram.append("Follower: " + follower)
|
||
|
#get_instagram_img(profile) // Buggy suche nach Alternative zu siehe Funktion
|
||
|
compare = True
|
||
|
if not "instagram: " + profile in done_checks:
|
||
|
done_checks.append("instagram: " + profile)
|
||
|
|
||
|
def grab_steam(url):
|
||
|
global done_checks
|
||
|
global urls
|
||
|
global usernames
|
||
|
if not "steam: " + profile in done_checks:
|
||
|
url = url + "/ajaxaliases/"
|
||
|
response = requests.get(url)
|
||
|
html = response.text
|
||
|
for item in html.split("newname"):
|
||
|
username = find_between(item, '":"', '","timechanged')
|
||
|
if not username in usernames:
|
||
|
usernames.append(username)
|
||
|
|
||
|
|
||
|
|
||
|
def grab_twitter(profile):
|
||
|
global done_checks
|
||
|
global urls
|
||
|
global adresse
|
||
|
global usernames
|
||
|
global twitter
|
||
|
global first_dl
|
||
|
if not "twitter: " + profile in done_checks:
|
||
|
url = "https://twitter.com/" + profile
|
||
|
urls.append(url)
|
||
|
html = subprocess.getoutput("phantomjs html.js " + url)
|
||
|
#variables
|
||
|
display_name = find_between(html, '<title>', ' (@')
|
||
|
if not profile in usernames:
|
||
|
usernames.append(profile)
|
||
|
if not display_name in usernames:
|
||
|
usernames.append(display_name)
|
||
|
if not "twitter: " + display_name in done_checks:
|
||
|
print(display_name)
|
||
|
stalk(display_name)
|
||
|
join_date = find_between(html, 'ProfileHeaderCard-joinDateText js-tooltip u-dir" dir="ltr" title="', '">Beigetreten')
|
||
|
description = ""
|
||
|
url = ""
|
||
|
location = ""
|
||
|
#if
|
||
|
if '<meta name="description"' in html:
|
||
|
description = find_between(html, '<meta name="description" content="', '">')
|
||
|
description = description.replace(""", "")
|
||
|
check_string_mail(description)
|
||
|
check_string_url(description)
|
||
|
if '<span class="ProfileHeaderCard-urlText u-dir"> <a class="u-textUserColor"' in html:
|
||
|
tmp = find_between(html, '<span class="ProfileHeaderCard-urlText u-dir">', '</a>')
|
||
|
url = find_between(tmp, '" title="', '">')
|
||
|
urls.append(url)
|
||
|
if 'location":"' in html:
|
||
|
location = find_between(html, '"location":"', '","url')
|
||
|
if len(location) > 0:
|
||
|
adresse = location
|
||
|
twitter.append("Display Name: " + display_name)
|
||
|
twitter.append("Join Date: " + join_date)
|
||
|
twitter.append("Description: " + description)
|
||
|
twitter.append("URL: " + url)
|
||
|
twitter.append("Location: " + location)
|
||
|
twitter.append(" ")
|
||
|
#if first_dl == False:
|
||
|
#get_twitter_img(profile)
|
||
|
#first_dl = True
|
||
|
if not "twitter: " + profile in done_checks:
|
||
|
done_checks.append("twitter: " + profile)
|
||
|
|
||
|
|
||
|
|
||
|
def handle():
|
||
|
try:
|
||
|
if sys.argv[1]:
|
||
|
social_media = sys.argv[1].lower()
|
||
|
if sys.argv[2]:
|
||
|
info_type = sys.argv[2].lower()
|
||
|
if sys.argv[3]:
|
||
|
infos = sys.argv[3].lower()
|
||
|
if info_type == "url":
|
||
|
if social_media == "youtube":
|
||
|
youtube(infos)
|
||
|
elif info_type == "profile":
|
||
|
if social_media == "twitter":
|
||
|
grab_twitter(infos)
|
||
|
elif info_type == "user":
|
||
|
if social_media == "stalk":
|
||
|
stalk(infos)
|
||
|
except Exception as e:
|
||
|
print(e)
|
||
|
|
||
|
def find_between( s, first, last ):
|
||
|
try:
|
||
|
start = s.index( first ) + len( first )
|
||
|
end = s.index( last, start )
|
||
|
return s[start:end]
|
||
|
except ValueError:
|
||
|
return ""
|
||
|
|
||
|
def getResponse(url):
|
||
|
response = requests.get(url)
|
||
|
#response.raise_for_status()
|
||
|
data = response.content
|
||
|
return data
|
||
|
|
||
|
|
||
|
|
||
|
handle()
|
||
|
|
||
|
for url in urls_stalk:
|
||
|
#print(url)
|
||
|
if 'twitter.com' in url:
|
||
|
checked = False
|
||
|
profile = url.split("/")[3]
|
||
|
for check in done_checks:
|
||
|
if check == "twitter: " + profile:
|
||
|
checked = True
|
||
|
if not checked:
|
||
|
grab_twitter(profile)
|
||
|
done_checks.append("twitter:" + profile)
|
||
|
|
||
|
if 'instagram.com' in url:
|
||
|
checked = False
|
||
|
profile = url.split("/")[3]
|
||
|
for check in done_checks:
|
||
|
if check == "instagram: " + profile:
|
||
|
checked = True
|
||
|
if not checked:
|
||
|
grab_instagram(profile)
|
||
|
#print("Download Profile Picture")
|
||
|
done_checks.append("instagram: " + profile)
|
||
|
#Steam Check direkt in der Stalk Funktion
|
||
|
if 'steamcommunity.com' in url:
|
||
|
checked = False
|
||
|
profile = url.split("/")[4]
|
||
|
for check in done_checks:
|
||
|
if check == "steam: " + profile:
|
||
|
checked = True
|
||
|
if not checked:
|
||
|
grab_steam(url)
|
||
|
done_checks.append("steam: " + profile)
|
||
|
|
||
|
|
||
|
print("------------------")
|
||
|
print("Usernames:")
|
||
|
print("------------------")
|
||
|
for user in usernames:
|
||
|
print(user)
|
||
|
stalk(user)
|
||
|
|
||
|
if len(urls) > 0:
|
||
|
print("------------------")
|
||
|
print("URLs:")
|
||
|
print("------------------")
|
||
|
for url in urls:
|
||
|
print(url)
|
||
|
|
||
|
if len(twitter) > 0:
|
||
|
print("------------------")
|
||
|
print("Twitter:")
|
||
|
print("------------------")
|
||
|
for item in twitter:
|
||
|
print(item)
|
||
|
|
||
|
if len(instagram) > 0:
|
||
|
print("------------------")
|
||
|
print("Instagram:")
|
||
|
print("------------------")
|
||
|
for item in instagram:
|
||
|
print(item)
|
||
|
|
||
|
if len(steam) > 0:
|
||
|
print("------------------")
|
||
|
print("Steam:")
|
||
|
print("------------------")
|
||
|
for item in steam:
|
||
|
print(item)
|
||
|
|
||
|
print("------------------")
|
||
|
print("Sites checked:")
|
||
|
print("------------------")
|
||
|
for check in done_checks:
|
||
|
print(check)
|