![]() |
eXeL@B —› Основной форум —› снова arcalands |
Посл.ответ | Сообщение |
|
Создано: 07 апреля 2006 16:12 · Личное сообщение · #1 Прога запакована. Дамп по типу 1. стоп на OEP, 2. дамп, 3. восстановление импорта не работает. Если кому интересно, посмотрите please, что за защита и с чем ее едят ![]() Arcalands Trial 1.2 (7.8 мб) www.soft32.com/download_122271.html Недавно уже спрашивал,но как-то никто не отреагировал несмотря на то, что ссылку на прогу я дал. Поэтому тему закрыл. Если поступил не по правилам форума, казнить нельзя помиловать. ![]() |
|
Создано: 08 апреля 2006 13:26 · Личное сообщение · #2 |
|
Создано: 08 апреля 2006 13:53 · Личное сообщение · #3 |
|
Создано: 08 апреля 2006 18:52 · Личное сообщение · #4 |
|
Создано: 10 апреля 2006 01:09 · Личное сообщение · #5 |
|
Создано: 10 апреля 2006 01:24 · Личное сообщение · #6 |
|
Создано: 10 апреля 2006 04:20 · Личное сообщение · #7 2 YoriCH Это не Microsoft Visual C++ v6.0 (MFC). Запустите в Olly и сразу поймете. Пропустить через PEID я бы и сам догадался, прежде чем спрашивать на форуме ![]() 2 crc1 Спасибо за доброту ![]() ![]() ![]() Если сдампить, и запустить дамп в Olly, и одновременно запустить оригинал в Olly (и прогнать до OEP), то увидите, что в карте памяти оригинала есть секции которых нет в памяти дампа. Дамп обращается к ним и вылетает. Такое у меня получилось заключение. Хотя могу и ошибаться. Меня интересует не взломать, а понять, какая стоит защита (какой паковщик). А дальше можно хоть как-то двигаться. PEID тут не поможет. ![]() |
|
Создано: 10 апреля 2006 07:36 · Поправил: NEOPEX · Личное сообщение · #8 voodoo69 пишет: что за защита _хорошие_ сигнатуры говорят что это MoleBox v2.x -> MoleStudio.com ну и RDG Packer Detector v0.5.8 соглашается и говорит MoleBox Detecciniyn Heurhstrica - типа тоже молебокс ![]() ну а насчёт voodoo69 пишет: с чем ее едят посмотрю попозже, т.к. самому интересно стало что это за мегазащита, которая так оригинально называет секции ![]() P.S.voodoo69 пишет: PEID тут не поможет ПеИд жифф! ![]() ----- Люблю повеселиться, особенно пожрать ![]() |
|
Создано: 10 апреля 2006 12:35 · Личное сообщение · #9 |
|
Создано: 10 апреля 2006 13:15 · Поправил: NEOPEX · Личное сообщение · #10 Viktoro пишет: а что там за названия? Ну это я в ироническом смысле сказал, названия там - числа, идущие от нуля по возрастанию, т.е. первая секция - 0, ну и дальше вплоть до, к примеру, десяти (как в этой проге), причем EP всегда находится в предпредпоследней секции, т.е. в этой проге в секции 8. Это я просто к тому что можно было и поинтереснее придумать, например есть такое слово UPX ![]() EDITED : Вот при распаковке наткнулся на прикольную строчку - "C:\Projects\MoleStudio\MoleBox\molebox2\bootup\mbx_DLL.cpp" ![]() ----- Люблю повеселиться, особенно пожрать ![]() |
|
Создано: 11 апреля 2006 06:11 · Личное сообщение · #11 |
|
Создано: 11 апреля 2006 06:15 · Личное сообщение · #12 |
|
Создано: 11 апреля 2006 15:19 · Личное сообщение · #13 |
|
Создано: 12 апреля 2006 02:10 · Личное сообщение · #14 |
|
Создано: 12 апреля 2006 05:11 · Личное сообщение · #15 Пока не распаковал ![]() Поискал туториалы про малбокс...В том числе все, что было по нему на этом форуме. По ним не могу распаковать, т.к. этот малбокс немного не похож на те, что в туториалах... Чем отличается: 1) Хотя с нахождением OEP в arcalands проблемы нет, он находится не совсем так как указано в статьях. 004FC3D0 61 POPAD 004FC3D1 58 POP EAX 004FC3D2 FFD0 CALL EAX <---- причем здесь переход не сразу на OEP 004FC3D4 E8 A0B20000 CALL ArcaLand.00507679 004FC3D9 CC INT3 004FC3DA CC INT3 а вовсе не как в статье: 010642A0 POPAD 010642A1 JMP EAX --- OEP! Ну с OEP у меня получилось 50823B. Переход на него идет отсюда 0048E562 -FF25 E8D24900 JMP DWORD PTR DS:[49D2E8] ; ArcaLand.0050823B 0048E568 -FF25 ECD24900 JMP DWORD PTR DS:[49D2EC] ; kernel32.GetOEMCP 0048E56E -FF25 F0D24900 JMP DWORD PTR DS:[49D2F0] ; ArcaLand.00508325 0048E574 -FF25 F4D24900 JMP DWORD PTR DS:[49D2F4] ; kernel32.GetProcessHeap 0048E57A -FF25 F8D24900 JMP DWORD PTR DS:[49D2F8] ; kernel32.GetStartupInfoA 0048E580 -FF25 FCD24900 JMP DWORD PTR DS:[49D2FC] ; kernel32.GetStdHandle 2) Далее в статье говорится, что импорт надо восстанавливать, если Olly не подписал, что за функция вызывается. .... 01008ACE CALL DWORD PTR DS:[10011D0] ; [GetThreadLocale 01008AD4 XOR EBX,EBX 01008AD6 PUSH EBX 01008AD7 CALL DWORD PTR DS:[10011D4] (вот здесь например) В arcalands такого вроде нету. ![]() 3) скрипт к малбоксу для Olly, который восстанавливает импорт и находит OEP не работает! Imprec восстановит не весь импорт. Как вручную восстановить импорт - я не знаю. Если кто-то может здесь помочь, очень буду рад. Ну и подозреваю, что из памяти надо будет выдрать dll-ки или еще чего. Это как раз те самые секции которых нет в памяти при запуске дампа. Верный признак малбокса. ![]() |
|
Создано: 12 апреля 2006 06:22 · Личное сообщение · #16 |
|
Создано: 12 апреля 2006 14:14 · Личное сообщение · #17 |
|
Создано: 12 апреля 2006 14:50 · Личное сообщение · #18 |
|
Создано: 12 апреля 2006 19:15 · Поправил: NEOPEX · Личное сообщение · #19 Yep! ацкий кролик сделал это ![]() В принципе ничего особо сложного там нет, защита импорта (а это вообще единственная защита в кротокоробке) сильно смахивает на армадилловскую ![]() 1. Запускаем прогу (в полноэкранных приложениях типа al.exe надо будет в нужный момент нажать F12) 2. Идем в секцию в которой должен быть импорт, причем то что говорит сама Оля, а она скорее всего напишет рядом с какой-нибудь секцией imports, нас совершенно не волнует ![]() ![]() 3. Выбираем любой адрес API функции (т.е. последний байт в дворде = 77) и ставим на него бряк из контекстного меню (Hardware breakpoint on write - размер любой) 4. Перезагружаем прогу, запускаем и ждем пока наш бряк не сработает, причем место будет выглядет примерно так : PUSH EAX CALL DWORD PTR DS:[50E4C8] ; kernel32.GetProcAddress MOV ECX,DWORD PTR SS:[EBP-1C] MOV DWORD PTR DS:[ECX],EAX JMP SHORT ArcaLand.00502DF4 ; <- Мы здесь ![]() MOV EDX,DWORD PTR SS:[EBP-C] MOV EAX,DWORD PTR DS:[EDX] AND EAX,0FFFF MOV DWORD PTR SS:[EBP-2C],EAX MOV ECX,DWORD PTR SS:[EBP-2C] PUSH ECX MOV EDX,DWORD PTR SS:[EBP-14] PUSH EDX CALL DWORD PTR DS:[50E4C8] ; kernel32.GetProcAddress MOV DWORD PTR SS:[EBP-28],EAX CMP DWORD PTR SS:[EBP-28],0 JE SHORT ArcaLand.00502DF4 MOV EAX,DWORD PTR SS:[EBP-1C] MOV ECX,DWORD PTR SS:[EBP-28] MOV DWORD PTR DS:[EAX],ECX MOV EDX,DWORD PTR SS:[EBP-10] AND EDX,0FF TEST EDX,EDX JE SHORT ArcaLand.00502E18 ; <- Magic juuump! ![]() Если место выглядит не так - ещё раз жмём F9... 5. Удаляем наш старый бряк из Олькиного меню (Debug -> Hardware breakpoints), и ставим бряк на магическом джампе опять таки из контекстного меню (Hardware breakpoint on execution) 6. Перезапускаем прогу, ждем пока бряк не сработает, затем так же убираем его и изменяем условный джамп на безусловный (JE -> JMP) - например это можно сделать выбрав в контекстном меню Assemble 7. Ищем последовательность команд (в контекстном меню Search for -> All sequences) POP EAX CALL EAX Ставим обычный бряк на CALL и запускаем прогу... 8. После того как бряк сработал нажимаем F7 и мы на OEP c восстановленным импортом ![]() 9. Дампим (OllyDump как всегда справляется отлично) и восстанавливаем импорт ImpREC'ом... Единственная тонкость - импрек почему-то не всегда верно определяет начало импорта, поэтому лучше ручками ввести : RVA = начало нашей (четвёртой) секции с импортом Size = можно указать 3000, ну а можно не мелочится и сразу указать весь размер секции, т.е. конец минус начало Естественно найдется не одна тысяча функций, но можно даже не дизасмить а сразу удалить лишнее (можно и Delete thunk(s)) Ну вот и всё - я распаковал пока только ArcaLands.exe но думаю al.exe распаковывается аналогично... насчет ArcaLands.exe : Magic Jump = 00502DFF OEP = 00401384 Импорт в аттаче... voodoo69 пишет: Ну и подозреваю, что из памяти надо будет выдрать dll-ки или еще чего. В том хаггаровском туторе, на который ты давал ссылку, сказано, что если к exeшнику приделаны dllки, то импрек при запуске покажет что прога подгружает модуль с названием типа MBX@1DC@7C14B0.### ![]() ![]() ----- Люблю повеселиться, особенно пожрать ![]() |
|
Создано: 12 апреля 2006 19:22 · Личное сообщение · #20 mysterio пишет: юзал скрипты Камрад, если тебе не трудно, приаттачь скрипт ![]() В обмен аттачу те, которые нашёл у себя на винте - естественно ни один не работает ![]() ![]() ----- Люблю повеселиться, особенно пожрать ![]() |
|
Создано: 12 апреля 2006 23:19 · Личное сообщение · #21 Сразу два добавления к тому бреду который был выше : 1. Секция с импортом отнюдь не всегда бывает с именем 4, так что единственный выход найти её - смотреть конец всех секций - у верной в конце будет куча названий API функций... 2. al.exe так легко не поддается и после описанных мной действий всё равно не запускается - будем копать глууубже и дааальше ![]() ----- Люблю повеселиться, особенно пожрать ![]() |
|
Создано: 13 апреля 2006 10:21 · Личное сообщение · #22 понял все свои ошибки и распаковал по статье Хаггара и советам NEOPEX. ну с al.exe тоже самое, черный экран и вместо картинки бац! вылетает. что это может быть? думаешь какая-то проверка в середине? или просто сбой от неполной распаковки? вообще странная система, arcalands.exe вроде как больше по размеру, но является всего лишь оболочкой? а маленькая al.exe - это сама игра... если al.exe вылетает то, как отловить этот exception в коде? я так понимаю там надо на какую-то APIшку ставить бряк? научите плиз! ![]() |
|
Создано: 13 апреля 2006 11:35 · Личное сообщение · #23 предыдущие мои вопросы отменяются. там сбой идет, связанный с загрузкой картинок. Пытаюсь выяснить откуда и куда они грузятся. Мож распаковщик их должен был распаковать, а мож не сами картинки а только данные какие-нибудь по ним. Но в любом случае эта инфа отсутствует в нужном месте, и когда al.exe её спрашивает, прога вылетает. ![]() |
|
Создано: 13 апреля 2006 13:53 · Личное сообщение · #24 Обновление.Задолбала меня эта al.exe конкретно ![]() Начал смотреть почему вылетает. Оказалось, что в опред. момент во время загрузки рисунков в памяти не находит нужное значение и вылетает с обращением к нулевому адресу. Посмотрел в коде место, где это значение кладется в этот адрес памяти. Оказалось, что в дампе эта ветка кода не получает управления, перепрыгивается. Еще потрассировав увидел, что все из-за какой-то внутренней функции call, которая в оригинале на второй раз дает 1 в eax, а в дампе никогда не дает 1. Решил протрассировать этот call в файл...ТЕперь сижу с двумя файлами по 500кб как дурак ![]() Скорее всего так и буду методом тыка вверх подниматься... Блин, ну че ж она не запускается то! ![]() |
|
Создано: 13 апреля 2006 21:07 · Личное сообщение · #25 |
|
Создано: 14 апреля 2006 00:28 · Личное сообщение · #26 NEOPEX пишет: Камрад, если тебе не трудно, приаттачь скрипт Камрад дал скрипты мне, а я аттачу их для всех желающих ![]() ![]() ----- Люблю повеселиться, особенно пожрать ![]() |
|
Создано: 14 апреля 2006 12:53 · Личное сообщение · #27 Сегодня смотрел, где происходит обращени е к файлу arcalands.dat. Самое раннее это происходит в коде распаковщика. Можно найти, если отслеживать 4508B4 в памяти по hardware breakpoint on access byte. Далее несколько раз F9 пока не будет видна надпись arcalands.dat, а вокруг ничего.ПОсле этого меняем бряк на адрес 8CB070 - тоже hd breakpoint on access byte. И потом можно будет выйти на последовательность команд createfile-setfilepointer-readfile, т.к по адресу 8CB070 будет полный путь к файлу arcalands.dat. Из файла малбокс берет несколько значений dword по определенным смещениям. И разок берет какой то блок данных размером h8098. Это всё, по-видимому, надо распаковщику для работы. Также на этом этапе малбокс понемногу распаковывает сам себя, чтобы продолжить выполнение. Больше толком ничего сказать не могу ![]() Дело в том, что малбокс в ходе работы своей создает определенные секции памяти. Мне все-таки кажется, что в них есть какая-то важная информация, которой не хватает для запуска дампа. Может можно их как-нибудь включить в дамп? Например размер ему побольше сделать... Насколько я понял, в самой программе обращения к файлу arcalands.dat не возникает (по крайней мере до того как дамп вылетает, это легко проследить по createfile). Значит либо все ресурсы уже подгружены в память малбоксом(!), либо ошибка в дампе происходит ДО того, как ресурсы будут реально загружаться из arcalands.dat, пока мне не ясно. Вообще довольно удивляет такое как бы слияние пакера и программы. Нормальный малбокс должен по идее в память грузить ресурсы, а брать их из экзешника. А здесь, из dat файла. ![]() |
|
Создано: 19 апреля 2006 13:38 · Личное сообщение · #28 вот тут на форуме писали, что мол распаковать малбокс особого труда не составляет. это так, потому что уже туториалы есть, но нет ни одной статьи о том, как заставить работать распакованную прогу, если все данные (картинки, звуки) запакованы были малбоксом в отдельный файл. в данном случае arcalands.dat для того чтобы распакованный al.exe заработал, нужно все файлы из arcalands.pak вытащить в нормальном виде! во время работы программы функции типа createfile, readfile перехватываются малбоксом чтобы доставать нужные файлы из arcalands.dat парочку файлов (картинок) мне удалось достать. положив их просто в папку images и проверив работу проги , я понял, что нужно распаковать все файлы и тогда она запустится без проблем. я не спец в этих делах, но мне кажется, что без инлайн патча тут не обойтись. то есть в момент когда отработала readfile и очередной файл прочитан в память, делаем createfile "наш файл", writefile , closehandle, затем возвращаем управление проге. сейчас пытаюсь это реализовать, но т.к. опыта на асме мало, очень все медленно... проблема еще в том, что не знаю как с именами поступить. Если подставлять filepath в наш createfile копируя его из текущих данных проги (чтобы сразу в итоге получать распакованный файл с правильным названием), то может не получиться, т.к прога уже сделала createfile с этим filepath, С парой сотен файлов вручную долбаться неохота, а т.к. это игрушка, то пока до опред уровня не дойдешь, опред файлы не грузятся из arcalands.pak, а нам надо все и сразу. буду смотреть можно ли автоматизировать подстановку filepath из полного списка файлов arcalands.pak который находится в памяти... по идее можно как то облегчить работу, если реализовать ее часть, через скрипт в олли. но я язык скриптов вообще не знаю. если кто в курсе, вопрос вкратце такой: 1. перехватываем createfile, по имени файла создаем свой файл с таким же именем. 2. перехватываем readfile, данные пишем в свой файл, затем возвращаем управление. 3. закрываем свой файл, ждем следующий createfile. может быть это уже реализовано в каком либо виде??? ![]() |
|
Создано: 20 апреля 2006 14:19 · Личное сообщение · #29 Все получилось. Все файлы из arcalands.pak достал и распакованный ранее al.exe запускается и работает без проблем. аттачу листинг процедуры на ассемблере, и НЕраспакованный al.exe с инлайн патчем. Запускать нужно только в олли, т.к. это для исследования. Там перед переходом на OEP я поставил jmp на свой код. Чтобы брякнуться в нужном месте, ставьте бряк в олли не на call eax а повыше, например на mov....eax.. У меня в коде в самом конце будет jmp eip заморозка, так что просто так прогу запускать не надо, или потом идите убивать вручную. и еще, сразу же все файлы распаковать не получится, т.к. нужно досоздать структуру папок куда будут ложиться файлы в основной папке игрухи. Просто ставьте бряк в моем коде там где видно какой будет файл дампиться и следите что у вас такой filepath есть, если нет создавайте вручную, т.к. createfile не занимается созданием новых папок, и если папки нет, то возвратит ошибку. короче надо доводить до ума, но это уже мне не интересно ибо цель достигнута. что касается взлома, очень легко найти ветку в реестре, в ней всего один параметр , это кол-во оставшихся секунд игры, ставьте меньше 3600 и все будет ок. ![]() ![]() |
|
Создано: 20 апреля 2006 15:31 · Личное сообщение · #30 |
![]() |
eXeL@B —› Основной форум —› снова arcalands |