Перейти к содержанию

Ресурсы Warhammer 40000 Dawn Of War: Dark Crusade


Рекомендуемые сообщения

Здравствуйте. Я прошу помощи по взлому. Никак не могу внедрить своё значение ресурсов в код игры, посредством инъекции кода. Пробовал писать скрипт ,применяя свои небольшие знания ассемблера, различными способами, ничего не вышло, что я только не делал... Я и внедрял свою переменную, и регистр менял в оригинальном коде, и внедрял свои значения в оригинальные регистры с помощью команды MOV, и т.д., ничего не получалось(((( Значение к примеру первого ресурса, влияния, при его изменении в скрипте перескакивало в значение энергии, а влияние обнулялась полностью и вообще более не работало (восстанавливал оригинальный код потом соответственно и игрался с инструкцией дальше). Вот вообщем сама оригинальная инструкция...


alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
originalcode:
fstp dword ptr [eax]
fld dword ptr [ecx+04]
exit:
jmp returnhere
"WXPMod.dll"+5FB0A:
jmp newmem
returnhere:

Ну вроде описал как мог доходчиво.

P.S. Указатели не искал, т.к. не мог их вообще найди, значения найденых адресов при изменении значения в игре просто пропадали.

Пожалуйста помогите))) Жду вашей помощи.)

Ссылка на комментарий
Поделиться на другие сайты

Когда ты вышел на инструкцию, нужно проверить с какими адресами она работает. Для этого в меморивью нажимаем ПКМ на инструкции (см.картинку)

sqnE9.jpg Заходим в игру играемся немного и смотрим, что получилось.


[enable]
alloc(newmem,2048)
label(exit)

newmem:
pushf
fstp dword ptr [eax]
cmp // ищи различия между регистрами, как приавило самые простые cmp edi,ecx и cmp ecx,00 и т.д, и т.п свойственные только для твоего адреса . или же анализ структуры.
jne exit
mov [eax],********* // Значение: (float)100.00/ #100/ 0064 // какой тип у тебя?
exit:
popf
fld dword ptr [ecx+04]
ret

"WXPMod.dll"+5FB0A:
call newmem
[disable]
***

Выложи скрипт полностью.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

У меня тип тоже (float). Скрипт оригинальной инструкции я выложил полный. На доступ я смотрел что есть, но толком ничего не понял из-за малых знаний ассемблера. Да и сравнивать тоже пробывал, игра не реагировала. НО так как ты написал, так не делал, опять же из-за малых знаний ассемблера, функции некоторые которые ты сейчас представил я не знаю. Я читал книгу обучения ассемблеру лишь самую начальную))) И там некоторых функций не было описано. А вообще из инструкций которые имеют доступ к этой моей инструкции я понял (если конечно правильно), что 1 адрес отвечает и за "влияние" и за "энергию". Спасибо за предоставленную подсказку, попробую покопаться, может что-то получится) Если что-то у меня получится выложу скрипт в этой теме.

Чёт не получилось ничего, игра на то что ты мне дал и на команду сравнения не реагирует вообще. Вроде делал всё правильно

Ссылка на комментарий
Поделиться на другие сайты

В смысле полный?

Попробуй так:

1) выдели нужную инструкцию в меморивью, нажми Ctrl+A

2) вставляем секции [ENABLE] [DISABLE], нажми Ctrl+A+T

3) производим инекцию по выделенному адресу, жмем Ctrl+I и ОК или Enter

вуаля рабочий инжект готов можно шаманить...


Для упрощения процедуры качаем aamaker_2.3 http://forum.gamehac...dpost__p__15069 и кладем файлик .lua в папку ..\Cheat Engine 6.3\autorun\aamaker.lua

Теперь смотри в меморивью очень удобный плагин на менюшку :)

UQ7xM.jpg
Ссылка на комментарий
Поделиться на другие сайты

Вот как просил


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
fstp dword ptr [eax]
fld dword ptr [ecx+04]
exit:
jmp returnhere
"WXPMod.dll"+5FB0A:
jmp newmem
returnhere:



[DISABLE]
"WXPMod.dll"+5FB0A:
fstp dword ptr [eax]
fld dword ptr [ecx+04]
//Alt: db D9 18 D9 41 04

Ссылка на комментарий
Поделиться на другие сайты

Хочу обрадовать)) Я добился своего и сделал рабочий скрипт. Причём сделал даже лучше, теперь с помощью 1 скрипта, инструкция которого принадлежала "влиянию", устанавливаются значения на какие я захочу и "влияния" и "энергии")))))))))))) Вкладываю как обещал готовый и рабочий скрипт...Версия игры 1.4 как написано в свойствах экзешника.


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov dword ptr [eax],(float)100000
mov dword ptr [eax+04],0
exit:
jmp returnhere
"WXPMod.dll"+5FB0A:
jmp newmem
returnhere:



[DISABLE]
"WXPMod.dll"+5FB0A:
fstp dword ptr [eax]
fld dword ptr [ecx+04]
dealloc(newmem)
//Alt: db D9 18 D9 41 04

Ссылка на комментарий
Поделиться на другие сайты

Добавь фильтр!!! он там нужен, Когда выделишь функцию

fstp dword ptr [eax] 

ПКМ и найти адреса с которыми работает инструкция,

Чуть побегаешь, кстати тут удобно жмакать кнопку паузы на клавиатуре.

Посмтори к каким адресам обращается (справа внизу выстави float)

Обрати внимание на регистры ebp и ebx (проверка на ноль это

test ebx,ebx

потом делашь условный прижок на выход)

и тут удобнее делать инжект на строку

ret 0004

увидишь ниже

fstp dword ptr [eax+08]

, просто пишешь в адреса

mov [eax],(float)50000.00
mov [eax+4],(float)50000.00

до ret 0004


Пробуй сам. Если совсем никак, смотри тут:


aobscan(address0,d9 58 04 d9 41 08 d8 40 08 d9 58 08 c2 04 00 CC CC)
alloc(newMem, 2048)
label(exit)
registersymbol(address0)

newMem:
pushf
test ebp,ebp
jne exit
test ebx,ebx
je exit
mov [eax],(float)50000.00
mov [eax+4],(float)50000.00
//mov [eax+8],***** //так и не понял что за адрес, обычно равен "0"
exit:
popf
ret 0004

address0+c:
jmp newMem

[DISABLE]
address0+c:
ret 0004
int 3
int 3
dealloc(newMem)
unregistersymbol(address0)
[ENABLE]

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

ууу не чё се это для меня больно сложновато)))) Частично конечно понял что ты предлагаешь но далеко не до конца, к тому же я не знаю толком что делают функции:

aobscan - сканирование определённого массива структуры байтов памяти, если правильно понял;

registersymbol - без понятия что такое даже не встречал никогда;

pushf - в моём понимании загрузка каких-то флагов в регистры этой инструкции;

test - если не ошибаюсь какое-то подобие команды cmp;

jne - какой-то переход на определённый лейбол;

je - прыжок на лейбол;

popf - моё понимание, это выгрузка флагов из памяти регистров этой инструкции;

ret - из твоего объяснения понял что делает инъжект всего кода в какую-то строку байтов памяти;

int - это инкремент, но командой не пользовыался, так что толком не знаю для чего она;

unregistersymbol - судя по началу команды она завершает команду registersymbol.

К стате я уже взломал ещё 4 значения и написал скрипты, всего сейчас таблица состоит из 5 скриптов))) НО 2 скрипта немного не доработаны, пытался доработать но не вышло((

Я попробывал в игре твой скрипт, и по мойпу дак разница между моим и твоим только в сложности исполнения))), я конечно ещё много чего не знаю, так что может именно так писать скрипт правильно))) Но на мой взгляд и мой скрипт норм))

Вот скрипты которые удалось сделать за пару часиков (исключая ресурсы):

Численность армии не прибавляется (но уменьшается: уходит в минус при гибели юнитов)


[ENABLE]
alloc(newMem, 2048)
label(returnHere)
newMem:
add [eax],0
add ecx,0
jmp returnHere
WXPMod.dll+7B1D8:
jmp newMem
returnHere:
[DISABLE]
WXPMod.dll+7B1D8:
add [eax],edx
mov ecx,[ecx+04]
dealloc(newMem)

Кол-во техники не прибавляется (+та же проблема что и у армии)


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
add [eax+04],0
ret 0004
exit:
jmp returnhere
"WXPMod.dll"+7B1DD:
jmp newmem
nop
returnhere:



[DISABLE]
dealloc(newmem)
"WXPMod.dll"+7B1DD:
add [eax+04],ecx
ret 0004
//Alt: db 01 48 04 C2 04 00

Мгновенное исследование и подготовка (в зданиях)


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov [edi+0C],0
mov [edi+10],eax
exit:
jmp returnhere
"WXPMod.dll"+978B7:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+978B7:
mov [edi+0C],edx
mov [edi+10],eax
//Alt: db 89 57 0C 89 47 10

Мгновенное исследование и подготовка (у юнитов)


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov [eax+08],0
mov [eax+0C],edx
exit:
jmp returnhere
"WXPMod.dll"+C811B:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+C811B:
mov [eax+08],ecx
mov [eax+0C],edx
//Alt: db 89 48 08 89 50 0C

Ну вот как-то так))) Профессионалам просьба комментировать, поправлять меня и не ругаться я ещё только начинаю знакомится с геймхакингом))))))))

Ссылка на комментарий
Поделиться на другие сайты

add [eax+04],ecx

замени на

mov [eax+04],00

или просто удали - тоже вариант :)

Можешь попробовать найти инструкцию, которая не пишет, а читает и почаще. Тогда возможно значение сразу будет обнулятся, и кстати фильтр, фильтра нет.

Все твои бонусы получает и враг) как мне кажется.. а может и нет)


Бесконечные юниты

Не убирает ограничение по количетву юнитов на класс


aobscan(address, 8B 28 8D 4C 24 28)
alloc(newMem, 2048)
registersymbol(address)

newMem:
mov [eax],00
mov [eax+04],00
mov ebp,[eax]
lea ecx,[esp+28]
ret

address:
call newMem
nop

[DISABLE]
address:
mov ebp,[eax]
lea ecx,[esp+28]
dealloc(newMem)
unregistersymbol(address)
[ENABLE]

Просматривай не только пишушие, но и читающие функции; ищи по возможности ту, которая работает с наименьшим количеством адресов, с твоим в идеале...

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

ок, на mov уже к ста заменил))) просто не выложил, хотел исправить, чтоб в минус значение при гибели войск не уходило (не вышло как описывал выше)

Добавь фильтр!!! он там нужен, Когда выделишь функцию

fstp dword ptr [eax] 

ПКМ и найти адреса с которыми работает инструкция,

Чуть побегаешь, кстати тут удобно жмакать кнопку паузы на клавиатуре.

Посмтори к каким адресам обращается (справа внизу выстави float)

Обрати внимание на регистры ebp и ebx (проверка на ноль это

test ebx,ebx

потом делашь условный прижок на выход)

и тут удобнее делать инжект на строку

ret 0004

увидишь ниже

fstp dword ptr [eax+08]

, просто пишешь в адреса

mov [eax],(float)50000.00
mov [eax+4],(float)50000.00

до ret 0004


Пробуй сам. Если совсем никак, смотри тут:


aobscan(address0,d9 58 04 d9 41 08 d8 40 08 d9 58 08 c2 04 00 CC CC)
alloc(newMem, 2048)
label(exit)
registersymbol(address0)

newMem:
pushf
test ebp,ebp
jne exit
test ebx,ebx
je exit
mov [eax],(float)50000.00
mov [eax+4],(float)50000.00
//mov [eax+8],***** //так и не понял что за адрес, обычно равен "0"
exit:
popf
ret 0004

address0+c:
jmp newMem

[DISABLE]
address0+c:
ret 0004
int 3
int 3
dealloc(newMem)
unregistersymbol(address0)
[ENABLE]

К стате начал пробывать сделать как ты здесь описал, и обнаружил что у меня нет такой опции как "найти адреса с которыми работает инструкция". У меня есть только опция "посмотреть какие адреса получают доступ к этой инструкции"

Ссылка на комментарий
Поделиться на другие сайты

Это одно и тоже.


Если вдруг решишь искать здоровье юнитов... то пожалею твой разум и подскажу, что это значение (float)1,00 когда юнит полностью здоров.

к примеру.

Здоровье юнита 2500 - 100% - 1.00

Здоровье юнита 2420 ≈ 97% - 0.9679253101

Думаю дальше разберешься.

Кстати по поводу фильтра, ID игрока как раз тут и можно отыскать в сравнении с адресами противника.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Завтра выложу таблицу со скриптом на Worms Revolution? и имеющимися полностью рабочими скриптами на Warhammer))) К стате ресы нашёл сам, различие сделал и фильтр, теперь всё норм. Соответственно на нужный раздел форума, в этой статье не буду выкладывать.

Ссылка на комментарий
Поделиться на другие сайты

К сожалению, как оказалось, я не могу выкладывать таблицы в соответствующем разделе форума((( Тогда выкладываю в этой теме....

Warhammer 40k Dawn Of War: Dark Crusade(версия из инфы EXE 1.4, из инфы самой игры 1.11):

Скрипт на бесконечные ресурсы (значение обоих ресов установленно как 50000, вы можете по желанию поставить своё значение):


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(hack) //назовите как хотите, у меня названа метка так
newmem:
cmp [eax+30],(float)7
je hack
fstp dword ptr [eax]
fld dword ptr [ecx+04]
jmp returnhere
hack:
mov dword ptr [eax],(float)50000
mov dword ptr [eax+04],0
jmp returnhere
"WXPMod.dll"+5FB0A:
jmp newmem
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+5FB0A:
fstp dword ptr [eax]
fld dword ptr [ecx+04]

Скрипт на бесконечную численность вашей армии и техники (автор скрипта Tiger):


[ENABLE]
aobscan(address, 8B 28 8D 4C 24 28)
alloc(newMem, 2048)
registersymbol(address)
newMem:
mov [eax],00
mov [eax+04],00
mov ebp,[eax]
lea ecx,[esp+28]
ret
address:
call newMem
nop
[DISABLE]
address:
mov ebp,[eax]
lea ecx,[esp+28]
dealloc(newMem)
unregistersymbol(address)

Скрипт на мгновенное исследование и подготовку войск в ваших зданиях:


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov [edi+0C],0
mov [edi+10],0
exit:
jmp returnhere
"WXPMod.dll"+978B7:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+978B7:
mov [edi+0C],edx
mov [edi+10],eax

Скрипт на мгновенное исследование и подготовку у ваших отрядов:


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov [eax+08],0
mov [eax+0C],0
exit:
jmp returnhere
"WXPMod.dll"+C811B:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+C811B:
mov [eax+08],ecx
mov [eax+0C],edx

Игра Worms Revolution(версия #0140):

Скрипт на бессмертие ваших червей:


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(hack)
newmem:
cmp [ecx+44],0
je hack
mov [ecx+34],eax
ret 0004
jmp returnhere
hack:
mov [ecx+34],#1000
ret 0004
jmp returnhere
"WormsRevolution.exe"+4E4984:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmen)
"WormsRevolution.exe"+4E4984:
mov [ecx+34],eax
ret 0004

Ссылка на комментарий
Поделиться на другие сайты

  • 8 лет спустя...

Наконец-то я нашел то, что нигде нет. Спасибо тебе, добрый молодец, что 8 лет назад опубликовал эти скрипты как раз для нужной мне игры:) Дополню свою таблицу и проверю, как они будут пахать на версии игры с модом. 

Ссылка на комментарий
Поделиться на другие сайты

В 11.02.2014 в 9:26 PM, Korol2010 сказал:

К сожалению, как оказалось, я не могу выкладывать таблицы в соответствующем разделе форума((( Тогда выкладываю в этой теме....

Warhammer 40k Dawn Of War: Dark Crusade(версия из инфы EXE 1.4, из инфы самой игры 1.11):

Скрипт на бесконечные ресурсы (значение обоих ресов установленно как 50000, вы можете по желанию поставить своё значение):

 

 
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(hack) //назовите как хотите, у меня названа метка так
newmem:
cmp [eax+30],(float)7
je hack
fstp dword ptr [eax]
fld dword ptr [ecx+04]
jmp returnhere
hack:
mov dword ptr [eax],(float)50000
mov dword ptr [eax+04],0
jmp returnhere
"WXPMod.dll"+5FB0A:
jmp newmem
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+5FB0A:
fstp dword ptr [eax]
fld dword ptr [ecx+04]

 

Скрипт на бесконечную численность вашей армии и техники (автор скрипта Tiger):

 

 
[ENABLE]
aobscan(address, 8B 28 8D 4C 24 28)
alloc(newMem, 2048)
registersymbol(address)
newMem:
mov [eax],00
mov [eax+04],00
mov ebp,[eax]
lea ecx,[esp+28]
ret
address:
call newMem
nop
[DISABLE]
address:
mov ebp,[eax]
lea ecx,[esp+28]
dealloc(newMem)
unregistersymbol(address)

 

Скрипт на мгновенное исследование и подготовку войск в ваших зданиях:

 

 
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov [edi+0C],0
mov [edi+10],0
exit:
jmp returnhere
"WXPMod.dll"+978B7:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+978B7:
mov [edi+0C],edx
mov [edi+10],eax

 

Скрипт на мгновенное исследование и подготовку у ваших отрядов:

 

 
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(exit)
newmem:
mov [eax+08],0
mov [eax+0C],0
exit:
jmp returnhere
"WXPMod.dll"+C811B:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"WXPMod.dll"+C811B:
mov [eax+08],ecx
mov [eax+0C],edx

 

Игра Worms Revolution(версия #0140):

Скрипт на бессмертие ваших червей:

 

 
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(hack)
newmem:
cmp [ecx+44],0
je hack
mov [ecx+34],eax
ret 0004
jmp returnhere
hack:
mov [ecx+34],#1000
ret 0004
jmp returnhere
"WormsRevolution.exe"+4E4984:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmen)
"WormsRevolution.exe"+4E4984:
mov [ecx+34],eax
ret 0004

 

Из скриптов к вахе работает только скрипт на бесконечную численность армии. Скрипт на бесконечные ресурсы также рабочий только тот, который тебе @Tiger писал. Остальное все неробит

Изменено пользователем RAV
Дополнил
Ссылка на комментарий
Поделиться на другие сайты

14 часов назад, RAV сказал:

Остальное все неробит

Не работают скрипты с фиксированным адресом инъекции (который и поменялся конечно), а скрипты, где адрес инъекции находится через аобскан работают. 

Ссылка на комментарий
Поделиться на другие сайты

В 22.02.2022 в 1:04 PM, RAV сказал:

Из скриптов к вахе работает только

Вообще-то здесь все скрипты рабочие, только что проверил, правда фильтров не хватает и у врагов тоже самое что и у ГГ.

Отдельное спасибище тигру за наводку, сам бы я до такого не дошёл. Если как следует покопаться, то всё что угодно душе можно будет менять, мне вот интересна скорость юнитов найти и подкрутить :).

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.