Сейчас на форуме: bartolomeo, asfa, _MBK_, Adler (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Распаковка StarForce 4.70 - Пьеса в нескольких действиях
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение

Ранг: 6.9 (гость), 1thx
Активность: 0.030
Статус: Участник

Создано: 27 октября 2011 23:54
· Личное сообщение · #1

Информации об исследовании данной защиты в свободном доступе почти нет,кроме мануала про снятие SF 5.50 с игры King's Bounty. Особого интереса этот мануал не представляет по той причине,что на игру есть нормальные NoDVD.
Идея была такая - снять дамп с запущенного через эмулятор процесса ,затем восстанавливать недостающие процедуры из Protect.dll.
Версия 4.70 очень поганая, запустить её с эмулятором удается с 10-15 раза.
Если в отладчике открывать сам exe-файл ,то после тыкания Shift+F9 выбрасывает в Protect.dll . Никакого EP нет.
Вообщем пусть гуру объяснят как тут надо действовать



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 05 ноября 2011 16:18
· Личное сообщение · #2

Olenevod пишет:
Странно, что мало кто этим пользуется.

Кто сказал?

P.S. ТС лох, ответственно заявляю. Я не буду объяснять почему, т.к. это могла быть банальная провокация.



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 05 ноября 2011 17:22
· Личное сообщение · #3

с древних времен существует правило - относись к людям так, как хочешь чтоб относились к тебе.



Ранг: 48.8 (посетитель), 17thx
Активность: 0.020
Статус: Участник

Создано: 05 ноября 2011 17:42
· Личное сообщение · #4

Calypso пишет:
Может у вас плохо со зрением,но в дампе Velieant вся память ВМ прикручена к файлу, и ничего не работает.
Так что кто из нас идиот,ещё не известно

Olenevod пишет:
К дампу прикручены только те страницы памяти, которые были выделены при распаковке .exe старом, т.е. буфер под переходы в ВМ и спертые апи. Где память, выделенная в процессе инициализации ВМ?


2All, я был несколько груб, говоря о ЛС, прошу прощения. Я читаю форум с другого акка, и, только если считаю нужным ответить, логинюсь этим. Написав мне в ЛС, вы рискуете остаться без ответа только потому, что я этого не узнаю.
2OspylaC, мое ЧСВ раздуто до бесконечности. Я поездат.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 05 ноября 2011 20:10
· Личное сообщение · #5

Olenevod про прокси не забывай. А когда отвечаешь на личку, пости личку, все посмеемся.

-----
Yann Tiersen best and do not fuck





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 05 ноября 2011 23:33 · Поправил: ARCHANGEL
· Личное сообщение · #6

После такой рекламы в 9 страниц даже мне захотелось покопать старфорс. Нет, не именно эту игру - я не могу скачать её - уж слишком огромна. Просто файл под старфорсом. Говорят, что в бейсике нет ВМ. Наверное, имеется ввиду, что вызовы в ВМ отсутствуют в запротекченом приложении. Но сам код protect.dll может быть накрыт ВМ. Иначе скажите мне, может я что-то не понял, это ли не ВМ:

Code:
  1. 100D1E20   E8 00000000      CALL PROTECT.100D1E25
  2. 100D1E25   58               POP EAX
  3. 100D1E26   89C1             MOV ECX,EAX
  4. 100D1E28   81C0 2F731100    ADD EAX,11732F
  5. 100D1E2E   81C1 DB21F6FF    ADD ECX,FFF621DB
  6. 100D1E34   01D0             ADD EAX,EDX
  7. 100D1E36   8B00             MOV EAX,DWORD PTR DS:[EAX]
  8. 100D1E38   01C8             ADD EAX,ECX
  9. 100D1E3A   FFE0             JMP EAX                                  


Ах да, весь этот код читается из оверлея и грузится в память, выделенную загрузчиком под вот эту секцию:



-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 06 ноября 2011 00:29 · Поправил: Veliant
· Личное сообщение · #7

В выложенном петьке так же все функции protect.dll завиртуализированы собственной ВМ. Поэтому я и мог ее ковырять без диска. Приведенный тобой код - переход между обработчиками команд. Ставь условие для трейса - команду jmp eax и по ctrl+f11 будешь прыгать от команды к команде. (так же советую поставить jmp edx вторым условием, тк по этой команде ВМ из некоторых обработчиков выходит на внешние процедуры)

Не знаю зависит ли от компа, но попробовал сравнивать свою ВМ до OEP и его дампы на OEP - адреса обработчиков вообще не совпадают. Так что предполагаю либо зависит от машины и ВМ генерится перед проверкой, либо для защищаемого приложения ВМ перестраивается (менее вероятно)




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 ноября 2011 02:28
· Личное сообщение · #8

Здоровенная ВМ у этого старфорса. Полтора часа тупого трейса дали возможность подтвердить присутствие --> Этого <-- приёма детекта Вари.

Code:
  1. .sforce3:1021FC22                 and     al, 60h
  2. .sforce3:1021FC24                 mov     ebx, [esp+24h]
  3. .sforce3:1021FC28                 mov     eax, [ebx]
  4. .sforce3:1021FC2A                 mov     ecx, [ebx+4]
  5. .sforce3:1021FC2D                 mov     edx, [ebx+8]
  6. .sforce3:1021FC30                 mov     ebx, [ebx+0Ch]
  7. .sforce3:1021FC33                 in      eax, dx // ОНО, собака


Заменил на cli, приложение упало. При перезагрузке до этого места ВМ не дошла, но файлик запустился. Мистика.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 06 ноября 2011 12:01
· Личное сообщение · #9

ARCHANGEL пишет:
При перезагрузке до этого места ВМ не дошла, но файлик запустился. Мистика.

Возможно, проверки исполняются рандомно? Этот блок в этот раз не вызывался.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 ноября 2011 17:25
· Личное сообщение · #10

Виртуалка детектится каждый раз - не было ещё такого случая, чтоб без дополнительных мероприятий удалось запуститься на Варе. Значит, даже если проверки и выполняются рандомно, то они всё же выполняются каждый раз, но в разных местах. А тут получается, что она не выполнилась, и приложение запустилось. Нет, тут дело в другом.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 ноября 2011 22:51
· Личное сообщение · #11

ТС в бане, что ли, без него скучно. Он меня веселил, что ж, пока я продолжу. При дальнейшем исследовании ВМ обнаружилось подтверждение факта вызова API функций, не принадлежащих таблице импорта ехе-файла.

Code:
  1. 10113B2E   FFB7 38070000    PUSH DWORD PTR DS:[EDI+738]
  2. 10113B34   FF97 30070000    CALL DWORD PTR DS:[EDI+730]    //EnterCriticalSection


EDI = 00EB0000 в тот момент. А это значит, что и такую область (для запуска дампа на той же машине) нужно прикручивать к дампу. Короче, бедный, бедный ТС.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 2.4 (гость), 3thx
Активность: 0=0
Статус: Участник

Создано: 06 ноября 2011 23:04
· Личное сообщение · #12

Вот держите,дамп ВМ выполнен полностью:
http://rghost.ru/28830841

Валится в модуле Python23.dll:
1E0166C6 FF15 D83A0E1E CALL DWORD PTR DS:[_PyThreadState_GetFra>
1E0166CC 83C4 04 ADD ESP,4
1E0166CF C3 RETN

[DS:1E0E3AD8]=00000000 , в оригинале 1E069890
Что-то где-то упустили



Ранг: 2.4 (гость), 3thx
Активность: 0=0
Статус: Участник

Создано: 10 ноября 2011 13:41
· Личное сообщение · #13

Ну что,кто-нибудь разобрался как восстановить импорт типа:
02040B48 - E9 9C0B307A JMP MSVCR71.malloc ?



Ранг: 35.4 (посетитель), 15thx
Активность: 0.020
Статус: Участник

Создано: 10 ноября 2011 19:24 · Поправил: neprovad
· Личное сообщение · #14

делаешь свою библиотеку с переходниками типа как во вложении, подсовываешь программе вместо оригинала, импрек рад, реверсер тоже

c048_10.11.2011_EXELAB.rU.tgz - user32.dll
в принципе можно так самые "нужные" библиотеки запатчить и держать в снапшоте в vmware для распаковки многих пакеров, коверкающих импорт. вот такой ход конем




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 10 ноября 2011 19:37
· Личное сообщение · #15

neprovad
Подсуньте так вместо оригинала ntdll. А вот Olenevod советовал дело.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 35.4 (посетитель), 15thx
Активность: 0.020
Статус: Участник

Создано: 10 ноября 2011 19:52
· Личное сообщение · #16

ARCHANGEL
это просто еще одна идея, имеющая право на жизнь. на то и форум чтоб кто-то предлагал, кто-то критиковал, в итоге все в выигрыше

| Сообщение посчитали полезным: obfuskator


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 11 ноября 2011 06:51
· Личное сообщение · #18

ARCHANGEL
Хм. Раз уж пошли теоретические вопросы...

Во-первых не понял, к чему ты написал про морфинг? Причем здесь вообще поиск по константе? Смысл в том, что морфинг НЕ БУДЕТ вызывать функцию чтобы ее заморфить. А пока она в таком виде, как дал neprovad, там морфить нечего. Ну т.е. можно конечно повесить какую-нибудь игрушку с долгим расчетом x<>0, y, z, а потом сделать раздвоение графа кода путем проверки [x^3+y^3==z^3] (я таких приколов могу много привести в пример, долго вам придется в деобфускатор мат. логику встраивать), но мы имеем дело не с абстрактной задачей, а с вполне не звездной защитой, которую писали люди, не до конца понимающие принципы построения защитных систем (но нельзя не признать красоту реализации ВМ). Поясню, что хотел сказать: neprovad'овская либа является примером обмана самой защиты. Ее несовершенство не позволяет ей определить, что за функция на самом деле вызывается. Значения имени лежит по смещению, до первого запуска переходника не будет даже явного адреса оригинальной функции. Вопрос об ntdll по-моему вообще не стоит. Где вы видели прямое использование в прикладных программах этой библиотеки? Я имею в виду непосредственное наличие в таблице импорта (не считая переходников из kernel32, которые лишь после загрузки программы превращаются в адреса из ntdll). Поэтому полностью согласен:

neprovad пишет:
это просто еще одна идея, имеющая право на жизнь.


| Сообщение посчитали полезным: PE_Kill


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 11 ноября 2011 11:29
· Личное сообщение · #20

ARCHANGEL пишет:
Или вы так и хотите плясками с бубном ипорт восстанавливать?

Это не пляски с бубном, это очень хороший способ, которым очень многие пользуются, не в таком именно виде конечно, всё более автоматизировано, но всё же это почти универсальный способ для любой защиты.

ARCHANGEL пишет:
Да, обсирать защиты просто.

В плане API я соглашусь с интом, сделано на коленке, морф вообще никакой, на глаз деморфится. Техника трамплинов изжила себя еще в Win98, а тут используется во всю. Самый продвинутый метод защиты импорта - это документированный механизм DelayImport, который взят на вооружение многими защитами, только вот реализовать по человечески не смогли, за исключением EXECryptor, там почти идеально этот механизм реализован. Старфорсу видимо до этого еще читать и читать маны.

-----
Yann Tiersen best and do not fuck




Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 11 ноября 2011 11:40
· Личное сообщение · #21

PE_Kill пишет:
Самый продвинутый метод защиты импорта - это документированный механизм DelayImport, который взят на вооружение многими защитами

дай почитать)



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 11 ноября 2011 11:58
· Личное сообщение · #22

ARCHANGEL пишет:
обсирать защиты просто

Писать защиты для которых возможно написать кейген еще проще. Такое ощущение, что все кто берутся писать какие-либо программные защиты, вообще никогда до этого с криптографией не сталкивались... Почти любой прот начинал свою историю с дыр в той же ЭЦП или даже в симметричном шифровании.

ARCHANGEL пишет:
что морфа не было вообще.

Метод Оленевода хуже, он заточен только под стар. Не задумывался почему автоматические средства находящиеся в привате годами работают без сбоев? Потому что по ту сторону баррикад никто не знает КАК реализована методика снятия защиты. Это вовсе не означает, что надо запереться, закрыть двери и окна, и любую информацию хранить как золотые слитки. Просто можно поделиться с народом идеями, но для себя всегда немного изменять.

MasterSoft пишет:
дай почитать)

лол, открой любую доку по PE формату

| Сообщение посчитали полезным: kioresk


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 11 ноября 2011 12:05
· Личное сообщение · #23

MasterSoft пишет:
дай почитать)

Забей в гугл Delay Load Import, даже Delphi XE его юзает.

-----
Yann Tiersen best and do not fuck





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 11 ноября 2011 12:38
· Личное сообщение · #24

int пишет:
Метод Оленевода хуже, он заточен только под стар

+1
Стоит распарсит таблицу экспорта и увидеть что вызов эспортируемых фунок находятся в не кода любой длл... да если ещё прот деревянный наподобии GameShild который ставит хуки в виде простого JMP на начало функи то вообще получити облом...

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 7.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 ноября 2011 14:40
· Личное сообщение · #25

По поводу метода Оленевода. Зачем ставить хуки на все экспортируемые апи? Не проще ли поставить хук лишь на GetProcAddress так, чтобы в ней генерировались эти самые jmp ds:[buf]? Перед тем, как спереть апишку, старик уж точно вызовет GetProcAddress. А она сгенерирует jmp и вернет адрес, по которому он лежит.




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 13 ноября 2011 15:30
· Личное сообщение · #26

GoldenJoe, насколько я копал(а я копал недолго:s6, стар копирует память того же самого Kernel32 там парсит таблицу экспорта, и дальше юзает не станадрт функу, а то что копирнул. Так что твой метод тут не подойдёт.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 ноября 2011 15:34 · Поправил: PE_Kill
· Личное сообщение · #27

Выше уже написали, что это лишь концепт. Допили до идеала, проблемы не вижу.

Dart Sergius почему не пойдет, можно StarForce_GetProcAddress хукать

-----
Yann Tiersen best and do not fuck





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 13 ноября 2011 20:29
· Личное сообщение · #28

Да импорт там вообще не самое главное. Что в него так упёрлись все. Про вм надо думать, про ВМ!

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 14 ноября 2011 02:16
· Личное сообщение · #29

ARCHANGEL метод оленевода само то, покодить немного надо только, менеджер памяти, редиректы, етц. Не сказал бы что сложно, просто видимо никому не надо. Мне лично некогда пока, так бы помог.

-----
Yann Tiersen best and do not fuck





Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 14 ноября 2011 06:19
· Личное сообщение · #30

Импорт только в старых версиях спирается. Зачем кодить защиту от мертвого протектора?
В новых версиях довольно просто все восстановить.

| Сообщение посчитали полезным: MasterSoft, neprovad

Ранг: -0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 декабря 2011 00:00
· Личное сообщение · #31

Нужно как-то прилепить к дампу память,не используемую ВМ во время инициализации и работы, но в которую во время расшифровки кода производится запись некоторых данных. А именно, вызовы служебных библиотек движка игры. И память эта находится ниже Imagebase. Вот такая головоломка


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Вопросы новичков —› Распаковка StarForce 4.70 - Пьеса в нескольких действиях
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати