aliast Опубликовано 1 января, 2011 Поделиться Опубликовано 1 января, 2011 Игра необычна тем, что все числовые значения (здоровье, энергия, характеристики) хранятся как текст Как же искать указатели на такие переменные? Ведь длина текста изменчива, значит кроме указателя на адрес надо ещё искать длину строки. Видимо CE тут не поможет, только в отладке копаться? Может кто уже изучал эту игру? Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 6 января, 2011 Поделиться Опубликовано 6 января, 2011 В ArtMoney попробуй сделать так:Нажимаем "Искать":Параметры поиска "Точное значение".Тип: "Текст".Возможно, тебе поможет это. Ну и это тоже попробуй: Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 6 января, 2011 Автор Поделиться Опубликовано 6 января, 2011 Да значения то Artmoney находит, но не указатели, и даже Автоизменение адресов помогает через раз, видимо длина строк меняется. А вообще применительно к этой игре проще скриптовый язык изучить и писать читы на нём - в папке PROGRAMS лежат текстовые файлы-скрипты, с помощью них можно сделать всё что угодно, если разобраться. Я уже сделал бессмертие, боеприпасы, энергию, убийство с одного удара, быструю перезарядку орудий кораблей, супер ветер (чтобы плавать быстро). Что пока не получилось - починка парусов. Кому интересно, могу выложить чит-файлы. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 января, 2011 Поделиться Опубликовано 6 января, 2011 Возможно игра берёт "куски текстов-параметров", парсит текст и изменяет параметры как требуется, затем читает параметры которые следует вывести на экран.Ставишь бряк на запись на байт текста, когда прервётся посмотри каким образом текст менялся. Если встретишь массив символов найди на него указатели чрезе отладку и там вверх по коду пройдёшься в отладке и если сюрпризов не будет то увидишь что-то типа привидения типов из текста в числовой параметр и обратно и там уже разберёшься как подменить нужный тебе параметр."Код игры всегда "знает" как к какому параметру обратиться если это обращение было видно в игровом интерфейсе. 100% выход - копаться в отладке" Ссылка на комментарий Поделиться на другие сайты Поделиться
M4K Опубликовано 1 марта, 2011 Поделиться Опубликовано 1 марта, 2011 //aliast how now? Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 2 марта, 2011 Автор Поделиться Опубликовано 2 марта, 2011 Решил ограничиться взломом игры с помощью встроенных в неё с-скриптов (почти что lua). Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 31 марта, 2011 Автор Поделиться Опубликовано 31 марта, 2011 Вот накидал скрипт для беесмертия ГГ (версия игры 1.2)[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,1024) //2kb should be enoughlabel(returnhere)label(originalcode)label(exit)newmem:push edxsub edx,60cmp [edx],79616C70 ///этот фильтр по строке "player" ещё надо проверить, но пока работаетpop edxjne originalcodemov [edx],00393939 //записали в адрес здоровья строку "999" и символ окончания строкиjmp "ENGINE.exe"+56F1 //выход из цикла обработки строкиoriginalcode:mov [edx],aladd ecx,01exit:jmp returnhere"ENGINE.exe"+56E5:jmp newmemreturnhere:[DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"ENGINE.exe"+56E5:mov [edx],aladd ecx,01//Alt: db 88 02 83 C1 01Теперь проблема в том, что все строки обрабатываются парочкой инструкций, а значит надо весь взлом делать в одном скрипте с флагами, как это делает Recifense. Буду разбираться... 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 31 марта, 2011 Поделиться Опубликовано 31 марта, 2011 Это что-то новенькое +1.Ты можешь ещё попробовать поискать код который часто работает с указателем на главного героя считывая его. Например игровой интерфейс может "постоянно обращаться" к текстовым данным именно твоего героя. Перед этим обращением теоритически неплохо было бы сделать инъекцию изменения этих данных. Фильтров по идее не понадобится. Я понимаю что "писать-то советы легко", на деле это может оказаться сложнее. Так что возможно твой вариант разумнее по трудозатратам. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Wanli Опубликовано 10 мая, 2011 Поделиться Опубликовано 10 мая, 2011 Нет идей как можна открыть скрипты в версии 1.3.2 http://www.blackmark.bz/forums/index.php?showtopic=2092 Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 11 мая, 2011 Автор Поделиться Опубликовано 11 мая, 2011 А что, в этой версии убрали папку Program (C:\games\корсары\Program) со скриптами? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Wanli Опубликовано 13 мая, 2011 Поделиться Опубликовано 13 мая, 2011 А что, в этой версии убрали папку Program (C:\games\корсары\Program) со скриптами?Да вообще она во всех версиях закрыта только NoDVD от версии 1.2 открывает Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 13 декабря, 2012 Автор Поделиться Опубликовано 13 декабря, 2012 Итак, начинаем ломать новую часть Корсаров Каждому своё v 1.0.2.Ломать игру CE по прежнему считаю слишком сложным путём. Имеем параметр "run=seadogs.c" в engine.ini, но к сожалению самого файла seadogs.c в папке с игрой не наблюдается. Попытка подсунуть игре этот и другие файлы из версии ГПК ни к чему не приводят - вылет с ошибкой о неправильной передаче аргументов функциям, другие функции оказались и вовсе не обЪявлены - видимо что-то там в движке игры изменили... Попытался как-то исправить ошибку, но там дальше вообще непонятные ошибки идут, что-то про скобку ")" - сами логи подробностями не блещут, даже не показывает имя файла в котором возникает ошибка...В общем надо как-то заставить игру запускать посторонний lua-скрипт. Все скрипты запускаются из seadogs.c (которого у нас нет). Как бы подсунуть игре оигинальный файл и заставить загружать свой скрипт пока не придумал... также непонятно откуда игра берёт файл seadogs.c, видимо из какой-то DLL-ки (вот бы его найти и выдрать как). Ломаю голову дальше...Также любопытной мне кажется другой параметр INI-файла: "codefiles = 0", который создаёт некий дамп скриптовых файлов. Как дамп превратить в текстовый файл скрипта тоже непонятно - в самом дампе сохраняются только строки, всё остальное превращается в непонятный байт-код.Сам байт-код оказался элементарный:WORD version; //3A 1A - скорее всего версия скриптаDWORD reserved; //00 00DWORD filename_length; //длина имени файлаDWORD separator_index; //3B 04 NN 00, где NN номер строки, начиная с 00 и заканчивая последней строкой + ещё одна с четырьмя нулями после номера строкиWORD opcode; // опкод выполняемой команды, либо 00 00 в случае пустой строки (пропуск строки)};struct b_file {Итак, сначала игра считывает 2 байта version, и если они окажутся меньше 3A 1A (например, 3A 14), выводится ошибка "Wrong script version".Далее идут 4 нулевых байта.Дальше указывается длина текстовой строки с именем файла скрипта. В длину строки также входит и полный путь к файлу (controls\init_pc.c итого длина строки = 18), ну и следом сама строка с именем файла скрипта.Далее начинается собственно сам скрипт в байт-коде. Формат байт-кода такой:3B 04 (это разделитель строк), дальше идут 2 байта с номером строки. Причём все скрипты начинаются со строки 00 00 и заканчиваются строкой на одну больше чем есть в скрипте (видимо последняя нулевая строка - знак окончания скрипта).После номера строки идут 2 байта - опкод выполняемой команды, ну и далее всякие операнды до тех пор, пока снова не встретится разделитель 3B 04 с номером следующей строки. Если строка пустая (программист просто сделал отступ в виде пустой строки опкодом будут байты 00 00.Вот собственно и весь формат b-файлов. Осталось составить таблицу опкодов и выполняемых ими команд.Вот собственно и весь формат b-файлов. Осталось составить таблицу опкодов и выполняемых ими команд. А это надолго... надо погуглить, может и есть какие редакторы байт-кода для Корсаров... но вроде бы нету.. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 18 декабря, 2012 Автор Поделиться Опубликовано 18 декабря, 2012 Решил выложить свои наработки по расшифровке байт-кода скриптов, может кому пригодится) У меня затык на индексации функций, не пойму по какому принципу они индексируются...Скрипт seadogs.c восстановлен до строки 833, дальше пока затык...Вот бы дизассемблер кто накатал...А тем временем файл seadogs.c полностью восстановлен, но игра с ним не запускается, выдаёт странные ошибки в другом файле, который я даже не трогал.. бред... пытаюсь найти проблему. Восстановленные файлы прикрепляю.b-code.rarPROGRAM_CSS.rar Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 21 декабря, 2012 Поделиться Опубликовано 21 декабря, 2012 Люблю такие штуки, можно в личку ссылку на игру? Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 21 декабря, 2012 Автор Поделиться Опубликовано 21 декабря, 2012 В общем мне по прежнему непонятно какого чёрта оно ругается на размер массива object Nations[MAX_NATIONS]; при определённом выше #define MAX_NATIONS 5. Обе строки находятся в файле globals.c, который ДОЛЖЕН браться из внутренних ресурсов игры при его отсутствии в папке PROGRAM, но ведь ругается.. в файле seadogs.c к массиву нет прямого обращения, есть только вызов функции, которая уже обращается к этому массиву. Функция NationsInit() также находится за пределами seadogs.c - мистика какая-то, либо хитрая защита от распаковки скриптов... С ошибкой столкнулся другой чел, отписал ему в личку, может он нашёл решение за 2 года...Но есть и хорошие новости - исходники скриптов в текстовом виде распаковываются игрой и на какое-то недолгое время оседают в памяти по адресу [[0046B044]+0] (применительно к версии 1.0.2) - они оттуда очень быстро удаляются уже после появления на экране логотипа Акеллы, так что извлекать их надо в процессе загрузки игры. Чем я сегодня и попробую заняться Upd: природа ошибки - компилятор не даёт указывать размерность массива через переменную, хоть ты её перез #define обЪявляй, хоть даже черезint DIMENSION=10;int mas[DIMENSION];Всё равно вылезет ошибка размера. Почему так происходит непонятно... Фиксить только жёстко заданной размерностью int mas[10]; Подскажите как из памяти текст скопировать? CE или Olly копирует вместе с байтами - HEX-представлением буковок.. а как без них бы? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость nub Опубликовано 4 января, 2013 Поделиться Опубликовано 4 января, 2013 Люблю такие штуки, можно в личку ссылку на игру?[CENSORED]без бессмертия в неё играть невозможно. Валят с двух ударов И вроде как сейвы портит за читерство. Прибавил всего 1000 денег и сейв запорол (обнаружил только после перезапуска игры).//KvazimadoЯ прошу прощения, но в каком месте было не понятно высказывание "Можно в личку"?Правила, прочтите, молодой человек.Замечание. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 28 января, 2013 Автор Поделиться Опубликовано 28 января, 2013 Для интересующихся инфа по прогрессу взлома игры. Мне помогли вытащить скрипты из игры (не все, а только те, что загружаются при запуске игры). В результате проблема с размерностью массивов выше отпала сама собой (причину ошибки так и не понял). Однако появился неприятный сюрприз - отладочная консоль никак не вызывается. Вроде бы всё на месте - интерфейс отладочного окна есть, файл скрипта Interface\debuger.c распакован, но насколько я понимаю не срабатывает ивент BOAL_Control, тот самый внутриигровой ивент, вызывающий консоль. т.е. этот ивент скорее всего обрабатывается ENGINE.EXE или одной из dll-ок и не даёт себя перехватить посредством скриптов надо копаться в дизассемблере, а это сложно)) возможно я не там копаю... Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 2 февраля, 2013 Автор Поделиться Опубликовано 2 февраля, 2013 (изменено) Продолжаю изучать вызовы функций игрового движка. Пока только научился выводить надпись на экране. Функцию Log_Info(string, false) нашёл с помощью Function Hacker'а. Читом это назвать сложно, но вдруг кому интересно вот скрипт:[ENABLE]alloc(newmem,1024)createthread(newmem)newmem:push ebpmov ebp,esppush edxpush ecxmov edx,450668 //string_offsetmov ecx,[battle_interface.dll+31028] //Game Console pointer ?push 00 //2-nd argument (0=исчезающая надпись, 1=надпись не исчезает)push edx //1-st argument (string_offset)call battle_interface.dll+1ACB0 //Log_Info(string, bool)pop edxpop ecxpop ecxpop edxmov esp,ebppop ebpret[DISABLE]dealloc(newmem)Других функций пока не нашёл.. очень жаль Upd: буквально 5 минут назад с удивлением обнаружил, что читерская дебаг-консоль прекрасно себе появляется, если начать новую игру. Видимо инициализируется где-то при старте сволочь такая. Убил кучу времени на эту хрень, а оно оказывается давно работало))) Собираюсь создать сет читов и забиндить их на кнопки читерской консоли, потом уже выложу. кому не терпится почитерить могу поделиться файлами скриптов для включения консоли. Напомню что речь идёт об игре "Корсары: Каждому своё" ver. 1.0.4 (25.12.12) Изменено 2 февраля, 2013 пользователем aliast Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Fazer63 Опубликовано 4 февраля, 2013 Поделиться Опубликовано 4 февраля, 2013 Для интересующихся инфа по прогрессу взлома игры. Мне помогли вытащить скрипты из игры (не все, а только те, что загружаются при запуске игры). aliast, не поделитесь вытащенными скриптами? Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 9 февраля, 2013 Автор Поделиться Опубликовано 9 февраля, 2013 Подскажите как из памяти текст скопировать? CE или Olly копирует вместе с байтами - HEX-представлением буковок.. а как без них бы?IDA Pro прекрасно сохраняет всё как надо.aliast, не поделитесь вытащенными скриптами?Ссылка на читы http://yadi.sk/d/gUAuDz_S2K33UСсылка на ориг. файлы seadogs.c, ships\ships.c и ships_init.c (кто хочет добавлять в игру новые корабли) http://yadi.sk/d/-dsKvVTa2UnWNСсылка на все вытащеные скрипты в одном файле (делить на отдельные файлы было лениво) http://yadi.sk/d/AzjWxhNn2UnynВсе файлы для игры версии ver. 1.0.4 (25.12.12) - в пропатченных играх эти скрипты могли измениться! Использование скриптов от другой версии может привести к неработоспособности исправлений, внесённых новым патчем. Ссылка на комментарий Поделиться на другие сайты Поделиться
DEADмороZ Опубликовано 11 февраля, 2013 Поделиться Опубликовано 11 февраля, 2013 а как тут читерить ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 11 февраля, 2013 Поделиться Опубликовано 11 февраля, 2013 На форуме есть поиск.Или ты хочешь накрутить счетчик репы и сообщений?)))) Ссылка на комментарий Поделиться на другие сайты Поделиться
DEADмороZ Опубликовано 11 февраля, 2013 Поделиться Опубликовано 11 февраля, 2013 На форуме есть поиск.Или ты хочешь накрутить счетчик репы и сообщений?))))а при чём тут поиск вообще ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 11 февраля, 2013 Поделиться Опубликовано 11 февраля, 2013 Хм, хотя бы при том, что поиск дал бы множество ответов, и тебе бы не пришлось лишний раз тратить свое время)Кроме того, поиск дает ссылку на правила форума, в котором говорится, что каждый пост должен быть информативен. Но так как твой вопрос слабо вяжется с термином информативности, я предложил тебе самый простой способ - поискать ответ на форуме.В любом случае, советую - попроще объясняй, что тебе надо. Что именно читерить ты собрался, что хакать, как играть и тп. И будь уверен, люди к тебе потянутся) Ссылка на комментарий Поделиться на другие сайты Поделиться
DEADмороZ Опубликовано 11 февраля, 2013 Поделиться Опубликовано 11 февраля, 2013 Хм, хотя бы при том, что поиск дал бы множество ответов, и тебе бы не пришлось лишний раз тратить свое время)Кроме того, поиск дает ссылку на правила форума, в котором говорится, что каждый пост должен быть информативен. Но так как твой вопрос слабо вяжется с термином информативности, я предложил тебе самый простой способ - поискать ответ на форуме.В любом случае, советую - попроще объясняй, что тебе надо. Что именно читерить ты собрался, что хакать, как играть и тп. И будь уверен, люди к тебе потянутся)ааа. спасибо =)Продолжаю изучать вызовы функций игрового движка. Пока только научился выводить надпись на экране. Функцию Log_Info(string, false) нашёл с помощью Function Hacker'а. Читом это назвать сложно, но вдруг кому интересно вот скрипт:[ENABLE]alloc(newmem,1024)createthread(newmem)newmem:push ebpmov ebp,esppush edxpush ecxmov edx,450668 //string_offsetmov ecx,[battle_interface.dll+31028] //Game Console pointer ?push 00 //2-nd argument (0=исчезающая надпись, 1=надпись не исчезает)push edx //1-st argument (string_offset)call battle_interface.dll+1ACB0 //Log_Info(string, bool)pop edxpop ecxpop ecxpop edxmov esp,ebppop ebpret[DISABLE]dealloc(newmem)Других функций пока не нашёл.. очень жаль Upd: буквально 5 минут назад с удивлением обнаружил, что читерская дебаг-консоль прекрасно себе появляется, если начать новую игру. Видимо инициализируется где-то при старте сволочь такая. Убил кучу времени на эту хрень, а оно оказывается давно работало))) Собираюсь создать сет читов и забиндить их на кнопки читерской консоли, потом уже выложу. кому не терпится почитерить могу поделиться файлами скриптов для включения консоли. Напомню что речь идёт об игре "Корсары: Каждому своё" ver. 1.0.4 (25.12.12)куда кидать скрипты ? ну или как включить консоль ККС 1.0.4 . а то что то не доходит Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения