Akama Опубликовано 3 марта, 2010 Поделиться Опубликовано 3 марта, 2010 Игра ещё толком не вышла, а я уже читерю ))))и застрял на простой с первого взгляда проблеме:Когда ломал метательные ножи, то на запись у меня выскочила функция xor [ecx+4],eax.Я помню ролик, который делал МастерСН по игре Локи, там тоже ксор был.Напомните плз что делать чтобы кинжалов стало 10! Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 марта, 2010 Поделиться Опубликовано 4 марта, 2010 Ого! Уже вышла... ))) Ты толком напиши, что в регистрах, где расшифрованное и где зашифрованное значение, какой тип данных Мне проще готовый ответ дать чем много писать Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 4 марта, 2010 Автор Поделиться Опубликовано 4 марта, 2010 Игра уже в понедельник по торрентам ходила...По теме помоги плз, ибо не добавляются кинжалики мовом (((Тип данных byte (1 байт, я сам абалдел оО). Ставлю бряк на запись, и у меня только ксор вылетает. Регистры сам понимаешь меняются при перезапуске. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 4 марта, 2010 Автор Поделиться Опубликовано 4 марта, 2010 Нашёл подвох с кинжалами: значение можно ставить любое, но как только превышает первое значение, то игра вылетает, даже без ошибки. Т.е. скажем было 10 кинжалов, ты выбросил 3, осталось 7, затем изменил в СЕ на 10, и когда кидаешь по одному, то после 3-х кинжалов вылет случается. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 марта, 2010 Поделиться Опубликовано 4 марта, 2010 Если требуется помощь, приводи значения регистров с указанием, какое значение отвечает за количество кинжалов и всю функцию (дизассемблированного кода из OllyDbg) под спойлер. В противном случае я могу только гадать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 4 марта, 2010 Автор Поделиться Опубликовано 4 марта, 2010 Ну хоть погадай, я этим олли пользоваться неумею... Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 марта, 2010 Поделиться Опубликовано 4 марта, 2010 Приводи точную и чёткую информацию.Я просил привести тебя значения регистров на инструкции xor [ecx+4],eax - это мимо твоего внимания проходит (как насквозь), как будто я сам с собой разговариваю. Если листинг не приведёшь, тогда это не ко мне. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 4 марта, 2010 Автор Поделиться Опубликовано 4 марта, 2010 EAX=6FF30060EBX=6FF30064ECX=00000000EDX=00000000ESI=00030000EDI=70D50FA8EBP=04D5FCD8ESP=04D5FCD0EIP=009C93C4Probable base pointer =70D50FA8009c93b8 - xor esi,[edi+04]009c93bb - and esi,3fff0000009c93c1 - xor [edi+04],esi009c93c4 - pop edi009c93c5 - pop esi009c93c1 - xor [edi+04],esi функция которая на бряк вылетает. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 марта, 2010 Поделиться Опубликовано 4 марта, 2010 Отлично, но этого мало.1. Приведи все дизаассемблерные инструкции выше и ниже входящие в некоторую функцию.2. Приведи регистры до выполнения 009c93b8 - xor esi,[edi+04] и вновь на 009c93b8 - xor esi,[edi+04]Если тебе что-то не понятно, то 1) Перед 009c93b8 в отладчике поставь F5.2) В игре кинь ножь, игра прервётся. Скопируй все регистры.3) Выполни один раз инструкцию - F7. Скоприуй все регистры.4) Выдели блок инструкции в дизассембелере CE в который входит 009c93b8 - xor esi,[edi+04]. Этот блок обычно логически отделён мелкими: нопами, нулями, ret-ми. Ну или просто выдели вверх инструкций 50 и в низ инструкций 20 и скопирую сюда. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 5 марта, 2010 Автор Поделиться Опубликовано 5 марта, 2010 Типа припустил )))))Я ничего не понял...В общем пойду лицуху покупать, как куплю буду кавырять дальше. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 5 марта, 2010 Поделиться Опубликовано 5 марта, 2010 Что значит "Типа припустил" !? Ты сдался ? Кстати OllyDbg-ом и тем более IDA необходимо научится пользоваться хотя бы на минимуме и только после этого пользоваться отладчиком CE. Там где шифрование (в случае этой игры) удобнее пользоваться OllyDbg, т.к. по интуиции ты сразу увидишь как всё происходит.Если Акама решил покупать лицензию, то он пропадёт с форума как минимум на трое суток и будет играть и играть всё это время )))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 5 марта, 2010 Автор Поделиться Опубликовано 5 марта, 2010 Ну эт врятли, я всё постепенно делаю...У меня предчувствие что с адресом не то что-то... потому как например если у меня было 7 ножей, а я исправил на 10, то игра всё равно думает что ножей 7, а если восьмой пытаешься кинуть, но игре краш ((( Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 5 марта, 2010 Поделиться Опубликовано 5 марта, 2010 Так может происходит по нескольким причинам.1. Предусмотрено некоторое значение (оно может быть зашифровано) связанное с количеством ножей. Перед изменением количества ножей идёт проверка со связанным значением, если она не удалась - то вылет. Это легко проверить в OllyDbg. Поэтому надо учиться работать с ним.2. Каждый нож - это объект, который входит в список коллекции объектов "Нож". Он представляет собой кусок памяти, который создаётся и разрушается при кидании ножка. Так было с патронами в Сталкерах, так было в игре BloodDarknes что-ли, когда там стрелы были как объекты (кто-то года три назад раскричался, что стрелы не взламываемые, дескать стрелы это сам код игры по воле случая создания игры ) Если с ножами также, то наверно ты не разберёшься. Я с патронами в СТАЛКЕРЕ разобрался практически не позволяя им уменьшаться, но боллее глубо копать не стал.Так же могут быть и другие случаи. А узнать "что и как происходит" поможет только хороший отладчик/дизассемблер. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 5 марта, 2010 Автор Поделиться Опубликовано 5 марта, 2010 Скину в споилер чтоб не засорять пост[cod]009CA073 - 81 e6 00 00 ff 3f - and esi,3fff0000009CA079 - 31 77 04 - xor [edi+04],esi009CA07C - 5f - pop edi009CA07D - 5e - pop esi009CA07E - 5d - pop ebp009CA07F - c2 08 00 - ret 0008009CA082 - cc - int 3009CA083 - cc - int 3009CA084 - cc - int 3009CA085 - cc - int 3009CA086 - cc - int 3009CA087 - cc - int 3009CA088 - cc - int 3009CA089 - cc - int 3009CA08A - cc - int 3009CA08B - cc - int 3009CA08C - cc - int 3009CA08D - cc - int 3009CA08E - cc - int 3009CA08F - cc - int 3009CA090 - 55 - push ebp009CA091 - 8b ec - mov ebp,esp009CA093 - 8b 45 08 - mov eax,[ebp+08]009CA096 - 56 - push esi009CA097 - 57 - push edi009CA098 - 8b f9 - mov edi,ecx009CA09A - 0f b7 77 06 - movzx esi,word ptr [edi+06]009CA09E - 81 e6 ff 3f 00 00 - and esi,00003fff009CA0A4 - 8d 48 01 - lea ecx,[eax+01]009CA0A7 - 3b ce - cmp ecx,esi009CA0A9 - 73 27 - jae 009ca0d2009CA0AB - 53 - push ebx009CA0AC - 8b 17 - mov edx,[edi]009CA0AE - 8b de - mov ebx,esi009CA0B0 - 2b d8 - sub ebx,eax009CA0B2 - 83 eb 01 - sub ebx,01009CA0B5 - 0f af 5d 0c - imul ebx,[ebp+0c]009CA0B9 - 53 - push ebx009CA0BA - 8b 5d 0c - mov ebx,[ebp+0c]009CA0BD - 0f af cb - imul ecx,ebx009CA0C0 - 0f af c3 - imul eax,ebx009CA0C3 - 03 ca - add ecx,edx009CA0C5 - 51 - push ecx009CA0C6 - 03 c2 - add eax,edx009CA0C8 - 50 - push eax009CA0C9 - e8 12 ea 24 00 - call 00c18ae0009CA0CE - 83 c4 0c - add esp,0c009CA0D1 - 5b - pop ebx009CA0D2 - 83 c6 ff - add esi,ff009CA0D5 - c1 e6 10 - shl esi,10009CA0D8 - 33 77 04 - xor esi,[edi+04]009CA0DB - 81 e6 00 00 ff 3f - and esi,3fff0000009CA0E1 - 31 77 04 - xor [edi+04],esi009CA0E4 - 5f - pop edi009CA0E5 - 5e - pop esi009CA0E6 - 5d - pop ebp009CA0E7 - c2 08 00 - ret 0008009CA0EA - cc - int 3009CA0EB - cc - int 3009CA0EC - cc - int 3009CA0ED - cc - int 3009CA0EE - cc - int 3009CA0EF - cc - int 3009CA0F0 - 55 - push ebp009CA0F1 - 8b ec - mov ebp,esp009CA0F3 - 8b 45 08 - mov eax,[ebp+08]009CA0F6 - 56 - push esi009CA0F7 - 8b f1 - mov esi,ecx009CA0F9 - 57 - push edi009CA0FA - 8b 7e 04 - mov edi,[esi+04]009CA0FD - 8d 48 01 - lea ecx,[eax+01]009CA100 - 3b cf - cmp ecx,edi[/cod] Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 марта, 2010 Поделиться Опубликовано 6 марта, 2010 У меня голова сонная, может у кого посветлее и кто-то сможет разобраться. Вот вариант на C переданой функции, которую Акама привёл на асме.Сама функция[cod]int __fastcall sub_9CA090(int a1, int a2, int a3, int a4, int a5){ int result; // eax@1 int v4; // edi@1 int v5; // esi@1 result = a4; v4 = a3; v5 = *(_WORD *)(a3 + 6) & 0x3FFF;/*"если у меня было 7 ножей, а я исправил на 10, то игра всё равно думает что ножей 7, а если восьмой пытаешься кинуть, то игре краш" (Akama ©)Возможно здесь идёт проверка и будет закрытие игры внутри vС18AE0*/ if ( a4 + 1 < (unsigned int)v5 ) result = vС18AE0(*(_DWORD *)a3 + a5 * a4, *(_DWORD *)a3 + a5 * (a4 + 1), a5 * (v5 - a4 - 1)); *(_DWORD *)(v4 + 4) ^= (*(_DWORD *)(v4 + 4) ^ ((v5 - 1) << 16)) & 0x3FFF0000; return result;}[/cod]Она же на асме[cod]009CA090 - 55 - push ebp009CA091 - 8b ec - mov ebp,esp009CA093 - 8b 45 08 - mov eax,[ebp+08]009CA096 - 56 - push esi009CA097 - 57 - push edi009CA098 - 8b f9 - mov edi,ecx009CA09A - 0f b7 77 06 - movzx esi,word ptr [edi+06]009CA09E - 81 e6 ff 3f 00 00 - and esi,00003fff009CA0A4 - 8d 48 01 - lea ecx,[eax+01]009CA0A7 - 3b ce - cmp ecx,esi009CA0A9 - 73 27 - jae 009ca0d2009CA0AB - 53 - push ebx009CA0AC - 8b 17 - mov edx,[edi]009CA0AE - 8b de - mov ebx,esi009CA0B0 - 2b d8 - sub ebx,eax009CA0B2 - 83 eb 01 - sub ebx,01009CA0B5 - 0f af 5d 0c - imul ebx,[ebp+0c]009CA0B9 - 53 - push ebx009CA0BA - 8b 5d 0c - mov ebx,[ebp+0c]009CA0BD - 0f af cb - imul ecx,ebx009CA0C0 - 0f af c3 - imul eax,ebx009CA0C3 - 03 ca - add ecx,edx009CA0C5 - 51 - push ecx009CA0C6 - 03 c2 - add eax,edx009CA0C8 - 50 - push eax009CA0C9 - e8 12 ea 24 00 - call 00c18ae0009CA0CE - 83 c4 0c - add esp,0c009CA0D1 - 5b - pop ebx009CA0D2 - 83 c6 ff - add esi,ff009CA0D5 - c1 e6 10 - shl esi,10009CA0D8 - 33 77 04 - xor esi,[edi+04]009CA0DB - 81 e6 00 00 ff 3f - and esi,3fff0000009CA0E1 - 31 77 04 - xor [edi+04],esi << здесь у Акама был брякEAX=6FF30060EBX=6FF30064ECX=00000000EDX=00000000ESI=00030000EDI=70D50FA8EBP=04D5FCD8ESP=04D5FCD0EIP=009C93C4009CA0E4 - 5f - pop edi009CA0E5 - 5e - pop esi009CA0E6 - 5d - pop ebp009CA0E7 - c2 08 00 - ret 0008[/cod]Акама если не лень, приведи ещё инструкции с адреса "00c18ae0", он может быть другим. Можешь сориентироваться по строчке своего кода.009CA0C9 - e8 12 ea 24 00 - call 00c18ae0Например, тут нужно прыгнуть на адрес 00c18ae0 и привести от него все инструкции до конца функции. Надеюсь ты понял как визуально определить функцию по тому как я её вытащил из твоего примера.------------------------------------Если попытаться всё упростить, добавив лишнюю переменную TT = ?; // не известно чему равноM = ((B ^ C) & 0x3FFF0000);A = T ^ MA = 0x30000 (зашифрованное кол-во кинжалов)Пытаемся развернуть:T = A ^ M = A ^ ( ((B ^ C) & 0x3FFF0000) ) // отсюда можно узнать B зная C и T, или C зная B и T.B = A ^ T = A ^ "?"Причём знак вопроса можно углядеть из регистров в отладке.Короче мне надо знать чему равен знак вопроса и чему равны B и C, что из них константа (сейчас я этого не могу увидеть). В общем я без отладчика как без рук. Надо качать игру а мне сейчас не до этого.Кинжалы там скорее не объекты, поэтому закрытие игры происходит только при обстоятельствах, которые уже были приведены. Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 6 марта, 2010 Автор Поделиться Опубликовано 6 марта, 2010 Я кретин ))))Вместо того чтобы поставить на доступ, я поставил на запись бряк, а на доступ дохрена полезного выскочило. В общем кинжалы я и без ксора сделал. Извени что напряг Осталось здоровье ломануть и узнаваимость... Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 6 марта, 2010 Автор Поделиться Опубликовано 6 марта, 2010 Хотя не, я не критин, те функции что-то не к месту оказались...Буду пытаться заново.Ща выложу данные регистров той функции Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 6 марта, 2010 Автор Поделиться Опубликовано 6 марта, 2010 00C18AE0 - 55 - push ebpВот то что ты просил... Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 6 марта, 2010 Поделиться Опубликовано 6 марта, 2010 00C18AE0 - 55 - push ebpВот то что ты просил...Хорошая шутка я пока в Olly не вникал, но не может функция одним пушем ограничиться))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 6 марта, 2010 Автор Поделиться Опубликовано 6 марта, 2010 Умного не строй из себя.Меня попросили, я предоставил... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 марта, 2010 Поделиться Опубликовано 6 марта, 2010 Так, друзья, не ссоримся. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 марта, 2010 Поделиться Опубликовано 6 марта, 2010 00C18AE0 - 55 - push ebpВот то что ты просил...Вряд ли, функция состоит из одной инструкции, даже ret-а нет. Я заметил, что тебе не хватает знаний для самостоятельного анализирования. Вот статьи с примерами как работать с OllyDbg. При обмане игр эти знания всегда будут кстати. Кваз уже прочитал некоторые (наверно), что и всем советую. Мне терпения прочитать хватило только 17 , а остальные - быстро пролистать (надо заставить себя и прочитать всё-таки все, когда будет время). Именно по ним я научился ставить брейкпоинты на сообщения. Например, на сообщения клика мышки по кнопке применения заклинаний, что позволило мне заострить внимание на нужной ветки кода в Дисайплс 3 и помогло мне сделать чит на запрет отмены заклинаний. Также хороший приём что-то узнать - это в OllyDbg по ветке кода делать условные прыжки безусловными или наоборот - нопить их. Так я сделал относительную невидимость в ManHunt 2, но с ней всё-таки так и не смог разобраться до конца - главному герою нужно отойти пешком сторону, чтобы враги его потеряли (Лив, уже опробовал ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 8 марта, 2010 Автор Поделиться Опубликовано 8 марта, 2010 В общем странно получилось. Как только я ломанул деньги, то всё остальное стало 99, с том числе и ножи оО.Денег то много, но как-то странно...Осталось жизни ломануть и всё.Подскажите плз каким типом данных может быть здоровье? Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 8 марта, 2010 Поделиться Опубликовано 8 марта, 2010 Каким угодно.. там как здоровье отображается - кровь на экране поди и всё?В других темах уже писали варианты. В игре Operation flashpoint и гонках Flatout 2 (в гонках правда полоска была) это был тип float от 0.0 до 1.0 (1 = смерть). В других играх было целое число Ссылка на комментарий Поделиться на другие сайты Поделиться
Akama Опубликовано 8 марта, 2010 Автор Поделиться Опубликовано 8 марта, 2010 Не, там квадратики. Чем лучше броня, тем больше квадратиков. Причём квадратики уменьшаются в размерах при ударе. То есть наверно надо засеч на сколько один квадратик прочнее, а потом помножить на общее число квадратов.Если найду то скрин предоставлю... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения