Сейчас на форуме: bartolomeo, asfa, _MBK_ (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Распаковка StarForce 4.70 - Пьеса в нескольких действиях |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
Посл.ответ | Сообщение |
|
Создано: 27 октября 2011 23:54 · Личное сообщение · #1 Информации об исследовании данной защиты в свободном доступе почти нет,кроме мануала про снятие SF 5.50 с игры King's Bounty. Особого интереса этот мануал не представляет по той причине,что на игру есть нормальные NoDVD. Идея была такая - снять дамп с запущенного через эмулятор процесса ,затем восстанавливать недостающие процедуры из Protect.dll. Версия 4.70 очень поганая, запустить её с эмулятором удается с 10-15 раза. Если в отладчике открывать сам exe-файл ,то после тыкания Shift+F9 выбрасывает в Protect.dll . Никакого EP нет. Вообщем пусть гуру объяснят как тут надо действовать ![]() |
|
Создано: 30 октября 2011 16:48 · Поправил: ThugboyZ · Личное сообщение · #2 OEP: 000E716E. Дамп на OEP в атаче. Импорт похерен, но для 3-4 стара это обычно, украдено ~15 фунок из kernel32.dll & user32.dll. Вот тут все exe & dll файлы что нужны для анпака может кому понадобиться: http://multi-up.com/585990 ![]() ![]() |
|
Создано: 30 октября 2011 17:49 · Поправил: Calypso · Личное сообщение · #3 ThugboyZ пишет: OEP: 000E716E. Дамп на OEP в атаче. Импорт похерен, но для 3-4 стара это обычно, украдено ~15 фунок из kernel32.dll & user32.dll Да у меня тоже самое. Вот для интереса видео как запускается SF 4.0 Pro в Olly,разница как говорится налицо: ThugboyZ пишет: Вот сделал мини-образ на Петьку8 проверяйте 780d_30.10.2011_EXELAB.rU.tgz - PETKA8_MINI_IMAGE.rar Не пашет - диск не идентифицирован. Мое нубское мнение - сделать миниобраз на СФ Про невозможно ![]() |
|
Создано: 30 октября 2011 19:16 · Поправил: [Nomad] · Личное сообщение · #4 SF 4.0 = SF 3.7, потому олькой и не подебажить особо. Перехваты инт 1 и инт 3 окончательно убрали только начиная с 4.70. Calypso пишет: Мое нубское мнение - сделать миниобраз на СФ Про невозможно Пофигу про или не про версия, зависит от опций привязки. Тут включена проверка рандомных секторов на диске, потому мини-образ не проходит проверку. ![]() |
|
Создано: 30 октября 2011 19:26 · Поправил: Calypso · Личное сообщение · #5 [Nomad] пишет: SF 4.0 = SF 3.7, потому олькой и не подебажить особо. Перехваты инт 1 и инт 3 окончательно убрали только начиная с 4.70. И то под давлением школоты,которая писала на форумах что Старфорс убивает их компы ![]() По версиям у Стара явно деградация идет - 3ю версию с трудом снимают лишь профи RELOADED ,4ю версию Тривиумы со скрипом,а Basic и школьники могут распаковать (типа меня ![]() 6-й Старфорс будет ломаться заменой JE на JMP очевидно... [Nomad] пишет: Тут включена проверка рандомных секторов на диске, потому мини-образ не проходит проверку. Более того,учитывается скорость считывания сектора. Можете сами проверить такая забавная штука: Петька 007 - образ+топология на DVD диске - запускается, с винта - нет Петька 8 - образ+топология на DVD диске - не запускается,с винта - да Вывод: SF 4.0 требует чтобы секторы читались медленно,а 4.70 наоборот быстро ![]() |
|
Создано: 30 октября 2011 19:34 · Личное сообщение · #6 |
|
Создано: 30 октября 2011 19:40 · Поправил: ThugboyZ · Личное сообщение · #7 Calypso пишет: у Стара явно деградация идет 3.xx-4.xx до 4.70, используется ring0 поэтому олька его и не берёт, начиная с 4.70 можно смело анпакать в ольке, насчёт того, что 5ый стар чем то хуже 4ого не сказал бы всё просто как раньше, кроме более сильной вм и, иногда, погаженого импорта. Насчёт того что 5ую разобрали, а 3-4 нет это глупо судить учитывая, что rld снимали всё подряд и с 3им старом и с 4-5, а вот твм появились когда уже была 5я версия стара, хотя много взломов и было 3-4 версии. Закейгенили потому как есть ОА, в 3-4 версиях её небыло (до 4.50), ну и плюс там сам алго ключей диска и HWID простецкий был, недавно правда начали эксперементировать с SHA-1, но повторюсь вся мощь стара в его вм. ![]() |
|
Создано: 30 октября 2011 19:42 · Поправил: Veliant · Личное сообщение · #8 Погодь хоронить. Пол дня трейса немного дали представление о формате ВМ. Распарсил несколько команд вроде mov, add, sub, cmp, jmp. Вроде и таблицу переходов нашел. Одно плохо - несколько разных опкодов ведут на один обработчик, есть предположение, что эти опкоды будут отличаться от семпла к семплу. Т.е. таблицу адресов VM все равно придется сохранять ![]() |
|
Создано: 30 октября 2011 19:56 · Поправил: ThugboyZ · Личное сообщение · #9 |
|
Создано: 30 октября 2011 19:57 · Поправил: Calypso · Личное сообщение · #10 Зачем закрывать,может спецы что подскажут. По Старфорсу и так информации ноль, уже 1000 просмотров темы за пару дней [Nomad] пишет: По теме - дамп ВМ - единственный вариант. Это уже стало ясно 2 страницы назад, у вас есть мануал где написано как это сделать? Нет. Вот и у меня нет Можно конечно забить на всё и использовать эмуляторы,но если уж поставлена цель вычистить авгиевы конюшни типа protect.dll то надо довести дело до конца ![]() |
|
Создано: 30 октября 2011 20:00 · Поправил: [Nomad] · Личное сообщение · #11 |
|
Создано: 30 октября 2011 20:04 · Поправил: Calypso · Личное сообщение · #12 [Nomad] пишет: Ну если проследить тенденцию всех предыдущих тем по стару то приватная инфа все равно не всплывет, максимум советы. Потому топики превращаются в оффтоп. Потому что каждый раз приходят паникеры в тему и начинают гундеть - мол забей,всё равно не сломаешь, бла бла бла.Всё приватное, секретное и т.д. Чувак,который делал тутор по распаковке King Bounty обещал сделать статью по разбору виртуальной машины,но потом отказался как раз из-зы того что тупая школота загнобила статейку Так что предлагаю закончить оффтоп и писать по теме , как сделать дамп виртуальной машины SF 4.70 на примере сабжа ![]() |
|
Создано: 30 октября 2011 20:15 · Личное сообщение · #13 |
|
Создано: 30 октября 2011 20:18 · Личное сообщение · #14 |
|
Создано: 30 октября 2011 20:39 · Личное сообщение · #15 Calypso пишет: Ну да я попробовал,находит OEP 4E716E , вроде похоже но 100% нельзя проверить. По ptr адресу все равно прыжка нет,там MOV EAX, бла бла бла ThugboyZ пишет: OEP: 000E716E ...вам товарищ в пору матчасть разучивать, а не гнуть тут пальцы, рассказывая про какую-то школоту. ----- the Power of Reversing team ![]() |
|
Создано: 30 октября 2011 20:40 · Поправил: ARCHANGEL · Личное сообщение · #16 Товарищи, объясните мне, в чём проблема? Насколько я понимаю, я попытаюсь сейчас изложить ситуацию на языке, для всех понятном, а вы, Calypso, меня поправите, если что не так, ок? Поехали. 1. Есть игра, защищённая старфорсом версии 4.70, есть образ, который при условии, что мы его монтируем в алкоголь, позволяет запустить игру, и она нормально работает. 2. Данная версия старфорса не препятствует его отладке в олли, т.е. мы можем спокойно его запустить в олли при смонтированном в алкоголь образе и играть в игру под отладчиком. 3. Мы знаем ОЕР. 4. Мы можем восстановить таблицу импорта. 5. У нас есть ВМ, мы можем определить все входы в ВМ. 6. Мы знаем, какие модули имеют входы в ВМ (вытекает из утверждения 5). 7. Нам не нужно декомпилить ВМ, мы хотим только лишь получить nocd. Ну так берём Pe Tools, дампим (все имеющие входы в ВМ - может, их несколько) модули в момент, когда ВМ инициализирована. Дампим непосредственно ВМ. Теперь наша задача - заставить ВМ грузиться по фиксированным адресам. Прекрасно - VirtualAlloc с параметром, указывающим на нужный участок виртуальной памяти, потом RtlMoveMemory (можно любой другой аналог) для перемещения кода ВМ в эту область. Ясное дело, что дампы модулей нужно будет подкорректировать, т.е. восстановить релоки, если нужно, импорт восстановить и т.д. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 30 октября 2011 21:06 · Личное сообщение · #17 |
|
Создано: 30 октября 2011 21:08 · Поправил: Nightshade · Личное сообщение · #18 Проще крутить вм к файлу, а не аллочить вм. Дампиться там все должно прекрасно. Cpuid намного сложнее исправить. Там есть 2 пути - делать эмулятор команды и убивать все проверки крк кода или добавлять код, который будет исправлять закриптованные значения cpuid текущей машины. Ломали игры через оба способа. Если сильно интересно могу в подпол кинуть статью по дампу вм. ![]() |
|
Создано: 30 октября 2011 21:09 · Личное сообщение · #19 |
|
Создано: 30 октября 2011 21:15 · Поправил: Calypso · Личное сообщение · #20 ARCHANGEL Начиная с пункта 5 нужны дополнительные пояснения на языке понятном Я пока только прошарил как найти ОЕР,сделать дамп и восстановить импорт. Про ВМ вообще не в курсе DillerInc Про ImageBase=400000 я в курсе,не надо придираться к словам. В ImpRec я ввожу E716E Ещё раз подчеркиваю - нужно сделать рабочий nodvd ,никаких пикодов и виртуальных машин никто разбирать не собирается . ![]() |
|
Создано: 30 октября 2011 21:31 · Личное сообщение · #21 |
|
Создано: 30 октября 2011 21:33 · Поправил: ThugboyZ · Личное сообщение · #22 Calypso пишет: Ещё раз подчеркиваю - нужно сделать рабочий nodvd ,никаких пикодов и виртуальных машин никто разбирать не собирается . Вы меня поражаете. Как можно сделать nodvd не вникнув в вм? Пожалуй можешь взять мой дамп и прикрутить чистый импорт, но он не будет работать ибо вм. Что такое вм? Для тебя это то место, после EP, когда нажмёшь Enter и перейдёшь в PROTECT.DLL с кучей мусора ![]() ![]() ![]() |
|
Создано: 30 октября 2011 21:39 · Личное сообщение · #23 |
|
Создано: 30 октября 2011 21:41 · Поправил: ThugboyZ · Личное сообщение · #24 |
|
Создано: 30 октября 2011 21:55 · Поправил: Veliant · Личное сообщение · #25 Итак у нас два лагеря - одни предлагают просто выдрать всю вм, и прикрутить к дампу - способ простой(по сравнению с вторым), и если цель просто поиграть без диска - сойдет Вторые (я в их числе) предлагают разобрать VM стара и возможно сделать транслятор в нативный x86/x64. На порядок сложней первого способа, но "правильней" с точки зрения распаковки. Если делаете дампы своих семплов - делайте так же дамп protect.dll в этом процессе и дамп секции с переходниками на API, и указывайте адрес загрузки для оных. Тогда этот дамп можно хоть как-то анализировать, т.к будет представлять полную картину Интересно услышать знающих людей, какие еще заморочки ждут после восстановления дампа+импорта+чистого кода после VM P.S. и хватит мерятся писками по уровню снятия basic версии - он не на много сложней upx Upd: Я тут че подумал - VM будет не так и сложно заставить выдавать чистый код - все адреса обработчиков инструкций лежат в одном массиве. Если подменить все адреса, на наши переходники, которые будут дампить чистые инструкции, то стар нам сам все расшифрует, ну или придется в ручную каждую завиртуаленную функцию выполнять Этот топик поднимает мне настроение Видать у старфорса такая карма на нашем форуме, что в темах о нем отписываются, как правило, те люди, которые его не снимали, а те кто снимали, если повезет, дают пару полезных советов на 10стр текста ни о чем ![]() |
|
Создано: 30 октября 2011 21:58 · Личное сообщение · #26 |
|
Создано: 30 октября 2011 22:17 · Личное сообщение · #27 После восстановления кода из вм ты покручишь ехе без протектора. Какие могут быть заморочки? Иногда требуется ребилд ресурсов и склеика секций. Про вм. Регистры вм 64 битные. Регистров вроде 64.(может 128- давно смотрел код). Плюс вм создает кучу переменных внутри себя. Таблиц примитивов несколько и они разбросаны по вм. Лента пикода ксорится по 4 указателям. 3 обычно указывают на реальный код, а 1 на данные. Это защита кода. Изменим код - изменим ленту. В старых вм антидампа почти нет. В новых есть описание в вики. Еще есть циклы проверки кусков кода. Основаны на сложении байт от смещения определенного размера. Потом сумма проверяется. Не помню как в старых вм, а в новых есть еще переменная для расшифровки пкода. Т е исполнился примитив - изменилась переменная. Не зная кода который выполнялся до этого- не сможем расшифровать дальше. Вм состоит из 2 частей. Одна часть выполняется на пкоде и регистрах вм, вторая просто сильно обфусцированный код. Но этот код может использовать регистры и переменные вм, но не использует ленту пкода. Перед каждым входом в регистровую вм идет установка 4 указателей на пкод. ![]() |
|
Создано: 30 октября 2011 22:29 · Поправил: Veliant · Личное сообщение · #28 Вот за такое описание человеческое спасибо, хоть половину этого уже сам раскопал) Формат фрейма регистров я уже более менее понял. И почему 64-битные думаю знаю. Таблицу примитивов нашел только одну, или они меняются в зависимости от входного параметра. Я пока только зашел в одну эмулируемую функцию и еще не выходил. Nightshade пишет: есть еще переменная для расшифровки пкода Там не совсем для расшифровки. В каждой команде есть 3 или 4 4битных флагов и 1 бит атрибута, от которых зависит как изменится эта переменная, ну и еще немного изменяется сам опкод. Я посчитал что это внутренний регистр флагов VM Nightshade пишет: Не зная кода который выполнялся до этого- не сможем расшифровать дальше. Это собственно не проблема. Если не делать статического анпакера, а девиртуализировать инжектом либы, то исходные данные стар сам нам подготовит. Upd. Все, понял о чем ты. Да - выборка команды производится не по ее опкоду, а 7-битам из предыдущей. То есть за одинт "такт" VM читает данные от предыдущей команды в которых находится опкод следующей. Но это положение в данных не фиксировано. Если скажем у 4.50 и 4.70 виртуальные машины разные Сомневаюсь что они сильно отличаться должны - максимум перестановкой индексов опкодов или порядком бит. Можно сделать изменение по маске. Потрудиться конечно придется, просмотрев формат новых, но база уже будет. Да и у меня нет цели писать статический анпакер Примерный формат регистров таков: Code:
все регистры адресуются с 0, маска у них 0x1F, т.к. первый десяток занят служебными, то реальное число регистров около 20. Но есть еще команды вида MOV reg, [addr], где адрес 16-битное число, и к нему прибавляется база регистров. Следовательно за 0x1f регистрами общего назначения располагается что-то вроде области данных Тк делаю анализ команд не по таблице, а по мере их появления на входе VM, распарсил пока следующие команды: movzx; jmp; mov reg,reg; mov [reg], reg; mov reg, [reg]; add reg, reg; sub reg, reg; xchg reg, reg; tst reg,reg; mov [addr+regbase], reg; mov reg, [addr+regbase]; ror reg, reg; rol reg, reg ![]() |
|
Создано: 30 октября 2011 22:30 · Поправил: Calypso · Личное сообщение · #29 Veliant пишет: предлагают разобрать VM стара и возможно сделать транслятор в нативный x86/x64 Эта затея имеет смысл если VM у всех версий общая или хотя бы похожа, т.е. насколько я понимаю можно сделать нечто вроде универсального распаковщика SF. Если скажем у 4.50 и 4.70 виртуальные машины разные,то тогда для каждой игры писать отдельный транслятор чрезвычайно трудоемко имхо Я предлагаю начать с простого способа,а дальше видно будет ![]() |
|
Создано: 30 октября 2011 22:38 · Поправил: ThugboyZ · Личное сообщение · #30 |
|
Создано: 30 октября 2011 22:46 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Распаковка StarForce 4.70 - Пьеса в нескольких действиях |
Эта тема закрыта. Ответы больше не принимаются. |