Files
Malwere/BackDoor/main/Virtualisetion.h
T
Данил 9897882742 Create reps
2024-07-20 13:22:02 +07:00

99 lines
1.4 KiB
C++

#pragma once
#include <iostream>
enum Type
{
Addres,
Value
};
enum Command
{
Mov,
Syscall
};
enum Registers
{
AX = -1,
BX = -2,
CX = -3,
DX = -4,
Error = -5
};
#pragma region System
int sizeCode;
char* MemoryCode;
int indexCode = 0;
long long registers[5] = { 0, 0, 0, 0, 0 };
HMODULE Core;
#pragma endregion
static int GetValue()
{
char addr = MemoryCode[++indexCode];
if (addr == Addres)
{
addr = MemoryCode[++indexCode];
if (MemoryCode[++indexCode] > -5)
{
registers[4] = 0;
return registers[MemoryCode[indexCode] - 1];
}
else
{
registers[4] = -1;
return 0;
}
}
else
{
registers[4] = 0;
return MemoryCode[++indexCode];
}
}
typedef void (*systemCall)(int);
systemCall SystemCall;
void InitVirtual(char* Code, int SizeCode)
{
MemoryCode = Code;
sizeCode = SizeCode;
Core = LoadLibrary(L"CoreDLL.dll");
if (Core == nullptr)
exit(-1);
SystemCall = (systemCall)GetProcAddress(Core, "SystemCall");
if (SystemCall == nullptr)
exit(-3);
}
void VirtualStart(char* Code, const int SizeCode)
{
InitVirtual(Code, SizeCode);
while (indexCode < sizeCode)
{
char OpCode = MemoryCode[indexCode];
switch (OpCode)
{
case Mov:
{
++indexCode;
int addr = MemoryCode[indexCode];
int value = GetValue();
registers[-addr - 1] = value;
} break;
case Syscall:
{
int systemCall = registers[0];
SystemCall(systemCall);
} break;
}
++indexCode;
}
FreeLibrary(Core);
}