![]() |
eXeL@B —› Вопросы новичков —› ASProtect 1.23 RC4 Demo почти повторение |
Посл.ответ | Сообщение |
|
Создано: 13 июня 2007 13:13 · Личное сообщение · #1 Была тут недавно тема, где один товарищ просил помочь распаковать ASProtect 1.23 RC4. А потом то ли распаковал и отвалил, то ли не смог и плюнул. В общем тема уползла в историю. А я чего-то увяз на этой проге и четвертый день ковыряюсь с ней, обложившись туторами. Stripper ее не берет. Распакованная прога вываливается с ошибкой (это вроде вышеупомянутый товарищ уже сообщал). Как я понял crc1 ковырялся с этой прогой, и не без успеха. Может подскажешь? Хотя если еще кто-нибудь поможет буду только рад. [url=http://www.softnew.ru/process.phtml?action=load&id=6884&mirror=0& PHPSESSID=639c33b50bcd1fc7453d91f1d1a0f63b]Remote Desktop Control 1.8 1.4Mb[/url crc1 давал ссылку на тутор. [quote]Тутор по адресу hack4joy.narod.ru/crack/arc4/arc4.htm один в один с этой прогой.[/quote] Я бы так не сказал. Значит, что я сам сделал. Ничего не получилось, правда, но все же опишу, может быть кто-то укажет на мои ошибки. Ищем ОЕР. По пути занопил magic CALL (кстати раньше не знал про такую штуку). А вот дальше не сходится, хотя это может у меня руки кривые. Ставим hr esp-4, и, по статье от ALEXa, должны брякнуться три раза. У меня получается бряк только один раз, а потом прога запускается. Ну да ладно, мы пойдем другим путем(с). До ОЕР дошел проще. Дошел до последнего исключения. Мемори бряк на секцию кода и трассируем. Попадаем на адрес 00406D54-FF2574224C00 JMP DWORD PTR DS:[4C2274] . Поначалу тоже думал, что это ОЕР, но после прочтения туторов догнал, что это прыжок на эмуляцию GetModuleHandleA.
Выходим по РЕТ из эмуляции GetModuleHandleA. Проходим код по Ф8 по пути записывая ЕАХ (типа из спертых байтов) еах=004BC2D4 Выходим по РЕТ на настоящую ОЕР.
Выше адреса 004BC612 расположены 23 ноля. Соответственно 23 спертых байта? Опять же вопрос: где снимать дамп? В разных статьях советуют снимать то на ОЕП, то на джампе в GetModuleHandleA. Попробовал и там, и там. Восстанавливаем импорт. Запускаем ИмпРек (что характерно). ОЕР = BC618, размер ставим 1000. Восстанавливаем нераспознанные функции с помощью Trace Level1(Disasm). Все что не распозналось отрезаем нафиг. Фиксируем импорт. Спертые байты. Тут засада. Следуя туторам, попадаю в код, замусоренный настолько, что с непривычки разобраться в нем не могу ![]() 00A36E71 61 POPAD
То ли это место, что нужно? И как выковырнуть отсюда правильные байты? Пока, для пробы, взял байты приведенные crc1. Попробовал вписать. Поменял Entry Point. Итог: прога падает на обращениях к несуществующим адресам. Причем таких мест очень много, так что просто занопить их все нет возможности. Я понимаю, что туторов по Аспру хоть пруд пруди, и желания разжевывать каждую отдельную прогу ни у кого нет. Но может быть кто-то уже распаковывал эту прогу и сможет помочь? ![]() |
|
Создано: 13 июня 2007 15:19 · Поправил: Small_S · Личное сообщение · #2 Sturgeon прогу не смотрел я на работе и ещё долго буду, по верхам. На Восстанавливаем нераспознанные функции с помощью Trace Level1(Disasm). Все что не распозналось отрезаем нафиг. Когда восстанавливаю импорт после Аспра обязательно кроме Trace Level1(Disasm) восстанавливаю повреждённые Аспром переходники плугом для импректа ASProtect 1.23(так кажется зовётся). Приду домой если раньше не найдёшь приаттачу. Причём плуг ASProtect 1.22 не подходит(делает ошибки) из за этого часть функций не распознаётся. В мусорном коде, как правило содержится, самое начало проги присущее тому или иному компилятору. Попробуй в DIE загнать прогу прям запакованную и посмотри на чём написано, возьми несколько вариантов начал для скажем С и сверяй. Судя по приведённому куску там в спёртой части нужно идти обратным трассированием(я надеюсь ты туда по трассировке попал?) по клавише - минус, уже подзабыл, давно 1.23 RC4 не ковырял. Ну а как в начале мусорного кода окажешся иди по шагу вперёд и смотри переходы будут приводить к визуальному изменению кода. У тебя это место совсем другим будет: 00A36E74 |CD20 F2EB010F VxDJump F01EBF2 00A36E7A 83EC 39 SUB ESP,39 совершенно другим. (видишь прыг не нормально на следующую команду, а между двумя командами JMP SHORT 00A36E76) Такой дрянью вся секция выделенной памяти под VM в старших версиях аспра забита(всё плывёт при каждом шаге, модефицируется, куча байт пропускаются и по сути являются мусором и к тому же даже многие из тех команд, что выполняются ничего не делают Например SUB EAX, INC EAX). Вот аттачу всем известный плагин. Сунь длл в папку с плагинами импректу. ![]() |
|
Создано: 13 июня 2007 16:24 · Личное сообщение · #3 Sturgeon В версии 1.23 RC4 мусорный код проходишь по F7, за исключением одного CALL'a 00B97AAC CALL 00B97A27 тут F8
Дальше идешь по F7 и внимательно смотришь и увидишь спертые команды 00B97B20 PUSH EBP
При выходе из мусорного кода на RET в EAX будет нужное значение (004BC2D4) Всего в данной проге своровано 11 (dec) байт 004BC608 PUSH EBP ;OEP
Импорт: Trace Level1(Disasm), после него нужен плугин, или руками. Возможно неверно восстановится ф-я LoadLibrary. Остальное допишу завтра Вот распакованный rapidshare.com/files/36949947/dump.rar.html ![]() |
|
Создано: 13 июня 2007 18:12 · Личное сообщение · #4 Млин. На исправлении не аттачится. Вот. ![]() ![]() |
|
Создано: 14 июня 2007 00:30 · Личное сообщение · #5 crc1 Спасибо! Со спертым ОЕР разобрался. Меня сильно смущало то, что нолей на настоящем ОЕР было 23. Small_S Как я понял, в AsprRC4 несколько хитрее прячется ОЕР, чем в более ранних версиях. Т.е. обратной трассировкой я пробовал найти байты, но не получилось. Уж очень много мусора, да и непривычно в первый раз. С импортом буду завтра с утра заморачиваться, а то уже поздно очень. Плаг к импреку у меня есть, спасибо. У меня вроде весь импорт восстановился, а отрезал я явный мусор (или это мне кажется что мусор:-\) 2 crc1 А ты Magic Call нопил или нет? Насколько это вообще нужно? И дамп где снимал? На ОЕР или на джампе? З.Ы. Долбаный Аспр! Уж сколько написано про него, а все равно с каждой отдельной прогой какие-то заморочки. Неожиданно возник вопрос. Здесь на форуме на двадцать вопросов об Аспре приходится один-два вопроса об Армадилло или Екзекрипторе. Неужели Аспр сложнее снять чем Арму или Криптор? Или просто они более стандартные? Сам я пока не берусь снимать такие проты, но в ближайше время хочу попробовать научиться снимать хотя бы ранние версии. ![]() |
|
Создано: 14 июня 2007 09:09 · Личное сообщение · #6 Sturgeon Приношу извинения, вчера поспешил с крадеными байтами. Их действительно 23 (dec) шт 00B97180 PUSH EBP
OEP == 004BC5FC Дамп снимай как только распаковалась секция кода, (но можно на OEP) Magic Call можно не нопить, плагин ASPR_1.23 нормально восстанавливает импорт, за исключением ф-ии LoadLibraryA (путает с GetModuleHandleA) (может только у меня?) Если прога падает на обращениях к несуществующим адресам, забей нулями третью секцию Тут нормально распакованный файл rapidshare.com/files/37103825/dump.rar.html ![]() |
|
Создано: 14 июня 2007 11:45 · Личное сообщение · #7 Твой дамп замечательно работает. А у меня снова жопа ![]() Пробовал сравнивать побайтно два файла (твой и мой). Совершенно одинаковые, за исключение небольших отличий в адресах таблицы импорта. Мой файл первый раз падает по следующему адресу:
Хотя твой файл выполняет этот код без проблем. Может быть это связано как раз с неправильным распознаванием LoadLibraryA? Я просто не знаю как узнать правильно она определилась или нет. Вот мой нерабочий (к сожалению) дамп slil.ru/24511811 ![]() |
|
Создано: 14 июня 2007 16:21 · Личное сообщение · #8 00405A22 MOV DWORD PTR SS:[EBP-8], EAX
Sturgeon пишет: 004021F2 . 8B5482 F4 MOV EDX,DWORD PTR DS:[EDX+EAX*4-C] <- Здесь Memory violation crc1 пишет: забей нулями третью секцию ![]() |
|
Создано: 14 июня 2007 20:18 · Личное сообщение · #9 По поводу восстановления LoadLibraryA. Когда я в Импреке восстанавливаю импорт, каким образом можно определить, что функция восстановилась неправильно? Допустим, что теперь я знаю, что функция LoadLibraryA может восстановиться как GetModuleHandleA. Но как из восьми функций GetModuleHandleA опознать те, которые должны быть на самом деле LoadLibraryA? crc1 пишет: crc1 пишет: забей нулями третью секцию В смысле секцию .adata? Только теперь доперло. А то я по недалекости своей забивал нолями третью по счету, то есть секцию после .code ![]() ![]() |
|
Создано: 14 июня 2007 22:38 · Личное сообщение · #10 Sturgeon на Но как из восьми функций GetModuleHandleA опознать те, которые должны быть на самом деле LoadLibraryA? так запусти дамп в оле и когда упадёшь смотри в окно стека, там обычно такая верхняя строка: адрес такой то из(from) от туда то запоминаешь откуда и перегружаешь Олю. Контрал +G и переходишь по этому адресу и смотришь почему падает(это как бы общий алгоритм). А в случае с неправильно распознанной функой 1) Смотриш в центральное окно CPU и видишь вызов АПИ на котором падает например(это первая попавшаяся прога) 00402442 |. 2E:FF15 BCD08000 CALL DWORD PTR CS:[<&gdi32.SetTextColor>] ; \SetTextColor Вот этот вызов берет из секции где таблица ИАТ по адресу BCD08000 нужный адрес АПИ функи точнее это адрес 0080D0BC (знаешь наверное что адреса читаются в памяти справа налево побайтно). То же самое(контрал +G) в окне дампа и туда этот адрес (0080D0BC) у тебя там так же перевернуто будет 0080D0B8 >77F1B4F7 чґсw GDI32.SetPixel 0080D0BC >77F15D97 —]сw GDI32.SetTextColor==========вот она 0080D0C0 >77F1BAF2 тєсw GDI32.StretchBlt 0080D0C4 >77F17EE5 е~сw GDI32.TextOutW меняешь режим на HEX/UNICOD(16bytes) этот режим Long, в нём удобно смотреть, но вбивают изменения в хексе, как обычно выделил перешёл в хекс режим пробел клавиша и вбиваешь нужный адрес АПИ какая тебе нужна. И сохраняешь изменения в дампе. Ну и всё запускаешь по новой, если упал там же то не угадал нужно вернуть на родину как было, если упал позже то повторяешь маневры. Вот тебе прога(не помню откуда качал), она по имени функи определяет её адрес на твоёй системе. См аттач. ![]() ![]() |
|
Создано: 15 июня 2007 04:15 · Личное сообщение · #11 Сорри, совершил описку вчера по усталости. В предыдущем посте читай не "Ну и всё запускаешь по новой, если упал там же то не угадал нужно вернуть на родину как было, если упал позже то повторяешь маневры. " а значит не угадал и есть ещё какой то вариант (АПИ вообще какая то вызывается другая). Пост побоялся править, иногда аттачи после правки слетают. ![]() |
|
Создано: 15 июня 2007 07:55 · Личное сообщение · #12 Sturgeon пишет: Но как из восьми функций GetModuleHandleA опознать те, которые должны быть на самом деле LoadLibraryA? При восстановлении импорта после аспра я иногда натыкался на грабли, когда Импрек вместо LoadLibraryA определял GetModuleHandleA. Если библиотека отображена в адресном пространстве вызывающего процесса, то все ОК, GetModuleHandleA вернет дискриптор библы. А если библиотека еще не загружена? Тогда произойдет ошибка. Т.е. в такой конструкции 00405A25 PUSH 00405B94 ; ASCII "kernel32.dll"
лучше LoadLibraryA (она загрузит dll и вернет дискриптор), потому что вместо kernel32.dll может быть имя библы, еще не загруженной в контекст проги. Третья секция это не .adata, а третья сверху она без названия, начинается с адреса 004С1000 Тут это обсуждалось http://exelab.ru/f/action=vthread&topic=6624&forum=1&page= -1 ![]() |
|
Создано: 15 июня 2007 08:03 · Личное сообщение · #13 |
|
Создано: 15 июня 2007 17:52 · Поправил: Sturgeon · Личное сообщение · #14 2 [crc1] Чего то я туплю Забил нолями секцию, а прога все равно падает. Только теперь на другой ошибке: 00403CD8 > \F0:FF42 F8 LOCK INC DWORD PTR DS:[EDX-8] ; LOCK prefix
Может это праблы с неправильным дампом? Если есть свободное время и если не трудно, не мог бы ты посмотреть мой дамп (приаттачен выше). Можно ли из него сделать правильно работающий? ![]() |
|
Создано: 16 июня 2007 23:26 · Личное сообщение · #15 Со slil.ru скачать не могу и че толку если я сделаю твой дамп рабочим. Ты сам разберись. Кароче Тормознись тут
Восстанавливай импорт, Trace Level1(Disasm) + ASPR_1.23-ImpREC_Plugin.dll, все API восстановятся На LoadLibraryA (в данной проге)не обращай внимания, прикручивай спертые байты, правь OEP ВСЕ, 10 минут работы. Только что проделал все вышесказанное, дамп пашет Я тебе пересказал статью Alex'a. Ты наверн плохо ее читал ![]() ![]() |
|
Создано: 18 июня 2007 10:35 · Личное сообщение · #16 |
![]() |
eXeL@B —› Вопросы новичков —› ASProtect 1.23 RC4 Demo почти повторение |