Как создать свой чит?Тотже WallHack?Я вам расскажу)
Admin Вт Мар 27, 2012 1:24 pm
1)Запускать Только с обходом. После создания.
Для начала нам понадобится:
Логгер текстур:Скачать (я сюда добавил потомучто, тут файл доль ше стоит!)
Direct3D StarterKit v3.0b (by Azorbix):Скачать
Microsoft Visual Studio:Скачать
И немного знаний: C++, D3D — _Google_
Настройка D3D:
Первым делом устанавливаем Microsoft Visual Studio и DirectX SDK
Запускаем программу и идём в Tools->Options->Projects and Solutions>VC++ Directories
Во вкладке Show directories for: Выбираем Include files и добавляем путь к нашему DirectX SD K к папке Include
Делаем тоже самое для Library Files (..Libx86), Executable files(..)
Всё, теперь мы сможем откомпилить наш Direct3D StarterKit v3.0b
В main.cpp нужно изменить только 1 строчку:
Код:
Код: выделить все
#define APP_EXE «target_application.exe»
Где target_application.exe прописываем название вашей игры
Программа для создания читов | Creator Treaner Studio
xrEngine.exe, crossfire.exe, pointblank.exe.
Название .dll файла и инжектора должны быть одинаковыми.
Как сделать обычный валлхак:
1. Ищем текстуры которые нам нужны используя логгер текстур.
2. Прописываем их в нашем Direct3D StarterKit v3.0b в d3d9dev.cpp в начале файла
Код: выделить все
#define MyWallhack ((NumVertices == xx primCount == xx) || (NumVertices == xx primCount == xx))
bool bWallHack = false;
3. Теперь идём в DrawIndexedPrimitive
Код: выделить все
if (bWallHack)
if (MyWallhack)
DWORD dwOldZEnable;
m_pD3Ddev->GetRenderState(D3DRS_ZENABLE,
m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
m_pD3Ddev->DrawIndexedPrimitive(Type,BaseVertexIndex,MinVe rt exIndex,NumVertices,startIndex,primCount);
m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,dwOldZEnable);
>
>
4. Идём в EndScene и ставим валлхак на кнопку включитьвыключить:
Код:
Код: выделить все
if(GetAsyncKeyState( VK_NUMPAD1 )
5. Компилим, инжектим, заходим в игру жмём NUMPAD 1 и видим результат.
Как убрать стены в игре:
Тут всё ещё проще.
С верху файла добавляем:
Код:
Код: выделить все
bool bFog = false;
Идём в DrawIndexedPrimitive и добавляем такую строчку:
Код:
Код: выделить все
if(bFog)
m_pD3Ddev->SetRenderState( D3DRS_FOGENABLE , false );
>
Теперь в EndScene
Код:
Код: выделить все
if(GetAsyncKeyState( VK_NUMPAD2 )
Всё готово! При нажатии в игре на кнопку NUMPAD2, опция будет включатся и выключатся.
credits: _www.aden-territory.com and qwe
Теперь собственно то, что нужно сделать, что бы Wallhack работал желаемым образом:
В самом начале кода d3d9dev.cpp вставляем:
Код:
Код: выделить все
unsigned int m_Stride;
Далее, идем в SetStreamSource и прописываем там перед return m_pD3Ddev->SetStreamSource:
Как делают ЧИТЫ
Код:
Код: выделить все
if(StreamNumber==0) m_Stride=Stride;
Теперь вместо строчки вначале кода #define MyWallhack ((NumVertices == xx primCount == xx) || (NumVertices == xx primCount == xx)) вставляем строчку:
Код:
Код: выделить все
#define MyWallhack ((m_Stride == 28))
Вот и всё! Вы будете видеть других игроков сквозь стены!
Теперь о том, как сделать из Wallhack’a Chams:
В начале d3d9dev.cpp прописываем:
Код:
Код: выделить все
int a=1;
______________________________________________________________________________________________________
Далее после всех bool’ов вставляем этот код:
Код:
Код: выделить все
LPDIRECT3DTEXTURE9 Pink;
const BYTE bPink[58] =
0x42, 0x4D, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0xFF, 0x00
>;
LPDIRECT3DTEXTURE9 Blue;
const BYTE bBlue[60] =
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
>;
______________________________________________________________________________________________________
Можно использовать и другие цвета, на ваш вкус, байты которых можно найти в гугле, ну или вот:
[namespoiler=Цвета]const D3DCOLOR txtRed = D3DCOLOR_ARGB(255, 255, 0, 0);
const D3DCOLOR txtYellow = D3DCOLOR_ARGB(255, 255, 255, 0);
const D3DCOLOR txtGreen = D3DCOLOR_ARGB(255, 0, 255, 0);
const D3DCOLOR txtBlue = D3DCOLOR_ARGB(255, 0, 0, 255);
______________________________________________________________________________________________________
const BYTE bBlue[60] = //Blue
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
>;
const BYTE bBlack[60] = //Black
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
>;
const BYTE bRed[60] = //red
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
>;
const BYTE bYellow[60] = //yellow
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00
>;
const BYTE bGreen[60] = //green
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0xA0, 0x00, 0x00, 0xFF, 0xFF
>;
const BYTE bPink[58] = //pink
0x42, 0x4D, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0xFF, 0x00
>;
const BYTE bTur[60] = //turquoise
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
>;
const BYTE bOrange[60] = //orange
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x80, 0xF0, 0xB0, 0x00, 0x00
>;
const BYTE bWhite[58] = //White
0x42, 0x4D, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0x00
>;
const BYTE bGrenade[58] = // Pink
0x42, 0x4D, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0xFF, 0x00
>;[/namespoiler]
______________________________________________________________________________________________________
Идём в BeginScene() и вставляем такие строки перед return m_pD3Ddev->BeginScene(); :
Код:
Код: выделить все
if (a==1)
D3DXCreateTextureFromFileInMemory(m_pD3Ddev,(LPCVO ID)Pink);
D3DXCreateTextureFromFileInMemory(m_pD3Ddev,(LPCVO ID)Blue);
a=0;
>
Теперь идем в DrawIndexedPrimitive, к нашему волхаку и после строчки m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE); вставляем такую:
Код:
Код: выделить все
m_pD3Ddev->SetTexture(0,Pink);
А после m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,dwOldZEnable2); такую:
Код:
Код: выделить все
m_pD3Ddev->SetTexture(0,Blue);
Вот собственно и всё! Chams готов! xrEngine.exe dll — это либа, которая компилится из D3D (TatniumD3D.vcproj) Инжектор — это прога, которая инжектит либу в игру(main.cpp/TatniumInjector.vcproj) В общем у вас должно быть откомпилино: 1 либа, которую называешь TatniumD3D.dll и 1 екзешник, который обзываешь TatniumD3D.exe, ложешь их рядом(в одну папку пофиг куда) и запускаешь TatniumD3D.exe, нажимаешь ОК, запускаешь игру, нажимаешь 1 на дополнительной(цифровой) клавиатуре, только не забудь включить NumLock.
______________________________________________________________________________________________________
I
I
I
I
V
2)Запускаем только с Обходом. После создания.
______________________________________________________________________________________________________
Ниже я напишу программы, которые вам понадобятся для того что бы создать свой вх для crossfire, в основном это визуальные редакторы и с вычислительными базами.
Microsoft Visual C++ 6.0, MS DirectX SDK 9.0 (Summer 2004) и D3D framework per D3D8 e D3D9 (Hans’ s base)
______________________________________________________________________________________________________
Подготовка к началу создание чита для crossfire:
Первым делом необходимо установить программы, такие как Microsoft Visual C++ 6.0 и MS DirectX SDK 9.0
Затем открыть Microsoft Visual C++ 6.0
Создадим новый проект для DLL, выбрав «Fle > ew > Data Projets > Win32 Dynamic-Link Librry > Ok».
Потом даете название своему проекту, например , я назову его M2 D3D Hack.
Отроеться новое где нужно будет выбрать «An empty DLL project» и нажать на кнопку «Finish».
И вот теперь мы будем производить импорт файлов в наш проект, сделаем это перейдя к базе: Hans’ s base «Project> Add to Project> Files» , найти папку Hans’ s base и установить следующие файлы последовательно, один за другим:
D3dbase.h
D3dbase.cpp
D3dmenu.h
D3dmenu.cpp
Hackbase.cpp
Важно: Не импортировать файлы типа «d3dfont .*»
Теперь будет важная фаза создания чит для crossfire, а именно импорт MS DirectX SDK 9.0:
1)Переходим к импорту файлов и библиотек, мы должны работать в D3D.
2)Перейдите в раздел «Tools> Options> Directories tab». Ебедитесь, что установлен параметр «Show directories for» there is «Include Files»
3)Добавьте новую строчку в папке «includes», которая содержится в scrtella, как раз на котором установлено SDK
4)В моем случае, директория размещения файла будет такой : «E: Program Files Microsoft DirectX 9.0 SDK (Summer 2004) INCLUDE»
5)Теперь в «Show directories for» выберите «Library Files» и вместо папки «includes» Добавить папку «LIB»,
6)В моем случае это будет: «E: Program Files Microsoft DirectX 9.0 SDK (Summer 2004) Lib»
______________________________________________________________________________________________________
Настройка базы для D3D8 и D3D9, настройка баз чита для crossfire:
Теперь в зависимости от игры будем выбирать между D3D9 и D3D8 , например как в моем случае я использую D3D8 и редактирую файл d3dbase.h:
Код: выделить все
C++ Code: Line
Numbers: ON/OFF — Expand: ON/OFF
//#define FOR_D3D8
#define FOR_D3D9
И заменить его на:
Код: выделить все
Line Numbers: ON/OFF — Expand: ON/OFF
#define FOR_D3D8
//#define FOR_D3D9
Теперь заготовка нашего чит для CrossFire готова. Вы должны проверить, сделано ли все правильно, для этого нажмите F7, если не будет ошибок — то все сделано правильно, можно продолжить создавать свой чит для crossfire дальше.
Задание функций для чита для crossfire. Создание функций для нашего hack:
Нам предстоит создать функции для каждого отдельного раздела hacks, вы же хотите сделать рабочий чит для crossfire? В качестве примера я создам функцию, которая при изменении скорости игры (speedhack для crossfire). будет указывать 0x5F29BC (old) соответственно после перехода 0x10 и 0x5B6 в шестнадцатеричный код.
Первым шагом будет являться определение различных баз Address / Offsets (do this in just under the include «hackbase.cpp»):
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
#define Base_Pointer 0x5F29BC
#define Ofs_MovSpeed_1 0x10
#define Ofs_MovSpeed_2 0x5B6
Теперь мы можем просто создать функцию что бы изменить скорость передвижения в игре, speedhack для crossfire (still in «hackbase.cpp»):
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
void MovSpeed(speedVal)
DWORD Addy1 = *(DWORD*)Base_Pointer; //I read the value of the base pointer
DWORD Addy1 = *(DWORD*)(addy1+Ofs_MovSpeed_1) + Ofs_MovSpeed_2; //I read the value of the value of base pointer + the first offset addy + the second offset
*(DWORD*)Addy1 = speedVal; //Change the address of the speed with the value «speedVal» which will be defined by using the function
>
Нам необходимо создать несколько вариантов для выбора скоростей, например, мы делаем так, что бы была возможность выбора скорости от 1 до 4 с диапазоном «0,5». Необходимо добавить переменную, следовательно которая будет позволяет нам выбирать «Чит для crossfire должен быть включен по умолчанию или нет.»
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
«E:Program FilesMICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)INCLUDE»
В случаем который вы видите сейчас «CH_Movspeed = 0» , то есть когда вы поставите вашу скорость на это значение то сама скорость движения будет установлена в положение OFF, то есть выключенна. Если бы я хотел установить его в 2,5 я поставил : «CH_Movspeed = 5», потому что если «Off» в положение «0» из списка, 2,5 в пятое место.
Теперь будем добавлять функции для взлома crossfire, а если быть точнее делать нам чит для crossfire .
Создание D3D меню:
Добавим в наш hack меню, зададим новую линию с названием функции, вот так:
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
Где «Mov Speed» является текст, который появляется в меню, CH_MovSpeed это переменная, составленная ранее и в состоянии hack (enabled, disabled, etc.), opt_MovSpeed доступны 9 вариантов.
Теперь мы адаптируем функции для нашего чита crossfire выше созданного варианта:
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
void MovSpeed(speedVal)
DWORD Addy1 = *(DWORD*)Base_Pointer;
DWORD Addy1 = *(DWORD*)(addy1+Ofs_MovSpeed_1) + Ofs_MovSpeed_2;
*(long*)Addy1 = (16226 + (speedVal * 0,5 * 60));
>
Разберем все по-порядку, если мы сделали hack например, «0,0», которая является номером 1 в этом варианте мы имеем: 15 256 + (1 х 0,5 х 60) = 16 256, это будет являться по умолчанию скорость для crossfire.
Однако, если будет установлено в «2,5» это пятый вариант, то мы имеем: 15 256 + (5 х 0,5 х 60) = 16 406 и так далее .
И сейчас мы будем связывать наши функции и меню в единое целое, то есть как создать свой чит для crossfire вы уже знаете.
Придадим нашей функции нужную базу, для этого мы как всегда заходим в «hackbase.cpp» и смотрим:
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
// Seperate thread for making hacks
DWORD WINAPI HACKthread( LPVOID param )
// — hack loop
while (1) // ..if (CH_stamina) .
// ..
Sleep(50);
>
return 0;
Вносим изменения в эту функцию:
Код: выделить все
C++ Code: Line Numbers: ON/OFF — Expand: ON/OFF
// Seperate thread for making hacks
DWORD WINAPI HACKthread( LPVOID param )
// — hack loop
while (1) if (CH_MovSpeed != 0)
MovSpeed(CH_MovSpeed);
>
Sleep(50);
>
return 0;
>
______________________________________________________________________________________________________
Мы закончили! Чтобы вытащим наш hack, переходим «Build> Сделать активным проектом Configuraton»и выберите»Win32-Release». Нажмите клавишу F7 и найдите наш DLL в папке нашего проекта.
Источник: crossfirehack.mirbb.com
Как делаются читы для игр?
Что никогда не пользовался ArtMoney или CheatEngine? Отсеиваем значения, находим определенный адрес в памяти приложения в котором например хранится значение золота и меняем его. В онлайн играх конечно это бывает не так просто сделать, так как идет синхронизация с серверами, и ваш хак может оказаться только визуальным, но даже там есть свои лазейки.
twobomb, можно с лазейками поподробнее?
Egorian, Подменить запрос, если что-то из вычислений выполняется на фронтовой части. Например вы посадили одну репку, а отправили что посадили их три. Но эту лазейку нужно найти.
Когда еще ферма в вк была популярна, были сайты где такое расписано было
twobomb, ещё был game wizard под dos =)
Решения вопроса 1
Существуют три разных подхода:
1) изменение значений ячеек памяти
1a) изменение кода/сохранения на диске
2) прокси сетевого трафика
3) подмена ввода/вывода
Ответ написан более трёх лет назад
Нравится 4 2 комментария
это все в тех случаях, когда сервер не идентифицирует клиент и не проверяет целостность?
Bwn_z, это в любых случаях.
Ответы на вопрос 3
Хакинг памяти игры.
Ответ написан более трёх лет назад
Типа CheatEngine?
Как это возможно если, допустим та же игра на клиент-серверной основе. Ведь, когда входишь в игру идет проверка по хэшсуммам или типа того. Чтобы добавлять вещи используется какой-то другой метод. Ведь хакинг памяти игры работает только на локальном клиенте. Так?
Bwn_z, если игра просчитывается на сервере, то конечно нужно ломать сам сервер. Изменение памяти в клиенте приведет только к визуальным изменениям и то ненадолго.
automatik, я о этом и говорю, так что не понимаю, про какой хакинг памяти можно говорить. Сейчас 21 век, почти все игры подключается к серверу для идентификации и проверки целостности, даже чтобы поиграть в «сюжетку». Хакинг памяти был актуален, где-то 4-6 лет назад.
было бы большой ошибкой думать
В сетевой игре можно «чит» сделать только на то, что сервером отдаётся на откуп клиенту.
Если, например, здоровье контролируется на сервере, ничего поделать нельзя.
Всё зависит от конкретной игры. Есть разработчики, которые люто орудуют банхаммером за даже подозрение на чит, а есть те, которым похер.
В стрелялках можно сделать aim-bota, например, чтобы каждая пуля летела в голову противнику (даже если стреляешь спиной к нему), в стратегиях популярны map hacking — когда вся карта (и юниты противника) становятся видны, и т. д.
Если игра оффлайновая — тут дозволено всё. Лезем в память процесса и модифицируем что душе угодно.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Профессиональный программист игр.
Совсем недавно рассказывал о кодах в играх для блога: для чего их создают разработчики игр и почему в последнее время их становится все меньше?
Источник: qna.habr.com
Как создать свой чит для CS 1.6
Как создавать читы(Урок по созданию,сделать) Уроки по созданию читов для онлайн игр.
В этой статье я расскажу тебе, как делаются читы для игр. На самом деле создавать их очень просто! В kernel.dll есть функции для дебага, которыми мы будем пользоваться. С их помощью можно читать и изменять значения в памяти гамы! Вот это нам и надо!.
Для создания читов тебе понадобятся 3 вещи:
1. Delphi какой-нибудь последней версии.
2. GameHack (или что-нибудь вроде этого). Но лучше GameTrainer (потому что халявный).
3. Прямые руки!
Для начала ты должен разузнать кое-что о гаме.
1. Название окна. Ну, название окна каждый ламер находить умеет, тут уметь-то ничего не надо.
2. Адрес в памяти. Чтобы нам что-то изменить в памяти, нам нужно нужно конкретно знать где и че изменять. Поэтому мы сначала найдем адрес в памяти, а потом уже все хакнем. Его ты найдешь с помощью специальной проги — GameTrainer (можно также GameHack или что-то такое).
Зайди в гейм. Запомни значение денег/жизней/фрагов или чего захочешь. Теперь в GameTrainer’е в первом поле выбери процесс, а во второе пиши то значение, которое ты только что запомнил (хотя ты уже, наверное, забыл). Сейчас GameTrainer выдаст тебе большое количество адресов, но нам они все нафиг не нужны!
Поэтому измени это значение как-нибудь(потрать несколько пуль, купи че-нибудь, убей кого-нибудь и т.д.). Теперь снова вводи это значение в GameTrainer, только в этот раз нажимать надо не Find, а Seive! И так пока останется минимальное количество адресов.
3. Тип данных. Тип данных играет немаловажную роль! Основываясь на нем, ты будешь делать чит, а также определять максимальное значение Вот примеры:
byte: 256; 1 байт;
word: 65536; 2 байта;
dword: 4294967296; 4 байта;
Здесь я приведу пример создания чита для Counter-Strike’a v1.3, т.к. по-моему это самая популярная игра. Чит нам будет жизней до фига делать! Единственное, что плохо — он будет работать только если ты создал сервак и если у тебя Software Video Mode. Можно сделать и под OpenGl, но там адреса другие, потому что эти режимы занимают разное количество памяти.