diff --git a/src/client_backend/client_backend.cpp b/src/client_backend/client_backend.cpp index cf2dd9d..d6e295d 100644 --- a/src/client_backend/client_backend.cpp +++ b/src/client_backend/client_backend.cpp @@ -68,7 +68,7 @@ int main(int argc, char* argv[]) { if ((err = selfcheck()) != 0) { log(LOGLEVEL::PANIC, "[main()]:This installation of cyberhex failed the self check! Application may be tampered with!", err); log(LOGLEVEL::PANIC, "[main()]:Panic, self check failed, terminating process!"); - Sleep(1000); //wait for the log to be written and swnt to the server + Sleep(1000); //wait for the log to be written and sent to the server exit(1); } @@ -82,7 +82,6 @@ int main(int argc, char* argv[]) { // Initialize hash databases err = initialize(DB_DIR); - log(LOGLEVEL::INFO_NOSEND, "[main()]:Hash databases initialized."); if (err != 0) { switch (err) { case 1: @@ -99,6 +98,9 @@ int main(int argc, char* argv[]) { break; } } + else { + log(LOGLEVEL::INFO_NOSEND, "[main()]:Hash databases initialized."); + } // Start a second thread for real-time protection if (get_setting("rtp_folder_scan:status") == 1) { @@ -123,29 +125,28 @@ int main(int argc, char* argv[]) { auto start = std::chrono::high_resolution_clock::now(); // Check for tasks from user interface - //printf("checking for tasks from user interface\n"); - if (check_for_com_tasks(MAIN_COM, MAIN_COM_PATH) != 0) { - // Log message commented out as this error is expected when the file doesn't exist - } + check_for_com_tasks(MAIN_COM, MAIN_COM_PATH); + // Check for scheduled tasks if (check_for_sched_tasks(SCHED, SCHED_PATH) != 0) { log(LOGLEVEL::ERR, "[main()]:Error opening schedule file in: ", SCHED_PATH); } // Execute tasks from the queue - if (can_run_thread()) { + if (can_run_thread()) { // check if there is "space" for another run (= if there is not another thread running right now) int queue_size = get_queue_size(); for (int i = 0; i < queue_size; i++) { - start_thread(queue_pop()); + if (can_run_thread()) //check again if a new thread can be started. + start_thread(queue_pop()); + else + break; } } - // Sleep to ensure loop takes at least 1 second + // Sleep to ensure loop takes at least 1 second, else it will destroy the cpu auto stop = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast(stop - start); if (duration.count() < 1000) Sleep(1000 - duration.count()); } yr_finalize(); - - return 0; } diff --git a/src/client_backend/deepscan.cpp b/src/client_backend/deepscan.cpp index 2ca33d3..55424ae 100644 --- a/src/client_backend/deepscan.cpp +++ b/src/client_backend/deepscan.cpp @@ -34,18 +34,14 @@ std::mutex yara_scan_mutex; int deep_cnt = 0; int deep_all_files = 0; int action_deepscan_is_virus = 0; //flag that is set by the callback function to tell the action_deepscan function if the file is a virus or not. this is needed to talk to the desktop client -//scan with yara rules -//functions to create: action_deepscanfile -//deepscan_file_t -//action_deepscanfolder -//deepscan_folder + // Load YARA rules from a file and compile them YR_RULES* load_yara_rules(const char* ruleFilePath, YR_RULES* compiledRules = nullptr) { // Create a new compiler YR_COMPILER* compiler; if (yr_compiler_create(&compiler) != ERROR_SUCCESS) { - std::cerr << "Failed to create YARA compiler." << std::endl; + log(LOGLEVEL::ERR_NOSEND, "[load_yara_rules()]: Failed to create YARA compiler."); return nullptr; } diff --git a/src/client_backend/queue _ctrl.cpp b/src/client_backend/queue _ctrl.cpp index e9596e2..55c0cdb 100644 --- a/src/client_backend/queue _ctrl.cpp +++ b/src/client_backend/queue _ctrl.cpp @@ -44,7 +44,7 @@ std::string queue_pop() { std::string ret = queue[queue_end-1]; queue_end = (queue_end - 1) % queue_limit; queue_size--; - return ret; // Success + return ret; } } diff --git a/src/client_backend/scan.cpp b/src/client_backend/scan.cpp index 363fe8d..b300941 100644 --- a/src/client_backend/scan.cpp +++ b/src/client_backend/scan.cpp @@ -409,6 +409,8 @@ void do_quickscan() { } //general startup folder scan_folder("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"); + scan_folder("C:\\Users\\All Users\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"); + //find every users startupfolder and scan it: std::string user_folder = "C:\\Users\\*"; std::string user_folder_no_wildcrad = "C:\\Users"; @@ -421,10 +423,8 @@ void do_quickscan() { } std::string full_path = user_folder_no_wildcrad + "\\" + find_file_data.cFileName + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"; scan_folder(full_path); - //printf("Scanning: %s\n", full_path.c_str()); } while (FindNextFile(hFind, &find_file_data) != 0); FindClose(hFind); - printf("finished\n"); } std::ofstream answer_com(ANSWER_COM_PATH, std::ios::app); if (answer_com.is_open()) {