Меня попросили объяснить как я сделал бесплатный крафт.
Ну что ж.
Из меня учитель так себе.
А как вставлять видео как на старом форуме?
Меня попросили объяснить как я сделал бесплатный крафт.
Ну что ж.
Из меня учитель так себе.
На примере этой игры расскажу про нюанс который может повстречаться и в других играх.
Жизни
Макс. Жизней -50
Мана
Маск. Маны
СП
Макс. СП
Кислород
Души
Известность
ОБ
Убить с 1 удара
Координата X (Num0+Left Right)
Координата Y (Num0+Up Down)
Скорость бега
Супер прыжок (левитация)
Без отбрасывания (вас не могут ударить)
Бесплатный крафт (без ингредиентов)
Материалы=1000
Вещи в ячейках не тратятся
Быстро рубить деревья
Быстро копать киркой
Без перезарядки умений
Время
Дней прожито
Время суток(alt+Num+;alt+Num-)
Скорость течения времени
Координаты оставил ради того чтобы можно было сквозь закрытые двери ходить.
@Heretic
https://fearlessrevolution.com/viewtopic.php?f=23&t=14414
Как я нашёл урон..... Использовал таблицу-дампер-парсер структур...
Плюс приблизительное понимание где что находится в структурах движка UE4 (если разраб конкретной игры ничего не поменял)
Эта таблица создана для работы с играми сделанными на Unreal Engine 4.
Парсинг структур. И много ещё всякого вкусного.
Скачать с Google диск
Скачать
Ещё бывают такие игры как дай лайт 2.
В которых что-бы открыть замок нужна отмычка.
Бывает такое что в соседнем регисре хранится "правильное число".
И его нужно всего лишь подменить!(регистр)
[ENABLE]
aobscanmodule(EeasyOpenLock,gamedll_ph_x64_rwdi.dll,F3 ? ? ? ? ? ? ? 33 ? 0F 2F ? 73 ? 89 ? ? ? ? ? 0F 57)
registersymbol(EeasyOpenLock)
EeasyOpenLock:
movss [rcx+00000138],xmm4
//F3 0F 11 A1 38 01 00 00
[DISABLE]
EeasyOpenLock:
db F3 0F 11 89 38 01 00 00
unregistersymbol(EeasyOpenLock)
{
// ORIGINAL CODE - INJECTION POINT: gamedll_ph_x64_rwdi.dll+F44F92
gamedll_ph_x64_rwdi.dll+F44F5D: F3 0F 5D C8 - minss xmm1,xmm0
gamedll_ph_x64_rwdi.dll+F44F61: 80 B9 40 01 00 00 00 - cmp byte ptr [rcx+00000140],00
gamedll_ph_x64_rwdi.dll+F44F68: F3 0F 11 89 3C 01 00 00 - movss [rcx+0000013C],xmm1
gamedll_ph_x64_rwdi.dll+F44F70: 74 09 - je gamedll_ph_x64_rwdi.dll+F44F7B
gamedll_ph_x64_rwdi.dll+F44F72: 80 7A 1C 00 - cmp byte ptr [rdx+1C],00
gamedll_ph_x64_rwdi.dll+F44F76: 74 03 - je gamedll_ph_x64_rwdi.dll+F44F7B
gamedll_ph_x64_rwdi.dll+F44F78: 0F 57 C9 - xorps xmm1,xmm1
gamedll_ph_x64_rwdi.dll+F44F7B: F3 0F 58 89 38 01 00 00 - addss xmm1,[rcx+00000138]
gamedll_ph_x64_rwdi.dll+F44F83: F3 0F 10 25 45 34 0E 01 - movss xmm4,[gamedll_ph_x64_rwdi.dll+20283D0]
gamedll_ph_x64_rwdi.dll+F44F8B: C6 81 40 01 00 00 00 - mov byte ptr [rcx+00000140],00
// ---------- INJECTING HERE ----------
gamedll_ph_x64_rwdi.dll+F44F92: F3 0F 11 89 38 01 00 00 - movss [rcx+00000138],xmm1
// ---------- DONE INJECTING ----------
gamedll_ph_x64_rwdi.dll+F44F9A: 33 C9 - xor ecx,ecx
gamedll_ph_x64_rwdi.dll+F44F9C: 0F 2F CB - comiss xmm1,xmm3
gamedll_ph_x64_rwdi.dll+F44F9F: 73 0B - jae gamedll_ph_x64_rwdi.dll+F44FAC
gamedll_ph_x64_rwdi.dll+F44FA1: 89 8E 38 01 00 00 - mov [rsi+00000138],ecx
gamedll_ph_x64_rwdi.dll+F44FA7: 0F 57 C9 - xorps xmm1,xmm1
gamedll_ph_x64_rwdi.dll+F44FAA: EB 12 - jmp gamedll_ph_x64_rwdi.dll+F44FBE
gamedll_ph_x64_rwdi.dll+F44FAC: 0F 2F CC - comiss xmm1,xmm4
gamedll_ph_x64_rwdi.dll+F44FAF: 76 0D - jna gamedll_ph_x64_rwdi.dll+F44FBE
gamedll_ph_x64_rwdi.dll+F44FB1: C7 86 38 01 00 00 00 00 B4 42 - mov [rsi+00000138],42B40000
gamedll_ph_x64_rwdi.dll+F44FBB: 0F 28 CC - movaps xmm1,xmm4
}
@garik66 Большое спасибо!
Чтот я тупанул и не обратил внимания на свою ошибку.
Сделал как вы посоветовали.
И всё заработало как надо.
[ENABLE]
aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F)
alloc(newmem,$1000,car_02)
label(return)
label(check)
label(hot_key)
registersymbol(hot_key)
registersymbol(car_02)
newmem:
cmp [hot_key],01
jne @F
mov [r14+000003BC],(float)500
add [check],01
cmp [check],64
jne @F
mov [hot_key],00
mov [check],00
@@:
mulss xmm14,[r14+000003BC]
jmp return
hot_key:
dd 00
check:
dd 00
car_02:
jmp newmem
nop 4
return:
[DISABLE]
car_02:
db F3 45 0F 59 B6 BC 03 00 00
unregistersymbol(*)
dealloc(newmem)
Чтобы скрипт обернуть в тег есть кнопочка "код"
Дело такое.
Игра сделана на Unreal engine.
Это говорит о том что проще всего выходить на игровой мир и уже от него строить указатели. Как то так.
Версия игры 1.8 37786
Сделал скрит на World.
[ENABLE]
aobscanmodule(pWorld,MMH7Game-Win64-Shipping.exe,48 8B ? ? ? ? ? 8B ? 8B ? ? 85 ? 7F ? 74)
alloc(newmem,$1000,pWorld)
label(return)
label(World)
registersymbol(World)
registersymbol(pWorld)
newmem:
mov [World],rcx
mov rbx,[rcx+00000080]
jmp return
World:
dq 00
pWorld:
jmp newmem
nop 2
return:
[DISABLE]
pWorld:
db 48 8B 99 80 00 00 00
unregistersymbol(*)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: MMH7Game-Win64-Shipping.exe+78BDEA
MMH7Game-Win64-Shipping.exe+78BDD8: 5F - pop rdi
MMH7Game-Win64-Shipping.exe+78BDD9: 5E - pop rsi
MMH7Game-Win64-Shipping.exe+78BDDA: F3 C3 - repe ret
MMH7Game-Win64-Shipping.exe+78BDDC: CC - int 3
MMH7Game-Win64-Shipping.exe+78BDDD: CC - int 3
MMH7Game-Win64-Shipping.exe+78BDDE: CC - int 3
MMH7Game-Win64-Shipping.exe+78BDDF: CC - int 3
MMH7Game-Win64-Shipping.exe+78BDE0: 48 89 5C 24 08 - mov [rsp+08],rbx
MMH7Game-Win64-Shipping.exe+78BDE5: 57 - push rdi
MMH7Game-Win64-Shipping.exe+78BDE6: 48 83 EC 20 - sub rsp,20
// ---------- INJECTING HERE ----------
MMH7Game-Win64-Shipping.exe+78BDEA: 48 8B 99 80 00 00 00 - mov rbx,[rcx+00000080]
// ---------- DONE INJECTING ----------
MMH7Game-Win64-Shipping.exe+78BDF1: 8B FA - mov edi,edx
MMH7Game-Win64-Shipping.exe+78BDF3: 8B 43 68 - mov eax,[rbx+68]
MMH7Game-Win64-Shipping.exe+78BDF6: 85 C0 - test eax,eax
MMH7Game-Win64-Shipping.exe+78BDF8: 7F 22 - jg MMH7Game-Win64-Shipping.exe+78BE1C
MMH7Game-Win64-Shipping.exe+78BDFA: 74 20 - je MMH7Game-Win64-Shipping.exe+78BE1C
MMH7Game-Win64-Shipping.exe+78BDFC: 4C 8D 0D 9D D1 10 01 - lea r9,[MMH7Game-Win64-Shipping.exe+1898FA0]
MMH7Game-Win64-Shipping.exe+78BE03: 48 8D 15 56 D5 10 01 - lea rdx,[MMH7Game-Win64-Shipping.exe+1899360]
MMH7Game-Win64-Shipping.exe+78BE0A: 48 8D 0D 17 D5 10 01 - lea rcx,[MMH7Game-Win64-Shipping.exe+1899328]
MMH7Game-Win64-Shipping.exe+78BE11: 41 B8 3F 02 00 00 - mov r8d,0000023F
MMH7Game-Win64-Shipping.exe+78BE17: E8 24 D5 91 FF - call MMH7Game-Win64-Shipping.exe+A9340
}
Пользовался инструментом для СЕ
Тык
Жизни
Стамина
Опции перемещения
В таблице более 80 пунктов.
Все их перечислять. (увольте)
Не меняйте значение ресурсов если оно ровно нулю. Просто потом не сможете подобрать этот компонент.
@DieVis Залей файл на гугл или яндекс диск. Ссылка помрёт.
Здоровье_Живучесть_Выносливость
Еда в холодильнике не кончается
Быстро рыть
Дюп (клонировать вещи)
Большой инвентарь
По 50 предметов и 999 денег
Скорость перемещения
Скорость хотьбы
Скорость бега
Крафт без ингредиентов
Быстрый крафт
Уровень подозрительности агента=0
Загрузка электросети=0
Управление временем
Остановить время
Часы
Минуты
Чтобы сработал данный пункт "Загрузка электросети=0"
Надо включить чит и переключить любой электроприбор.
Причём не важно влючить или выключить.
С этим читом будьте осторожны "По 50 предметов и 999 денег". Если размножить например курицу или рычаг от канатной дороги (квестовый предмет) то можно испортить сейв. Лучше пользоваться "дюпом".
Помнится был у меня заказец на подобно.(открыть заблокированные двери)Игра Гедония и тож на юнити.
Я поступил гораздо проще. А именно так. Давайте будем рассуждать логически. Возьмём любую отрывающуюся дверь. Сделаем допущение. Если дверь в открытом состоянии то это флаг равный 1 (единица) а если закрыта то это = 0. Следовательно. Я могу воспользоваться сканером. Обычно флаги хранятся как 1 байт. Найдя этот флаг я могу уже от чего-то оттолкнуться. Не так ли?
Причём флаг может быть не только 1-0 а допустим 144=открыто 72=закрыто. И всё наоборот. Всё что угодно разрабу в голову придёт.
Ну та вот найдя инструкции работающие не с одной конкретной дверью а с видимыми (как минимум)
И кстати за счёт того что СЕ парсит структуры мне удалось найти в структуре двери значение Lock = 0 или =1
Упешно написал скрипт который открывает все двери.
И да если не удаётся найти флаг. Всегда можно поискать угол открытия двери или чего угодно
Гедония. Не помню какая версия.
Открытие всех дверей.
[ENABLE]
{$lua}
if (LaunchMonoDataCollector()==0) then
error('Failed to Activate Mono Features')
end
{$asm}
aobscanregion(UnDoor,Door:Interact+230, Door:Interact+293, 0F 84 ? ? ? ? 66)
registersymbol(UnDoor)
UnDoor:
db E9 6D 01 00 00 90
[DISABLE]
UnDoor:
db 0F 84 6C 01 00 00
unregistersymbol(UnDoor)
{
// ORIGINAL CODE - INJECTION POINT: Door:Interact+25e
Door:Interact+230: 4C 8B 8D 40 FF FF FF - mov r9,[rbp-000000C0]
Door:Interact+237: 4C 89 8D 50 FF FF FF - mov [rbp-000000B0],r9
Door:Interact+23e: 4D 8D 00 - lea r8,[r8]
Door:Interact+241: 83 38 00 - cmp dword ptr [rax],00
Door:Interact+244: 66 90 - nop 2
Door:Interact+246: 49 BB 2E E9 4F 12 BF 02 00 00 - mov r11,000002BF124FE92E
Door:Interact+250: 41 FF D3 - call r11
Door:Interact+253: E9 CB 04 00 00 - jmp Door:Interact+723
Door:Interact+258: 0F B6 46 35 - movzx eax,byte ptr [rsi+35]
Door:Interact+25c: 85 C0 - test eax,eax
// ---------- INJECTING HERE ----------
Door:Interact+25e: 0F 84 6C 01 00 00 - je Door:Interact+3d0
// ---------- DONE INJECTING ----------
Door:Interact+264: 66 90 - nop 2
Door:Interact+266: 49 BB 70 A0 82 0A 6E 02 00 00 - mov r11,0000026E0A82A070
Door:Interact+270: 41 FF D3 - call r11
Door:Interact+273: 48 8B C8 - mov rcx,rax
Door:Interact+276: 48 BA 30 EF 2F CD BE 02 00 00 - mov rdx,000002BECD2FEF30
Door:Interact+280: 48 8D 64 24 00 - lea rsp,[rsp+00]
Door:Interact+285: 90 - nop
Door:Interact+286: 49 BB C0 65 5A DD BD 02 00 00 - mov r11,System.String:op_Equality
Door:Interact+290: 41 FF D3 - call r11
Door:Interact+293: 85 C0 - test eax,eax
}
Табличка обновилась для работы с некоторыми играми на UE5
Shipping_v7.3_hotfixed.CT
Cossacks 3 Digital Deluxe Edition v.2.2.3.92.6008 RePack от xatab
Ресурсы
Снять ограничение на кол-во юнитов
Неуязвимые постройки
Бессмертные юниты
Быстрые улучшения
Быстро строить
Быстро строить корабли и пр.
Быстрая добыча ресурсов
Неограниченное кол-во пушек
Убрать туман войны
Башни без перезарядки(для всех)
Пушки без перезарядки
Разблокировать зум
Скорость перемещения армии(обведённые)
Процесс запуска:
@aticq Поставь брейкпоинт на воду. Сработают инструкции.
Посмотри какие адреса сработают.
При умножении урона нужна инструкция которая срабатывает 1 раз за 1 выстрел. Но т.к. игра сделана на ue4 то я предполагаю можно ручками найти множитель. Который предусмотрен самим движком. Он 100% есть.
А вообще с утра ещё поковырялся.
И нашёл урон разного оружия.
FSD-Win64-Shipping.7z
v.1.39.102546