Сейчас на форуме: bartolomeo, asfa, _MBK_ (+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 нет.
Вообщем пусть гуру объяснят как тут надо действовать



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

Создано: 01 ноября 2011 15:51
· Личное сообщение · #2

Calypso пишет:
Ничего так квест,все аккуратненько в 3д нарисовано. Особенно локация из демки угар,игра короче стоит чтобы с ней повозиться

Calypso пишет:
Разбирать виртуальную машину из-за детского квеста нормальный здравомыслящий человек не стал бы

Бугагага, дико извиняюсь, не удержался. И этот человек еще что-то про тривиум говорит.



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

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

Вы уж извините, но весь этот флуд напоминает общение бабок у подъезда - сплетни, а нужной инфы по теме - 0. Какой вам интерес до того что есть в привате? Думайте своей головой. Трейсите, анализируйте, учитесь на своих ошибках.
Если автору нужен просто кряк, не вникая в подробности, то тему можно закрывать с ссылкой на пункт 3 правил

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


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

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

Решил всётаки посмотреть
IBD PROTECT.DLL > 00A10000

1. CRC проверка

IBD+102DC

/*A202D6*/ XOR EAX,EAX
/*A202D8*/ CMP [EBP+8],ECX
/*A202DB*/ POP EDI
/*A202DC*/ SETE AL======>xor eax,eax inc eax
/*A202DF*/ POP ESI
/*A202E0*/ POP EBP
/*A202E1*/ RETN

2.Проверка диска

IBD+FD5D

/*A1FD5D*/ CALL 00A19097========>процедура со входом в VM
/*A1FD62*/ MOV EBX,EAX==========>EAX=0(ok)но выдаёт ошибку
/*A1FD64*/ TEST EBX,EBX
/*A1FD66*/ JNZ SHORT 00A1FD7E

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


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

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

Создано: 01 ноября 2011 18:18 · Поправил: Calypso
· Личное сообщение · #5

Пока тему не закрыли,задам несколько вопросов по существу:
1. Основное что нужно знать для анпака - это как взаимодействует petka.exe с самой ВМ (PROTECT.dll)
1.1 Код ВМ выполняется до самой OEP?
1.2 Запуск ВМ осуществляется с помощью джампов в модуль PROTECT.#1 ?
1.3 Виртуальная машина после работы возвращает какие-то аргументы или просто прыгает обратно в petka.exe?
1.4 Как найти конец текущего запуска ВМ,т.е. какой адрес она вернет после завершения работы?
1.5 Почему эти джампы нельзя занопить?
1.6 В каких модулях кроме протект.длл проверяется целостность файлов?
2. Проверка диска
2.1 В демке Петьки8 ,запакованной старфорсом нет проверки диска. Как это реализовано?
2.2 Как сделать отвязку от диска?
3. Отвязка от protect.dll
3.1 Если заменить все джампы в протект.длл на адреса,которые возвращает виртуальная машина после работы - получим то что хотим? Зачем тогда делать дамп?
3.2 Ну и собственно дамп ВМ - вопрос так и остался открытым. Сдампили мы регион памяти с похеренными функциями, дальше куда его девать? Делать пустую секцию в petka.exe и туда его засунуть? А джампы будут указывать на этот адрес? Тут надо подробно всё разъяснить. Если конечно хотите чтобы от этой темы была хоть какая-то польза.

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



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

Создано: 01 ноября 2011 18:35 · Поправил: Veliant
· Личное сообщение · #6

1.1 Почти все экспортируемые функции protect.dll так же завиртуализированны, поэтому можно еще до OEP потрейсить VM
1.2 Запуск вм осуществляется из кода вида
push arg
push arg
push число_параметров
push const
call vm_start (она безымянная на самом деле и лежит в protect.dll после распаковки)
1.5 занопить нельзя потому что потеряется та часть кода, которую эмулирует сама VM
3.2 Все верно, только завиртуализированный код и так в petka находится, нам нужно только скопировать в новую секцию исполняющий код самой ВМ. Если секция ремапится на адреса как и при дампе, то править переходы не придется

ВМ используется не только для возвращения каких-то адресов, но и для эмуляции виртуализированного кода самой игры

Под словом виртуализированные я понимаю код, сконвертированный в байт-код VM старфорса

3.3. Я имею ввиду не распаковку UPX. После отработки какой-то функции или драйвера, появляется похеренный код возле функции protect.#1 собственно чуть ниже и находится вход в ВМ
3.4 Полагаю что искать именно по маске, благо адрес один и тот же.

Про то сколько нужно вырезать из protect.dll чтоб получить рабочую ВМ - не знаю.

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

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

Создано: 01 ноября 2011 18:52 · Поправил: Calypso
· Личное сообщение · #7

3.3 Зачем нужно распаковывать протект.длл? Чисто для дизассемблирования? На выходе должен получиться один exe файл?
3.4 Как найти все джампы в виртуальную машину,если она расшифровывает участки кода сама себя? По маске FE 25 ... PROTECT.#1 ?
Veliant пишет:
нам нужно только скопировать в новую секцию исполняющий код самой ВМ. Если секция ремапится на адреса как и при дампе, то править переходы не придется

Если не трудно,напишите здесь или в личку как это всё сделать. Так сходу не соображу

//флудоффтоп
Тема http://exelab.ru/f/action=vthread&forum=1&topic=17633&page=0 как бэ намекает, почему никто не хочет бесплатно ничего реверсить




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

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

Calypso,
3,3 КАК ТЫ СЕБЕ ПРЕДСТАВЛЯЕШЬ КАК ИЗ DLL ПОЛУЧИТЬСЯ EXE?
конечно появиться Dll файл, который нужен для крайне удобного ревёрса, иначе ты получаешь, что бряк норм не постаить.
Calypso пишет:
Тема http://exelab.ru/f/action=vthread&forum=1&topic=17633&page=0 как бэ намекает, почему никто не хочет бесплатно ничего реверсить

Ну это ты ваще загнул...
Туда человек обращается, если ему нужен специалист!!! коими мы с тобой не являемся.

r_e пишет:
В запросы не всегда разовую работу можно положить. Например, я не могу светить софт и валидные пары.
Да и если требуется реверс, а не кряк/анпак - то это уже работа. Даже разовая.

no comment



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

Создано: 01 ноября 2011 21:37 · Поправил: Calypso
· Личное сообщение · #9

Я имел ввиду что некоторые nodvd имели помимо exe файла ещё и ломанную библиотеку (TRiViUM.dll)
Здесь должен получиться один exe-файл, вот и спрашиваю зачем УПХ снимать с протект.длл ,в памяти же она и так распаковывается
Чего то кроме Veliant никому ничего не надо вообще, 6 страниц нафлудили и слились. Кроме Оленевода что никто не умеет с подобными вещами работать?



Ранг: 116.1 (ветеран), 5thx
Активность: 0.060
Статус: Участник

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

Calypso пишет:
Чего то кроме Veliant никому ничего не надо вообще, 6 страниц нафлудили и слились


А ты чего хотел? Вся основная информация (в твоем понимании - флуд) у тебя уже есть, просто у тебя нет элементарной базы знаний для реверсинга в принципе, а ты взялся за СФ, да еще и про версии. Для СФ про не может быть просто тутора, т.к. для его снятия необходимо автоматизировать кучу работы, а это написание тулзы с дизассемблером, анализатором и т.д. Такие инструменты есть, но т.к. это результаты кропотливого труда и кучи потраченного времени, на паблике они светиться не могут, ибо вся (часть) работа пойдет на йух. В общем, рекомендую поубавить амбиции и заняться изучением основ для реверса.



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

Создано: 01 ноября 2011 23:06 · Поправил: Calypso
· Личное сообщение · #11

BoOMBoX пишет:
Вся основная информация (в твоем понимании - флуд) у тебя уже есть

В моем понимании флуд - это сообщения вроде твоего, они не несут никакой смысловой информации, философия марксизма-ленинизма. Основной информации как раз нет - гуру сразу замолчали когда я попросил сделать скриншоты с пояснениями как делать дамп ВМ.
Давайте все сначала,порядок действий:
1. Загружаем жертву в отладчик,находим OEP. Смотрим в ImpRec адреса испорченных функций.
2. Ищем эти функции в Олли,сравниваем их с дизассемблированными листингами user32 и kernel32 ,находим что это за функции и пишем их имена вместо бреда "ptr 12345678"
3. Делаем дамп файла в PE Tools
4. Делаем дамп памяти Dump_01FE0000_00020000 с похеренными функциями (ВМ)
5. В Petka.exe создаем новую секцию (как это сделать?)
6. Копируем туда Dump_01FE0000_00020000.bin
7. Находим по маске FF 25 прыжок в виртуальную машину, исправляем джамп на адрес в новой секции, который совпадает с кодом на который ссылается это прыжок в оригинале.
8. Запускаем и играем в игру без диска



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

Создано: 01 ноября 2011 23:27 · Поправил: Veliant
· Личное сообщение · #12

В 4 пункте в этой области у тебя лежали не ВМ переходы, а морфленные апи user32 и kernel32.
После нахождения оригинальных имен функций, эта область тебе больше не нужна.
ВМ лежит в коде protect.dll, первая секция после заголовка, вот именно ее дампить надо

Создать новую секцию можно в PeTools или LordPe, там где просмотр секций жмешь правой кнопкой мыши и ищешь Load Section from disk. Размер выставится сам, а вот адрес тебе надо посчитать.
(Адрес_секции - ImageBase_protectdll) + (ImageBase_protectdll - ImageBase_Petka)
В первой части считаешь смещение от базы, во второй разницу между базой петьки и dll.
И думаю после этого надо будет поправит поле ImageSize в OptionalHeader



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

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

Veliant пишет:
ВМ лежит в коде protect.dll, первая секция после заголовка, вот именно ее дампить надо

Когда библиотека распакована,то там будет не UPX0 ? Если дампить UPX0 то ничего не получится,так что-ли?
Я кажется наконец понял,что мы делаем: в оригинале код ВМ расшифровывается после проверки диска и хранится в памяти,а мы его оттуда украдем и запишем статично в наш файл.



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

Создано: 01 ноября 2011 23:51 · Поправил: Veliant
· Личное сообщение · #14

Первая после заголовка как раз и будет UPX0 (и вообще это просто имя такое после UPX, секции можно как душе угодно переименовать, но обычно это .text, .data). Просто в олле отображаются же выделенные области, и первой областью всегда будет заголовок, а потом сами секции, и чтоб ты не посчитал заголовок за секцию я и уточнил)
Правильно понимаешь. Т.к. изначально, даже после снятия UPX в protect.dll отсутствует чистая VM, а вот когда стар начинает детектить, ВМ и появляется.




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

Создано: 01 ноября 2011 23:53
· Личное сообщение · #15

Calypso пишет:
мы его оттуда украдем и запишем статично в наш файл

Это-то понятно, главная задача - посчитать адрес Virtual Offset так, чтоб загрузчик промаппил секцию ВМ по нужным виртуальным адресам. Т.к. exe не будет иметь релоков, он не будет перемещаемым, и либо загрузиться лоадером, либо нет (тогда игра вообще не запустится). Но этот важный факт позволит загрузить ВМ по нужным тебе адресам, т.к. если лепить секцию в dll какую-то, то она, скорее всего, будет перемещена (её ImageBase не будет константой), что не позволит заранее предсказать, куда попадёт ВМ.

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


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

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

Создано: 01 ноября 2011 23:55 · Поправил: Calypso
· Личное сообщение · #16

С Protect.dll разобрался - проверку получилось отключить как писали выше:
100102D5 5B POP EBX
100102D6 33C0 XOR EAX,EAX
100102D8 394D 08 CMP DWORD PTR SS:[EBP+8],ECX
100102DB 5F POP EDI
100102DC 0F94C0 SETE AL
100102DF 5E POP ESI
100102E0 5D POP EBP
100102E1 C3 RETN

патч:

100102DC 33C0 XOR EAX,EAX
100102DE 40 INC EAX

А вот и наша многострадальная виртуальная машина:
http://depositfiles.com/files/qpkdw2hz2



Ранг: 116.1 (ветеран), 5thx
Активность: 0.060
Статус: Участник

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

Veliant пишет:
ВМ лежит в коде protect.dll, первая секция после заголовка, вот именно ее дампить надо


не, в этой версии стара она лежит во второй секции

DllImageBase=570000
Address=005A6000
Size=007A5000
Section=.sforce3



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

Создано: 02 ноября 2011 00:49
· Личное сообщение · #18

Пардон,не то сдампил.
0053E000 > 68 A4C6881C PUSH 1C88C6A4
0053E005 -FF25 BCE15300 JMP DWORD PTR DS:[<&PROTECT.#1>] ; PROTECT.#1
Т.е. прыгает в protect.dll он всего 1 раз?

Оно прыгает на адрес 00A46000, оттуда на 00A46082 и пошел код protect.dll
Нам надо узнать ,на какой адрес оно прыгнет после выхода из протект, верно?

754c_01.11.2011_EXELAB.rU.tgz - VM.txt



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

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

Так это код на EP. Зачем он тебе сдался? Ищи где идет переход на protect.#1 уже после выхода на OEP

Посмотрел твой дамп после выхода на ОЕР - что-то я не нашел никаких адресов ведущих в protect.dll. Либо отвязывать не придется от нее, либо адресация какая-то косвенная



Ранг: 116.1 (ветеран), 5thx
Активность: 0.060
Статус: Участник

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

Calypso пишет:
Нам надо узнать ,на какой адрес оно прыгнет после выхода из протект, верно?


Интересно, и что тебе это даст?

В данном месте:
0053E000 > 68 A4C6881C PUSH 1C88C6A4
0053E005 -FF25 BCE15300 JMP DWORD PTR DS:[<&PROTECT.#1>] ; PROTECT.#1
оно у тебя из ВМ вернется в основной код на OEP:

004E716E 6A 74 PUSH 74

но входов в ВМ в коде далеко не один.

например:

004037D8 E8 03FFFFFF CALL Petka.004036E0

004036E0 -E9 09E6C602 JMP 03071CEE

03071CEE 68 F07BC1FA PUSH FAC17BF0
03071CF3 -E9 084353FD JMP PROTECT.#1

еще

004E6D1B E8 A0FFFAFF CALL Petka.00496CC0

00496CC0 -E9 45AFBD02 JMP 03071C0A

03071C0A 68 8BC9C028 PUSH 28C0C98B
03071C0F -E9 70E60600 JMP 030E0284

ну и т.д.

да и внутри ВМ выполняется эмуляция кусков(процедур) оригинального кода, причем еще и с вызвовом win API функций, адреса которых не лежат в табличке импорта основного экзешника.


Повторяю, без написания тулзы или скрипта ты не осилишь эту версию СФ.



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

Создано: 02 ноября 2011 01:32 · Поправил: Calypso
· Личное сообщение · #21

Я насчитал 33 джампа в ВМ. В принципе руками можно их откорректировать легко (я искал по маске -E9)
Т.е. нужно 004036E0 -E9 09E6C602 JMP 03071CEE адрес 03071CEE заменить на новый,который будет иметь данный код в пустой секции. И так все 30 штук переправить.



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

Создано: 02 ноября 2011 01:36 · Поправил: MasterSoft
· Личное сообщение · #22

Calypso пишет:
Я насчитал 33 джампа в ВМ. В принципе руками можно их откорректировать легко

да нах руками то? замучаешься, а если их было бы 333? олькосрипт изучай)

Calypso пишет:
заменить на новый,который будет иметь данный код в пустой секции. И так все 30 штук переправить.

да, только не в пустой секции, а в секции содержащей сдампленную вм.



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

Создано: 02 ноября 2011 01:56
· Личное сообщение · #23

BoOMBoX пишет:
внутри ВМ выполняется эмуляция кусков(процедур) оригинального кода, причем еще и с вызвовом win API функций, адреса которых не лежат в табличке импорта основного экзешника.

Это что-то новенькое. Как с этим злом будем бороться?



Ранг: 22.5 (новичок), 18thx
Активность: 0.050
Статус: Участник

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

Дык это и есть основная проблема Пикод.

Как бороться уже озвучивали - разобрать работу ВМ или сдампить.




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

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

[Nomad]
Да какой пикод? Если тупо сдампить и поправить cpuid - ещё полбеды, то чтоб найти все вызовы API, адреса которых старфорс вычислил на стадии инициализации ВМ и размазал по вызовам внутри неё - придётся разбирать её или такой анпакнутый файл не заработает на других ОС.

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




Ранг: 22.5 (новичок), 18thx
Активность: 0.050
Статус: Участник

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

Я про эмуляцию кусков кода говорил.




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

Создано: 02 ноября 2011 07:26
· Личное сообщение · #27

ARCHANGEL пишет:
придётся разбирать её или такой анпакнутый файл не заработает на других ОС

Ну это я думаю решаемо и без тулз, по началу гавнопрот так снимали. Запускаешь на XP и 2k например и гогого анализировать дампы. Но по большому счету это конечно не серьезно.

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





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

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

Я вам по секрету скажу.) Старый стар не вызывает апи. Он вызывает код из ехе, который вызывает апи. Новый стар тоже не вызывает спертые апи. Так что этой проблемы не будет.



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

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

Даже АПИ для своих нужд? Ну слава яйцам, значит вызов IsDebuggerPresent мне привиделся и в дампе ВМ его фиксить не придется.




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

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

Я писал про спертые апи. Апи для своих нужд он вызывает. В вм стара только апи антидампа в защищенных функах игры. Читай внимательнее



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

Создано: 02 ноября 2011 14:14 · Поправил: Calypso
· Личное сообщение · #31

ARCHANGEL пишет:
придётся разбирать её или такой анпакнутый файл не заработает на других ОС.

Имеется ввиду что сделав анпак на WinXP ,игра не запустится на Висте и 7-ке? Можно сделать 3 версии кряка,когда получится сделать хоть одну - дальше конвеер заработает на полную мощность
Ещё один важный вопрос - отвязка от диска произойдет сама собой после дампа ВМ или это ещё одна задача?
Psalmopoeus Pulcher пишет:
значит вызов IsDebuggerPresent мне привиделся и в дампе ВМ его фиксить не придется.

Его там и нету. Старфорс 4.70 Pro\он же Builder (проверил на 3х играх) никак не препятствует работе отладчика,что разумеется нам на руку. Проблемы с отладкой и очень большие возникнут когда мы будем ковырять Петьку 007
Nomad пишет:
В Петьке 8 есть пикод

Так есть ли нет,определитесь уже.


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