Сейчас на форуме: bartolomeo, asfa, _MBK_, Adler (+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 нет. Вообщем пусть гуру объяснят как тут надо действовать ![]() |
|
Создано: 05 ноября 2011 16:18 · Личное сообщение · #2 |
|
Создано: 05 ноября 2011 17:22 · Личное сообщение · #3 |
|
Создано: 05 ноября 2011 17:42 · Личное сообщение · #4 Calypso пишет: Может у вас плохо со зрением,но в дампе Velieant вся память ВМ прикручена к файлу, и ничего не работает. Так что кто из нас идиот,ещё не известно Olenevod пишет: К дампу прикручены только те страницы памяти, которые были выделены при распаковке .exe старом, т.е. буфер под переходы в ВМ и спертые апи. Где память, выделенная в процессе инициализации ВМ? 2All, я был несколько груб, говоря о ЛС, прошу прощения. Я читаю форум с другого акка, и, только если считаю нужным ответить, логинюсь этим. Написав мне в ЛС, вы рискуете остаться без ответа только потому, что я этого не узнаю. 2OspylaC, мое ЧСВ раздуто до бесконечности. Я поездат. ![]() |
|
Создано: 05 ноября 2011 20:10 · Личное сообщение · #5 |
|
Создано: 05 ноября 2011 23:33 · Поправил: ARCHANGEL · Личное сообщение · #6 После такой рекламы в 9 страниц даже мне захотелось покопать старфорс. Нет, не именно эту игру - я не могу скачать её - уж слишком огромна. Просто файл под старфорсом. Говорят, что в бейсике нет ВМ. Наверное, имеется ввиду, что вызовы в ВМ отсутствуют в запротекченом приложении. Но сам код protect.dll может быть накрыт ВМ. Иначе скажите мне, может я что-то не понял, это ли не ВМ: Code:
Ах да, весь этот код читается из оверлея и грузится в память, выделенную загрузчиком под вот эту секцию: ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 06 ноября 2011 00:29 · Поправил: Veliant · Личное сообщение · #7 В выложенном петьке так же все функции protect.dll завиртуализированы собственной ВМ. Поэтому я и мог ее ковырять без диска. Приведенный тобой код - переход между обработчиками команд. Ставь условие для трейса - команду jmp eax и по ctrl+f11 будешь прыгать от команды к команде. (так же советую поставить jmp edx вторым условием, тк по этой команде ВМ из некоторых обработчиков выходит на внешние процедуры) Не знаю зависит ли от компа, но попробовал сравнивать свою ВМ до OEP и его дампы на OEP - адреса обработчиков вообще не совпадают. Так что предполагаю либо зависит от машины и ВМ генерится перед проверкой, либо для защищаемого приложения ВМ перестраивается (менее вероятно) ![]() |
|
Создано: 06 ноября 2011 02:28 · Личное сообщение · #8 Здоровенная ВМ у этого старфорса. Полтора часа тупого трейса дали возможность подтвердить присутствие Code:
Заменил на cli, приложение упало. При перезагрузке до этого места ВМ не дошла, но файлик запустился. Мистика. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 06 ноября 2011 12:01 · Личное сообщение · #9 |
|
Создано: 06 ноября 2011 17:25 · Личное сообщение · #10 Виртуалка детектится каждый раз - не было ещё такого случая, чтоб без дополнительных мероприятий удалось запуститься на Варе. Значит, даже если проверки и выполняются рандомно, то они всё же выполняются каждый раз, но в разных местах. А тут получается, что она не выполнилась, и приложение запустилось. Нет, тут дело в другом. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 06 ноября 2011 22:51 · Личное сообщение · #11 ТС в бане, что ли, без него скучно. Он меня веселил, что ж, пока я продолжу. При дальнейшем исследовании ВМ обнаружилось подтверждение факта вызова API функций, не принадлежащих таблице импорта ехе-файла. Code:
EDI = 00EB0000 в тот момент. А это значит, что и такую область (для запуска дампа на той же машине) нужно прикручивать к дампу. Короче, бедный, бедный ТС. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 06 ноября 2011 23:04 · Личное сообщение · #12 Вот держите,дамп ВМ выполнен полностью: Валится в модуле Python23.dll: 1E0166C6 FF15 D83A0E1E CALL DWORD PTR DS:[_PyThreadState_GetFra> 1E0166CC 83C4 04 ADD ESP,4 1E0166CF C3 RETN [DS:1E0E3AD8]=00000000 , в оригинале 1E069890 Что-то где-то упустили ![]() |
|
Создано: 10 ноября 2011 13:41 · Личное сообщение · #13 |
|
Создано: 10 ноября 2011 19:24 · Поправил: neprovad · Личное сообщение · #14 делаешь свою библиотеку с переходниками типа как во вложении, подсовываешь программе вместо оригинала, импрек рад, реверсер тоже ![]() в принципе можно так самые "нужные" библиотеки запатчить и держать в снапшоте в vmware для распаковки многих пакеров, коверкающих импорт. вот такой ход конем ![]() |
|
Создано: 10 ноября 2011 19:37 · Личное сообщение · #15 |
|
Создано: 10 ноября 2011 19:52 · Личное сообщение · #16 ARCHANGEL это просто еще одна идея, имеющая право на жизнь. на то и форум чтоб кто-то предлагал, кто-то критиковал, в итоге все в выигрыше ![]() ![]() |
|
Создано: 10 ноября 2011 20:29 · Поправил: ARCHANGEL · Личное сообщение · #17 Любая API функция представляет собой множество А инструкций. Морфинг берёт множество инструкций М, которое является подмножеством А, и перемещает в выделенную область. Если А = М, т.е. |A| = |M| & F(A) = M - биекция, это полное морфирование. Понятие частичного морфирования очевидно. И первый, и второй вид морфа подразумевают, что при эффективном их применении константный поиск ничего не даст. Поэтому не расстраивайтесь, если поиск по константе не привёл к желаемому результату. Разумеется, здесь уже имеется ввиду не просто морф, а морф с разбавлением мусором и обфускацией. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 11 ноября 2011 06:51 · Личное сообщение · #18 ARCHANGEL Хм. Раз уж пошли теоретические вопросы... Во-первых не понял, к чему ты написал про морфинг? Причем здесь вообще поиск по константе? Смысл в том, что морфинг НЕ БУДЕТ вызывать функцию чтобы ее заморфить. А пока она в таком виде, как дал neprovad, там морфить нечего. Ну т.е. можно конечно повесить какую-нибудь игрушку с долгим расчетом x<>0, y, z, а потом сделать раздвоение графа кода путем проверки [x^3+y^3==z^3] (я таких приколов могу много привести в пример, долго вам придется в деобфускатор мат. логику встраивать), но мы имеем дело не с абстрактной задачей, а с вполне не звездной защитой, которую писали люди, не до конца понимающие принципы построения защитных систем (но нельзя не признать красоту реализации ВМ). Поясню, что хотел сказать: neprovad'овская либа является примером обмана самой защиты. Ее несовершенство не позволяет ей определить, что за функция на самом деле вызывается. Значения имени лежит по смещению, до первого запуска переходника не будет даже явного адреса оригинальной функции. Вопрос об ntdll по-моему вообще не стоит. Где вы видели прямое использование в прикладных программах этой библиотеки? Я имею в виду непосредственное наличие в таблице импорта (не считая переходников из kernel32, которые лишь после загрузки программы превращаются в адреса из ntdll). Поэтому полностью согласен: neprovad пишет: это просто еще одна идея, имеющая право на жизнь. ![]() |
|
Создано: 11 ноября 2011 11:07 · Личное сообщение · #19 int пишет: Во-первых не понял, к чему ты написал про морфинг? Не понял, почему ты не понял. Смысл в том, что морфинг НЕ БУДЕТ вызывать функцию чтобы ее заморфить. Это и не требуется. А пока она в таком виде, как дал neprovad, там морфить нечего. Ну т.е. можно конечно повесить какую-нибудь игрушку с долгим расчетом x<>0, y, z, а потом сделать раздвоение графа кода путем проверки [x^3+y^3==z^3] (я таких приколов могу много привести в пример, долго вам придется в деобфускатор мат. логику встраивать) Вот именно об этом я пытался сказать - не надо писать деморфер и искать константы - надо просто не дать защите морфить функции, ведь она ж не морфит их все, а лишь некоторые. Значит надо найти место в коде, которое выбирает - морфить или нет, и подправить его, что морфа не было вообще. А эта деобфускация - это сегодня работает, а завтра морф изменился (добавилось на один проход больше и правил чуток больше стало), и техника стала нерабочей. Или вы так и хотите плясками с бубном ипорт восстанавливать? Вопрос об ntdll по-моему вообще не стоит. Где вы видели прямое использование в прикладных программах этой библиотеки? Я сказал про неуниверсальность метода. Нравится вам идею - пользуйтесь, никто ж не запрещает. ...которую писали люди, не до конца понимающие принципы построения защитных систем Да, обсирать защиты просто. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 11 ноября 2011 11:29 · Личное сообщение · #20 ARCHANGEL пишет: Или вы так и хотите плясками с бубном ипорт восстанавливать? Это не пляски с бубном, это очень хороший способ, которым очень многие пользуются, не в таком именно виде конечно, всё более автоматизировано, но всё же это почти универсальный способ для любой защиты. ARCHANGEL пишет: Да, обсирать защиты просто. В плане API я соглашусь с интом, сделано на коленке, морф вообще никакой, на глаз деморфится. Техника трамплинов изжила себя еще в Win98, а тут используется во всю. Самый продвинутый метод защиты импорта - это документированный механизм DelayImport, который взят на вооружение многими защитами, только вот реализовать по человечески не смогли, за исключением EXECryptor, там почти идеально этот механизм реализован. Старфорсу видимо до этого еще читать и читать маны. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 11 ноября 2011 11:40 · Личное сообщение · #21 |
|
Создано: 11 ноября 2011 11:58 · Личное сообщение · #22 ARCHANGEL пишет: обсирать защиты просто Писать защиты для которых возможно написать кейген еще проще. Такое ощущение, что все кто берутся писать какие-либо программные защиты, вообще никогда до этого с криптографией не сталкивались... Почти любой прот начинал свою историю с дыр в той же ЭЦП или даже в симметричном шифровании. ARCHANGEL пишет: что морфа не было вообще. Метод Оленевода хуже, он заточен только под стар. Не задумывался почему автоматические средства находящиеся в привате годами работают без сбоев? Потому что по ту сторону баррикад никто не знает КАК реализована методика снятия защиты. Это вовсе не означает, что надо запереться, закрыть двери и окна, и любую информацию хранить как золотые слитки. Просто можно поделиться с народом идеями, но для себя всегда немного изменять. MasterSoft пишет: дай почитать) лол, открой любую доку по PE формату ![]() ![]() |
|
Создано: 11 ноября 2011 12:05 · Личное сообщение · #23 |
|
Создано: 11 ноября 2011 12:38 · Личное сообщение · #24 int пишет: Метод Оленевода хуже, он заточен только под стар +1 Стоит распарсит таблицу экспорта и увидеть что вызов эспортируемых фунок находятся в не кода любой длл... да если ещё прот деревянный наподобии GameShild который ставит хуки в виде простого JMP на начало функи то вообще получити облом... ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 13 ноября 2011 14:40 · Личное сообщение · #25 По поводу метода Оленевода. Зачем ставить хуки на все экспортируемые апи? Не проще ли поставить хук лишь на GetProcAddress так, чтобы в ней генерировались эти самые jmp ds:[buf]? Перед тем, как спереть апишку, старик уж точно вызовет GetProcAddress. А она сгенерирует jmp и вернет адрес, по которому он лежит. ![]() |
|
Создано: 13 ноября 2011 15:30 · Личное сообщение · #26 |
|
Создано: 13 ноября 2011 15:34 · Поправил: PE_Kill · Личное сообщение · #27 |
|
Создано: 13 ноября 2011 20:29 · Личное сообщение · #28 |
|
Создано: 14 ноября 2011 02:16 · Личное сообщение · #29 |
|
Создано: 14 ноября 2011 06:19 · Личное сообщение · #30 Импорт только в старых версиях спирается. Зачем кодить защиту от мертвого протектора? В новых версиях довольно просто все восстановить. ![]() |
|
Создано: 01 декабря 2011 00:00 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Распаковка StarForce 4.70 - Пьеса в нескольких действиях |
Эта тема закрыта. Ответы больше не принимаются. |