#include <windows.h>
#include <process.h>
#include <d3d9.h>
#include <d3dx9.h>
#include "Xor.h"
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
//======================Definitions============================
#define WeaponMgr 0xEA06A4
#define PlayerMgr 0xE393D8
// =====================CONFIG ===============================
#define ModuleCShell /*CShell.dll*/XorStr<0x11,11,0x089A2A02>("\x52\x41\x7B\x71\x79\x7A\x39\x7C\x75\x76"+0x089A2A02).s
#define ModuleClientFx /*ClientFx.fxd*/XorStr<0xE5,13,0xFC345732>("\xA6\x8A\x8E\x8D\x87\x9E\xAD\x94\xC3\x88\x97\x94"+0xFC345732).s
//=====================Variables===============================
DWORD SeeGhost;
bool seeGhost = (true);
//=============================================================
bool Compare(const BYTE* pData, const BYTE* bMaskara, const char* szMaskara)
{
for(;*szMaskara;++szMaskara,++pData,++bMaskara)
if(*szMaskara=='x' && *pData!=*bMaskara )
return false;
return (*szMaskara) == NULL;
}
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for (DWORD x = 0; x < dwLen; x++)
if( Compare( ( BYTE * )( dwAddress + x ), bMask, szMask ) )
return ( DWORD )( dwAddress + x );
return 0;
}
void Seeghost()
{
SeeGhost = FindPattern((DWORD)GetModuleHandleA("crossfire.exe"), 0x2D7000, (BYTE *)"\x75\xFF\x83\x0D\xFF\xFF\xFF\xFF\x01\xB8\xFF\xFF\xFF\xFF\xE8","x?xx????xx????x");
SeeGhost = *(DWORD *)(SeeGhost + 0xA) + 0xB8;
if(seeGhost)
{
*(DWORD *)(SeeGhost) = 14;
}
}
UINT WINAPI Hook(VOID *)
{
while(true) {
DWORD CShell = (DWORD)GetModuleHandleA(ModuleCShell);
DWORD ClientFx = (DWORD)GetModuleHandleA(ModuleClientFx);
if(CShell && ClientFx)
{
//========Player(Seeghost)===========================
DWORD BasicPlayerInfo = *(DWORD*)(CShell + PlayerMgr);
if(BasicPlayerInfo)
{
Seeghost();
}
}
}
}
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, VOID *) {
switch(dwReason) {
case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hDll), _beginthreadex(0, 0, &Hook, 0, 0, 0); break;
case DLL_PROCESS_DETACH: break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
}
return (true);
}
#ifndef _XOR_H_
#define _XOR_H_
#pragma once
template<INT XORSTART, INT BUFLEN, INT XREFKILLER>
class XorStr
{
private:
XorStr();
public:
CHAR s[BUFLEN];
XorStr(CONST CHAR *xs);
~XorStr()
{
for(INT i = 0; i < BUFLEN; i++)
s[i] = 0;
}
};
template<INT XORSTART, INT BUFLEN, INT XREFKILLER>
XorStr<XORSTART, BUFLEN, XREFKILLER>::XorStr(CONST CHAR *xs)
{
INT xvalue = XORSTART;
INT i = 0;
for(; i < (BUFLEN - 1); i++)
{
s[i] = xs[i - XREFKILLER] ^ xvalue;
xvalue += 1;
xvalue %= 256;
}
s[BUFLEN - 1] = 0;
}
#endif
