Ага, и получи VAC за CE.Без Vac Bypass не юзай CEЮзай чит энжин
Сам юзал, бана не былоАга, и получи VAC за CE.Без Vac Bypass не юзай CE
typedef void(__fastcall* CMDUnrestricted)(uintptr_t, uintptr_t, const char*, uintptr_t);
template <typename T> static T* CreateInterface(const char* szModule, const char* szInterface) {
typedef void* (*oCreateInterface)(const char*, int);
oCreateInterface pCreateInterface = (oCreateInterface)GetProcAddress(GetModuleHandleA(szModule), "CreateInterface");
return (T*)pCreateInterface(szInterface, 0);
}
int main(){
CMDUnrestricted UnrestrictedCommand;
void* CEngineClient = CreateInterface<void*>("engine2.dll", "Source2EngineToClient001");
UnrestrictedCommand = (CMDUnrestricted)
* reinterpret_cast<uintptr_t*>(
*reinterpret_cast<uintptr_t*>(CEngineClient)
+ 8 * 35 //(35 по счету в виртуальной таблице и размер указателя на х64 это 8 байт)
);
UnrestrictedCommand(0,0,"dota_camera_distance 1500",0);
UnrestrictedCommand(0,0,"dota_use_particle_fow 0",0);
UnrestrictedCommand(0,0,"r_farz 20000",0);
}
Я так понимаю это способ с инжектом dll?альтернативно можешь
C++:typedef void(__fastcall* CMDUnrestricted)(uintptr_t, uintptr_t, const char*, uintptr_t); template <typename T> static T* CreateInterface(const char* szModule, const char* szInterface) { typedef void* (*oCreateInterface)(const char*, int); oCreateInterface pCreateInterface = (oCreateInterface)GetProcAddress(GetModuleHandleA(szModule), "CreateInterface"); return (T*)pCreateInterface(szInterface, 0); } int main(){ CMDUnrestricted UnrestrictedCommand; void* CEngineClient = CreateInterface<void*>("engine2.dll", "Source2EngineToClient001"); UnrestrictedCommand = (CMDUnrestricted) * reinterpret_cast<uintptr_t*>( *reinterpret_cast<uintptr_t*>(CEngineClient) + 8 * 35 //(35 по счету в виртуальной таблице и размер указателя на х64 это 8 байт) ); UnrestrictedCommand(0,0,"dota_camera_distance 1500",0); UnrestrictedCommand(0,0,"dota_use_particle_fow 0",0); UnrestrictedCommand(0,0,"r_farz 20000",0); }
да, инжектишь длл в которой примерно такой код.Я так понимаю это способ с инжектом dll?
индексы виртуальных функций очень редко меняются, а если меняются то не сильно смещаются.а оффсеты потом как искать?
залупа не работает сорри (. юзайте способ от кратчесов, который просто снимает защиту с конваровальтернативно можешь
C++:typedef void(__fastcall* CMDUnrestricted)(uintptr_t, uintptr_t, const char*, uintptr_t); template <typename T> static T* CreateInterface(const char* szModule, const char* szInterface) { typedef void* (*oCreateInterface)(const char*, int); oCreateInterface pCreateInterface = (oCreateInterface)GetProcAddress(GetModuleHandleA(szModule), "CreateInterface"); return (T*)pCreateInterface(szInterface, 0); } int main(){ CMDUnrestricted UnrestrictedCommand; void* CEngineClient = CreateInterface<void*>("engine2.dll", "Source2EngineToClient001"); UnrestrictedCommand = (CMDUnrestricted) * reinterpret_cast<uintptr_t*>( *reinterpret_cast<uintptr_t*>(CEngineClient) + 8 * 35 //(35 по счету в виртуальной таблице и размер указателя на х64 это 8 байт) ); UnrestrictedCommand(0,0,"dota_camera_distance 1500",0); UnrestrictedCommand(0,0,"dota_use_particle_fow 0",0); UnrestrictedCommand(0,0,"r_farz 20000",0); }
...
#define IR(x, a, b) (x >= a && x <= b)
#define gBi(x) (IR((x & (~0x20)), 'A', 'F') ? ((x & (~0x20)) - 'A' + 0xA): (IR(x, '0', '9') ? x - '0': 0))
#define gBy(x) (gBi(x[0]) << 4 | gBi(x[1]))
static uintptr_t FPat(const uintptr_t& start_address, const uintptr_t& end_address, const char* target_pattern) {
const char* pattern = target_pattern;
uintptr_t first_match = 0;
for (uintptr_t position = start_address; position < end_address; position++) {
if (!*pattern)
return first_match;
const uint8_t pattern_current = *reinterpret_cast<const uint8_t*>(pattern);
const uint8_t memory_current = *reinterpret_cast<const uint8_t*>(position);
if (pattern_current == '\?' || memory_current == gBy(pattern)) {
if (!first_match)
first_match = position;
if (!pattern[2])
return first_match;
pattern += pattern_current != '\?' ? 3 : 2;
}
else {
pattern = target_pattern;
first_match = 0;
}
}
return NULL;
}
static uintptr_t FPat(const char* module, const char* target_pattern) {
MODULEINFO module_info = { 0 };
if (!GetModuleInformation(GetCurrentProcess(), GetModuleHandleA(module), &module_info, sizeof(MODULEINFO)))
return NULL;
const uintptr_t start_address = uintptr_t(module_info.lpBaseOfDll);
const uintptr_t end_address = start_address + module_info.SizeOfImage;
return FPat(start_address, end_address, target_pattern);
}
...
char clientrep[] = { 0x8b, 0x0d, 0xe1, 0xdc, 0xdd, 0x01, 0x49, 0x8b, 0xd0, 0x48, 0x8b, 0x01, 0x48, 0xff, 0xa0, 0x30, 0x01, 0x00, 0x00 };
char enginerep2[] = { 0x48, 0x8b, 0x07, 0xba, 0x00, 0x20, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xff, 0x50, 0x18, 0x84, 0xc0, 0xeb, 0x54, 0x48 };
char enginerep[] = { 0x00, 0xe9, 0x59, 0x01, 0x00, 0x00, 0xba, 0x00, 0x40, 0x00, 0x00, 0xff, 0x50, 0x18, 0x84, 0xc0, 0xeb, 0x76, 0xe8 };
uintptr_t clientpattern;
uintptr_t enginepattern;
uintptr_t enginepattern2;
MEMORY_BASIC_INFORMATION mbi;
int main(){
...
if ((clientpattern = FPat("client.dll", "83 ec 38 48 85 d2 74 1c 4d 85 c0 74 17 4d 8b c8 48 8d 0d")) != NULL)
{
VirtualQuery((LPCVOID)clientpattern, &mbi, sizeof(mbi));
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect);
::memcpy((void*)clientpattern, &clientrep, sizeof(clientrep));
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, mbi.Protect, &mbi.Protect);
};
if ((enginepattern = FPat("engine2.dll", "00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 74 76 e8")) != NULL)
{
VirtualQuery((LPCVOID)enginepattern, &mbi, sizeof(mbi));
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect);
::memcpy((void*)enginepattern, &enginerep, sizeof(enginerep));
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, mbi.Protect, &mbi.Protect);
};
if ((enginepattern2 = FPat("engine2.dll", "48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 74 54 48")) != NULL)
{
VirtualQuery((LPCVOID)enginepattern2, &mbi, sizeof(mbi));
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect);
::memcpy((void*)enginepattern2, &enginerep2, sizeof(enginerep2));
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, mbi.Protect, &mbi.Protect);
};
...
void* CEngineClient = CreateInterface<void*>("engine2.dll", "Source2EngineToClient001");
UnrestrictedCommand = (CMDUnrestricted)
* reinterpret_cast<uintptr_t*>(
*reinterpret_cast<uintptr_t*>(CEngineClient)
+ 8 * 35
);
...
typedef uintptr_t(__fastcall* IsInGame)();
IsInGame InGame;
...
InGame = (IsInGame)
*reinterpret_cast<uintptr_t*>(
*reinterpret_cast<uintptr_t*>(CEngineClient)
+ 8 * 26
);
...
bool Unrestricted = false;
bool inGame = false;
...
//где-нибудь в ендсцене например проверка каждые 60 кадров(условно)
if(++framecounter == 60){
if (InGame() & 0xFF)
inGame = true;
else {
inGame = false;
Unrestricted = false;
}
framecounter = 0;
}
if(inGame && !Unrestricted)
{
UnrestrictedCommand(0, 0, "dota_camera_distance 1500", 0);
UnrestrictedCommand(0, 0, "dota_use_particle_fow 0", 0);
UnrestrictedCommand(0, 0, "r_farz 20000", 0);
Unrestricted = true;
}
...
}
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz