-
Постов
815 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Coder
-
-
Ну есть такая штука, как WorldtoScreen, переводит мировые координаты в экранные.
-
Версия игры: 1.0.5427.1; дата создания: 04.18.2012; 11 функций
Корабль:
F1 - Невидимый корабль, жнецы никогда за вами не явятся
F2 - Бесконечное топливо
F3 - Телепорт корабля
F4 - Сохранить позицию
F5 - Загрузить позиция
Шепард и его команда:
F6 - Режим бога (здоровье никогда не отнимется) + убийство с одного касания/пинка/ранения
F7 - Бесконечная броня (!!будьте осторожны, сверхмощные повреждения, отнимают здоровье даже через броню!!)
F8 - Прибавить указанное количество кредитов
F10 - Телепорт Шепарда
F11 - Сохранить позицию
F12 - Загрузить позицию
P.S. требует .NET 4.0
Обсуждение моих трейнеров - http://forum.gamehac...BE%D1%82-coder/
- 3
-
Ребят, спасибо за отличную статью
-
Версия игры 1.4 (актуальная на данный момент); Версия трейнера 1.0; дата создания: 04.04.2012
Функции:
F1 - Бесконечные патроны
F2 - Бесконечная выносливость
F3 - Режим бога (максимум брони и здоровья + они не отнимаются: взрывами, падениями, ударами, стрельбой и т.д.) + бесконечные гранаты
F4 - Отключение искусственного интеллекта игры (все ваши враги на уровне просто стоят и всё, никак не реагируют ни на что), если вы захотите всё вернуть назад, отключите эту функцию, и загрузите последнюю сохранённую игру.
Трейнер закрывается правым кликом мыши.
P.S. требует .NET 4.0
Обсуждение моих трейнеров - http://forum.gamehacklab.ru/topic/1359-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%BE%D1%82-coder/
Скачать:
- 2
-
Полностью подверждаю слова кенга.
Полное нитро имеет значение (float)6, инструкция которая пишет обращается в адрес [edi+50], несмотря на то, что адрес нитро расположен в [edi+58], ну да ладно
К тому же игра полностью меняет базу указателей при рестарте гонки.
Стабильно держатся только координаты для этой гонки (в других гонках уже нужно заново искать указатели на координаты).
Это что-то новое в защите игр. От EA я такого никак не ожидал.
P.S. ну вот какого чёрта отладчик отображает что эта инструкция пишет в адрес нитро, хотя она пишет совершенно в другой адрес.
-
Версия игры 1.02; версия трейнера 1.1; дата создания трейнера 02.02.2012
Описание:
F1 - Бесконечная энергия (нитро)
F2 - Всегда первый
F3 - ТелепортХак, после включения (F4 - Сохранить координаты, F5 - Восстановить координаты).
P.S. требует .NET 4.0
Обсуждение моих трейнеров - http://forum.gamehacklab.ru/topic/1359-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%BE%D1%82-coder/
- 2
-
Версия игры 1.0.5.0; версия трейнера 1.0, дата создания 03.02.2012
Описание:
F1 - Бесконечная закись азота
F2 - Остановка таймера (даже если вы не приехали первым фактически, вы всё равно выиграете (игра определяет победителя по времени))
F3 - Бесконечные бонусы (турбо, ЭМИ, вертолёты, заграждения и т.д., даже если вам не выдали никаких бонусов в гонке, они появятся всё равно)
F4 - Мгновенная перезарядка (вы можете использовать бонусы, не дождавшись перезарядки)
F5 - Ультралёгкая машина (немного увеличивается макс. скорость, неимоверно увеличивается ускорение, но управлять тяжело)
Настоятельно рекомендуется отключить эту функцию в конце гонки, и сбросить массу (NumPad0).
F6 - Телепорт, в объяснении не нуждается (правда немного кривой он).
Трейнер закрывается правым кликом мыши.
Обсуждение моих трейнеров - http://forum.gamehacklab.ru/topic/1359-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%BE%D1%82-coder/
P.S. требует .NET 4.0
- 2
-
Да шутка с CE стоящая
-
мда а чего удалил ?
Прошу прощения у всей администрации данного форума за оффтоп.
boss, мне не приятно с Вами общаться, думаю этого достаточно.
-
Есть некоторый прогресс,хотел найти значение скорости тачки, нашёл экранное значение скорости.
Начал смотреть что в него пишет, была одна инстукция fld.
Решил полазить по отладчику, и вуаля нашёл не скорость, а 3 значения (структура), смещение машины по оси X,Y,Z.
Т.е. думаю стоит копать дальше, по отладчику найду и координаты, и скорость движения.
Выглядит это так:
Да как я и думал, немного продолжив своё шествие по отладчику (поставил бряк на смещения), я нашёл координаты.
Отпишусь если найду скорость.
И так по просьбе boss, который уже задолбал меня, выкладываю скрин, в док-во того, что я нашёл координаты.
P.S. я не "жидяра" и не "школоло", я советовал бы Вам быть по адекватнее.
-
CSS конечно же = )
Я этому человеку даже в скайпе показал как координаты искать, он всёравно повторить не смог =)
Извините, но я вас не знаю и тем более вас нет у меня в скайпе.
А игра Ridge Racer Unbounded (2012), как и искать координаты я знаю=)
-
Ridge Racer Unbounded (2012)
-
Другие оси поискать, структуру поискать, всё ведь разжёвывали уже. 0_о
Поиск по 2 bytes, float, double не дал результатов.
Искал и по увеличилось, уменьшилось и наоборот результатов нет.
-
Здравствуйте! Вышла новая часть игры Ridge Racer.
Ну для начала, я сделал бесконечную энергию, потом решил пошалить с координатами.
Так вот, когда дошёл до координат, я увидел облом.
Решил найти структуру координат по Z (ведь так проще всего).
Ничто не предвещало проблем, но всё же произошла проблема, при долгом и тщательном отсеивании остаются два адреса, они меняются когда меняется высота (высота больше, значение больше).
Но эти значения не настоящие (их изменение ничего не даёт, т.к. после изменения сразу возвращается прошлое значение).
Искал и float и double, толку не дало.
Может есть какие-нибудь рекомендации?
-
Это не обязательно текст - вполне может быть текстура, т.е. картинка с надписью, которую игра и отображает. В этом случае поиск затянется - но на всякий случай погугли на тему "замена текстур".
Гугл выводит бред, типа - закиньте свои текстуры в такую-то папку.
А как понятно, мне это явно не подходит.
---
Так есть какие-нибудь варианты?
-
Здравствуйте!
Нашел внутриигровое значение скорости атаки героев в игре.
Теперь я хотел бы заменить текст в игре - Скорость боя: Высокая на Скорость боя: [внутриигровое значение]
Но вот найти значение поля Скорость боя никак не получается..
Как это возможно реализовать?
-
Только я даже представления не имею как это на FASM переписать.
-
Спасибо за подсказки, получилось сделать трейнер на C++.
#include <windows.h>
#include <conio.h>
#include <dos.h>
#include <tlhelp32.h>
#include <stdio.h>
LPVOID gm_addr1 = (void*) адрес; // memory address of the stamina value in the WarRock process
LPVOID gm_addr2 = (void*) адрес;
LPVOID gm_addr3 = (void*) адрес;
LPVOID gm_addr4 = (void*) адрес;
LPVOID gm_off1 = (void*) байт кода;
LPVOID gm_off2 = (void*) байт кода;
LPVOID gm_off3 = (void*) байт кода;
LPVOID gm_off4 = (void*) байт кода;
LPVOID gm_on1 = (void*) байт кода;
LPVOID gm_on2 = (void*) байт кода;
LPVOID gm_on3 = (void*) байт кода;
LPVOID gm_on4 = (void*) байт кода;
void screen() // output
{
system("cls"); // clear the screen
printf("WarCraft 3 Map Hack \n");
printf("Press NumPad1 to enable MapHack \n");
printf("Press NumPad2 to disable MapHack \n");
printf("Created by Coder, connect with me ICQ: 222932 \n");
}
int main(int argc, char* argv[])
{
HANDLE hProcessSnap; // will store a snapshot of all processes
HANDLE hProcess = NULL; // we will use this one for the WarRock process
PROCESSENTRY32 pe32; // stores basic info of a process, using this one to read the ProcessID from
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); // make process snapshot
pe32.dwSize = sizeof( PROCESSENTRY32 ); // correct size
Process32First(hProcessSnap, &pe32); // read info about the first process into pe32
do // loop to find the WarRock process
{
if(strcmp(pe32.szExeFile, "war3.exe") == 0) // if WarRock was found
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); // open it, assigning to the hProcess handle
break; // break the loop
}
}
while(Process32Next(hProcessSnap, &pe32)); // loop continued until Process32Next deliver NULL or its interrupted with the "break" above
CloseHandle( hProcessSnap ); // close the handle (just fuckin do it)
if(hProcess == NULL) // self explanatory tbh
{
printf("WarCraft is not running!");
getch(); // wait for a key press. otherwise the app will just close so fast when the process is not found, you wont know wtf happened.
}
else
{
screen(); // print the display
char key = ' '; // make a key variable to store pressed keys
while(key != VK_ESCAPE) // loop until user presses Escape
{
if(kbhit()) // if a key was pressed
{
key = getch(); // it is saved into "key"
switch(key) // here the commands are handled depending on the key that was pressed
{ // case '1': ... break; case '2': ... break; and so on
case '1':
WriteProcessMemory(hProcess, gm_addr1, &gm_on1, 1, NULL); // read the stamina value from the memory into the "stamina" variable
WriteProcessMemory(hProcess, gm_addr2, &gm_on2, 1, NULL);
WriteProcessMemory(hProcess, gm_addr3, &gm_on3, 1, NULL);
WriteProcessMemory(hProcess, gm_addr4, &gm_on4, 1, NULL);
break;
case '2':
WriteProcessMemory(hProcess, gm_addr1, &gm_off1, 1, NULL); // read the stamina value from the memory into the "stamina" variable
WriteProcessMemory(hProcess, gm_addr2, &gm_off2, 1, NULL);
WriteProcessMemory(hProcess, gm_addr3, &gm_off3, 1, NULL);
WriteProcessMemory(hProcess, gm_addr4, &gm_off4, 1, NULL);
break;
}
screen(); // print the display after each key press
}
CloseHandle(hProcess); // close the handle
}
return 0; // THE END
}
} -
Первая и самая грубая ошибка - после того, как процесс найден, или же перебор процессов закончен (в случае, если игра не запущена), надо обязательно закрывать хэндл снимка системы. Это раз. Ну а по поводу записи в память - большинство игр сейчас идут с защитой от подобных изменений, поэтому, прежде чем записать что-либо в память процесса, надо сначала получить права на запись, а точнее, сменить тип защиты нужного адреса. Делается это функцией VirtualProtectEx. Далее, сразу же после записи нужных данных в память процесса, нужно восстановить старые настройки защиты (их можно сохранить при первом запуске упомянутой функции - МСДН объяснит) вызовом этой же самой функции. Это неоднократно рассматировалось в разных статьях и разных тредах нашего форума, надо не лениться и пользоваться поиском. Если в каждой теме обмусоливать одни и те же вопросы - мы все погрязнем в куче однотипной информации, в которой что-то полезное будет найти весьма проблематично.
Потратив пол дня, на изучение рассказанных Вами функций, я смог написать программу без ошибок, но проблема та же не могу просто открыть процесс, пожалуйста просмотрите мой исходник, я перепробовал уже множество вариантов.
format PE GUI 4.0
entry start
include 'd:\Coding\fasm\include\win32a.inc'
struct PROCESSENTRY32
dwSize dd ?
cntUsage dd ?
th32ProcessID dd ?
th32DefaultHeapID dd ?
th32ModuleID dd ?
cntThreads dd ?
th32ParentProcessID dd ?
pcPriClassBase dd ?
dwFlags dd ?
szExeFile rd 260
ends
section '.data' data readable writable
file_name db 'war3.exe',0
handle_snap dd ?
handle_proc dd ?
error_message db 'Access denited!',0
caption db 'Fasm Trainer',0
Poke dd _Poke
addr dd адрес
godmode_on db байты
godmode_off db байты
pe32 PROCESSENTRY32
section '.text' code readable executable
start:
invoke CreateToolhelp32Snapshot, 0fh, 0
mov [handle_snap], eax
invoke Process32First, eax, pe32
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
invoke ExitProcess,0
@next:
nop
invoke Process32Next, [handle_snap], pe32
test eax, eax
jz @error
invoke lstrcmp, pe32.szExeFile, file_name
test eax, eax
jnz @next
@error:
invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
proc DialogProc hwnddlg,msg,wparam,lparam
cmp [msg],WM_CLOSE
je .wmclose
cmp [msg],WM_COMMAND
je .wmcommand
cmp [msg],WM_LBUTTONDOWN
je .move
xor eax,eax
jmp .finish
.wmcommand:
cmp [wparam],BN_CLICKED shl 16 + 1
je .poke
cmp [wparam],BN_CLICKED shl 16 + 2
je .wmclose
.poke:
invoke Poke,[addr],godmode_on,4
jmp .finish
.wmclose:
invoke Poke,[addr],godmode_off,4
invoke EndDialog,[hwnddlg],0
.move:
invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,2,0
.finish:
ret
endp
proc _Poke,memadd,memval,bytes
invoke OpenProcess, PROCESS_ALL_ACCESS, 0, [pe32.th32ProcessID]
cmp eax,0
je .error
invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
cmp eax,0
je .error
invoke CloseHandle, [handle_snap]
ret
.error:
invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
ret
endp
section '.idata' import data readable writeable
library kernel,'kernel32.DLL',\
user,'user32.DLL'
import kernel,\
GetModuleHandle,'GetModuleHandleA',\
ExitProcess,'ExitProcess',\
OpenProcess,'OpenProcess',\
WriteProcessMemory,'WriteProcessMemory',\
CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
Process32First,'Process32First',\
Process32Next,'Process32Next',\
lstrcmp,'lstrcmp',\
CloseHandle,'CloseHandle'
import user,\
DialogBoxParam,'DialogBoxParamA',\
EndDialog,'EndDialog',\
MessageBox,'MessageBoxA',\
SendMessage,'SendMessageA'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
dialog demonstration,'Trainer by Coder',70,70,190,175,WS_POPUP
dialogitem 'STATIC','Press OK for toggle godmode on.',-1,0,0,163,188,SS_LEFT + WS_VISIBLE+ SS_CENTER
dialogitem 'BUTTON','OK',1,85,150,45,15,WS_VISIBLE
dialogitem 'BUTTON','Exit',2,135,150,45,15,WS_VISIBLE
enddialog -
Сделал вещь, процесс видит, но запись в код игры не происходит, в чём проблема?
format PE GUI 4.0
include 'd:\Coding\fasm\include\win32ax.inc'
struct PROCESSENTRY32
.dwSize dd ?
.cntUsage dd ?
.th32ProcessID dd ?
.th32DefaultHeapID dd ?
.th32ModuleID dd ?
.cntThreads dd ?
.th32ParentProcessID dd ?
.pcPriClassBase dd ?
.dwFlags dd ?
.szExeFile rb 260
ends
TH32CS_SNAPPROCESS = 0x2
;------------------------------------------------
;Declares
;------------------------------------------------
.data
SnapHandle dd ?
Poke dd _Poke
ProcessEntry PROCESSENTRY32
szProcessName db "war3.exe", 0
addr dd адрес
godmode_on db байты
proc _Poke,memadd,memval,bytes
invoke OpenProcess,PROCESS_ALL_ACCESS,0,[ProcessEntry..th32ProcessID]
invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
cmp eax,0
je Exit
ret
endp
.code
Main:
;------------------------------------------------
;Create Snapshot of Processes
;------------------------------------------------
mov dword [ProcessEntry..dwSize], sizeof.PROCESSENTRY32
invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
cmp eax, 0
je Exit
mov dword [SnapHandle], eax
invoke Process32First, dword [SnapHandle], ProcessEntry
;------------------------------------------------
;Loop Through All Processes
;------------------------------------------------
NextProcess:
cmp eax, 0
je Exit
invoke lstrcmpi, ProcessEntry..szExeFile, szProcessName
cmp eax, 0
je Found
invoke Process32Next, dword [SnapHandle], ProcessEntry
jmp NextProcess
;------------------------------------------------
;Show a messagebox if found
;------------------------------------------------
Found:
invoke MessageBox, 0, "Patch Sucessful!", szProcessName, MB_ICONQUESTION
invoke Poke,addr,godmode_on,4;
;jmp Exit
;------------------------------------------------
;Exit the loader when done
;------------------------------------------------
Exit:
invoke ExitProcess, 0
.end Main -
Сейчас попробую запилить.
Вроде бы понял как работают эти функции. Но тогда возникает вопрос, а как я узнаю что функция остановилась на моём процессе? И собственно остановлюсь на своём процессе.
Кое-что написал, но при компиляции ошибка на линии 58 ( invoke OpenProcess,PROCESS_ALL_ACCESS,0,[pe32.th32ProcessID] )
format PE GUI 4.0
entry start
include 'd:\Coding\fasm\include\win32a.inc'
section '.data' data readable writable
error_message db 'Access denited!',0
caption db 'Fasm Trainer',0
pid dd 0
Poke dd _Poke
windowcap db 'Warcraft III',0
addr dd адрес
mh_on db байты вкл
mh_off db байты выкл
section '.text' code readable executable
start:
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
invoke ExitProcess,0
proc DialogProc hwnddlg,msg,wparam,lparam
cmp [msg],WM_CLOSE
je .wmclose
cmp [msg],WM_COMMAND
je .wmcommand
cmp [msg],WM_LBUTTONDOWN
je .move
xor eax,eax
jmp .finish
.wmcommand:
cmp [wparam],BN_CLICKED shl 16 + 1
je .poke
cmp [wparam],BN_CLICKED shl 16 + 2
je .wmclose
.poke:
invoke Poke,[addr],mh_on,4
jmp .finish
.wmclose:
invoke Poke,[addr],mh_off,4
invoke EndDialog,[hwnddlg],0
.move:
invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,2,0
.finish:
ret
endp
proc _Poke,memadd,memval,bytes
invoke CreateToolhelp32Snapshot,0fh,NULL
mov edx, eax
mov [pe32.dwSize],sizeof.PROCESSENTRY32
cmp eax,0
je .error
invoke Process32First,edx,pe32
test eax,eax
jz .error
invoke Process32Next,edx,pe32
test eax,eax
jz .error
invoke lstrcmpi,pe32.szExeFile,'war3.exe'
test eax,eax
jz .error
invoke OpenProcess,PROCESS_ALL_ACCESS,0,[pe32.th32ProcessID]
cmp eax,0
je .error
invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
cmp eax,0
je .error
ret
.error:
invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
ret
endp
struct PROCESSENTRY32
dwSize dd MAX_PATH
cntUsage dd NULL
th32ProcessID dq NULL
th32DefaultHeapID dq NULL
th32ModuleID dd NULL
cntThreads dd NULL
th32ParentProcessID dd NULL
pcPriClassBase dd NULL
dwFlags dd NULL
szExeFile db MAX_PATH dup NULL
ends
pe32 PROCESSENTRY32
section '.idata' import data readable writeable
library kernel,'kernel32.DLL',\
user,'user32.DLL'
import kernel,\
GetModuleHandle,'GetModuleHandleA',\
ExitProcess,'ExitProcess',\
OpenProcess,'OpenProcess',\
WriteProcessMemory,'WriteProcessMemory',\
CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
Process32First,'Process32First',\
Process32Next,'Process32Next '
import user,\
DialogBoxParam,'DialogBoxParamA',\
EndDialog,'EndDialog',\
MessageBox,'MessageBoxA',\
FindWindow,'FindWindowA',\
GetWindowThreadProcessId,'GetWindowThreadProcessId',\
SendMessage,'SendMessageA'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
dialog demonstration,'Trainer by Coder',70,70,190,175,WS_POPUP
dialogitem 'STATIC','Press OK for toggle godmode on.',-1,0,0,163,188,SS_LEFT + WS_VISIBLE+ SS_CENTER
dialogitem 'BUTTON','OK',1,85,150,45,15,WS_VISIBLE
dialogitem 'BUTTON','Exit',2,135,150,45,15,WS_VISIBLE
enddialog -
Реально подключиться к окну, когда игра в оконном режиме.
Так можно как-нибудь иным способом подключиться к процессу?
-
Здравствуйте! Как в FASM подключиться к процессу по его имени (war3.exe)?
Или по его классу?
format PE GUI 4.0
entry start
include 'd:\Coding\fasm\include\win32a.inc'
section '.data' data readable writable
error_message db 'Access denited!',0
caption db 'Fasm Trainer',0
pid dd 0
Poke dd _Poke
windowcap db 'Warcraft III',0
addr dd адрес
godmode_on db байты вкл
godmode_off db байты выкл
section '.text' code readable executable
start:
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
invoke ExitProcess,0
proc DialogProc hwnddlg,msg,wparam,lparam
cmp [msg],WM_CLOSE
je .wmclose
cmp [msg],WM_COMMAND
je .wmcommand
cmp [msg],WM_LBUTTONDOWN
je .move
xor eax,eax
jmp .finish
.wmcommand:
cmp [wparam],BN_CLICKED shl 16 + 1
je .poke
cmp [wparam],BN_CLICKED shl 16 + 2
je .wmclose
.poke:
invoke Poke,[addr],godmode_on,2
jmp .finish
.wmclose:
invoke Poke,[addr],godmode_off,2
invoke EndDialog,[hwnddlg],0
.move:
invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,2,0
.finish:
ret
endp
proc _Poke,memadd,memval,bytes
invoke FindWindow, windowcap, windowcap
cmp eax,0
je .error
invoke GetWindowThreadProcessId,eax,pid
cmp [pid],0
je .error
invoke OpenProcess,PROCESS_ALL_ACCESS,0,[pid]
cmp eax,0
je .error
invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
cmp eax,0
je .error
ret
.error:
invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
ret
endp
section '.idata' import data readable writeable
library kernel,'kernel32.DLL',\
user,'user32.DLL'
import kernel,\
GetModuleHandle,'GetModuleHandleA',\
ExitProcess,'ExitProcess',\
OpenProcess,'OpenProcess',\
WriteProcessMemory,'WriteProcessMemory'
import user,\
DialogBoxParam,'DialogBoxParamA',\
EndDialog,'EndDialog',\
MessageBox,'MessageBoxA',\
FindWindow,'FindWindowA',\
GetWindowThreadProcessId,'GetWindowThreadProcessId',\
SendMessage,'SendMessageA'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
dialog demonstration,'WarCraft +1 trainer',70,70,190,175,WS_POPUP
dialogitem 'STATIC','Press OK for toggle godmone on.',-1,0,0,163,188,SS_LEFT + WS_VISIBLE+ SS_CENTER
dialogitem 'BUTTON','OK',1,85,150,45,15,WS_VISIBLE
dialogitem 'BUTTON','Exit',2,135,150,45,15,WS_VISIBLE
enddialogТак как подключиться по имени окна не получается, та же самая проблема возникла и при написании данного трейнера на C#, проблема при подключении к процессу.
-
Данный код не работает.
После того как тыкаешь, чтобы изменить значение, вылетает ошибка на строке
if (iRetValue == 0)
throw new Exception("CloseHandle Failed");
}
Вот моя Form1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Threading;
using trainer2;
namespace IE
{
public partial class Form1 : Form
{
trainer2.Memory oMemory = new Memory();
bool gamehacklab = true;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process[] aProcesses = Process.GetProcessesByName("war3"); //Имя процесса игры в памяти, пишем без "exe"
if (aProcesses.Length != 0)
{
oMemory.ReadProcess = aProcesses[0];
oMemory.Open();
int myGame_Address = Addr.ToDec("52C0000"); // Статичный адрес указателя
int[] myGame_Offsets = { 0x42CA1A }; // Офсеты, смещение пишем в виде 0х--
int bytesWritten; //
byte[] bValue_To_Write = BitConverter.GetBytes(15); //3аписиваем 999 количество трутниц
string sWritten_Address = oMemory.PointerWrite((IntPtr)myGame_Address, bValue_To_Write, myGame_Offsets, out bytesWritten);
if (bytesWritten == bValue_To_Write.Length)
label1.Text = ("MapHack Enabled." + "!"); // Выводим текст если изменяется значение
else
label1.Text = ("MapHack Disabled (Error!). " + ".");// Выводим текст если ничего не получится
oMemory.CloseHandle();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Process[] aProcesses = Process.GetProcessesByName("war3");
if (aProcesses.Length != 0)
{
gamehacklab = true;
label2.Text = "Игра запущена";
}
else
{
gamehacklab = false;
label2.Text = "Игра Не запущена";
}
}
}
}В чём проблема?
Crysis - Бесконечные Патроны
in Вопросы по созданию читов в одиночных играх
Опубликовано
Найди инструкции которые пишут в адрес с патронами, и напиши нужный тебе скрипт.
Если же тебе надо, чтобы значение осталось таким же как и было (а не 999 например), ищи инструкцию, которая пишет в твой адрес при выстрели, а потом проверь что ещё к ней обращается, если же там только твой адрес, можешь нопить её и всё.
Если там ещё чужие адреса окажутся, делай фильтр (как его сделать можно найти на форуме).
ACID, нет разницы - указал ты конкретное число или будет браться тоже самое число только с какого-нибудь регистра.