Сейчас на форуме: _MBK_ (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› помогите с выбором типа (метода) патча программы с securom |
Посл.ответ | Сообщение |
|
Создано: 21 октября 2010 00:31 · Поправил: kru · Личное сообщение · #1 в общем описываю ситуацию вступление есть игра с securom. состоит из основного эксе и загрузчика. для простоты загрузчик securom взят взломанный (кряк для игры). но с самой игры защита xlive не снята. (по сути основной эксешник оригинальный, с рабочим сертификатом, и с защитой.) но это все лирика. причина, она же "интерес" гадкие разрабы, скорее всего по наводке и при спонсорстве intel програмно (как оказалось) отрубили возможность запуска на одноядерных процессорах. на доисторических P4 HT - пожалуйста, а на одноядерных Атлонах 64 - фиг. ну в общем захотелось выяснить, а чегой то? и как с этим бороться исследование благо эксешник самой игры не упакован, на зашифрован, то исследование было достаточно простым с одной стороны, но с другой стороны - защиту с игры не сняли, и это несколько замедляло работу. в общем с горем пополам с помощью syser и иды я выяснил - блокировка запуска явная. во время старта игра детектит железки, с помощью cpuid определяет процессор, и если он одноядерный и не P4 HT - вылетает. доковырять до это факта было достаточно тяжело - точки останова на выполнение кода, установленные в момент загрузки игры, защита вырубала. но зато отлично работали точки останова на чтение в сегменте данных (текстовые строки). в общем удалось добраться до места, где проверяется число ядер, и обойти проверку (в пошаговом режиме, меняя значение регистров или значений в стеке), игра запустилась, но все равно падала. оказалась защита таки палит syser, так что после обхода проверки числа ядер, нужно быстро выгрузить syser - и игра работала как часы. не шустро, но все же. результаты процедура проверки "ядерности" процессора 1) программа опрашивает разные железки, в том числе и тип процессора через cpuid 2) сохраняет эти данные в памяти и сохраняет xml файл на диск 3) занимается приличное время другими делами по инициализации 4) доходит до блока проверки минимальных требований (кол-во памяти, количество ядер, функций, поддерживаемых видеокартой). читает данные из памяти, полученные в шаге 1 5) если процессор имеет 1 и меньше ядер - завершает работу проблемы создания патча как вы поняли, я уже знаю в каком месте и что патчить ("в лоб") но это невозможно из-за защиты 1)прямо в файле игры - из-за контрольной суммы. игра не запускается вообще. рядом с игрой ледит одноименный сертификат достаточно просто его удалить - и игра вылетит с оригинальным неизменнным exe 2)во время выполнения - по той ж причине. защита обнаруживает ранее или позже вмешательство, и игры вылетает. поэтому я вижу только методы путем изменения данных в стеке и рабочей памяти игры во время работы например установив hook на какой-нибудь api, используемый в промежутке между опросом железок и проверкой на число ядер и изменением данных в памяти для теста я даже попробовал проверить, запустив програмку adware box (хучащую messagebox и добавляющую свою инфу в сообщение всех программ) еще один способ - аналогично отладчику - хардварные точки останова на обращение к текстовым строкам в памяти. но это вообще темный лес для меня. пожелания к патчу хотелось бы, чтобы он работал не только со сломаным лоадером но и с оригинальной игрой. ибо патч не варезный, а софтовый. собственно просьба - помочь с идеями как сделать такой патч, направить на нужный материал и примеры или помочь сделать готовый патч. помогите пожалуйста. ![]() |
|
Создано: 21 октября 2010 11:11 · Личное сообщение · #2 |
|
Создано: 21 октября 2010 11:22 · Личное сообщение · #3 я писал - желательно обойтись без слома. чтобы патч работал и на неварезной версии. константы там нет или не одна. плюс файл подписан сертификатом. и проверяет кажется через xlive - по крайней мере при старте весь код обходится (срабатывают трижды точки останова на доступ к памяти в области текстовых констант) по поводу upd - читайте внимательнее данные о проце сохраняются в файл, а не берутся оттуда. для проверки числа ядер используется информация на этапе получения инфы напрямую с железа (cpuid) желателен патч на лету, и без вмешательства в исполняемый код - чтобы не затронуть защиту и чтобы патч работал на не сломаной версии игры в том числе. ![]() |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 21 октября 2010 13:23 · Личное сообщение · #4 Столько много написано! По существу. Игрушка GTA IV чтоли ? Секуром, который вскрыть над версия ? kru пишет: для проверки числа ядер используется информация на этапе получения инфы напрямую с железа (cpuid) Секуром, который я разбирал, CPUID использовал только в структуре антидампинга, как мусор. Правда проверки целосности всего файла не было. kru пишет: как вы поняли, я уже знаю в каком месте и что патчить ("в лоб") но это невозможно из-за защиты X-code injection можно поробовать. ![]() |
|
Создано: 21 октября 2010 13:49 · Поправил: kru · Личное сообщение · #5 нет, игрушка не гта. одна из игр codemasters. написано много, но можно было прочитать внимательнее - cpuid используется для определения процессора и блокировки запуска на однядернике. под отладчиком я могу обойти блокировку запуска. ELF_7719116 пишет: X-code injection можно поробовать. вот это я и прошу в общем то. (методы патча) кроме названия, мне надо подробное описание, желательно с живым примером. можешь дать ссылки на описания, примеры? первоначальная моя идея была в том, чтобы сделать апихук на функцию, используемую между опросом железа и проверкой числа ядер, написать функцию, и изменить данные в памяти (благо где искать - легко найти) но мне надо железно работающий пример такого апихука и как шарить в памяти процесса игры. ![]() |
|
Создано: 22 октября 2010 01:43 · Личное сообщение · #6 kru для интеловских процов есть эмуль cpuid от deroko...для амд тоже сделать можно при желании, патчить даже ничего не придётся, сделаешь лоадер, причём его итак уже сделали за тебя... а ваще, если не хочешь патчить, тогда юзай инжект...lpk.dll, лоадеры, да всё что угодно, перехватывай ту апи когда код уже расшифровался в памяти... ![]() |
|
Создано: 22 октября 2010 06:27 · Поправил: kru · Личное сообщение · #7 спасибо за инфу. эмуль cpuid - это вот это? cpuid break Driver uses Intel VT to take control when cpuid is executed. Once cpuid is executed, and context of proper process is located (using cr3) then int 3 event is injected into guest system. Make sure that i3here on is set in SoftICE before loading target with cpuid_loader.exe. Check readme.txt for more limitations!! что-то не сильно похоже на эмуль.. если есть что-то еще, дай ссылочку пожалуйста. как половинчатое решение - пойдет. но к сожалению там используется VT. мало того, что это фишка интел, так мой атлон 64 даже ее амдшный аналог не поддерживает. плюс читал, что подобные финты ушами детектятся защитами. но попробовать все же надо. а по поводу инъекта, lpk.dll и все-все-все - я в общем то и прошу ткнуть меня носом в современную утилиту/метод для этого (чтобы securom+xlive не попалили) с указанием ссылки. а ты пишешь - делай инъект или вообще что хочешь. как это мне поможет? ты мне ссылочку кидай, чтобы мне было с чего начать пробовать. не забывай, что раздел для новичков. если бы я знал какой инъект/апихук использовать и как, то этой темы вообще не было. ![]() |
|
Создано: 17 декабря 2010 09:57 · Личное сообщение · #8 |
|
Создано: 17 декабря 2010 23:17 · Личное сообщение · #9 |
|
Создано: 18 декабря 2010 05:57 · Личное сообщение · #10 |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 18 декабря 2010 12:06 · Личное сообщение · #11 Может просто сделать копию оригинального exe, положить ее рядом, пропатчить main.exe + проинжектить в нем GetModuleFileName, чтоб та всегда указывала на переименованный оригинальный, тем самым обманув защиту. Конечно все это при условии, что эта API принимает участие в подсчете контрольной суммы (как в StarForce). ![]() |
![]() |
eXeL@B —› Вопросы новичков —› помогите с выбором типа (метода) патча программы с securom |