修复蜜蜡

This commit is contained in:
小疯
2022-09-03 17:30:34 +08:00
parent 981b40bd96
commit 9f55b5edb1
11 changed files with 875 additions and 1596 deletions

View File

@@ -212,7 +212,7 @@ class CMemPool
{
private:
size_t SysPageSize;
void *MemPool;
void* MemPool;
std::map<void*, size_t> AllocMap;
std::map<void*, size_t> FreeMap;
public:
@@ -254,7 +254,7 @@ public:
}
void* alloc(size_t _size)
{
void *pBuf = NULL;
void* pBuf = NULL;
for (std::map<void*, size_t>::iterator iter = FreeMap.begin(); iter != FreeMap.end(); iter++)
{
if (iter->second >= _size)
@@ -350,32 +350,58 @@ public:
}
private:
bool Actived;
void *Src;
void **SrcPtr;
void *Dst;
void* Src;
void** SrcPtr;
void* Dst;
unsigned char* HookCode;
size_t SrcCodeSize;
size_t HookCodeSize;
};
class CodeHook
class Mem
{
public:
static void WriteUChar(void *Addr, unsigned char Value)
static void WriteUChar(void* Addr, unsigned char Value)
{
WriteBytes(Addr, &Value, 1);
}
static void WriteUShort(void *Addr, unsigned short Value)
static void WriteUShort(void* Addr, unsigned short Value)
{
WriteBytes(Addr, &Value, 2);
}
static void WriteUInt(void *Addr, unsigned int Value)
static void WriteUInt(void* Addr, unsigned int Value)
{
WriteBytes(Addr, &Value, 4);
}
static void WriteBytes(void *Addr, void *Data, size_t Len)
static void WriteBytes(void* Addr, void* Data, size_t Len)
{
CMemPool::GetInstance()->SetPageProtect(Addr, PROT_READ | PROT_WRITE | PROT_EXEC);
memcpy(Addr, Data, Len);
}
static void HookJmp(int base, int func_)
{
char Jmp[5] = {};
*((char*)Jmp) = 0xE9;
*((int*)(Jmp + 1)) = func_ - base - 5;
WriteBytes((void*)base, Jmp, 5);
}
static void HookCall(int base, int func_)
{
char Jmp[5] = {};
*((char*)Jmp) = 0xE8;
*((int*)(Jmp + 1)) = func_ - base - 5;
WriteBytes((void*)base, Jmp, 5);
}
static void HookCall_6(int base, int func_)
{
char Jmp[6] = {};
*((char*)Jmp) = 0xE8;
*((int*)(Jmp + 1)) = func_ - base - 5;
*((char*)(Jmp + 5)) = 0x90;
WriteBytes((void*)base, Jmp, 5);
}
};