![]() |
eXeL@B —› Вопросы новичков —› Проблема с ASProtect 1.23 RC4 - 1.3.08.24 [1] |
Посл.ответ | Сообщение |
|
Создано: 20 июля 2007 19:55 · Поправил: tempread · Личное сообщение · #1 Такой протектор показывает VerA 0.15. Нашел OEP(сразу вручную, через "подсчет исключений", потом попробовал скрипт asprsoep.txt - результаты совпали). Програмный пакет состоит из нескольких екзешников, и не все они запакованы.Посмотрел как выглядит OEP в запакованных екзешниках и EP в незапакованных. Видно, что украденных байт нет(что не может не радовать ![]() Сделал дамп. ImpRec автоматом не нашел импорт. Поэтому я в запустил запакованную прогу, дошел до OEP, дошел до импортируемой функции. Посмотрел где таблица импорта. Потом нашел, где она пишется. Перед созданием таблицы, обнулил. Создался импорт. Пустил прогу. Запустил ImpRec, импорт замечательно восстановился. Пофикил дамп. Дамп не запускается ![]() Запустил пофиксеный дамп в OllyDbg. Долго копался,пытаясь понять в чем дело. В общем внутри одной борландовской библиотеки перебираются адреса функций(и имена) другой библиотеки. И в сдапленной программе адреса определенной функции нет. Посмотрел что в запакованной програме в этом месте - там есть определенная функция. Ок,проблема вроде нашлась - плохой импорт. В запакованной программе посмотрел, откуда она берет адрес той злощастной функции. Нашел. Хотел найти место, где же в запакованной программе этот адрес записывается. И с удивлением обнаружил, что этот адрес УЖЕ записан лоадером при старте ЗАПАКОВАНОЙ программы с EP. Получается, что распакованная протектором программа использует импорт(или функционально нечто подобное), созданный для запакованной программы! Подскажите, что в каком направлении дальше идти? Необходимо как-то импорты созданный для запакованной и незапакованной программы обьединять? ![]() |
|
Создано: 20 июля 2007 23:12 · Личное сообщение · #2 Трассировку в ImpRec юзай для восстановления импорта,в некоторых случаях помогает. Тутор от ARTeam по распаковке данного прота в атаче ![]() ![]() |
|
Создано: 21 июля 2007 03:09 · Личное сообщение · #3 Трассировку в ImpRec использовать не могу... Я еще нигде не встречал описание странной ситуации, которая у меня сложилась... Когда я запускаю в ImpRec'а трассировку, распаковываемая програма ЗАКРЫВАЕТСЯ(причем так ведут себя все екзешники програмного пакета, которые запакованы)! Проверял на двух разных компьютерах... Это,наверное, защита какая-то отрабатывает? Как с таким бороться? И вобще,все статьи,которые я прочитал про AsProtect 1.23, такие простые(перечитал уже много), там все просто и легко...А в моем случае,все почему то сложнее ![]() ![]() И вопрос по поводу использования импорта запакованной программы программой распакованой остается в силе... Насколько я понимаю, у меня не сама программа распакованая использует импорт запакованной програмы, а dll'ка распакованой программы использует этот импорт. И проблема в том, что в распакованой программе нет и упоминаний об импорте запакованной програмы. Поэтому прога виснет. Жду подсказок... ![]() |
|
Создано: 21 июля 2007 09:56 · Личное сообщение · #4 |
|
Создано: 21 июля 2007 12:44 · Поправил: tempread · Личное сообщение · #5 Есть такой код(mail thread,module vcl50): 400039F4 PUSH ESI
Окно регистров выглядит(при EIP=400039FB) так: EAX 4003F970 vcl50.@Stdctrls@TEdit@ ECX 00000006 EDX 0012F4A4 ASCII 06,"TLabel" EBX 00000008 ESP 0012F480 EBP 0012F5B4 ESI 4003FA44 ASCII 05,"TEdit" EDI 0012F4A4 ASCII 06,"TLabel" EIP 400039FB vcl50.400039FB Эта функция вызывается много раз(больше 100). Адреса функций в EAX меняются, меняются ссылки на строки в других регистрах. И на n-ой итерации в EAX находится указатель на функцию, который находится в импорте запакованной программы(а в распакованной программе там нули...).... DillerInc пишет: ..так нельзя что-ли никак вписать этот адрес в распакованную программу?? Так как нету этого адреса, то и вписывать нечего.... Вот так выглядит окно регистров при ексепшене(ESI указывает на невыделенную область пямяти - происходит ексепшен,eax - указатель на функцию,который заполняется лоадером запакованной програмы, в даном случае это распакованная пррамма, поэтому тут неправильное значение...): EAX 00684A48 indy50.00684A48 ECX 00000000 EDX 0012F4A4 ASCII 0E,"TAdvStringGrid" EBX 00000004 ESP 0012F480 ASCII "HJh" EBP 0012F5B4 ESI 8BFFFCC6 EDI 0012F4A4 ASCII 0E,"TAdvStringGrid" EIP 400039FD vcl50.400039FD ![]() |
|
Создано: 21 июля 2007 13:27 · Личное сообщение · #6 tempread пишет: Так как нету этого адреса, то и вписывать нечего.... ...обычно в таких случаях смотрят адрес в запакованной программе... Но так я могу сколько угодно тыкать пальцем в небо -- проще будет дать ссылку на исследуемую программу,и кто-нибудь тебе,я думаю,поможет. ----- the Power of Reversing team ![]() |
|
Создано: 21 июля 2007 14:44 · Поправил: tempread · Личное сообщение · #7 Ссылка на инсталляцию - тут http://www.semonitor.ru/semonitor-rus.exe Из набора этих программ я пытаюсь распаковать dcmonitor. Попытался его вырезать(для уменьшения размера), но там много dll, мог пропустить какую-нибудь... Вырезанная версия http://upload.com.ua/get/899944624 Вырезанная версия запускается с ошибкой о том,что не может найти какие-то свои данные, при закрытии, также ругается, что уже не может куда то сохранить данные,и не выходит. Но запускается...А большего, наверное ж для распаковки и не надо? А это мой дамп dcmonitor.exe(с импортом): Дамп http://upload.com.ua/get/899944629 В дампе, в место, перед самой ошибкой можно попась по bp 400039f4 eax==684a48 ![]() |
|
Создано: 21 июля 2007 18:45 · Личное сообщение · #8 |
|
Создано: 21 июля 2007 19:08 · Поправил: tempread · Личное сообщение · #9 |
|
Создано: 22 июля 2007 01:46 · Личное сообщение · #10 tempread По-видимому,я разобрался.Но... У меня распакованная программа падала явно в другом месте.А точнее в самой программе по ошибке доступа,что является более характерным вариантом остатков защиты.Дело в том,что падения в "нейтральных" библиотеках наводят на мысль,что что-то криво распаковалось. По делу -- по адресу 004062C6 проиходит скорее всего вызов какой-то функции протектора: 004062C6 call dword ptr ds:[0055F474] Так вот по адресу 0055F474 у нас нули,а должен быть адрес функции: 00405FCC Вопрос на-вскидку: чем ты снимал дамп?? Прикрепляю ссылку на мой дамп,который у меня запускается: ifolder.ru/2747159 ----- the Power of Reversing team ![]() |
|
Создано: 22 июля 2007 02:51 · Поправил: tempread · Личное сообщение · #11 |
|
Создано: 22 июля 2007 03:09 · Поправил: tempread · Личное сообщение · #12 Сразу есть два вопроса: 1) Версия прота старая или нет? Я считал, что версия старая, и надеялся, что распакую "влет"(ведь столько статей про эту версию прота, где все делается чуть ли не автоматически). 2) Можете в двух словах написать, как восстанавливали импорт? P.S. Ваш дамп и у меня нормально запустился. P.P.S. По поводу нулей по адресу 0055F474... В моем дампе там то, что нужно: Address Value Comment 0055F474 00405FCC Entry address ![]() |
|
Создано: 22 июля 2007 12:10 · Личное сообщение · #13 tempread пишет: Версия прота старая или нет? ...ну вроде да. tempread пишет: Можете в двух словах написать, как восстанавливали импорт? ...в принципе,как описано в статьях.Потом в ImpRec'е правда пришлось долго руками мусор вычищать(cut thunks, delete thunks).Дампил с помощью LordPE в том месте,где мы заканчиваем разбираться с импортом: call [eax] popad ; <-- тут В общем,всё стандартно.Приложу свою IAT. Попробуй сделать дамп LordPE.У меня было пару случаев,когда PETools криво снимал дамп. У меня есть вопрос.Когда-то давно кто-то на форуме объяснял,как можно зарегистрировать программу,защищённую ASProtect'ом,найдя определённую сигнатуру в файле и изменив там один байт(00 на 01). Может сейчас кто-нибудь это прокомментировать?? ![]() ----- the Power of Reversing team ![]() |
|
Создано: 22 июля 2007 16:17 · Поправил: tempread · Личное сообщение · #14 Замучался уже, все никак не получается самому распаковать ![]() Сверил приложенную таблицу с IAT с той что у меня - у меня на одну функцию меньше... Ладно, беру Ваш IAT, накладываю на свой дамп - та же ошибка. Делаю дамп LordPE - ошибка все та же ![]() Я делаю дамп находясь на OEP... Не совсем понял где находится: call [eax] popad ; <-- тут Нашел функцию,где импорт заполняется, и после заполнения последней ячейки пробовал дампить - ошибка все та же ![]() Пробовал дампить и OllyDump (находясь на OEP) - такая же ошибка, как и в других случаях Еще раз статьи поперечитывал..Ничего нового вроде не вычитал... Может у меня опции програм не так стоят? Проверьте,пожалуйста, выше я приводил настройки PETools, вот настройки ImpRec: Стоят галочки: Create New IAT Fix Ep to OEP Enable Debug Provilege (NT,2K,XP) Use PE header from disk Настройки LordPE: Стоят галочки: Paste header from disk Full Dump: Fix header Realign file WipeRelocation Rebuild ImportTable Validate PE ![]() |
|
Создано: 22 июля 2007 17:15 · Поправил: DillerInc · Личное сообщение · #15 Попробуй убрать галку "Create new IAT" из ImpRec'а,т.к. во-первых это ни к чему в данном случае,а во-вторых кто-то однажды писал на форуме,что ImpRec неправильно обрабатывает эту опцию. В LordPE вроде всё также. tempread пишет: Не совсем понял где находится: call [eax] popad ; <-- тут ...читай статью от -= ALEX =-, например. ----- the Power of Reversing team ![]() |
|
Создано: 22 июля 2007 21:32 · Поправил: tempread · Личное сообщение · #16 Ура! Получилось! Вся проблема была в галочке "Create new IAT". Как только снял - старая проблема пропала... Но появилось новая: об ошибке доступа от борландовской библиотеки, и когда я нажал ok,программа запустилась! Поизучав сдапленную програму в Оле, нашел откуда ошибка выскакивает: указатели на несуществующую память передается функции @System@@LStrFromPChar$qqrr17System@AnsiStringpc>,где и происходило исключение(два раза были исключения). В запакованной программе один раз передается пустая строка, а второй раз - "l4QbcADQFoU="(без кавычек). Никто не подскажет, что закодировано(и каким алгоритмом) во второй строке? (возможно строка "Unregistered" ?) Когда я подставил указатели на существующие строки в распакованой программе, она запустилась без ошибок, в About написано, что "зарегистрировано на", и строку(которую я дважды подставлял). Никаких напоминаний и указаний о триале нигде нет. Возник вопрос... В доке, которую я успел прочитать, пишется приблизительно такое "Находим свободный кусок памяти, и пишем туда свою строку". А как собственно искать "свободный кусок памяти"? ![]() |
|
Создано: 22 июля 2007 21:52 · Личное сообщение · #17 tempread на А как собственно искать "свободный кусок памяти"? промотай в конец секции кода там непременно будет участок с достаточным числом нулей(для записи строки). Вот кратенький фрагмент участка скрипта, который я модефицирую: FIND nastroika,#000000000000000000000000000000000000# //ищем достаточно нулей с некоего адреса cmp $RESULT,0 je @sorry ... ... //какие то действия @sorry: // а сюда на тот невероятный случай если нулей не найдено в достаточном количестве. eval "Вижу ошибку адресации IAT по адресу {nastroika}, но не могу найти достаточно свободного места, чтобы исправить!" msg $RESULT ![]() |
|
Создано: 22 июля 2007 22:04 · Поправил: tempread · Личное сообщение · #18 |
|
Создано: 22 июля 2007 22:55 · Личное сообщение · #19 tempread Скажи мне адрес,где вызывается эта функция,которой ты передаёшь свои указатели.Странно,что у меня никаких ошибок не выдаёт ![]() tempread пишет: А разве не може быть ситуации, что код что-то будет писать в эти нули? ...дело в том,что код в секции кода имеет строго определённый размер, т.е. сколько его написал программист.Это логично. Остальное пространство в конце секции,занимаемое нулями,это есть выравнивание секции.Туда по идее ничего не может быть записано. К тому же можно учесть тот факт,что секция кода при нормальных условиях имеет права доступа только для чтения и исполнения.Это явно предотвращает попытку записи в неё. ----- the Power of Reversing team ![]() |
|
Создано: 23 июля 2007 00:26 · Личное сообщение · #20 Я указатель передаю не сразу функции LStrFromPChar, а чуточку раньше, в функции самой програмы(а она уже запустит LStrFromPChar): Я использовал свой дамп,и Ваш IAT. Мой дамп чуточку по другому работает чем Ваш... Ваш показывает -1 день осталось до окончания триала, а мой молчит. Итак, адреса функций: VA: 40d226 и VA: 40d8e4 В регистре DX - указатели на строки, полученные из ds:[542ef4] и ds:[542f08] соответственно. ![]() |
|
Создано: 23 июля 2007 11:49 · Личное сообщение · #21 tempread Спасибо.Подставил свой указатель в первом случае и увидел своё имя в About, плюс программа перестала показывать окошко "Reminder". Немного не понял насчёт второго варианта.Там чуть выше по коду передаётся указатель на строку "Ranking monitor".Может тогда где-то должна показыватся строка "Standart, ... Edition" ...? Я подставил указатель на строку "Expert Edition", но нигде подобной строки не показалось... ----- the Power of Reversing team ![]() |
|
Создано: 23 июля 2007 15:47 · Личное сообщение · #22 |
|
Создано: 23 июля 2007 21:03 · Личное сообщение · #23 Появился вопрос... Вначале,когда я все никак не мог распаковать, у меня по чуть-чуть уже крыша начала ехать ![]() Входные данные: файлик с джампами(переходники на функции,просто копирую с окна OllyDbg), и файл ImpRecovera(сразу после GetImport,без скана). Скриптик смотрит,какие есть переходники, и оставляет в файле Imprecover'a только те записи,на которые были переходники. Потом я полученный файлик загружаю в ImpRec, и уже мучаю до конца,точно зная, что все что там есть нужно обработать. Тогда мне скриптик не помог, и я о нем подзабыл. А вот сейчас, когда помогли разобраться с проблемой, я вспомнил о скриптике. Только что проверил - работает... Так вот, вопрос вот в чем, можно ли применять данную методику очистки импорта или нет? ![]() |
|
Создано: 31 июля 2007 22:23 · Личное сообщение · #24 |
![]() |
eXeL@B —› Вопросы новичков —› Проблема с ASProtect 1.23 RC4 - 1.3.08.24 [1] |
Эта тема закрыта. Ответы больше не принимаются. |