[Add] Obfuscate executable file content.
This commit is contained in:
		
							parent
							
								
									9b6106f8aa
								
							
						
					
					
						commit
						233dd384f6
					
				@ -7,6 +7,7 @@
 | 
				
			|||||||
#include "session.h"
 | 
					#include "session.h"
 | 
				
			||||||
#include "machine.h"
 | 
					#include "machine.h"
 | 
				
			||||||
#include "vfs.h"
 | 
					#include "vfs.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace api {
 | 
					namespace api {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -117,7 +118,7 @@ std::string create_executable(Session& context, const std::string& path,
 | 
				
			|||||||
    parent_dir->children.erase(it);
 | 
					    parent_dir->children.erase(it);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  vfs_node* new_exec = new_node(filename, EXEC_NODE, parent_dir);
 | 
					  vfs_node* new_exec = new_node(filename, EXEC_NODE, parent_dir);
 | 
				
			||||||
  new_exec->content = content;
 | 
					  new_exec->content = util::xor_string(content);
 | 
				
			||||||
  parent_dir->children[filename] = new_exec;
 | 
					  parent_dir->children[filename] = new_exec;
 | 
				
			||||||
  return "";
 | 
					  return "";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
#include "machine_manager.h"
 | 
					#include "machine_manager.h"
 | 
				
			||||||
#include "machine.h"
 | 
					#include "machine.h"
 | 
				
			||||||
#include "vfs.h"
 | 
					#include "vfs.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vfs_node* copy_vfs_node(vfs_node* original, vfs_node* new_parent) {
 | 
					vfs_node* copy_vfs_node(vfs_node* original, vfs_node* new_parent) {
 | 
				
			||||||
  if(!original) {
 | 
					  if(!original) {
 | 
				
			||||||
@ -42,7 +43,7 @@ MachineManager::MachineManager(DatabaseManager* db_manager) :
 | 
				
			|||||||
      std::string filename_with_ext = entry.path().filename().string();
 | 
					      std::string filename_with_ext = entry.path().filename().string();
 | 
				
			||||||
      std::string filename = filename_with_ext.substr(0, filename_with_ext.find_last_of('.'));
 | 
					      std::string filename = filename_with_ext.substr(0, filename_with_ext.find_last_of('.'));
 | 
				
			||||||
      vfs_node* script_node = new_node(filename, EXEC_NODE, bin);
 | 
					      vfs_node* script_node = new_node(filename, EXEC_NODE, bin);
 | 
				
			||||||
      script_node->content = buffer.str();
 | 
					      script_node->content = util::xor_string(buffer.str());
 | 
				
			||||||
      bin->children[filename] = script_node;
 | 
					      bin->children[filename] = script_node;
 | 
				
			||||||
      fprintf(stderr, "Loaded executable: /bin/%s\n", filename.c_str());
 | 
					      fprintf(stderr, "Loaded executable: /bin/%s\n", filename.c_str());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
#include "lua_processor.h"
 | 
					#include "lua_processor.h"
 | 
				
			||||||
#include "machine.h"
 | 
					#include "machine.h"
 | 
				
			||||||
#include "vfs.h"
 | 
					#include "vfs.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vfs_node* find_node_by_id(vfs_node* root, long long id) {
 | 
					vfs_node* find_node_by_id(vfs_node* root, long long id) {
 | 
				
			||||||
  if(root->id == id) {
 | 
					  if(root->id == id) {
 | 
				
			||||||
@ -113,7 +113,8 @@ std::string Session::process_command(const std::string& command) {
 | 
				
			|||||||
  if(command_node) {
 | 
					  if(command_node) {
 | 
				
			||||||
    if(command_node->type == EXEC_NODE) {
 | 
					    if(command_node->type == EXEC_NODE) {
 | 
				
			||||||
      bool is_remote = (_session_machine != _home_machine);
 | 
					      bool is_remote = (_session_machine != _home_machine);
 | 
				
			||||||
      sol::object result = lua.execute(command_node->content, *this, args, is_remote);
 | 
					      std::string deobfuscated_content = util::xor_string(command_node->content);
 | 
				
			||||||
 | 
					      sol::object result = lua.execute(deobfuscated_content, *this, args, is_remote);
 | 
				
			||||||
      return result.is<std::string>() ? result.as<std::string>()
 | 
					      return result.is<std::string>() ? result.as<std::string>()
 | 
				
			||||||
                                      : "[Script returned non-string value]";
 | 
					                                      : "[Script returned non-string value]";
 | 
				
			||||||
    } else if(command_node->type == DIR_NODE) {
 | 
					    } else if(command_node->type == DIR_NODE) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										14
									
								
								common/src/util.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								common/src/util.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace util {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::string xor_string(const std::string& data) {
 | 
				
			||||||
 | 
					  std::string result = data;
 | 
				
			||||||
 | 
					  char key = 'B';
 | 
				
			||||||
 | 
					  for(size_t i = 0; i < data.size(); ++i) {
 | 
				
			||||||
 | 
					    result[i] = data[i] ^ key;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								common/src/util.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								common/src/util.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace util {
 | 
				
			||||||
 | 
					  std::string xor_string(const std::string& data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user