Меню Рубрики

Как написать свой чит для warface

Делаем свой wh для warface///

Warface Online

10.02.2013, 18:53 #1

Для начала нам понадобится:
Логгер текстур:ь
Direct3D StarterKit v3.0b (by Azorbix)
Microsoft Visual

И немного знаний: 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 (..\Lib\x86), Executable files(..\)

Всё, теперь мы сможем откомпилить наш Direct3D StarterKit v3.0b

В main.cpp нужно изменить только 1 строчку:
Код:

Код: выделить все
#define APP_EXE «target_application.exe»

Где target_application.exe прописываем название вашей игры

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))

3. Теперь идём в DrawIndexedPrimitive

Код: выделить все
if (bWallHack)
<
if (MyWallhack)
<
DWORD dwOldZEnable;
m_pD3Ddev->GetRenderState(D3DRS_ZENABLE,&dwOldZEnable);
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 ) &1 )
bWallHack = !bWallHack;

5. Компилим, инжектим, заходим в игру жмём NUMPAD 1 и видим результат.

С верху файла добавляем:
Код:

Код: выделить все
bool bFog = false;

Идём в DrawIndexedPrimitive и добавляем такую строчку:
Код:

Код: выделить все
if(bFog)
<
m_pD3Ddev->SetRenderState( D3DRS_FOGENABLE , false );
>

Код: выделить все
if(GetAsyncKeyState( VK_NUMPAD2 ) &1 )
bFog = !bFog;

Всё готово! При нажатии в игре на кнопку 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 прописываем:
Код:

__________________________________________________ __________________________________________________ __
Далее после всех 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)&bPink,58,&Pink);
D3DXCreateTextureFromFileInMemory(m_pD3Ddev,(LPCVO ID)&bBlue,60,&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 Files\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE»

В случаем который вы видите сейчас «CH_Movspeed = 0» , то есть когда вы поставите вашу скорость на это значение то сама скорость движения будет установлена ​​в положение OFF, то есть выключенна. Если бы я хотел установить его в 2,5 я поставил : «CH_Movspeed = 5», потому что если «Off» в положение «0» из списка, 2,5 в пятое место.

Теперь будем добавлять функции для взлома crossfire, а если быть точнее делать нам чит для crossfire .

Добавим в наш 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 в папке нашего проекта.

Вот и всё жмите + в репу)))

Источник статьи: http://zhyk.ru/forum/showthread.php?t=640281


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии