Вообщем решил перевести на русский язык хорошую стать с mpgh.net. Статья действительно очень интересная и многим возможно она поможет. Итак, начнем. Начнем с самого определния. Что же такое чит? Мне очень понравилось определение с сайта 4pointblank.ru от slava-zis.
В любой игре есть код. Код – это исполняемой участок программы, который управляет всеми процессами в игре. Есть статические данные, это могут быть всевозможные данные, текстовые строки и тд. Так же есть участки для чтения/записи – это места в программе, где хранится, обновляется, записывается всевозможная информация. Это может быть количество патронов, количество хп и тд.
Наверняка вы уже догадались что для получения преимущества в игре нужно повлиять на один из этих параметров. Ну например, можно найти адрес в который программа записывает количество денег и подредактировать его (В онлайн играх дело обстоит сложнее, так как клиент активно взаимодействует с сервером, а одиночных играх все действие происходит в одном компьютере, соответственно всем можно управлять). Галактеко опасносте, возможно количество денег в программе будет храниться в зашифрованном виде.
В этой статье я отвечу на самые частые вопросы новичков, например: 1. Как сделать чит? 2.Что такое с++? 3.Как сделать взлом памяти? 4.Как сделать Д3Д хак? 5.Как сделать хук?
Начнем с с++.
Если ты хочешь сделать чит, то прежде всего тебе придется выучить язык программирования с++... Ты можешь смотреть видео уроки на ютубе, но намного эффективнее будет купить и прочитать учебник. Учебник по с++ ты можешь найти в любом книжном магазине или скачать в интернете. Также вы можете читать статьи по с++ на различных форумах. Лично я советую почитать вам книгу Гербера Шилдта "C++ базовый курс. Третье издание"
Ассемблер
Также тебе понадобится выучить ASM (Assembler). Немного информации с википедии: Язы́к ассе́мблера — язык программирования низкого уровня, мнемонические команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы. Трансляция программы в исполняемый машинный код производится ассемблером (от англ. assembler — сборщик) — программой-транслятором, которая и дала языку ассемблера его название.
Ассемблер намного проще с++. Он поможет тебе искать адреса, поинтеры, оффсеты и пользоваться такими программами как IDA PRO или OllyDbg
Взлом памяти процесса Тут вам понадобятся такие программы как Cheat Engine, OllyDbg, Ida Pro. Откройте файл pointblank.i3exec или процесс pointblank.exe. Вот некоторые функции для игры поинтбланк:
GetJumpPenaltyTime - Джамп хак.
getAnimDuration) - Быстрая перезарядка.
GetMoveSpe - Анти отдача,скорострел,дн.
GetMaxBullet - Анлим патроны.
GetDamage - Дамаг.
GetMaxBullet - Спидхак.
GetMoveSpe - Телепорт!
Вот часть функции телепорта. Вест я не стал выкладывать, чтобы нубы не налепили приватных читов
if(cItem.df==1)
{
DWORD Pointer = (DWORD)GetModuleHandleA("pointblank.i3exec"
)+0xТУТ ВАШ НАЙДЕННЫЙ АДРЕС;
MEMwrite((void *)(Pointer),(void *)"\xE5\xEC\xF5\x05" , 4);
} Когда мы найдем наш адресс нужно отбросить 10 и вместо него написать 0x. Вот примеры функций для игры кросфайр. Возможно какие-либо функции подойдут и для пб:
GhstMgr: 10a021f8
CharacterHiddenAlpha: 88 = Видеть призрака
CharacterHiddenWalkAlpha: 8c = Видеть призрака(2)
CharacterHiddenRunAlpha: 90 = //3
CharacterHiddenAlpha: 88 = //4
MovementHiddenRate: 9C = Спидхак
C4PlantTime: 7C = Быстрое минирование
C4DefuseTime: 80 = Быстрое разминирование (1)
MaxCanDefuseDistance: 84 = Быстрое минирование или минирование в любом месте. (2)
WallShotDamageRatio: 2668 = Стрелять сквозь стены
BulletPosOffset: 1930 = Отдача
ReloadAnimRatio: 269c = Нет перезарядки
ChangeWeaponAnimRatio: 26a0 = Нет смены оружия
Вот статья, которая мне неплохо помогла тык
Direct3D Для этого нам понадобится DirectX SDK 2010 тык D3D9_MODEL_LOGGER чтобы подсветить текстуры скачать
Как сделать D3D9 MENU? ТЫК
void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}
void FillRGB( int x, int y, int w, int h, D3DCOLOR color, IDirect3DDevice9* pDevice )
{
if( w < 0 )w = 1;
if( h < 0 )h = 1;
if( x < 0 )x = 1;
if( y < 0 )y = 1;
D3DRECT rec = { x, y, x + w, y + h };
pDevice->Clear( 1, &rec, D3DCLEAR_TARGET, color, 0, 0 );
}
void DrawBorder( int x, int y, int w, int h, int px, D3DCOLOR BorderColor, IDirect3DDevice9* pDevice )
{
FillRGB( x, (y + h - px), w, px, BorderColor, pDevice );
FillRGB( x, y, px, h, BorderColor, pDevice );
FillRGB( x, y, w, px, BorderColor, pDevice );
FillRGB( (x + w - px), y, px, h, BorderColor, pDevice );
}
void DrawBox( int x, int y, int w, int h, D3DCOLOR BoxColor, D3DCOLOR BorderColor, IDirect3DDevice9* pDevice )
{
FillRGB( x, y, w, h, BoxColor, pDevice );
DrawBorder( x, y, w, h, 1, BorderColor, pDevice );
}
bool isMouseinRegion(int x1, int y1, int x2, int y2)
{
POINT cPos;
GetCursorPos(&cPos);
if(cPos.x > x1 && cPos.x < x2 && cPos.y > y1 && cPos.y < y2){
return true;
} else {
return false;
}
}
bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask)
return 0;
return (*szMask) == NULL;
}
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for(DWORD i=0; i<dwLen; i++)
if (bCompare((BYTE*)(dwAddress+i),bMask,szMask))
return (DWORD)(dwAddress+i);
return 0;
}
void *DetourFunction (BYTE *src, const BYTE *dst, const int len)//edit if you want to work for the game
{
BYTE *jmp = (BYTE*)malloc(len+5);
DWORD dwBack;
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(jmp, src, len);
jmp += len;
jmp[0] = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
src[0] = 0xE9;
*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
for (int i=5; i<len; i++) src[i]=0x90;
VirtualProtect(src, len, dwBack, &dwBack);
return (jmp-len);
}
//==================================================================
// This file is part of Qmoainxbase D3D Private part 1
// (c) copyright Qmoainx 2011
// special thanks to:
// mpgh.net
//==================================================================
#include "Functions.h"
typedef struct{
int index;
char * title;
int *hack;
int hackmaxval;
int hacktype;
DWORD HCOLOR;
}ITEM;
class QmoMenu {
public:
LPDIRECT3DDEVICE9 pDevice;
LPD3DXFONT pFont;
int hackcount;
int selector;
int x,y,w,h;
DWORD COLOR;
ITEM HACKITEM[99];
char hackrval[256];
void CreateItem(int index, char * title, int *hack,int hackmaxval=1,int hacktype=0);
void BuildMenu(char * menuname, int x, int y, int h, int w, DWORD TITLECOL, DWORD BACKCOLOR, DWORD BORDERCOLOR, LPDIRECT3DDEVICE9 pDevice);
void RenderMenu();
};
typedef HRESULT ( WINAPI* oReset )( LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters );//edit if you want to work for the game
typedef HRESULT (WINAPI* oEndScene)(LPDIRECT3DDEVICE9 pDevice);
//Colors A,R,G,B Please use to make Chams
#define RED D3DCOLOR_ARGB(255, 255, 0, 0)
#define GREEN D3DCOLOR_ARGB(255, 0, 255, 0)
#define BLUE D3DCOLOR_ARGB(255, 0, 0, 255)
#define WHITE D3DCOLOR_ARGB(255, 255, 255, 255)
#define BLACK D3DCOLOR_ARGB(255, 0, 0, 0)
#define YELLOW D3DCOLOR_ARGB(255, 255, 255, 0)
#define TEAL D3DCOLOR_ARGB(255, 0, 255, 255)
#define PINK D3DCOLOR_ARGB(255, 255, 240, 0)
#define ORANGE D3DCOLOR_ARGB(255, 255, 132, 0)
#define LIME D3DCOLOR_ARGB(255, 198, 255, 0)
#define SKYBLUE D3DCOLOR_ARGB(255, 0, 180, 255)
#define MAROON D3DCOLOR_ARGB(255, 142, 30, 0)
#define LGRAY D3DCOLOR_ARGB(255, 174, 174, 174)
#define DGRAY D3DCOLOR_ARGB(255, 71, 65, 64)
#define BROWN D3DCOLOR_ARGB(255, 77, 46, 38)
#define SHIT D3DCOLOR_ARGB(255, 74, 38, 38)
//==================================================================
// This file is part of Qmoainxbase D3D Private part 1
// (c) copyright Qmoainx 2011
// special thanks to: mpgh.net
//==================================================================
#include <Windows.h>
#include <stdio.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib,"d3dx9.lib")
//==================================================================
// This file is part of Qmoainxbase D3D Private part 1
// (c) copyright Qmoainx 2011
// special thanks to: mpgh.net
//==================================================================
#include "QmoMenuClass.h"
oReset pReset;
oEndScene pEndScene;
QmoMenu dMenu;
LPDIRECT3DDEVICE9 g_pDevice = 0;
//Offset Adjust Font Menu Hack
int xFontOffSet = 15;
int hackopt1;
int MenuHeight = 10;
int show=1;
int b = 0;
//==================================================================
//Menu HACK
int hack1 = 0;
int hack2 = 0;
int hack3 = 0;
int hack4 = 0;
int hack5 = 0;
//==================================================================
void QmoMenu::CreateItem(int index, char * title, int *hack, int hackmaxval,int hacktype)
{
hackcount++;
HACKITEM[hackcount].index = index;
HACKITEM[hackcount].hack = hack;
HACKITEM[hackcount].hackmaxval = hackmaxval;
HACKITEM[hackcount].hacktype = hacktype;
// Set the high and low Menu Hack
PrintText(title, xFontOffSet, index*15,HACKITEM[hackcount].HCOLOR,pFont);
}
void QmoMenu::BuildMenu(char * menuname, int x, int y, int h, int w, DWORD TITLECOL, DWORD BACKCOLOR, DWORD BORDERCOLOR, LPDIRECT3DDEVICE9 pDevice)
{
if(GetAsyncKeyState(VK_INSERT)&1)show=(!show);
//Bring up the Menu HACK (INSERT)
if(!show) {
DrawBox(0,0, w, 20, BACKCOLOR, BORDERCOLOR, pDevice);
PrintText("Qmoainx D3D MENU", 5, 2, TITLECOL, pFont);
return;
}
// DrawBox(x,y, w, h, BACKCOLOR, BORDERCOLOR, pDevice); // Adjust the Base Menu Hack
PrintText(menuname, x+10, y+2, TITLECOL, pFont);
CreateItem(1,"Wallhack", &hack1);
CreateItem(2,"Chams", &hack2);
CreateItem(3,"Crosshair", &hack3);
CreateItem(4,"NO Smoke", &hack4);
CreateItem(5,"?????", &hack5);
RenderMenu();
}
void QmoMenu::RenderMenu() //Hotkey menu
{
if(GetAsyncKeyState(VK_DOWN)&1)
selector++;
if(GetAsyncKeyState(VK_UP)&1)
if(selector > 1)
selector--;
if (GetAsyncKeyState(VK_RIGHT)<0){
for(int i=0;i < (hackcount+1);i++){
if(selector == HACKITEM[i].index){
if(*HACKITEM[i].hack < HACKITEM[i].hackmaxval)
*HACKITEM[i].hack += 1;
}
}
}
if (GetAsyncKeyState(VK_LEFT)<0){
for(int i=0;i < (hackcount+1);i++){
if(selector == HACKITEM[i].index){
*HACKITEM[i].hack = 0;
Sleep(200);
}
}
}
for(int i=0;i < (hackcount+1);i++){
if(selector == HACKITEM[i].index)
HACKITEM[i].HCOLOR = GREEN;
else
HACKITEM[i].HCOLOR = RED;
}
for(int i=1; i<(hackcount+1); i++){
if(HACKITEM[i].hacktype == 0){
if(*HACKITEM[i].hack == 1)
// Set the high and low Hotkey Menu
PrintText("On", xFontOffSet+100, HACKITEM[i].index*15,WHITE,pFont);
else
PrintText("Off", xFontOffSet+100, HACKITEM[i].index*15,RED,pFont);
}
}
if(selector < 1)
selector = 1;
if(selector > hackcount)
selector = 1;
hackcount = 0;
}
void TestThread() //Raising texk if ON / OFF
{
if( hack1 == 1)
PrintText("Wallhack [ON] text will change color", 30, 200, GREEN, dMenu.pFont);
else
PrintText("Wallhack [ON] text will change color", 30, 200, RED, dMenu.pFont);
} //Customize it
void ReFont(LPDIRECT3DDEVICE9 pDevice) //For replacement fonts
{
if (g_pDevice != pDevice)
{
g_pDevice = pDevice;
try
{
if (dMenu.pFont != 0)
dMenu.pFont->Release();
} catch (...) {}
dMenu.pFont = 0;
D3DXCreateFontA(pDevice, 14, 0, FW_BOLD, 0, 0, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &dMenu.pFont );
}
}
HRESULT WINAPI Reset(IDirect3DDevice9* pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters )
{
dMenu.pFont->OnLostDevice();
HRESULT hRet = pReset(pDevice, pPresentationParameters);
dMenu.pFont->OnResetDevice();
return hRet;
}
// Menu TITLE
HRESULT WINAPI EndScene(LPDIRECT3DDEVICE9 pDevice)
{
ReFont(pDevice);
dMenu.BuildMenu("mpgh.net 2011",0,0,190,200,RED,BLACK,GREEN,pDevice);
TestThread();
return pEndScene(pDevice);
}
int D3Dinit(void)//edit if you want to work for the game
{
DWORD hD3D, adr, *vtbl;
hD3D=0;
do {
hD3D = (DWORD)GetModuleHandle("d3d9.dll");
Sleep(10);
} while(!hD3D);
adr = FindPattern(hD3D, 0x128000, (PBYTE)"\xC7\x06\x00\x00\
x00\x00\x89\x86\x00\x00\
x00\x00\x89\x86", "xx????xx????xx");
if (adr) {
memcpy(&vtbl,(void *)(adr+2),4);
pReset = (oReset) DetourFunction((PBYTE)vtbl[16] , (PBYTE)Reset ,5);
pEndScene = (oEndScene) DetourFunction((PBYTE)vtbl[42], (PBYTE)EndScene,5);
}
return 0;
}
BOOL WINAPI DllMain ( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )//edit if you want to work for the game
{
DisableThreadLibraryCalls(hDll);
if ( dwReason == DLL_PROCESS_ATTACH ) {
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)D3Dinit, NULL, NULL, NULL);
}
if( dwReason == DLL_PROCESS_DETACH) {
dMenu.pFont->Release();
}
return TRUE;
}
Спасибо за внимание! Надеюсь всем понравилась моя статья
|