SerVick Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 Столкнулся с такой ситуацией игра "Indiana Jones and the Emperor's Tomb", скрипты работают нормально до перехода на другой уровень. Если отключить перед переходом читы, а потом включить после загрузки уровня аобскан отрабатывает нормально, т.е. нет смысла удлинять цепочку байт . А если не отключать, то чит не выключается (остаётся активным), но не работает. Если выйти в меню игры чит отключиться, загрузить снова уровень и снова будет норм работать до перехода на следующий уровень. Игра при этом не глючит и не вылетает, просто перестают работать скрипты после загрузки следующего уровня. Версия игры - v 1.01 , репак от "Механиков" Вот скрипты (может кому и так пригодятся? Показать контент Inf.Health { Game : indy.exe } [ENABLE] aobscan(InfHealth,D5 85 C0 74 1B D9 80 84 00 00 00) // should be unique alloc(newmem,$1000) label(return) newmem://600 fl ; fld dword ptr [eax+00000088] fst dword ptr [eax+00000084] jmp return InfHealth+05: jmp newmem nop return: registersymbol(InfHealth) [DISABLE] InfHealth+05: db D9 80 84 00 00 00 unregistersymbol(InfHealth) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "G_Indy.sgl"+AFA30 "G_Indy.sgl"+AFA1A: 56 - push esi "G_Indy.sgl"+AFA1B: 57 - push edi "G_Indy.sgl"+AFA1C: 8B F1 - mov esi,ecx "G_Indy.sgl"+AFA1E: FF D5 - call ebp "G_Indy.sgl"+AFA20: 8B F8 - mov edi,eax "G_Indy.sgl"+AFA22: 85 FF - test edi,edi "G_Indy.sgl"+AFA24: 0F 84 A0 02 00 00 - je G_Indy.sgl+AFCCA "G_Indy.sgl"+AFA2A: FF D5 - call ebp "G_Indy.sgl"+AFA2C: 85 C0 - test eax,eax "G_Indy.sgl"+AFA2E: 74 1B - je G_Indy.sgl+AFA4B // ---------- INJECTING HERE ---------- "G_Indy.sgl"+AFA30: D9 80 84 00 00 00 - fld dword ptr [eax+00000084] // ---------- DONE INJECTING ---------- "G_Indy.sgl"+AFA36: D8 B0 88 00 00 00 - fdiv dword ptr [eax+00000088] "G_Indy.sgl"+AFA3C: D8 15 5C F3 4B 08 - fcom dword ptr [G_Indy.sgl+17F35C] "G_Indy.sgl"+AFA42: DF E0 - fnstsw ax "G_Indy.sgl"+AFA44: F6 C4 05 - test ah,05 "G_Indy.sgl"+AFA47: 7A 3B - jp G_Indy.sgl+AFA84 "G_Indy.sgl"+AFA49: DD D8 - fstp st(0) "G_Indy.sgl"+AFA4B: D9 05 5C F3 4B 08 - fld dword ptr [G_Indy.sgl+17F35C] "G_Indy.sgl"+AFA51: D9 56 18 - fst dword ptr [esi+18] "G_Indy.sgl"+AFA54: D9 C0 - fld st(0) "G_Indy.sgl"+AFA56: D8 66 1C - fsub dword ptr [esi+1C] } Inf.Oxigen { Game : indy.exe } [ENABLE] aobscan(Oxig,D9 80 C4 04 00 00) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: fld dword ptr [eax+000004C8] fst dword ptr [eax+000004C4] code: jmp return Oxig: jmp newmem db 90 return: registersymbol(Oxig) [DISABLE] Oxig: db D9 80 C4 04 00 00 unregistersymbol(Oxig) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "G_Indy.sgl"+B047C "G_Indy.sgl"+B0468: 83 C4 10 - add esp,10 "G_Indy.sgl"+B046B: C3 - ret "G_Indy.sgl"+B046C: 90 - nop "G_Indy.sgl"+B046D: 90 - nop "G_Indy.sgl"+B046E: 90 - nop "G_Indy.sgl"+B046F: 90 - nop "G_Indy.sgl"+B0470: 83 EC 14 - sub esp,14 "G_Indy.sgl"+B0473: 56 - push esi "G_Indy.sgl"+B0474: 8B F1 - mov esi,ecx "G_Indy.sgl"+B0476: FF 15 E4 D2 2F 0F - call dword ptr [G_Indy.sgl+17D2E4] // ---------- INJECTING HERE ---------- "G_Indy.sgl"+B047C: D9 80 C4 04 00 00 - fld dword ptr [eax+000004C4] // ---------- DONE INJECTING ---------- "G_Indy.sgl"+B0482: D8 B0 C8 04 00 00 - fdiv dword ptr [eax+000004C8] "G_Indy.sgl"+B0488: 8A 46 2C - mov al,[esi+2C] "G_Indy.sgl"+B048B: 8D 54 24 0C - lea edx,[esp+0C] "G_Indy.sgl"+B048F: 52 - push edx "G_Indy.sgl"+B0490: 68 00 00 80 3F - push 3F800000 "G_Indy.sgl"+B0495: 84 C0 - test al,al "G_Indy.sgl"+B0497: C7 44 24 1C 00 00 80 3F - mov [esp+1C],3F800000 "G_Indy.sgl"+B049F: C7 44 24 18 00 00 80 3F - mov [esp+18],3F800000 "G_Indy.sgl"+B04A7: C7 44 24 14 00 00 80 3F - mov [esp+14],3F800000 "G_Indy.sgl"+B04AF: 6A 00 - push 00 } NoReload { Game : indy.exe } [ENABLE] aobscan(InfAmmo,8B 81 E4 0F 00 00 89) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: push [ecx+00000FE8] pop [ecx+00000FE4] code: mov eax,[ecx+00000FE4] jmp return InfAmmo: jmp newmem nop return: registersymbol(InfAmmo) [DISABLE] InfAmmo: db 8B 81 E4 0F 00 00 unregistersymbol(InfAmmo) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "G_Indy.sgl"+5A434 "G_Indy.sgl"+5A427: 90 - nop "G_Indy.sgl"+5A428: 90 - nop "G_Indy.sgl"+5A429: 90 - nop "G_Indy.sgl"+5A42A: 90 - nop "G_Indy.sgl"+5A42B: 90 - nop "G_Indy.sgl"+5A42C: 90 - nop "G_Indy.sgl"+5A42D: 90 - nop "G_Indy.sgl"+5A42E: 90 - nop "G_Indy.sgl"+5A42F: 90 - nop "G_Indy.sgl"+5A430: 8B 54 24 04 - mov edx,[esp+04] // ---------- INJECTING HERE ---------- "G_Indy.sgl"+5A434: 8B 81 E4 0F 00 00 - mov eax,[ecx+00000FE4] // ---------- DONE INJECTING ---------- "G_Indy.sgl"+5A43A: 89 02 - mov [edx],eax "G_Indy.sgl"+5A43C: 8B 81 E8 0F 00 00 - mov eax,[ecx+00000FE8] "G_Indy.sgl"+5A442: 8B 4C 24 08 - mov ecx,[esp+08] "G_Indy.sgl"+5A446: 89 01 - mov [ecx],eax "G_Indy.sgl"+5A448: B0 01 - mov al,01 "G_Indy.sgl"+5A44A: C2 08 00 - ret 0008 "G_Indy.sgl"+5A44D: 90 - nop "G_Indy.sgl"+5A44E: 90 - nop "G_Indy.sgl"+5A44F: 90 - nop "G_Indy.sgl"+5A450: 56 - push esi } OneHitKill { Game : indy.exe } [ENABLE] aobscan(OHK,00 D8 86 84 00 00 00) // should be unique alloc(newmem,$1000) label(code) label(return) newmem://2 enem ; 1 Pers ; cmp [esi+00000054],#2 jne code fsub dword ptr [esi+00000088] code: fadd dword ptr [esi+00000084] jmp return OHK+01: jmp newmem nop return: registersymbol(OHK) [DISABLE] OHK+01: db D8 86 84 00 00 00 unregistersymbol(OHK) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "GCore.dll"+14AEEE "GCore.dll"+14AECC: 74 09 - je GCore.dll+14AED7 "GCore.dll"+14AECE: E8 9D 1F EF FF - call GCore.dll+3CE70 "GCore.dll"+14AED3: 3B C6 - cmp eax,esi "GCore.dll"+14AED5: 74 55 - je GCore.dll+14AF2C "GCore.dll"+14AED7: 8B 8E 94 04 00 00 - mov ecx,[esi+00000494] "GCore.dll"+14AEDD: 8B 06 - mov eax,[esi] "GCore.dll"+14AEDF: D9 44 24 0C - fld dword ptr [esp+0C] "GCore.dll"+14AEE3: 8B 51 1C - mov edx,[ecx+1C] "GCore.dll"+14AEE6: 8B CE - mov ecx,esi "GCore.dll"+14AEE8: D8 8A 88 00 00 00 - fmul dword ptr [edx+00000088] // ---------- INJECTING HERE ---------- "GCore.dll"+14AEEE: D8 86 84 00 00 00 - fadd dword ptr [esi+00000084] // ---------- DONE INJECTING ---------- "GCore.dll"+14AEF4: D9 9E 84 00 00 00 - fstp dword ptr [esi+00000084] "GCore.dll"+14AEFA: FF 90 10 06 00 00 - call dword ptr [eax+00000610] "GCore.dll"+14AF00: 85 C0 - test eax,eax "GCore.dll"+14AF02: 74 28 - je GCore.dll+14AF2C "GCore.dll"+14AF04: 8B 16 - mov edx,[esi] "GCore.dll"+14AF06: 53 - push ebx "GCore.dll"+14AF07: 8B CE - mov ecx,esi "GCore.dll"+14AF09: FF 92 14 06 00 00 - call dword ptr [edx+00000614] "GCore.dll"+14AF0F: 8B F8 - mov edi,eax "GCore.dll"+14AF11: 8B 86 40 04 00 00 - mov eax,[esi+00000440] } Vagon// Не стал мудрить так назвал, требуется в миссии где самолёты расстреливают подвесной вагон... { Game : indy.exe } [ENABLE] aobscan(Vagon,D9 9E 84 00 00 00 74) // should be unique alloc(newmem,$1000) label(return) newmem://10000 fl; ebx ;edx ; 54 = 2 ;58 = 3 fld dword ptr [esi+00000088] fstp dword ptr [esi+00000084] jmp return Vagon: jmp newmem nop return: registersymbol(Vagon) [DISABLE] Vagon: db D9 9E 84 00 00 00 unregistersymbol(Vagon) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "G_Indy.sgl"+C144A "G_Indy.sgl"+C141D: D9 05 58 F3 40 0F - fld dword ptr [G_Indy.sgl+17F358] "G_Indy.sgl"+C1423: D8 4C 24 10 - fmul dword ptr [esp+10] "G_Indy.sgl"+C1427: D9 5C 24 10 - fstp dword ptr [esp+10] "G_Indy.sgl"+C142B: D9 86 84 00 00 00 - fld dword ptr [esi+00000084] "G_Indy.sgl"+C1431: D8 64 24 10 - fsub dword ptr [esp+10] "G_Indy.sgl"+C1435: 8B 8E 88 02 00 00 - mov ecx,[esi+00000288] "G_Indy.sgl"+C143B: 8B 86 80 02 00 00 - mov eax,[esi+00000280] "G_Indy.sgl"+C1441: 41 - inc ecx "G_Indy.sgl"+C1442: 3B C3 - cmp eax,ebx "G_Indy.sgl"+C1444: 89 8E 88 02 00 00 - mov [esi+00000288],ecx // ---------- INJECTING HERE ---------- "G_Indy.sgl"+C144A: D9 9E 84 00 00 00 - fstp dword ptr [esi+00000084] // ---------- DONE INJECTING ---------- "G_Indy.sgl"+C1450: 74 72 - je G_Indy.sgl+C14C4 "G_Indy.sgl"+C1452: 8B 16 - mov edx,[esi] "G_Indy.sgl"+C1454: 8B CE - mov ecx,esi "G_Indy.sgl"+C1456: C7 44 24 14 06 00 00 00 - mov [esp+14],00000006 "G_Indy.sgl"+C145E: 89 9C 24 84 00 00 00 - mov [esp+00000084],ebx "G_Indy.sgl"+C1465: 88 5C 24 54 - mov [esp+54],bl "G_Indy.sgl"+C1469: C7 44 24 48 00 00 00 00 - mov [esp+48],00000000 "G_Indy.sgl"+C1471: C7 44 24 4C 00 00 00 00 - mov [esp+4C],00000000 "G_Indy.sgl"+C1479: C7 44 24 50 00 00 00 00 - mov [esp+50],00000000 "G_Indy.sgl"+C1481: FF 92 54 02 00 00 - call dword ptr [edx+00000254] } Думаю должно быть решение подобной проблемы?! Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 Три года на форуме, а тему создал не в том разделе. Закрываю. @Xipho // Руслан, открыл тему, чтобы не переносить из старой в новую тему скрипты. Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 06:29, SerVick сказал: Думаю должно быть решение подобной проблемы?! Показать А какой именно из скриптов не выключается? Не проверял? Ссылка на комментарий Поделиться на другие сайты Поделиться
SerVick Опубликовано 4 ноября, 2018 Автор Поделиться Опубликовано 4 ноября, 2018 Все скрипты не выключаются, если были включены. И отключаются без выхода из игры, просто выйдя в меню игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 07:47, SerVick сказал: Все скрипты не выключаются, если были включены. И отключаются без выхода из игры, просто выйдя в меню игры. Показать Странно, скрипты верные, короче без игры понять сложно в чем дело. Каким-то образом сигна не отрабатывает. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 Обычное дело для старых игр, которые при переходе на разные уровни удаляют выделеную память, решение - найти триггер перед переходом на другой уровень, который сообщает о состоянии игры, надо будет сохранять состояние скриптов и после загрузки уровня и изменения триггера восстанавливать их состояние. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 08:50, partoftheworlD сказал: восстанавливать их состояние. Показать Т.е. только через костыль? Тыды проще повесить все на одну ГК и в инструкции пользователям написать выкл/вкл Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 09:00, Garik66 сказал: Т.е. только через костыль? Показать Ну не сказал бы что это костыль, все делается автоматически и пользователь этого не замечает. В 04.11.2018 в 09:00, Garik66 сказал: Тыды проще повесить все на одну ГК и в инструкции пользователям написать выкл/вкл Показать Вот это уже костыли, лично мне было бы лень каждую загрузку игры включать и выключать скрипт, плюс я могу забыть про это.? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 Ну не сказал бы что это костыль, все делается автоматически и пользователь этого не замечает. Согласен. Но стоит ли это затрат времени. Нужно проверить какие скрипты были активированы при переходе на следуюший уровень и потом именно их активировать. Мне например точно лень. Не ну, если кто зарабатывает на скриптах, то конечно. Ссылка на комментарий Поделиться на другие сайты Поделиться
SerVick Опубликовано 4 ноября, 2018 Автор Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 09:09, partoftheworlD сказал: , плюс я могу забыть про это.? Показать Согласен, что забываешь отключить, или просто поторопишься. Т.к. для перехода на другой уровень подтверждения не требуется в этой игре. Да и опять же, если не играл, как знать где переход на другой уровень?! Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 09:45, SerVick сказал: Согласен, что забываешь отключить, или просто поторопишься. Т.к. для перехода на другой уровень подтверждения не требуется в этой игре. Да и опять же, если не играл, как знать где переход на другой уровень?! Показать Ну тогда - искать тригер, думаю тебе будет сложновато это. Как вариант - можно посмотреть координаты ГГ (до заканчивания уровня и после загрузки нового). Думаю координаты будут резко отличаться. А. если так то написать самому виртуальный тригер, привязываясь к координатам. Или найти ID локаций к примеру, но от сюда уже не далеко и до тригера про который писал @partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 10:59, Garik66 сказал: Ну тогда - искать тригер, думаю тебе будет сложновато это. Показать не не слишком сложно, обычный поиск неизвестного, триггер обычно 1 и 0 или какая-нибудь цифра и 0, 0 чаще всегда бывает в катсценах, во время загрузки уровня. если в игре ведется своя статистика количества потраченного времени в игре, то триггер наверняка есть и можно уже от этого времени выйти на него. Как вариант, пойти на форум спидранеров и найти авто-сплитер, они как раз таки основываются на состоянии игры, если повезет, то в авто-сплитере будет прописана сигнатура с этим адресом. Ссылка на комментарий Поделиться на другие сайты Поделиться
SerVick Опубликовано 4 ноября, 2018 Автор Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 10:59, Garik66 сказал: думаю тебе будет сложновато это. Показать Да правильно, сложновато. Вот как пример найти тригер. Ладно про тригер я почитать могу, но с ним потом делать вы вот к примеру в приведённых скриптах можете пример как должно выглядеть сие. Что скажем нашёл я 1/0 (после загрузки уровня я так думаю этот адрес не должен меняться?) и что мне с этим делать?! Не обязательно чтоб работал скрипт (просто пример как должно писаться в скрипте) какой выберите из тех, что я закинул. И по поводу тригера..., поиск неизвестного - это понятно, но как и от чего отталкиваться, вернее не до конца понимаю, что такое -тригер и с чем его "едят"? Кстати время не ведётся в игре, или по крайней -мере не выводится на экран(игра на другом компе, сейчас установлю сюда и точно напишу). В общем можно написать последовательно, что мне нужно сделать по шагам?! К примеру: Шаг 1) Поиск неизвестного (от чего отталкиваться, и что искать) Шаг 2) ????? и т.д.. Ссылка на комментарий Поделиться на другие сайты Поделиться
SerVick Опубликовано 4 ноября, 2018 Автор Поделиться Опубликовано 4 ноября, 2018 P.S. Учёт времени, количество убитых противников и т.д. не ведётся. Если, только где -то в скрытых параметрах игры. В общем нигде подобная информации нет включая меню игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 17:24, SerVick сказал: и что мне с этим делать? Показать Добавить в отдельный скрипт как проверку, если значение равно 0, то сохранить состояние скриптов в CE(какие включены), если значение равно 1, то записать состояние скриптов из памяти. И добавить таймер на этот скрипт, чтобы он проверял состояние каждые 100 мс. В 04.11.2018 в 17:24, SerVick сказал: что такое -тригер и с чем его "едят"? Показать триггер это флаг указывающий, что произошло то или иное действие в игре Ссылка на комментарий Поделиться на другие сайты Поделиться
SerVick Опубликовано 4 ноября, 2018 Автор Поделиться Опубликовано 4 ноября, 2018 С тригером ясно, Вот как сие искать, от чего отталкиваться. Понятно, что обычно байт 1/0. Но по какому принципу подобное ищется, можно как неизвестное -это понятно, главное понимать -что ищешь и как это работает, тогда и с поисками можно "мудрить". И естественно куда - это вписывать в каждую функцию, или можно отдельно на все функции как -то сделать?! Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 ноября, 2018 Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 18:39, SerVick сказал: или можно отдельно на все функции как -то сделать?! Показать Короче суть такова: Тебе нужно найти какое отличие м/у уровнями. Как вариант я тебе предложил по координатам сделать. Если в игре уровней не много, то по конкретным координатам или по порталам перехода. Скрипт добавочный будет один - он будет смотреть дошел ли ты до портала, если да то отключать включенные скрипты, после выхода из портала включать их по новой. По Авто-Отключению/Авто-Включению скриптов было несколько тем. Скрипт пишется на LUA. Тоже самое и с тригером, но как на него выходить поиском я не знаю, а реверсить игровой код довольно сложно. ЗЫ: да и сомневаюсь что кто-то будет это делать, так что придется самому тебе покопаться и поизучать игру. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
SerVick Опубликовано 4 ноября, 2018 Автор Поделиться Опубликовано 4 ноября, 2018 В 04.11.2018 в 18:55, Garik66 сказал: Скрипт добавочный будет один - он будет смотреть дошел ли ты до портала, если да то отключать включенные скрипты, после выхода из портала включать их Показать Garik66, благодарю! В том то и дело, что мне самому хочется понять и сделать, а иначе зачем было тему открывать?! Можно было бы тогда попросить кого -то. Вот уже есть над чем работать и в каком направлении двигаться понятно. В общем надо темы про авто -включение читать... А с поиском думаю разберусь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 ноября, 2018 Поделиться Опубликовано 6 ноября, 2018 Заголовок темы не соответствует правилам оформления. Сутки на исправление, раз уж переоткрыли. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения