SergBrNord Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 Всем салют. Копаюсь я тут (ничего не меняется, да? +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 Спасите кто-нибудь, а? Я не понимаю, что тут не так сделано. Моск плавится. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 26 минут назад, SergBrNord сказал: И у меня не получается записать нужное мне значение. push (float)80 fld dword ptr [esp] add esp,4 code: fstp dword ptr [eax+0000027C] или меткой сразу. fld dword ptr [xxxxxxx] code: fstp dword ptr [eax+0000027C] xxxxxx: dd (float)80 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 40 минут назад, SergBrNord сказал: Моск плавится. Попробуй так: сделать скрипт из этой инструкции: "RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00 - fld dword ptr [eax+000000C4] типа так: Скрытый текст newmem: mov dword ptr [eax+000000C4], (float)80 code: fld dword ptr [eax+000000C4] jmp return Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 (изменено) А если делать инъекцию в том месте где делаешь, то надо заменить нопами верхнюю инструкцию, что бы не происходило заполнения стека fpu, ведь она загружает. "RomeTW-BI.exe"+1817DA: D9 45 EC - fld dword ptr [ebp-14] Или же можно перед своим кодом сделать выгрузку из стека fstp dword ptr [eax+0000027C] Но как сказал Garik66, лучше делать инъекцию на инструкцию выше твоей иньекции. Изменено 17 февраля, 2018 пользователем inaginary Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 23 минуты назад, inaginary сказал: А если делать инъекцию в том месте где делаешь, то надо заменить нопами верхнюю инструкцию, что бы не происходило заполнения стека fpu, ведь она загружает. @inaginary, думаю это не поможет. Так как скрипты (оба варианта) у @SergBrNord на самом деле верны, но они не работает, так что есть подозрение, что есть в игровом коде где-то проверка. значений [eax+000000C4] и [eax+0000027C]. ЗЫ: как видишь эти значения лежат в разных структурах mov eax,[ebp-74] и mov eax,[ebp-10]. Но без теста в игре сказать более ничего определенного не могу. Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 @Garik66, я скорее имею ввиду то, что если просто написать скрипт после функции загрузки не выгружая, то стек будет заполнятся и заполнятся все дальше и может случится что то плохое. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 @inaginary, хотя подожди, первый скрипт у ТС не верен. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 Первый скрипт нужно было бы так написать: newmem: mov [eax+27C], (float)80 fstp [Chistka_Steka] fld dword ptr [eax+27C] code: fstp dword ptr [eax+0000027C] jmp return Chistka_Steka: dd 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 (изменено) @Garik66 по моему чистку стека еще можно организовать командой emms, но она очищает весь стек fpu Изменено 17 февраля, 2018 пользователем inaginary Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 Только что, inaginary сказал: @Garik66 по моему чистку стека еще можно организовать командой emms ну я не вдавался в такие подробности ассемблера. Я даже не знаю и пока ни разу не видел опкод emms. Нам же просто нужно вытолкнуть значение из st(0) сдвинув стек, а потом вернуть его обратно загрузив в st(0) нужное значение. Но это, повторюсь скорее всего не сработает, так как второй скрипт у ТС верен. Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 2 минуты назад, Garik66 сказал: ну я не вдавался в такие подробности ассемблера. Я даже не знаю и пока ни разу не видел опкод emms. Нам же просто нужно вытолкнуть значение из st(0) сдвинув стек, а потом вернуть его обратно загрузив в st(0) нужное значение. Но это, повторюсь скорее всего не сработает, так как второй скрипт у ТС верен. Ну это да, а по моему не обязательно сразу загружать значение во float, если использовать команду fild, она загрузит целое число как число float. Странно что число ходов во float, быть может это значение какое нибудь для вывода на экран, или вроде того, а настоящее другое Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 17 февраля, 2018 Поделиться Опубликовано 17 февраля, 2018 (изменено) @SergBrNord Почему бы тебе просто не попробовать занопить инструкцию которая отбавляет твои ходы, или сделать в твоём скрипте создание адреса который бы указывал на количество ходов, тогда ты бы мог включить свой скрипт и вынести это значение в таблицу по указателю от твоей метки, сделать это можно примерно так: После того как ты сделал инъекцию сюда "RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00 - fstp dword ptr [eax+0000027C] Сделать такой скрипт: label(mymetka) registersymbol(mymetka) //Регистрация метки newmem: mov [mymetka],eax code: fstp dword ptr [eax+0000027C] jmp return mymetka: //Задание метке размера dd 0 [DEALLOC] unregistersymbol(mymetka) //Снятие регистрации Теперь если ты добавишь к себе в таблицу эту метку и сделаешь её pointer типа float со смещением 27C, у тебя в таблице всегда будет значение с ходами, это при условии если инструкция будет работать только с ходами чего то одного, если она работает с многими то надо сделать фильтр в зависимости от твоей цели, хочешь ты себе ходы сделать или еще что другое. Возможно такой способ может быть альтернативой записи в скрипте Изменено 17 февраля, 2018 пользователем inaginary Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 18 февраля, 2018 Поделиться Опубликовано 18 февраля, 2018 Вот такой ещё вариант: Скрытый текст "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] // ---------- INJECTING HERE ---------- - jmp newmem newmem: mov [eax+0000027C],(loat)80 jmp returnhere // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+1817E3: 0F B6 45 0C - movzx eax,byte ptr [ebp+0C] //returnhere "RomeTW-BI.exe"+1817E7: 85 C0 - test eax,eax "RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00 - je RomeTW-BI.exe+1819CB Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 18 февраля, 2018 Поделиться Опубликовано 18 февраля, 2018 Скрытый текст Скорее всего, по трем адресам записать одно и то же значение. Для этого нужно сохранить оригинальный код как есть с прыжком в новую память . И прописать Скрытый текст "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] // ---------- INJECTING HERE ---------- - jmp newmem newmem: //"RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00 - fstp dword ptr [eax+0000027C] fstp dword ptr [eax+0000027C] mov [eax+c4], (float)80.0 mov [ebp-14], (float)80.0 mov [eax+27c], (float)80.0 jmp returnhere // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+1817E3: 0F B6 45 0C - movzx eax,byte ptr [ebp+0C] //returnhere "RomeTW-BI.exe"+1817E7: 85 C0 - test eax,eax "RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00 - je RomeTW-BI.exe+1819CB Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 февраля, 2018 Поделиться Опубликовано 18 февраля, 2018 46 минут назад, MasterGH сказал: И прописать Зачем так сложно, я же уже предложил вариант, где во все три адреса запишется нужное значение. ТЫК 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 18 февраля, 2018 Автор Поделиться Опубликовано 18 февраля, 2018 (изменено) @LIRW оба варианта не взлетели. @Garik66 первый вариант не взлетел. Насчёт fstp st(0) - не согласен, инструкция вполне рабочая. Использовал в своих скриптах раньше. Второй тоже не взлетел, в общем. @inaginary пробовал там всё нопить по порядку, нопы не срабатывали. Всё с запятыми, потому что количество ходов, отображается полоской в интерфейсе. И да, эти инструкции работают не только с игроком. @Antonshka не взлетело. @MasterGH тоже не взлетело. Эх... =( Не знаю, правильно ли идею понял, но сделал так: Скрытый текст label(return) newmem: fstp dword ptr [eax+0000027C] mov [eax+c4], (float)80.0 mov [ebp-14], (float)80.0 mov [eax+27c], (float)80.0 jmp return MOVEPOINTS2: jmp newmem nop return: registersymbol(MOVEPOINTS2) Изменено 18 февраля, 2018 пользователем SergBrNord Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 18 февраля, 2018 Поделиться Опубликовано 18 февраля, 2018 @SergBrNord, рекомендации 1) что ожидается от скрипта? адрес рабочий (замораживается в памяти и работает)? Вообще никакой реакции, не вылетов? ; 2) попробуй выложить полный скрипт. С адресом, нопами, если они есть; 3) попробуй убедиться что инъекция проходит по нужном адресу; 4) попробуй проверить выполнение кода в пошаговой отладке перед активацией Cheat Engine; Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 февраля, 2018 Поделиться Опубликовано 18 февраля, 2018 19 минут назад, SergBrNord сказал: правильно ли идею понял Сделал не правильно: mov [eax+c4], (float)80.0 // в оригинальном коде игры этот еах mov [ebp-14], (float)80.0 mov [eax+27c], (float)80.0// и этот eax разные. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 18 февраля, 2018 Поделиться Опубликовано 18 февраля, 2018 Кстати, да "eax" я просмотрел. Там нужно код поменять. В прочем вариант @Garik66 уже предложил, он проще Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 19 февраля, 2018 Автор Поделиться Опубликовано 19 февраля, 2018 (изменено) Результат моих предварительных изысканий (не доделан из заготовки фильтр): Спойлер { Game : RomeTW-BI.exe Version: 1.6.1 Date : 2018-02-19 Author : SergBrNord, Garik66; BIG THX TO Recifense } [ENABLE] aobscanmodule(GETmID,RomeTW-BI.exe,8B 80 04 05 00 00 89 45 F0 FF) // should be unique aobscanmodule(MVPOINTS_1,RomeTW-BI.exe,D8 65 08 8B 45 8C) // should be unique aobscanmodule(MVPOINTS_2,RomeTW-BI.exe,D9 98 7C 02 00 00 0F) // should be unique aobscanmodule(MVPOINTS_3,RomeTW-BI.exe,D8 65 08 8B 45 FC D9 98 7C) // should be unique alloc(newmem,$1000) alloc(dump, 4096, RomeTW-BI.exe) label(code_1) label(code_2) label(code_3) label(code_3) label(script_1) label(script_2) label(script_3) label(script_4) label(return_1) label(return_2) label(script_3) label(script_4) registersymbol(GETmID) registersymbol(MVPOINTS_1) registersymbol(MVPOINTS_2) registersymbol(MVPOINTS_3) newmem: script_1: mov [PlayerID],eax code_1: mov eax,[eax+00000504] jmp return_1 script_2: cmp eax, [PlayerID] jne code_2 mov [ebp+08], 0 code_2: fsub dword ptr [ebp+08] mov eax,[ebp-74] jmp return_2 script_3: cmp eax, [PlayerID] jne code_3 mov [eax+0000027C], (float)80 fstp st(0) fld dword ptr [eax+0000027C] code_3: fstp dword ptr [eax+0000027C] jmp return_3 script_4: cmp eax, [PlayerID] jne code_4 mov [ebp+08], 0 code_4: fsub dword ptr [ebp+08] mov eax,[ebp-04] jmp return_4 PlayerID: dd dump GETmID: jmp script_1 nop return_1: MVPOINTS_1: jmp script_2 nop return_2: MVPOINTS_2: jmp script_3 nop return_3: MVPOINTS_3: jmp script_4 nop return_4: [DISABLE] GETmID: db 8B 80 04 05 00 00 MVPOINTS_1: db D8 65 08 8B 45 8C MVPOINTS_2: db D9 98 7C 02 00 00 MVPOINTS_3: db D8 65 08 8B 45 FC unregistersymbol(GETmID) unregistersymbol(MVPOINTS_1) unregistersymbol(MVPOINTS_2) unregistersymbol(MVPOINTS_3) dealloc(newmem) dealloc(dump) { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+898105 "RomeTW-BI.exe"+8980DE: 89 4D EC - mov [ebp-14],ecx "RomeTW-BI.exe"+8980E1: A1 58 18 92 02 - mov eax,[RomeTW-BI.exe+2521858] "RomeTW-BI.exe"+8980E6: 05 E4 02 00 00 - add eax,000002E4 "RomeTW-BI.exe"+8980EB: 89 45 F8 - mov [ebp-08],eax "RomeTW-BI.exe"+8980EE: 8D 45 FC - lea eax,[ebp-04] "RomeTW-BI.exe"+8980F1: 50 - push eax "RomeTW-BI.exe"+8980F2: 8B 0D FC C0 8D 01 - mov ecx,[RomeTW-BI.exe+14DC0FC] "RomeTW-BI.exe"+8980F8: E8 96 43 ED FF - call RomeTW-BI.exe+76C493 "RomeTW-BI.exe"+8980FD: 8D 4D FC - lea ecx,[ebp-04] "RomeTW-BI.exe"+898100: E8 0A 28 EC FF - call RomeTW-BI.exe+75A90F // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+898105: 8B 80 04 05 00 00 - mov eax,[eax+00000504] // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+89810B: 89 45 F0 - mov [ebp-10],eax "RomeTW-BI.exe"+89810E: FF 75 F0 - push [ebp-10] "RomeTW-BI.exe"+898111: 8B 45 EC - mov eax,[ebp-14] "RomeTW-BI.exe"+898114: 8B 48 60 - mov ecx,[eax+60] "RomeTW-BI.exe"+898117: 8B 45 EC - mov eax,[ebp-14] "RomeTW-BI.exe"+89811A: 8B 40 60 - mov eax,[eax+60] "RomeTW-BI.exe"+89811D: 8B 00 - mov eax,[eax] "RomeTW-BI.exe"+89811F: FF 90 70 01 00 00 - call dword ptr [eax+00000170] "RomeTW-BI.exe"+898125: 8B 45 F8 - mov eax,[ebp-08] "RomeTW-BI.exe"+898128: 8B 4D EC - mov ecx,[ebp-14] } { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+181782 "RomeTW-BI.exe"+18175B: 8B EC - mov ebp,esp "RomeTW-BI.exe"+18175D: 81 EC 80 00 00 00 - sub esp,00000080 "RomeTW-BI.exe"+181763: 89 4D 8C - mov [ebp-74],ecx "RomeTW-BI.exe"+181766: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+181769: 0F B6 80 C1 00 00 00 - movzx eax,byte ptr [eax+000000C1] "RomeTW-BI.exe"+181770: 85 C0 - test eax,eax "RomeTW-BI.exe"+181772: 74 05 - je RomeTW-BI.exe+181779 "RomeTW-BI.exe"+181774: E9 5A 02 00 00 - jmp RomeTW-BI.exe+1819D3 "RomeTW-BI.exe"+181779: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+18177C: D9 80 C4 00 00 00 - fld dword ptr [eax+000000C4] // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+181782: D8 65 08 - fsub dword ptr [ebp+08] "RomeTW-BI.exe"+181785: 8B 45 8C - mov eax,[ebp-74] // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+181788: D9 98 C4 00 00 00 - fstp dword ptr [eax+000000C4] "RomeTW-BI.exe"+18178E: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+181791: D9 80 C4 00 00 00 - fld dword ptr [eax+000000C4] "RomeTW-BI.exe"+181797: D8 1D 9C 49 FE 00 - fcomp dword ptr [RomeTW-BI.exe+BE499C] "RomeTW-BI.exe"+18179D: DF E0 - fnstsw ax "RomeTW-BI.exe"+18179F: 9E - sahf "RomeTW-BI.exe"+1817A0: 73 0B - jae RomeTW-BI.exe+1817AD "RomeTW-BI.exe"+1817A2: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+1817A5: D9 EE - fldz "RomeTW-BI.exe"+1817A7: D9 98 C4 00 00 00 - fstp dword ptr [eax+000000C4] } { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+1817DD "RomeTW-BI.exe"+1817B9: 83 7D F4 00 - cmp dword ptr [ebp-0C],00 "RomeTW-BI.exe"+1817BD: 74 24 - je RomeTW-BI.exe+1817E3 "RomeTW-BI.exe"+1817BF: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+1817C2: 8B 80 EC 00 00 00 - mov eax,[eax+000000EC] "RomeTW-BI.exe"+1817C8: 89 45 F0 - mov [ebp-10],eax "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 "RomeTW-BI.exe"+1817EF: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+1817F2: 8B 80 E4 00 00 00 - mov eax,[eax+000000E4] "RomeTW-BI.exe"+1817F8: 89 45 E8 - mov [ebp-18],eax "RomeTW-BI.exe"+1817FB: 83 7D E8 00 - cmp dword ptr [ebp-18],00 "RomeTW-BI.exe"+1817FF: 0F 84 C6 01 00 00 - je RomeTW-BI.exe+1819CB "RomeTW-BI.exe"+181805: 8B 45 8C - mov eax,[ebp-74] "RomeTW-BI.exe"+181808: 8B 80 E4 00 00 00 - mov eax,[eax+000000E4] } { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+3C13C2 "RomeTW-BI.exe"+3C13A0: 55 - push ebp "RomeTW-BI.exe"+3C13A1: 8B EC - mov ebp,esp "RomeTW-BI.exe"+3C13A3: 51 - push ecx "RomeTW-BI.exe"+3C13A4: 89 4D FC - mov [ebp-04],ecx "RomeTW-BI.exe"+3C13A7: 8B 45 FC - mov eax,[ebp-04] "RomeTW-BI.exe"+3C13AA: D9 80 7C 02 00 00 - fld dword ptr [eax+0000027C] "RomeTW-BI.exe"+3C13B0: D8 65 08 - fsub dword ptr [ebp+08] "RomeTW-BI.exe"+3C13B3: D8 1D 6C 8C FF 00 - fcomp dword ptr [RomeTW-BI.exe+BF8C6C] "RomeTW-BI.exe"+3C13B9: 8B 45 FC - mov eax,[ebp-04] "RomeTW-BI.exe"+3C13BC: D9 80 7C 02 00 00 - fld dword ptr [eax+0000027C] // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+3C13C2: D8 65 08 - fsub dword ptr [ebp+08] "RomeTW-BI.exe"+3C13C5: 8B 45 FC - mov eax,[ebp-04] // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+3C13C8: D9 98 7C 02 00 00 - fstp dword ptr [eax+0000027C] "RomeTW-BI.exe"+3C13CE: 8B 45 FC - mov eax,[ebp-04] "RomeTW-BI.exe"+3C13D1: D9 80 7C 02 00 00 - fld dword ptr [eax+0000027C] "RomeTW-BI.exe"+3C13D7: D8 1D 9C 49 FE 00 - fcomp dword ptr [RomeTW-BI.exe+BE499C] "RomeTW-BI.exe"+3C13DD: DF E0 - fnstsw ax "RomeTW-BI.exe"+3C13DF: 9E - sahf "RomeTW-BI.exe"+3C13E0: 73 0B - jae RomeTW-BI.exe+3C13ED "RomeTW-BI.exe"+3C13E2: 8B 45 FC - mov eax,[ebp-04] "RomeTW-BI.exe"+3C13E5: D9 EE - fldz "RomeTW-BI.exe"+3C13E7: D9 98 7C 02 00 00 - fstp dword ptr [eax+0000027C] } Как оказалось, для получения корректной работы скрипта для члена фракции, необходимо одновременно работать с инструкциями для специальных юнитов и армий (хоть скрипты для последних прекрасно работают по отдельности) Вот версия, составленная по идеям Гаррика, но крашащая игру: =) Спойлер { Game : RomeTW-BI.exe Version: 1.6.1 Date : 2018-02-18 Author : SergBrNord & Garik66 } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(Gariktest,RomeTW-BI.exe,8B 80 04 05 00 00 89 45 F0 FF) // should be unique aobscanmodule(INJECT,RomeTW-BI.exe,D9 81 C4 00 00 00 D9) // should be unique aobscanmodule(INJECT2,RomeTW-BI.exe,00 D9 80 7C 02 00 00 D9 5D F0 8B 45 0C D9 45 F0 D9 18 EB A9 C9) // should be unique alloc(newmem,$1000) alloc(dump, 4096, RomeTW-BI.exe) label(cheat1) label(cheat2) label(cheat3) label(code) label(code2) label(code3) label(return) label(return2) label(return3) registersymbol(Gariktest) registersymbol(INJECT) registersymbol(INJECT2) newmem: cheat1: mov [PlayerID],eax code: mov eax,[eax+00000504] jmp return cheat2: cmp eax, [PlayerID] jne code2 push dword ptr [eax+150] pop dword ptr [ecx+C4] code2: fld dword ptr [ecx+000000C4] jmp return2 cheat3: cmp eax, [PlayerID] jne code3 nop nop jmp RomeTW-BI.exe+ACEDF leave jmp return3 code3: fstp dword ptr [eax] jmp RomeTW-BI.exe+ACEDF leave jmp return3 PlayerID: dd dump Gariktest: jmp cheat1 nop return: INJECT: jmp cheat2 nop return2: INJECT2+10: jmp cheat3 return3: [DISABLE] //code from here till the end of the code will be used to disable the cheat Gariktest: db 8B 80 04 05 00 00 INJECT: db D9 81 C4 00 00 00 INJECT2+10: db D9 18 EB A9 C9 unregistersymbol(Gariktest) unregistersymbol(INJECT) unregistersymbol(INJECT2) dealloc(newmem) dealloc(dump) { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+898105 "RomeTW-BI.exe"+8980DE: 89 4D EC - mov [ebp-14],ecx "RomeTW-BI.exe"+8980E1: A1 58 18 92 02 - mov eax,[RomeTW-BI.exe+2521858] "RomeTW-BI.exe"+8980E6: 05 E4 02 00 00 - add eax,000002E4 "RomeTW-BI.exe"+8980EB: 89 45 F8 - mov [ebp-08],eax "RomeTW-BI.exe"+8980EE: 8D 45 FC - lea eax,[ebp-04] "RomeTW-BI.exe"+8980F1: 50 - push eax "RomeTW-BI.exe"+8980F2: 8B 0D FC C0 8D 01 - mov ecx,[RomeTW-BI.exe+14DC0FC] "RomeTW-BI.exe"+8980F8: E8 96 43 ED FF - call RomeTW-BI.exe+76C493 "RomeTW-BI.exe"+8980FD: 8D 4D FC - lea ecx,[ebp-04] "RomeTW-BI.exe"+898100: E8 0A 28 EC FF - call RomeTW-BI.exe+75A90F // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+898105: 8B 80 04 05 00 00 - mov eax,[eax+00000504] // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+89810B: 89 45 F0 - mov [ebp-10],eax "RomeTW-BI.exe"+89810E: FF 75 F0 - push [ebp-10] "RomeTW-BI.exe"+898111: 8B 45 EC - mov eax,[ebp-14] "RomeTW-BI.exe"+898114: 8B 48 60 - mov ecx,[eax+60] "RomeTW-BI.exe"+898117: 8B 45 EC - mov eax,[ebp-14] "RomeTW-BI.exe"+89811A: 8B 40 60 - mov eax,[eax+60] "RomeTW-BI.exe"+89811D: 8B 00 - mov eax,[eax] "RomeTW-BI.exe"+89811F: FF 90 70 01 00 00 - call dword ptr [eax+00000170] "RomeTW-BI.exe"+898125: 8B 45 F8 - mov eax,[ebp-08] "RomeTW-BI.exe"+898128: 8B 4D EC - mov ecx,[ebp-14] } { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+18CE5D "RomeTW-BI.exe"+18CE2C: 0F B6 C0 - movzx eax,al "RomeTW-BI.exe"+18CE2F: 85 C0 - test eax,eax "RomeTW-BI.exe"+18CE31: 74 1E - je RomeTW-BI.exe+18CE51 "RomeTW-BI.exe"+18CE33: 8B 85 78 FF FF FF - mov eax,[ebp-00000088] "RomeTW-BI.exe"+18CE39: D9 80 44 01 00 00 - fld dword ptr [eax+00000144] "RomeTW-BI.exe"+18CE3F: D8 0D 98 4B FE 00 - fmul dword ptr [RomeTW-BI.exe+BE4B98] "RomeTW-BI.exe"+18CE45: 8B 85 78 FF FF FF - mov eax,[ebp-00000088] "RomeTW-BI.exe"+18CE4B: D9 98 44 01 00 00 - fstp dword ptr [eax+00000144] "RomeTW-BI.exe"+18CE51: 8B 85 78 FF FF FF - mov eax,[ebp-00000088] "RomeTW-BI.exe"+18CE57: 8B 8D 78 FF FF FF - mov ecx,[ebp-00000088] // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+18CE5D: D9 81 C4 00 00 00 - fld dword ptr [ecx+000000C4] // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+18CE63: D9 98 4C 01 00 00 - fstp dword ptr [eax+0000014C] "RomeTW-BI.exe"+18CE69: 8B 85 78 FF FF FF - mov eax,[ebp-00000088] "RomeTW-BI.exe"+18CE6F: 8B 80 E4 00 00 00 - mov eax,[eax+000000E4] "RomeTW-BI.exe"+18CE75: 89 45 FC - mov [ebp-04],eax "RomeTW-BI.exe"+18CE78: 83 7D FC 00 - cmp dword ptr [ebp-04],00 "RomeTW-BI.exe"+18CE7C: 0F 84 DB 00 00 00 - je RomeTW-BI.exe+18CF5D "RomeTW-BI.exe"+18CE82: A1 B4 17 92 02 - mov eax,[RomeTW-BI.exe+25217B4] "RomeTW-BI.exe"+18CE87: 89 45 C0 - mov [ebp-40],eax "RomeTW-BI.exe"+18CE8A: 8B 85 78 FF FF FF - mov eax,[ebp-00000088] "RomeTW-BI.exe"+18CE90: 05 4C 01 00 00 - add eax,0000014C } { // ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+ACF32 "RomeTW-BI.exe"+ACF13: DF E0 - fnstsw ax "RomeTW-BI.exe"+ACF15: 9E - sahf "RomeTW-BI.exe"+ACF16: 73 1C - jae RomeTW-BI.exe+ACF34 "RomeTW-BI.exe"+ACF18: FF 75 FC - push [ebp-04] "RomeTW-BI.exe"+ACF1B: 8B 4D 08 - mov ecx,[ebp+08] "RomeTW-BI.exe"+ACF1E: E8 60 53 27 00 - call RomeTW-BI.exe+322283 "RomeTW-BI.exe"+ACF23: D9 80 7C 02 00 00 - fld dword ptr [eax+0000027C] "RomeTW-BI.exe"+ACF29: D9 5D F0 - fstp dword ptr [ebp-10] "RomeTW-BI.exe"+ACF2C: 8B 45 0C - mov eax,[ebp+0C] "RomeTW-BI.exe"+ACF2F: D9 45 F0 - fld dword ptr [ebp-10] // ---------- INJECTING HERE ---------- "RomeTW-BI.exe"+ACF32: D9 18 - fstp dword ptr [eax] "RomeTW-BI.exe"+ACF34: EB A9 - jmp RomeTW-BI.exe+ACEDF "RomeTW-BI.exe"+ACF36: C9 - leave // ---------- DONE INJECTING ---------- "RomeTW-BI.exe"+ACF37: C2 08 00 - ret 0008 "RomeTW-BI.exe"+ACF3A: 55 - push ebp "RomeTW-BI.exe"+ACF3B: 8B EC - mov ebp,esp "RomeTW-BI.exe"+ACF3D: 83 EC 18 - sub esp,18 "RomeTW-BI.exe"+ACF40: 89 4D EC - mov [ebp-14],ecx "RomeTW-BI.exe"+ACF43: 83 65 E8 00 - and dword ptr [ebp-18],00 "RomeTW-BI.exe"+ACF47: 83 65 FC 00 - and dword ptr [ebp-04],00 "RomeTW-BI.exe"+ACF4B: EB 07 - jmp RomeTW-BI.exe+ACF54 "RomeTW-BI.exe"+ACF4D: 8B 45 FC - mov eax,[ebp-04] "RomeTW-BI.exe"+ACF50: 40 - inc eax } Изменено 19 февраля, 2018 пользователем SergBrNord Добавил скрипт Ссылка на комментарий Поделиться на другие сайты Поделиться
SergBrNord Опубликовано 27 февраля, 2018 Автор Поделиться Опубликовано 27 февраля, 2018 Наконец-то закончил возню с фильтром (с 5 раза смог) Выкладываю скрипты для Rome: Total War + Barbarian Invasion Rome: Total War Rome: Total War - Barbarian Invasion 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения