Сейчас на форуме: 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 нет. Вообщем пусть гуру объяснят как тут надо действовать ![]() |
|
Создано: 01 ноября 2011 15:51 · Личное сообщение · #2 Calypso пишет: Ничего так квест,все аккуратненько в 3д нарисовано. Особенно локация из демки угар,игра короче стоит чтобы с ней повозиться Calypso пишет: Разбирать виртуальную машину из-за детского квеста нормальный здравомыслящий человек не стал бы Бугагага, дико извиняюсь, не удержался. И этот человек еще что-то про тривиум говорит. ![]() |
|
Создано: 01 ноября 2011 17:04 · Личное сообщение · #3 Вы уж извините, но весь этот флуд напоминает общение бабок у подъезда - сплетни, а нужной инфы по теме - 0. Какой вам интерес до того что есть в привате? Думайте своей головой. Трейсите, анализируйте, учитесь на своих ошибках. Если автору нужен просто кряк, не вникая в подробности, то тему можно закрывать с ссылкой на пункт 3 правил ![]() |
|
Создано: 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 ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 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 и туда его засунуть? А джампы будут указывать на этот адрес? Тут надо подробно всё разъяснить. Если конечно хотите чтобы от этой темы была хоть какая-то польза. Вот уважаемые гуру,предлагаю вам прекратить заниматься пустопорожней болтовней и ответить на указанные выше вопросы. Скриншоты были бы очень полезны ![]() |
|
Создано: 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 чтоб получить рабочую ВМ - не знаю. ![]() |
|
Создано: 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 как бэ намекает, почему никто не хочет бесплатно ничего реверсить ![]() ![]() |
|
Создано: 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 ![]() |
|
Создано: 01 ноября 2011 21:37 · Поправил: Calypso · Личное сообщение · #9 Я имел ввиду что некоторые nodvd имели помимо exe файла ещё и ломанную библиотеку (TRiViUM.dll) Здесь должен получиться один exe-файл, вот и спрашиваю зачем УПХ снимать с протект.длл ,в памяти же она и так распаковывается Чего то кроме Veliant никому ничего не надо вообще, 6 страниц нафлудили и слились. Кроме Оленевода что никто не умеет с подобными вещами работать? ![]() |
|
Создано: 01 ноября 2011 22:01 · Личное сообщение · #10 Calypso пишет: Чего то кроме Veliant никому ничего не надо вообще, 6 страниц нафлудили и слились А ты чего хотел? Вся основная информация (в твоем понимании - флуд) у тебя уже есть, просто у тебя нет элементарной базы знаний для реверсинга в принципе, а ты взялся за СФ, да еще и про версии. Для СФ про не может быть просто тутора, т.к. для его снятия необходимо автоматизировать кучу работы, а это написание тулзы с дизассемблером, анализатором и т.д. Такие инструменты есть, но т.к. это результаты кропотливого труда и кучи потраченного времени, на паблике они светиться не могут, ибо вся (часть) работа пойдет на йух. В общем, рекомендую поубавить амбиции и заняться изучением основ для реверса. ![]() |
|
Создано: 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. Запускаем и играем в игру без диска ![]() |
|
Создано: 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 ![]() |
|
Создано: 01 ноября 2011 23:42 · Личное сообщение · #13 Veliant пишет: ВМ лежит в коде protect.dll, первая секция после заголовка, вот именно ее дампить надо Когда библиотека распакована,то там будет не UPX0 ? Если дампить UPX0 то ничего не получится,так что-ли? Я кажется наконец понял,что мы делаем: в оригинале код ВМ расшифровывается после проверки диска и хранится в памяти,а мы его оттуда украдем и запишем статично в наш файл. ![]() |
|
Создано: 01 ноября 2011 23:51 · Поправил: Veliant · Личное сообщение · #14 Первая после заголовка как раз и будет UPX0 (и вообще это просто имя такое после UPX, секции можно как душе угодно переименовать, но обычно это .text, .data). Просто в олле отображаются же выделенные области, и первой областью всегда будет заголовок, а потом сами секции, и чтоб ты не посчитал заголовок за секцию я и уточнил) Правильно понимаешь. Т.к. изначально, даже после снятия UPX в protect.dll отсутствует чистая VM, а вот когда стар начинает детектить, ВМ и появляется. ![]() |
|
Создано: 01 ноября 2011 23:53 · Личное сообщение · #15 Calypso пишет: мы его оттуда украдем и запишем статично в наш файл Это-то понятно, главная задача - посчитать адрес Virtual Offset так, чтоб загрузчик промаппил секцию ВМ по нужным виртуальным адресам. Т.к. exe не будет иметь релоков, он не будет перемещаемым, и либо загрузиться лоадером, либо нет (тогда игра вообще не запустится). Но этот важный факт позволит загрузить ВМ по нужным тебе адресам, т.к. если лепить секцию в dll какую-то, то она, скорее всего, будет перемещена (её ImageBase не будет константой), что не позволит заранее предсказать, куда попадёт ВМ. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 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 А вот и наша многострадальная виртуальная машина: ![]() |
|
Создано: 02 ноября 2011 00:31 · Личное сообщение · #17 |
|
Создано: 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 Нам надо узнать ,на какой адрес оно прыгнет после выхода из протект, верно? ![]() ![]() |
|
Создано: 02 ноября 2011 00:59 · Поправил: Veliant · Личное сообщение · #19 |
|
Создано: 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 функций, адреса которых не лежат в табличке импорта основного экзешника. Повторяю, без написания тулзы или скрипта ты не осилишь эту версию СФ. ![]() |
|
Создано: 02 ноября 2011 01:32 · Поправил: Calypso · Личное сообщение · #21 |
|
Создано: 02 ноября 2011 01:36 · Поправил: MasterSoft · Личное сообщение · #22 Calypso пишет: Я насчитал 33 джампа в ВМ. В принципе руками можно их откорректировать легко да нах руками то? замучаешься, а если их было бы 333? олькосрипт изучай) Calypso пишет: заменить на новый,который будет иметь данный код в пустой секции. И так все 30 штук переправить. да, только не в пустой секции, а в секции содержащей сдампленную вм. ![]() |
|
Создано: 02 ноября 2011 01:56 · Личное сообщение · #23 |
|
Создано: 02 ноября 2011 02:22 · Личное сообщение · #24 |
|
Создано: 02 ноября 2011 02:36 · Личное сообщение · #25 [Nomad] Да какой пикод? Если тупо сдампить и поправить cpuid - ещё полбеды, то чтоб найти все вызовы API, адреса которых старфорс вычислил на стадии инициализации ВМ и размазал по вызовам внутри неё - придётся разбирать её или такой анпакнутый файл не заработает на других ОС. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 02 ноября 2011 02:55 · Личное сообщение · #26 |
|
Создано: 02 ноября 2011 07:26 · Личное сообщение · #27 ARCHANGEL пишет: придётся разбирать её или такой анпакнутый файл не заработает на других ОС Ну это я думаю решаемо и без тулз, по началу гавнопрот так снимали. Запускаешь на XP и 2k например и гогого анализировать дампы. Но по большому счету это конечно не серьезно. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 02 ноября 2011 10:06 · Личное сообщение · #28 |
|
Создано: 02 ноября 2011 10:53 · Личное сообщение · #29 |
|
Создано: 02 ноября 2011 14:05 · Личное сообщение · #30 |
|
Создано: 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 - Пьеса в нескольких действиях |
Эта тема закрыта. Ответы больше не принимаются. |