eXeL@B —› Основной форум —› StarForce 5.7 MMOG |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 24 октября 2012 20:14 · Поправил: Once · Личное сообщение · #1 Есть одна игра - Мне нужно научиться обходить защиту или, что ещё лучше, научиться её снимать. Снятие защиты мне необходимо для поиска багов в игре. У меня есть старая, не накрытая Старом версия. Раньше сам exe'шник весил мало и подтягивал все функции из dll, сейчас всё в одном exe. Сама игра весит 1.7 GB, но я собрал необходимые файлы в архив: Новая версия (20MB) - Старая версия (12MB) - То что нашел сам: Файл PW_Game.exe защищён StarForce 5.70.37.002 MMOG Защитный модуль имеет название sakijapi.dll. В старой версии он имеется, но, похоже, не используется. Упакован UPX, распаковывается легко если надо. Если запустить PW_Game.exe - появится MessageBox, который говорит, что нужно запустить лаунчер. Это нормально, т.к. PW_Game.exe запускается с набором параментров о сессии, логине, разрешении, и т.д. Скрыть Olly помогает плагин фантом. OEP - 00A094DD В старой версии EP - 00401443 Сдампив на этом OEP без восстановления импорта, можно запустить дамп, но возникает исключение - деление на 0 в модуле защиты по адресу 015FDF57. Не знаю, нужно ли там восстанавливать импорт? По адресу 00A092AC происходит вызов Старовской функции, в которой вызывается _initterm_e (в старой версии exe'шника вызов этой функции виден по адресу 00401212), которая и вызывает функцию, в которой происходит исключение. Не знаю куда дальше двигаться.. Если занопить _initterm_e и следом за ним _initterm, то исключение будет в ntdll Эти initterm'ы, как я понимаю, вызывают конструкторы классов, используемых в приложении, а может и нет =) |
|
Создано: 24 октября 2012 20:23 · Поправил: Flasher-11 · Личное сообщение · #2 Once, думаю Вам нужно почитать, что она вообще представляет из себя SF MMOG Once пишет: Мне нужно научиться обходить защиту или, что ещё лучше, научиться её снимать. Прям так сразу и SF ломать? |
|
Создано: 24 октября 2012 20:38 · Поправил: Veliant · Личное сообщение · #3 |
|
Создано: 24 октября 2012 20:49 · Поправил: Once · Личное сообщение · #4 Veliant пишет: Скиньте еще PWLauncher что-ли. Боюсь не всё так просто =) Лаунчер запускает castle.exe (замок) из которого запускается бой (PW_Game.exe) И они там друг с другом связаны, каждый exe'шник запускается с особыми параметрами. UPD Попробуйте запустить PW_Game.exe с такими параметрами - parentWidth 1280 parentHeight 800 parentSessionLogin 217.174.109.140:35001/559376540634029/00000000000000000000000000000000 serverName http://ru.pwcastle.nivalnetwork.com:88/four uid 1111111111 serverKey 222222222 serverSecret 33333333333 Бой не начнется, но MessageBox'а не будет Once пишет: фи! архитектура ВМ такая же как и в 4.7 версиях А можете объяснить, как вы так быстро поняли, что там есть ВМ, да ещё точную версию знаете? Мне это жутко интересно )) |
|
Создано: 24 октября 2012 21:05 · Поправил: Veliant · Личное сообщение · #5 Once пишет: А можете объяснить, как вы так быстро поняли, что там есть ВМ, да ещё точную версию знаете? Мне это жутко интересно )) То что она есть, не значит что она может вызываться из игры. Если так интересно поковырять ВМ - смотрите функцию PSM_0 из sakijapi. Она вызывается с самого EntryPoint игры. Там сначала идет инициализация контекста, потом как в старых версиях идет чтение лент пикода. Отличие разве что в переходе между обработчиками по jmp edx вместо jmp eax в предыдущих версиях. Это на первый взгляд. Once пишет: Бой не начнется, но MessageBox'а не будет Подтвержаю. MessageBox'а нет. |
|
Создано: 24 октября 2012 21:19 · Поправил: Once · Личное сообщение · #6 |
|
Создано: 24 октября 2012 21:26 · Поправил: ARCHANGEL · Личное сообщение · #7 Да, вот из-за таких топиков я сейчас подниму задницу и пойду писать статью про виртуальные машины. Once, не обижайтесь, не вы тут первый старфорс ломаете... Думаю, не вы последний. Уже аж рыдать хочется. Продолжение Veliant Нет, статья про виртуальные машины в общем, на старфорс рано замахиваться. А про традицию - да, заканчивается она, в общем, тоже стандартно: " А потом мы с друзьями идём в баню..." Ну, т.е. в баню идут только те друзья, которые сами ничего не сделали, а только накидали ссылок на софт и ждут, что им тут всё отреверсят. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 24 октября 2012 21:29 · Поправил: Veliant · Личное сообщение · #8 ARCHANGEL пишет: Да, вот из-за таких топиков я сейчас подниму задницу и пойду писать статью про виртуальные машины Про декомпиляцию или ее дамп?? Кажется в последней теме от свиновода, там изложили все что только можно. Но у нас кажется традиция раз в пол года поднимать тему про SF и оффтопить на десяток страниц p.S. В аттаче адреса обработчиков команд в VM и трейслог для них. На некоторых он обрывается до выхода из него по jmp reg (увы, автоматические средства не совершенны), но тип команды установить можно. p.p.S Пример обработчика команды с пояснением. EDI указывает на контекст VM. В самом начале идет чтение лент пикода. Указатели на них находятся в первых четырех 64битных регистрах. Ленты между собой xor'ятся и заносятся в буфер для дальнейшей обработки Code:
Далее идет смещение лент, на длину команды Code:
Парсинг флагов. Некоторые из них влияют на флаги ВМ, некоторые на сам опкод. Code:
Начинается парсинг параметров команды. Здесь например читается индекс регистра общего назначения в контексте ВМ. Как не трудно догадаться их всего 32 по 64 бит Code:
Здесь читается смещение. Вообще есть разные способы доступа к памяти: [адрес], [IB+адрес], [IB+адрес&3FFFFFFF], [CTX+адрес&FFFF]. Code:
В большинстве команд имеются пара бит отвечающих за размер операндов (1,2,4 или 8 байт) Code:
А теперь и само действие команды Code:
Завершается почти любой обработчик парсингом опкода следующей команды. Как видим команд максимум 128. Code:
59a7_24.10.2012_EXELAB.rU.tgz - sakijapi_trace.txt | Сообщение посчитали полезным: ClockMan, Once |
|
Создано: 27 октября 2012 16:20 · Поправил: Once · Личное сообщение · #9 Veliant, спасибо большое за такие подробности! А обязательно ли разбирать виртуальную машину? Мне, по сути, нужно лишь сделать так, чтобы я свободно мог заниматься отладкой приложения. Обязательно ли при этом отвязывать защиту в виде dll? Ещё вопрос: StarForce изменяет некоторые вызовы функций, вызывая их через переходники. Зачем он это делает, и обязательно ли убирать эти переходники? З.Ы. Если не трудно, дайте ссылок по распаковке стара. Желательно чтобы там было побольше теории, а то те статьи, что я нашел, говорят лишь: - "тыкните туда, затем сюда" UPD: восстанавливать переходники нужно, потому что в оригинальном процессе и в сдампленном они иногда ведут в разные места. А вот почему так, понять пока не могу. Вот, например, первый же вызов переходника по адресу 00A092AC в оригинале ведет на API-функцию _initterm_e, а в дампе на 00A0982D, в которой вызывается _except_handler4_common |
|
Создано: 28 октября 2012 16:58 · Личное сообщение · #10 Стар вызывает другую функцию, если сработал антидамп или нарушена целостность вм. Если запатчить антидампы можно и не убивать переходники. Но импорт в любом случае лучше восстанавливать. | Сообщение посчитали полезным: Once |
|
Создано: 28 октября 2012 18:04 · Личное сообщение · #11 Не получается перехоники восстановить... Пытаюсь и вручную и скриптом в аттаче. Буквально на третьем сверху какая-нить гадость. (terminate или crash или выводит не на ту функцию) Почему так получается, если я даже не правлю ниодного байта? (в скрипте специально закомментчивал запись переходников) Или стар как-то всё-таки отлавливает присутствие отладчика, несмотря на PhantOm'а? a809_28.10.2012_EXELAB.rU.tgz - scrypt.txt |
|
Создано: 06 ноября 2012 00:33 · Поправил: Модератор · Личное сообщение · #12 Once Старфорс 5.хх ломается элементарно,с помощью приклеивания к дампу основного exe секций из PROTECT.dll А именно, sforce3 (самая здоровая,обычно 7-10 МБ) + диапазон памяти Private RWE (как правильно,от 10000000 и выше). Импорт даже не испорчен,это самая легкая версия Стара, ломается за 10 минут Имейте ввиду,что снимать дамп нужно целиком всё сразу ,иначе у вас поплывет адрессация вызовов ВМ. Т.е. к примеру, не будет работать дамп ,у которого разные блоки памяти сохранены на диск в разные разы запуска программы. Метод не ахти какой продвинутый,но по-крайней мере неоднократно проверен на работоспособность, причем на разных версиях старфорса |
|
Создано: 06 ноября 2012 07:26 · Личное сообщение · #13 |
|
Создано: 06 ноября 2012 21:06 · Поправил: Pchelovod · Личное сообщение · #14 Главное что будет работать. Сейчас у топикстартера как мне показалось,такая каша в голове,что он даже Basic версию не сможет правильно снять. Кому интересно,пишите,у меня есть мануалы в картинках как всё это сделать. Разумеется, такое УГ как Prime World я не исследовал и исследовать не собираюсь Могу предложить мануал по снятию StarForce 5.50 Pro с игры Буратилло |
|
Создано: 07 ноября 2012 15:48 · Личное сообщение · #15 |
|
Создано: 07 ноября 2012 16:06 · Личное сообщение · #16 |
|
Создано: 07 ноября 2012 16:23 · Личное сообщение · #17 |
|
Создано: 07 ноября 2012 16:42 · Личное сообщение · #18 |
|
Создано: 07 ноября 2012 17:02 · Поправил: ARCHANGEL · Личное сообщение · #19 Что-то там так много рассусоливал Свиновод, а можно всё уложить в пару предложений. Где-то (где - Свиновод не знает) внутри protect.dll идёт проверка диска, цель Свиновода - выкинуть этот код из окончательного дампа, что позволит отучить программу от диска. Поэтому он ищет ОЕР, восстанавливает импорт и к дампу прикручивает ВМ без разбора последней. ОЕР ищет GeTaOEP (как, Свиновод тоже не представляет), импорт восстанавливает импрек, дампит Pe Tools. ВМ определяется в лоб - если есть переходник, и это переходник не на эмулируемый импорт, то это ВМ. Дампится она вся, причём дампится набор, относящийся к текущему состоянию, а т.к. инициализация ВМ пропущена, то, при услоии, что это состояние не является допускающим, дамп на другой машине не заработает. Ресурсы, релоки - я не нашёл упоминания про эти страшные слова. В общем, этим действиям со старфорсом я могу научить своего пса. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 07 ноября 2012 18:12 · Личное сообщение · #20 ARCHANGEL пишет: В общем, этим действиям со старфорсом я могу научить своего пса. или свинку домашнюю | Сообщение посчитали полезным: DimitarSerg |
|
Создано: 07 ноября 2012 18:25 · Личное сообщение · #21 ARCHANGEL пишет: В общем, этим действиям со старфорсом я могу научить своего пса. Посмотрел тут один nodvd от skidrow - не далеко ушли. Ехе с приклеенной ВМ + dll в которой сначала через GetProcAddress в нужные места прописываются адреса API, потом копируется в вм проинициализированные заранее данные. В итоге ехе на 40+ метров | Сообщение посчитали полезным: DimitarSerg, TryAga1n |
|
Создано: 07 ноября 2012 19:38 · Личное сообщение · #22 |
|
Создано: 07 ноября 2012 19:56 · Личное сообщение · #23 tihiy_grom, ну а чего язвить-то? . У меня где-то валялись тулзы (для избранных) по старке. Нет ни особо внятного описания, как их использовать, только пример, как выглядит код, и где надо что поправить. Больше ничего. Меня порадовали материалы svinovod2012, пусть даже и видно, что защиту разбирает не самый опытный боец. ----- Ламер - не профессия :)) |
|
Создано: 07 ноября 2012 20:01 · Личное сообщение · #24 aspirin пишет: tihiy_grom, ну а чего язвить-то? Ну есть маленько, согласен ... Мне просто очень понравился кусок в статьях, где было написано что тулза не правильно нашла OEP И какбы не совсем понятно зачем браться за старфорс, если даже руками OEP не можешь найти и не представляешь как она должна выглядеть. |
|
Создано: 07 ноября 2012 22:01 · Поправил: Модератор · Личное сообщение · #25 Мануал пришлось временно забросить,поскольку меня вызывали на допрос в прокуратуру. Разумеется,не из-за взлома игр,но пришлось временно залечь на дно. Возможно мой ЖЖ перечитывают в отделе К, поэтому я бы с радостью поделился своими наработками когда буду уверен что слежка закончилась По поводу критики: 1. Размер дампа в конечном итоге будет не больше 10-15 МБ , так что поводов для паники нет. Даже если клеить всю выделенную память,какая только есть. 2. Привязка к CPUID нас не волнует,мы делаем файл для себя а не для сцены.Это 2 разные вещи. 3. Патч PROTECT.DLL будет разъяснен чуть позже,этому я посвящу отдельную главу. 4. Найти OEP можно и руками,поставив бряк на функцию GetStartupInfoA либо GetModuleHandleA в зависимости от версии VisualC++ . У меня есть таблица всех возможных ОЕР в формате .docx ,кому надо могу выложить. 5. Разработка dll для декриптования SFFS - пока в разработке. Может быть появится через полгода или год. 6. Мануал по распаковке dll, восстановлению релоков - ну тоже через полгода может будет.Пока я этим не занимался,у меня всего 1 игра где надо распаковывать библиотека со старом.А в остальных случаях релоки нам не нужны. Вот ещё рекомендую всем хорошую книгу по реверсингу: http://forcoder.ru/cpp/windows-via-cc-programmirovanie-na-yazyke-visual-c-1099 Там содержится подробная информация,которая очень пригодится вам для распаковки StarForce и не только. |
|
Создано: 08 ноября 2012 12:07 · Поправил: Veliant · Личное сообщение · #26 Данная техника годная, если нет желания ковырять ВМ, а хочется получить просто рабочую игрушку. Чего нехватает: 1) Как когда-то посоветовал olenevod, нужно перед отладкой внедрить в процесс свою dll, которая будет выступать в качестве менеджера памяти. Это позволит более экономно выделять память для ВМ, что потом скажется на размере ехе 2) После склейки ехе с ВМ нужно сделать один из следующих вариантов: a) Простой.Сделать свою dll, которая будет восстанавливать API и динамическую память для ВМ перед запуском. б) Чуть сложней. Приклеить динамическую память в конец ехе, поправив указатели, а также сделать ребилд импорта с необходимыми функциями. 3) CPUID. Так же два варианта решения a) Запатчить код в секции ВМ, который проверяет cpuid б) Вместо cpuid (0FA2) везде воткнуть опкод ud2(0F0B), а потом ловить exception и подставлять нужные данные. |
|
Создано: 08 ноября 2012 13:55 · Поправил: Модератор · Личное сообщение · #27 На версии 4.50 данный способ почему-то не работает. Дамп запускается,висит в памяти как процесс и грузить процессор на 100% ,но ничего не происходит. Какие-то дополнительные проверки видимо есть Мне так сходу тяжело dll написать,потому что я VisualC++ начал изучать 2 месяца назад,специального образования программиста у меня нет,всё чему меня научили это Турбо Паскаль Поэтому приходится и асм,и делфи,и си всё с нуля изучать. Постараюсь к Новому году выложить штук 6-7 мануалов с картинками,так что наберитесь терпения. Veliant пишет: Посмотрел тут один nodvd от skidrow - не далеко ушли. Ехе с приклеенной ВМ + dll в которой сначала через GetProcAddress в нужные места прописываются адреса API, потом копируется в вм проинициализированные заранее данные. В итоге ехе на 40+ метров А зачем разбирать и декомпилировать ВМ? Всё правильно они делают,есть простой способ - используй его. Если RELOADED больше нечем заняться,как сидеть дешифровать 10 мегабайт обфусцированного кода (это наверно полмиллиона инструкций), то среднестатистическому реверсеру эта задача не под силу. Once пишет: с версией 5.50 у меня получается справиться, в этой же, 5.70, что-то добавлено, что мешает мне сделать всё как в прошлых версиях. В каком смысле с 5.50 получается? Вы очевидно ломали Сталкера с basic версией, это единственная инструкция в картинках какая доступна в сети для общего обозрения. Там нет виртуальной машины |
|
Создано: 08 ноября 2012 22:29 · Личное сообщение · #28 Pchelovod Даже теряюсь, с чего начать. Ладно, начнём как-нибудь. А зачем разбирать и декомпилировать ВМ? Декомпиляция ВМ - основная работа, которая должна быть проделана, если вы хотите действительно отреверсить что-то в игре и написать чит или бота. Ведь вам нужно отреверсить протокол обмена инфой с сервером, узнать, как игра обращается с объектами игрового мира и научить бота выполнять некоторые действия за вас. А это невозможно, если вы не сможете исследовать игру в полной мере. Запустить её без диска при том, что алкоголь или Daemon Tools могут это сделать и без вас - умение не очень ценное само по себе. Если RELOADED больше нечем заняться,как сидеть дешифровать 10 мегабайт обфусцированного кода (это наверно полмиллиона инструкций), то среднестатистическому реверсеру эта задача не под силу. Что ж вы так реверсинг-то обижаете. В том-то и сила, чтоб понять, как это делается - как изучать ВМ и строить декомпиляторы от версии к версии. Дерзайте. Мне так сходу тяжело dll написать,потому что я VisualC++ начал изучать 2 месяца назад Так на турбо паскале пишите, не одна Microsoft Visual C++ умеет дллки собирать. Особенно в блоге мне понравилась инфа про то, как надо прятать труп - самая полезная запись там. Теперь в плане конструктива. Не совсем понял, что вы собираетесь патчить в protect.dll - по идее распакованная игра будет от неё полностью отвязана. Про то, что найти ОЕР можно и руками, это мы не сомневаемся, но поиск ОЕР должен успешно завершаться даже в случае, если нам изначально неизвестен компилятор, поэтому ваши методы не подойдут - нужно что-то более универсальное. Но ничего - лет через 5, может, и получится у вас анпак. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 08 ноября 2012 23:44 · Личное сообщение · #29 ARCHANGEL пишет: Особенно в блоге мне понравилась инфа про то, как надо прятать труп - самая полезная запись там. первоё что бросилось в глаза при заходе на блог - это Как спрятать труп! повеселило хоть я считаю если писать статьи о анпаке, нужно хотя бы самому уметь это делать панты конечно штука не очень плохая , но в реверсинге я считаю не умесна! |
|
Создано: 09 ноября 2012 02:33 · Личное сообщение · #30 ARCHANGEL пишет: Не совсем понял, что вы собираетесь патчить в protect.dll - по идее распакованная игра будет от неё полностью отвязана Насколько я помню,она в 90% случаев запакована UPX ,и чтобы загрузить жертву в отладчик с распакованной dll нужно пропатчить проверку контрольной суммы (Старфорс кричит что файл заражен вирусов и типа галактика в опасности) Потом разумеется,можно её удалить. ARCHANGEL пишет: поиск ОЕР должен успешно завершаться даже в случае, если нам изначально неизвестен компилятор, поэтому ваши методы не подойдут - нужно что-то более универсальное В чем проблема использовать GetTaOEP? Из всех способов что предлагает нам Рикардо Наварро у меня работал только бряк на первую API и то не всегда. |
. 1 . 2 . >> |
eXeL@B —› Основной форум —› StarForce 5.7 MMOG |