-
Постов
155 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные SergBrNord
-
-
Всем салют. Копаюсь я тут (ничего не меняется, да? +0) в Rome: Total War - Barbarian Invasion. Копаюсь с эти куском кода:
Скрытый текст"RomeTW-BI.exe"+1817CB: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00 - fld dword ptr [eax+000000C4] "RomeTW-BI.exe"+1817D4: D9 5D EC - fstp dword ptr [ebp-14] "RomeTW-BI.exe"+1817D7: 8B 45 F0 - mov eax,[ebp-10] "RomeTW-BI.exe"+1817DA: D9 45 EC - fld dword ptr [ebp-14] // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00 - fstp dword ptr [eax+0000027C] // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+1817E3: 0F B6 45 0C - movzx eax,byte ptr [ebp+0C] "RomeTW-BI.exe"+1817E7: 85 C0 - test eax,eax "RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00 - je RomeTW-BI.exe+1819CB
Известно, что данная инструкция работает с количеством очков хода члена фракции на глобальной карте. Это значение с плавающей точкой и оно равняется 80. И у меня не получается записать нужное мне значение.
Я пробовал так (не взлетело):
Скрытый текстnewmem: mov [eax+27C], (float)80 fstp st(0) fld dword ptr [eax+27C] code: fstp dword ptr [eax+0000027C] jmp return
Я пробовал этак (тоже не взлетело):
Скрытый текстnewmem: fstp dword ptr [eax+0000027C] //old push [max_points] pop [eax+27C] max_points: dd (float)80
Спасите кто-нибудь, а? Я не понимаю, что тут не так сделано. Моск плавится.
-
7 часов назад, Garik66 сказал:
Табличка:
Работает, как скрипт на нулевую стоимость объектов. Как ты на эту инструкцию вышел? Я пробовал отсеивать по стоимости при постройке, допустим, коридоров... но что-то у меня не вышло найти нужное....
9 часов назад, LIRW сказал:[ENABLE] aobscanmodule(SuperCash,EvilGeniusExeStub-Release.exe,89 81 10 01 00 00 C2) alloc(newmem,$1000) label(return) newmem: mov eax,#1000000 mov [ecx+00000110],eax jmp return SuperCash: jmp newmem db 90 return: registersymbol(SuperCash) [DISABLE] SuperCash: db 89 81 10 01 00 00 unregistersymbol(SuperCash) dealloc(newmem)
Вот этот скрипт мне очень понравился. Сделан через анимацию штабелей с золотом. Анимацию ещё найти надо умудриться +)
15 часов назад, LIRW сказал:А вот тут байты меня угнетают и требуются пояснения...
Основная идея понятна. Заменяем 3 инструкции по 6 байт. B8 как "mov eax", дальше сдвигаем число и оставшийся байт заменяем "nop"... но редактор реагирует на это дело так, словно в память ноли пишутся....
-
11 час назад, Garik66 сказал:
А как ты проверял?
Просто построил всего на 250 000 и значение сбросилось в 0. Собственно, как и в моих попытках — как только штабель золота закончился, деньги сбросилисть в ноль. Сейчас проверю новые скрипты из темы
P.S.
Вчера сильно устал, поэтому сразу после сообщения о нерабочих скриптах пошёл на боковую =)
-
-
12 часа назад, Garik66 сказал:
И также: я просто, так как в игре по сути деньги нужны только для торговли с торговцами, я делал скрипт на покупку у них без денег. Это не сложно.
Проверил предложенный тобой твой вариант - не сработало. Я думаю, деньги тут как объект, т.к. они отображаются в виде штабелей золота, которые увеличиваются и уменьшаются. И когда у меня совсем закончился штабель золота, деньги тут же в 0 сбросились.
-
11 час назад, Garik66 сказал:
...
Похожа на Дьябло только в Дьябло кучки кратные 5000, а у тебя как видишь кратно 500 (000001F4).
Да, если 1800 будет, то положит 300 в ячейку с сотнями, а всё остальное запихнёт в основную, то есть там будет 1500.
Плюс, есть такая особенность, когда значение становится больше определённого уровня, оно переносится в другую область памяти.
11 час назад, Garik66 сказал:newmem: add ebx, #1000000 code: add [esi+000000A4],ebx jmp return
Вроде бы делал что-то такое, но перепроверить не мешает....
-
1 час назад, Garik66 сказал:
@SergBrNord, чисти табличку, перед выкладкой, от Анализов структур - у тебя она весит 806 KB, после чистки 6 KB
Не знал, что CE сохраняет эти вещи. Собственно, в динамической памяти оно как-то и бесполезно.
-
Всем салют!
Засел ломать старенькую игрушку "Злобный Гений".
Нашёл деньги; хранятся там они так: сотые в одной ячейке, больше сотых — в другой. Т.е. 19200 => 19000 и 200.
Суть не в этом. После установки нужного количества денег, через N времени, количество денег всё же сбрасывается на действительное.
И это при том, что я уверен, что использую реальное, не экранное значение.
В общем, помогите кто понять, что идёт не так.
Первая функция - добавляет денег при расходе;
Вторая функция - добавляет денег при увеличении баланса (заработок с глобальной карты).
-
Доделал скрипт. Файл по ссылке обновлён.
- 1
-
Салют всем. Я тут внезапно понял, что упустил один аспект.
Вот есть заготовка под скрипт:
Скрытый текст{ Game : game.exe Version: 1.2 Date : 2017-10-14 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,ailogic.dll,00 D9 96 A8 00 00 00) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: code: fst dword ptr [esi+000000A8] jmp return INJECT+01: jmp newmem nop return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT+01: db D9 96 A8 00 00 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "ailogic.dll"+924B1 "ailogic.dll"+92487: BA 01 00 00 00 - mov edx,00000001 "ailogic.dll"+9248C: 8A 04 01 - mov al,[ecx+eax] "ailogic.dll"+9248F: 88 44 24 68 - mov [esp+68],al "ailogic.dll"+92493: 8B 4C 24 68 - mov ecx,[esp+68] "ailogic.dll"+92497: 81 E1 FF 00 00 00 - and ecx,000000FF "ailogic.dll"+9249D: 2B D1 - sub edx,ecx "ailogic.dll"+9249F: 89 54 24 68 - mov [esp+68],edx "ailogic.dll"+924A3: DB 44 24 68 - fild dword ptr [esp+68] "ailogic.dll"+924A7: D8 4C 24 60 - fmul dword ptr [esp+60] "ailogic.dll"+924AB: D8 AE A8 00 00 00 - fsubr dword ptr [esi+000000A8] // ---------- INJECTING HERE ---------- "ailogic.dll"+924B1: D9 96 A8 00 00 00 - fst dword ptr [esi+000000A8] // ---------- DONE INJECTING ---------- "ailogic.dll"+924B7: D8 1D 3C DD AB 03 - fcomp dword ptr [ailogic.dll+1CDD3C] "ailogic.dll"+924BD: DF E0 - fnstsw ax "ailogic.dll"+924BF: F6 C4 41 - test ah,41 "ailogic.dll"+924C2: 0F 85 C6 00 00 00 - jne ailogic.dll+9258E "ailogic.dll"+924C8: A1 44 64 C2 03 - mov eax,[ailogic.dll+336444] "ailogic.dll"+924CD: 80 3C 38 01 - cmp byte ptr [eax+edi],01 "ailogic.dll"+924D1: 0F 84 B7 00 00 00 - je ailogic.dll+9258E "ailogic.dll"+924D7: 8B 06 - mov eax,[esi] "ailogic.dll"+924D9: 8B CE - mov ecx,esi "ailogic.dll"+924DB: FF 90 A4 01 00 00 - call dword ptr [eax+000001A4] }
Пошатавшись по форуму CE, я выяснил, что итоговый код должен выглядеть как-то так:
Скрытый текст{ Game : game.exe Version: 1.2 Date : 2017-10-14 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,ailogic.dll,00 D9 96 A8 00 00 00) // should be unique registersymbol(INJECT) INJECT+01: db 90 90 90 90 90 90 [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT+01: db D9 96 A8 00 00 00 unregistersymbol(INJECT) { // ORIGINAL CODE - INJECTION POINT: "ailogic.dll"+924B1 "ailogic.dll"+92487: BA 01 00 00 00 - mov edx,00000001 "ailogic.dll"+9248C: 8A 04 01 - mov al,[ecx+eax] "ailogic.dll"+9248F: 88 44 24 68 - mov [esp+68],al "ailogic.dll"+92493: 8B 4C 24 68 - mov ecx,[esp+68] "ailogic.dll"+92497: 81 E1 FF 00 00 00 - and ecx,000000FF "ailogic.dll"+9249D: 2B D1 - sub edx,ecx "ailogic.dll"+9249F: 89 54 24 68 - mov [esp+68],edx "ailogic.dll"+924A3: DB 44 24 68 - fild dword ptr [esp+68] "ailogic.dll"+924A7: D8 4C 24 60 - fmul dword ptr [esp+60] "ailogic.dll"+924AB: D8 AE A8 00 00 00 - fsubr dword ptr [esi+000000A8] // ---------- INJECTING HERE ---------- "ailogic.dll"+924B1: D9 96 A8 00 00 00 - fst dword ptr [esi+000000A8] // ---------- DONE INJECTING ---------- "ailogic.dll"+924B7: D8 1D 3C DD AB 03 - fcomp dword ptr [ailogic.dll+1CDD3C] "ailogic.dll"+924BD: DF E0 - fnstsw ax "ailogic.dll"+924BF: F6 C4 41 - test ah,41 "ailogic.dll"+924C2: 0F 85 C6 00 00 00 - jne ailogic.dll+9258E "ailogic.dll"+924C8: A1 44 64 C2 03 - mov eax,[ailogic.dll+336444] "ailogic.dll"+924CD: 80 3C 38 01 - cmp byte ptr [eax+edi],01 "ailogic.dll"+924D1: 0F 84 B7 00 00 00 - je ailogic.dll+9258E "ailogic.dll"+924D7: 8B 06 - mov eax,[esi] "ailogic.dll"+924D9: 8B CE - mov ecx,esi "ailogic.dll"+924DB: FF 90 A4 01 00 00 - call dword ptr [eax+000001A4] }
У меня несколько вопросов:
- Адекватно ли я заменил? =)
- Будет ли "INJECT+01" нормально работать, т.к. в примерах на CE такого не рассматривалось?
- Можно ли в данном случае убрать из секции [ENABLE] всё под меткой "code" и в секцию "newmem" вставить инструкции "nop"?
- Если способ сделать эти действия (правка секций ручками) немного более автоматизированными?
-
Надо КТТС подправить "Ваш аккаунт заблокирован, попробуйте через 0 минут".
-
Всем привед!
В перерывах между работой поигрываю в первый Блицкриг. И ломаю.
На текущий момент поломал количество основного и вторичного вооружения, но застопорился на ХП.
Не могу найти где хранится:
- Максимальное здоровье боевой единицы;
- Метка игрока и ИИ.
Прилагаю таблицу, чтобы помогающие не теряли много времени. Самый последний скрипт работает с ХП игрока и противника.
- 1
-
Ни тот, ни другой. Текущие лучше
- Слишком мелкий текст;
- Белый шрифт на тёмном фоне.
P.S.
Группа однотонных элементов, я вот сейчас на них смотрю — они в один сливаются.
-
Всем опять и снова привед!
Продолжаем мучать старенькую игрушку "Гарри Поттер и Философский камень" =)
На сей раз чисто умозрительный вопрос по таймерам, использующихся на урока по обучению заклинаниям.
Вот так это выглядит:
Скрытый текстЛомаем таймер в нижнем углу. За таймер отвечают три значения:
- закрашивание полоски красным цветом, тип float, реализовано декрементацией (~14->0);
- скорость воспроизведения звука часов, тип float, реализовано декрементацией (~14->0);
- сам таймер, тип float, реализовано инкрементацией (0->~14).
Окно обращений инструкций:
Скрытый текстВо всех трёх инструкциях работа идёт с одним и тем же адресом; под адресу не структура, а значение.
Листинг кода №1:
Скрытый текст"Core.dll"+6D964: 8B 54 24 04 - mov edx,[esp+04] "Core.dll"+6D968: 8B 08 - mov ecx,[eax] "Core.dll"+6D96A: 89 0A - mov [edx],ecx "Core.dll"+6D96C: C2 08 00 - ret 0008 "Core.dll"+6D96F: 90 - nop "Core.dll"+6D970: 8B 49 34 - mov ecx,[ecx+34] "Core.dll"+6D973: 83 F9 01 - cmp ecx,01 "Core.dll"+6D976: 75 0F - jne Core.dll+6D987 "Core.dll"+6D978: 8B 44 24 08 - mov eax,[esp+08] "Core.dll"+6D97C: 8B 54 24 04 - mov edx,[esp+04] // ---------- INJECTING HERE ---------- "Core.dll"+6D980: 8B 08 - mov ecx,[eax] "Core.dll"+6D982: 89 0A - mov [edx],ecx "Core.dll"+6D984: C2 08 00 - ret 0008 // ---------- DONE INJECTING ---------- "Core.dll"+6D987: 85 C9 - test ecx,ecx "Core.dll"+6D989: 7E 0E - jle Core.dll+6D999 "Core.dll"+6D98B: 56 - push esi "Core.dll"+6D98C: 8B 74 24 0C - mov esi,[esp+0C] "Core.dll"+6D990: 57 - push edi "Core.dll"+6D991: 8B 7C 24 0C - mov edi,[esp+0C] "Core.dll"+6D995: F3 A5 - repe movsd "Core.dll"+6D997: 5F - pop edi "Core.dll"+6D998: 5E - pop esi "Core.dll"+6D999: C2 08 00 - ret 0008
Листинг кода №2 (инструкции рядом):
Скрытый текст"Core.dll"+38D77: C7 44 24 10 00 00 00 00 - mov [esp+10],00000000 "Core.dll"+38D7F: 8D 4C 24 10 - lea ecx,[esp+10] "Core.dll"+38D83: 8A 10 - mov dl,[eax] "Core.dll"+38D85: 40 - inc eax "Core.dll"+38D86: 51 - push ecx "Core.dll"+38D87: 8B 4E 08 - mov ecx,[esi+08] "Core.dll"+38D8A: 56 - push esi "Core.dll"+38D8B: 89 46 0C - mov [esi+0C],eax "Core.dll"+38D8E: FF 14 95 68 55 1E 10 - call dword ptr [edx*4+Core.dll+E5568] "Core.dll"+38D95: D9 44 24 10 - fld dword ptr [esp+10] "Core.dll"+38D99: D8 07 - fadd dword ptr [edi] "Core.dll"+38D9B: 8B 46 0C - mov eax,[esi+0C] "Core.dll"+38D9E: 8B 54 24 14 - mov edx,[esp+14] "Core.dll"+38DA2: 40 - inc eax "Core.dll"+38DA3: 89 46 0C - mov [esi+0C],eax "Core.dll"+38DA6: D9 17 - fst dword ptr [edi] "Core.dll"+38DA8: D9 1A - fstp dword ptr [edx] "Core.dll"+38DAA: 5F - pop edi "Core.dll"+38DAB: 5E - pop esi "Core.dll"+38DAC: 59 - pop ecx "Core.dll"+38DAD: C2 08 00 - ret 0008 "Core.dll"+38DB0: 8B 0D 00 9A 1E 10 - mov ecx,[Core.dll+E9A00]
И вопросы, которые меня мучают:
- Если писать скрипт, то, НЯП, надо работать со стеком, так как показывал srg91; т.е. заместить значение, вкладываемое инструкцией "fld dword ptr [esp+10]"?
- Если работать со стеком, что будет правильнее в использовании – просто положить в стеке значение сверху или вытолкнуть и затем положить своё?
- Как тут организовать фильтр?
- При заморозке адреса таймер, подсчёт очков начинает работать некорректно. Каким образом это может быть завязано на таймер?
Как работает корректный подсчёт – игрок рисует изображение по контуру мышкой, не открывая ЛКМ до завершения, а затем игра повторяет его движение и выставляет очки.
Как работает некорректный подсчёт – игрок рисует изображение по контуру мышкой, не открывая ЛКМ до завершения, а затем игра не повторяет движение, а соединяет две конечных точки.
Вот так это выглядит:
Скрытый текстТ.е. тут что-то вроде запоминания положения курсора в определённой точке относительно таймера?
P.S.
Игрушка сделана на Unreal Engine, может кого на мысль натолкнёт =)
-
14 минуты назад, Garik66 сказал:
Отлично.
И по поводу фильтра продолжу.
Что ещё можно выцепить из ЛОГОВ (Хвала Дарк Байту):
1. Инструкция работает только с Гарри:
cmp ecx,01 // Это и есть ID Гарри - он первый :) jne Core.dll+6D987
2. Соответственно, уверен на 90 % ID характеристик Гарри будут ещё в каком то регистре при срабатывания, т.е. ПКМ по инструкции, смотрим значения регистров адресов и находим ID здоровья, урона и т.д. и т.л.
И пишем на этой инструкции не только GodMod/
"В угол" . Garik66
1. Да, я видел эту инструкцию, но никакой толковой мысли не возникло, кроме "На кой здесь с единичкой сравнивают?" =)
2. Тут так много чего пишется в регистры. Скорее всего, завтра ещё одна тема будет с тупыми вопросами типа "как это готовить?"
-
1 час назад, Garik66 сказал:
Ты этот вариант проверил?
Проверил. Не работает.
31 минуты назад, Garik66 сказал:1 скрипт:
{ Game : game.exe Version: 1.0 Date : 2017-04-30 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(HEALTH,Core.dll,D9 18 59 C2 08 00 90 8B 0D 00 9A 1E 10 33 D2 3B CA B8 4B 1F 10 10 75 18 57 B9 00 10 00 00 BF 68 55 1E 10 C7 05 00 9A 1E 10 01 00 00 00 F3 AB 5F 39 05 3C 59 1E 10 74 1B) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: fstp dword ptr [eax] //Old instruction cmp [eax+4],(float) 50 //50 jne code mov [eax], (float)50 code: pop ecx ret 0008 jmp return HEALTH: jmp newmem nop return: registersymbol(HEALTH) [DISABLE] //code from here till the end of the code will be used to disable the cheat HEALTH: db D9 18 59 C2 08 00 unregistersymbol(HEALTH) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Core.dll"+39709 "Core.dll"+396EC: DF E0 - fnstsw ax "Core.dll"+396EE: F6 C4 01 - test ah,01 "Core.dll"+396F1: 75 0E - jne Core.dll+39701 "Core.dll"+396F3: D9 44 24 00 - fld dword ptr [esp+00] "Core.dll"+396F7: 8B 54 24 0C - mov edx,[esp+0C] "Core.dll"+396FB: D9 1A - fstp dword ptr [edx] "Core.dll"+396FD: 59 - pop ecx "Core.dll"+396FE: C2 08 00 - ret 0008 "Core.dll"+39701: D9 44 24 08 - fld dword ptr [esp+08] "Core.dll"+39705: 8B 44 24 0C - mov eax,[esp+0C] // ---------- INJECTING HERE ---------- "Core.dll"+39709: D9 18 - fstp dword ptr [eax] "Core.dll"+3970B: 59 - pop ecx "Core.dll"+3970C: C2 08 00 - ret 0008 // ---------- DONE INJECTING ---------- "Core.dll"+3970F: 90 - nop "Core.dll"+39710: 8B 0D 00 9A 1E 10 - mov ecx,[Core.dll+E9A00] "Core.dll"+39716: 33 D2 - xor edx,edx "Core.dll"+39718: 3B CA - cmp ecx,edx "Core.dll"+3971A: B8 4B 1F 10 10 - mov eax,Core.dll+1F4B "Core.dll"+3971F: 75 18 - jne Core.dll+39739 "Core.dll"+39721: 57 - push edi "Core.dll"+39722: B9 00 10 00 00 - mov ecx,00001000 "Core.dll"+39727: BF 68 55 1E 10 - mov edi,Core.dll+E5568 "Core.dll"+3972C: C7 05 00 9A 1E 10 01 00 00 00 - mov [Core.dll+E9A00],00000001 }
И второй:
{ Game : game.exe Version: 1.0 Date : 2017-04-30 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(HEALTH,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 04 D9 00 EB 06) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: cmp [eax+4], (float)50 //50 jne code mov ecx, [eax+4] mov [eax],ecx code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return HEALTH: jmp newmem nop nop return: registersymbol(HEALTH) [DISABLE] //code from here till the end of the code will be used to disable the cheat HEALTH: db 8B 08 89 0A C2 08 00 unregistersymbol(HEALTH) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Core.dll"+6D980 "Core.dll"+6D964: 8B 54 24 04 - mov edx,[esp+04] "Core.dll"+6D968: 8B 08 - mov ecx,[eax] "Core.dll"+6D96A: 89 0A - mov [edx],ecx "Core.dll"+6D96C: C2 08 00 - ret 0008 "Core.dll"+6D96F: 90 - nop "Core.dll"+6D970: 8B 49 34 - mov ecx,[ecx+34] "Core.dll"+6D973: 83 F9 01 - cmp ecx,01 "Core.dll"+6D976: 75 0F - jne Core.dll+6D987 "Core.dll"+6D978: 8B 44 24 08 - mov eax,[esp+08] "Core.dll"+6D97C: 8B 54 24 04 - mov edx,[esp+04] // ---------- INJECTING HERE ---------- "Core.dll"+6D980: 8B 08 - mov ecx,[eax] "Core.dll"+6D982: 89 0A - mov [edx],ecx "Core.dll"+6D984: C2 08 00 - ret 0008 // ---------- DONE INJECTING ---------- "Core.dll"+6D987: 85 C9 - test ecx,ecx "Core.dll"+6D989: 7E 0E - jle Core.dll+6D999 "Core.dll"+6D98B: 56 - push esi "Core.dll"+6D98C: 8B 74 24 0C - mov esi,[esp+0C] "Core.dll"+6D990: 57 - push edi "Core.dll"+6D991: 8B 7C 24 0C - mov edi,[esp+0C] "Core.dll"+6D995: F3 A5 - repe movsd "Core.dll"+6D997: 5F - pop edi "Core.dll"+6D998: 5E - pop esi "Core.dll"+6D999: C2 08 00 - ret 0008 }
"В угол" . Garik66
По 1 скрипту – интерпритатор ругался на:
cmp [eax+4],(float) 50 //50
Поправил на:
mov [eax], (float)50
Также не сработал.
По 2 скрипту – во время первого здоровье прибавилось, но после получения урона игра крашнулась (я насиловал игру несколькими скриптами подряд).
Во время второго запуска - полёт нормальный.
-
33 минуты назад, Garik66 сказал:
Вот переделал скрипт, он ничего не трогает, кроме EBX. проверь крашанётся игра при активации:
aobscanmodule(HEALTH,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 04 D9 00 EB 06) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: cmp [eax+4], 32 //50 jne code xor ebx, ebx code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return HEALTH: jmp newmem nop nop return: registersymbol(HEALTH) [DISABLE] //code from here till the end of the code will be used to disable the cheat HEALTH: db 8B 08 89 0A C2 08 00 unregistersymbol(HEALTH) dealloc(newmem)
Нет, не крашнулось
3 минуты назад, Garik66 сказал:Так ПКМ по инструкции в отладчике и посмотри сколько во сколько адресов ты записал (float)50
Данный конкретный случай - инструкция работает по 5 адресам.
-
5 минут назад, Garik66 сказал:
Ты этот вариант проверил?
Сейчас указатель на таймер найду и опробую.
4 минуты назад, srg91 сказал:Норм, на всяких Пивзах и Волан-де-Мортах работает без фильтрации.
А есть уровни с мобами? У меня какой-то супер дебаг режим включен, он и в окне запускается и могу по уровням прыгать.
Попробую поискать еще отдельных мобов, не боссов.
Есть, там, где в теплицу чешешь, это сразу после Пивза. В лабиринте есть как и растения хищные, так и гнумы в секретках.
P.S.
У тебя, скорее всего, консоль включена. Это как-то через файлы конфигурации производится.
-
7 минут назад, Garik66 сказал:
2. В честь чего ты используешь EBX по логам не видно же свободный он или нет, скорее всего после ret 008 значение из EBX используется, но зато ты смело мог использовать ЕСХ.
Ответ на 1 вопрос, поправлю скрипт..
Он пустой. Там ничего нет на момент срабатывания инструкции. Если бы что-то было, вложил бы в стек.
-
8 минут назад, srg91 сказал:
Эти инструкции работают со стеком FPU, стеком хранящим и оперирующим значениями с плавающей точкой.
В CE его можно увидеть во время дебаггинга - справа в окне регистров будет кнопка со стрелкой ">":
Возможно фильтры будут нужны, но у меня есть сохранение только уже на Волан де Морте, поэтому проверить быстро не могу
1. При попытке запустить в окошке эта собака крашится.
2. https://cloud.mail.ru/public/FxZJ/VXcMsjAB5
Сэйвы: бежим вперёд и огребаем; просто кинуть в документы; в архиве 2 варианта.
-
Всем привед!
Продолжаю ломать старенькую игрушку "Гарри Поттер и Философский камень" =)
Сейчас взламываю здоровье. И возникла проблема с инструкцией fstp. НЯЗ, эта инструкция перемещает из регистра ST данные в регистр-цель. И вот как работать с этим регистром ST?
Вот что я пытался провернуть (в структуре, находящейся в eax по смещению 4 – максимальное здоровье, в начале – текущее здоровье; всё типа float; инструкция работает с несколькими адресами, поэтому присутствует фильтр):
Скрытый текст{ Game : game.exe Version: 1.0 Date : 2017-04-30 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(HEALTH,Core.dll,D9 18 59 C2 08 00 90 8B 0D 00 9A 1E 10 33 D2 3B CA B8 4B 1F 10 10 75 18 57 B9 00 10 00 00 BF 68 55 1E 10 C7 05 00 9A 1E 10 01 00 00 00 F3 AB 5F 39 05 3C 59 1E 10 74 1B) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: fstp dword ptr [eax] //Old instruction cmp [eax+4], 32 //50 jne code mov [eax], (float)50 code: pop ecx ret 0008 jmp return HEALTH: jmp newmem nop return: registersymbol(HEALTH) [DISABLE] //code from here till the end of the code will be used to disable the cheat HEALTH: db D9 18 59 C2 08 00 unregistersymbol(HEALTH) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Core.dll"+39709 "Core.dll"+396EC: DF E0 - fnstsw ax "Core.dll"+396EE: F6 C4 01 - test ah,01 "Core.dll"+396F1: 75 0E - jne Core.dll+39701 "Core.dll"+396F3: D9 44 24 00 - fld dword ptr [esp+00] "Core.dll"+396F7: 8B 54 24 0C - mov edx,[esp+0C] "Core.dll"+396FB: D9 1A - fstp dword ptr [edx] "Core.dll"+396FD: 59 - pop ecx "Core.dll"+396FE: C2 08 00 - ret 0008 "Core.dll"+39701: D9 44 24 08 - fld dword ptr [esp+08] "Core.dll"+39705: 8B 44 24 0C - mov eax,[esp+0C] // ---------- INJECTING HERE ---------- "Core.dll"+39709: D9 18 - fstp dword ptr [eax] "Core.dll"+3970B: 59 - pop ecx "Core.dll"+3970C: C2 08 00 - ret 0008 // ---------- DONE INJECTING ---------- "Core.dll"+3970F: 90 - nop "Core.dll"+39710: 8B 0D 00 9A 1E 10 - mov ecx,[Core.dll+E9A00] "Core.dll"+39716: 33 D2 - xor edx,edx "Core.dll"+39718: 3B CA - cmp ecx,edx "Core.dll"+3971A: B8 4B 1F 10 10 - mov eax,Core.dll+1F4B "Core.dll"+3971F: 75 18 - jne Core.dll+39739 "Core.dll"+39721: 57 - push edi "Core.dll"+39722: B9 00 10 00 00 - mov ecx,00001000 "Core.dll"+39727: BF 68 55 1E 10 - mov edi,Core.dll+E5568 "Core.dll"+3972C: C7 05 00 9A 1E 10 01 00 00 00 - mov [Core.dll+E9A00],00000001 }
P.S.
Вариант с использованием инструкции fstp возник после неудачи с этой попыткой:
Скрытый текст{ Game : game.exe Version: 1.0 Date : 2017-04-30 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(HEALTH,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 04 D9 00 EB 06) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: cmp [eax+4], 32 //50 jne code mov ebx, [eax+4] mov [eax], ebx xor ebx, ebx code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return HEALTH: jmp newmem nop nop return: registersymbol(HEALTH) [DISABLE] //code from here till the end of the code will be used to disable the cheat HEALTH: db 8B 08 89 0A C2 08 00 unregistersymbol(HEALTH) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Core.dll"+6D980 "Core.dll"+6D964: 8B 54 24 04 - mov edx,[esp+04] "Core.dll"+6D968: 8B 08 - mov ecx,[eax] "Core.dll"+6D96A: 89 0A - mov [edx],ecx "Core.dll"+6D96C: C2 08 00 - ret 0008 "Core.dll"+6D96F: 90 - nop "Core.dll"+6D970: 8B 49 34 - mov ecx,[ecx+34] "Core.dll"+6D973: 83 F9 01 - cmp ecx,01 "Core.dll"+6D976: 75 0F - jne Core.dll+6D987 "Core.dll"+6D978: 8B 44 24 08 - mov eax,[esp+08] "Core.dll"+6D97C: 8B 54 24 04 - mov edx,[esp+04] // ---------- INJECTING HERE ---------- "Core.dll"+6D980: 8B 08 - mov ecx,[eax] "Core.dll"+6D982: 89 0A - mov [edx],ecx "Core.dll"+6D984: C2 08 00 - ret 0008 // ---------- DONE INJECTING ---------- "Core.dll"+6D987: 85 C9 - test ecx,ecx "Core.dll"+6D989: 7E 0E - jle Core.dll+6D999 "Core.dll"+6D98B: 56 - push esi "Core.dll"+6D98C: 8B 74 24 0C - mov esi,[esp+0C] "Core.dll"+6D990: 57 - push edi "Core.dll"+6D991: 8B 7C 24 0C - mov edi,[esp+0C] "Core.dll"+6D995: F3 A5 - repe movsd "Core.dll"+6D997: 5F - pop edi "Core.dll"+6D998: 5E - pop esi "Core.dll"+6D999: C2 08 00 - ret 0008 }
Почему-то не срабатывает и отладить не могу - при попытке запустить игру в окне крашится напрочь.
-
В 25.04.2017в13:17, Garik66 сказал:
Игра, после отключения скрипта - не вылетала?
Нет. 0 реакции, побегал, поиграл – без проблем.
P.S.
Это привет от CE остался.
-
2 минуты назад, what228 сказал:
Потому что ("BEANS+6380DA8") означает прыжок на "6380DA8" байт после чего идет инъекция в том месте.
Тебе нужно удалить ("+6380DA8").Уже дошло. НЯП, нужно удалить в двух местах:
Скрытый текстBEANS: jmp newmem nop nop return: registersymbol(BEANS) [DISABLE] //code from here till the end of the code will be used to disable the cheat BEANS: db 8B 08 89 0A C2 08 00
-
1 час назад, Garik66 сказал:
Качнул версию -- Релиз группы: R.G.Creative -- Автор репака: K0RW1N
Плагин или вручную.
Вроде сработал, вот он что дал:
{ Game : HP.exe Version: 1.0 Date : 04-25-17 Author : Garik66 This script does blah blah blah Make by aamaker Lua plagin :) Link - http://forum.gamehacklab.ru/index.php?/files/file/329-ce-plugin-aa-maker/ } [ENABLE] aobscanmodule(Primer,Core.FRegistryObjectInfo::FRegistryObjectInfo+69899,8bxx89xxc2xxxx85xx7exxxx8bxxxxxxxx8bxxxxxxf3xxxxxxc2xxxxxxxxxxxx8bxxxxxx85xx74xx8bxxxxxx8bxxxx33xx8bxx3bxxxx0f94xx8bxxc2xxxx8bxxxxxxxx33xx33xx8bxx3bxxxx0f94xx8bxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxx6a) alloc(newmem,$1000) label(code) label(return) registersymbol(Primer) newmem: code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return Primer: jmp newmem nop nop return: [DISABLE] Primer: db 8B 08 89 0A C2 08 00 unregistersymbol(Primer) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Core.FRegistryObjectInfo::FRegistryObjectInfo+68FED Core.FRegistryObjectInfo::FRegistryObjectInfo+68FD7: 8B 5D 08 - mov ebx,[ebp+08] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDA: 0FAF C3 - imul eax,ebx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDD: 8B 56 48 - mov edx,[esi+48] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE0: 03 C2 - add eax,edx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE2: 3B F9 - cmp edi,ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE4: 74 03 - je 1016C690 Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE6: 8D 0C 38 - lea ecx,[eax+edi] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE9: 8B 16 - mov edx,[esi] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEB: 51 - push ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEC: 8B 4D 10 - mov ecx,[ebp+10] // ---------- INJECTING HERE ---------- Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEF: 03 C1 - add eax,ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF1: 8B CE - mov ecx,esi // ---------- DONE INJECTING ---------- Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF3: 50 - push eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF4: FF 52 70 - call dword ptr [edx+70] Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF7: 85 C0 - test eax,eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF9: 74 18 - je 1016C6BA Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFB: 33 C0 - xor eax,eax Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFD: 8B 4D F4 - mov ecx,[ebp-0C] Core.FRegistryObjectInfo::FRegistryObjectInfo+69000: 64 89 0D 00000000 - mov fs:[00000000],ecx Core.FRegistryObjectInfo::FRegistryObjectInfo+69007: 5F - pop edi Core.FRegistryObjectInfo::FRegistryObjectInfo+69008: 5E - pop esi Core.FRegistryObjectInfo::FRegistryObjectInfo+69009: 5B - pop ebx }
SergBrNord, потесть, полученную сигну.
У меня полная антология от R.G.Recoding, но сигнатура подошла как родная.
А вот что я получил (делал ручками):
Скрытый текст{ Game : game.exe Version: 1.0 Date : 2017-04-24 Author : SergBrNord } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(BEANS,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 16 8B XX XX XX 8B XX 56 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 8B XX XX XX 56 33 XX 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 90 90 90 90 90 90 90 90 90 90 90 90 8B XX XX XX 8B XX XX XX 6A 04 52 8B XX FF XX XX C2 XX XX) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: cmp [eax+10], 65 //101 jne code cmp [flag], 0 jne code mov [eax], C8 //200 mov [flag], 1 code: mov ecx,[eax] mov [edx],ecx ret 0008 jmp return flag: db 0 BEANS+6380DA8: jmp newmem nop nop return: registersymbol(BEANS) [DISABLE] //code from here till the end of the code will be used to disable the cheat BEANS+6380DA8: db 8B 08 89 0A C2 08 00 unregistersymbol(BEANS) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Core.dll"+6CF40 "Core.dll"+6CF24: 8B 54 24 04 - mov edx,[esp+04] "Core.dll"+6CF28: 8B 08 - mov ecx,[eax] "Core.dll"+6CF2A: 89 0A - mov [edx],ecx "Core.dll"+6CF2C: C2 08 00 - ret 0008 "Core.dll"+6CF2F: 90 - nop "Core.dll"+6CF30: 8B 49 34 - mov ecx,[ecx+34] "Core.dll"+6CF33: 83 F9 01 - cmp ecx,01 "Core.dll"+6CF36: 75 0F - jne Core.dll+6CF47 "Core.dll"+6CF38: 8B 44 24 08 - mov eax,[esp+08] "Core.dll"+6CF3C: 8B 54 24 04 - mov edx,[esp+04] // ---------- INJECTING HERE ---------- "Core.dll"+6CF40: 8B 08 - mov ecx,[eax] "Core.dll"+6CF42: 89 0A - mov [edx],ecx "Core.dll"+6CF44: C2 08 00 - ret 0008 // ---------- DONE INJECTING ---------- "Core.dll"+6CF47: 85 C9 - test ecx,ecx "Core.dll"+6CF49: 7E 0E - jle Core.dll+6CF59 "Core.dll"+6CF4B: 56 - push esi "Core.dll"+6CF4C: 8B 74 24 0C - mov esi,[esp+0C] "Core.dll"+6CF50: 57 - push edi "Core.dll"+6CF51: 8B 7C 24 0C - mov edi,[esp+0C] "Core.dll"+6CF55: F3 A5 - repe movsd "Core.dll"+6CF57: 5F - pop edi "Core.dll"+6CF58: 5E - pop esi "Core.dll"+6CF59: C2 08 00 - ret 0008 }
Что интересно, после доработки сигнатуры, место в коде находится точно, но переход не прописывается никак.
Вот как это выглядит:
Скрытый текст
[Rome: Total War - Barbarian Invasion] Затыка с fstp
in Вопросы по созданию читов в одиночных играх
Опубликовано · Изменено пользователем SergBrNord
@LIRW оба варианта не взлетели.
@Garik66 первый вариант не взлетел. Насчёт fstp st(0) - не согласен, инструкция вполне рабочая. Использовал в своих скриптах раньше. Второй тоже не взлетел, в общем.
@inaginary пробовал там всё нопить по порядку, нопы не срабатывали. Всё с запятыми, потому что количество ходов, отображается полоской в интерфейсе. И да, эти инструкции работают не только с игроком.
@Antonshka не взлетело.
@MasterGH тоже не взлетело. Эх... =(
Не знаю, правильно ли идею понял, но сделал так: