Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Программа после распаковки(crc?) |
Посл.ответ | Сообщение |
|
Создано: 05 ноября 2010 15:05 · Поправил: criogen · Личное сообщение · #1 Доброе время суток. Программа была упакована ASProtect [2.4 build 11.20 Release]. Расспаковал используя скрип для OllyDBG by VolX, импорт востановил, программа запускаеться и работает как зарегистрированная. Но через какой-то промежуток времени она выдает сообщение о том что она была взломана и закрывается. При отладке в Олли он пишет что он не может обработать ошибку и EIP улетает непонятно куда. Программа показывает что-то типа MessageBox но закрывается даже до нажатия на нем. Строчек с этим сообщение найти не удалось, вероятно они в зашифрованном виде храняться. Пробывал ставить брекпоинты на GetSystemDate,GetSystemTime они не срабатывают. Помогите, пожалуйста, разобраться с этим, особенно каким способом вы до этого дошли если можно по подробней. Я даже не знаю чего начать чтобы это побороть. Еще один момент, программа написана на Делфи, используеться тяжеловесные компоненты от чего очень много в ней кода, размер EXE >25 мегабайт. При запросе регистрационных данных имя любое, код любые 16 символов( Например : 1234567890123456) Распакованная версия: (6,5 МБ) ***залил упакованную RARом Упакованная версия: (6,5 МБ) Заранее благодарен за помощь. P.S. если ли способ защиты Олли от этого antidebug метода ? ![]() |
|
Создано: 05 ноября 2010 16:04 · Личное сообщение · #2 criogen пишет: Но через какой-то промежуток времени она выдает сообщение о том что она была взломана и закрывается. А причём тут это criogen пишет: Пробывал ставить брекпоинты на GetSystemDate,GetSystemTime они не срабатывают. criogen пишет: P.S. если ли способ защиты Олли от этого antidebug метода ? Попробуй плагины Phant0m или StrongOD. ----- Лучше быть одиноким, но свободным © $me ![]() |
|
Создано: 05 ноября 2010 16:22 · Поправил: criogen · Личное сообщение · #3 |
|
Создано: 05 ноября 2010 16:24 · Личное сообщение · #4 |
|
Создано: 05 ноября 2010 16:43 · Личное сообщение · #5 |
|
Создано: 05 ноября 2010 20:48 · Поправил: ELF_7719116 · Личное сообщение · #6 criogen пишет: Распакованная версия: (25 МБ) ![]() Ставь точки останова на чтение кода в секции данных и по местам где патчил переходы на регистрацию. работает как зарегистрированная сама регистрация идет со стороны аспротекта или из самой программы ?? ![]() |
|
Создано: 05 ноября 2010 23:47 · Личное сообщение · #7 ELF_7719116 пишет: Явно в программе висит длинный хвост от протектора. Да ладно. Никакого хвоста там нет. Просто куча ресурсов в exe, вы посмотрите сколько Word весит, там вообще нет протектора. criogen Распакованый exe надо было в rar пожать, нахрена 20 метров лишние качать? ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 06 ноября 2010 00:39 · Личное сообщение · #8 Очень интересная защита. Если ее писал автор этого софта, то снимаю шляпу. Хотя мне кажется это просто на заказ сделано. Там внутри лежит виртуальная длл antihack.dll программа ее сама размещает в памяти. Там длл выделяет память и копирует туда базонезависимый код. Код получает все нужные API функции напрямую читая их из системных библиотек. Причем использует он практически только ntdll Zw функции. Потом создает поток и там дергает ZwDelayExecution с продолжительным интервалом. Ну а дальше всё банально ZwCreateFile, ZwReadFile... MessageBoxA Если честно я даже не знаю как там патчить, наверное найти в базонезависимом коде нужную сигнатуру и поискать ее в файле. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 11 ноября 2010 18:52 · Поправил: criogen · Личное сообщение · #9 |
|
Создано: 12 ноября 2010 11:19 · Поправил: ELF_7719116 · Личное сообщение · #10 PE_Kill пишет: вы посмотрите сколько Word весит, там вообще нет протектора У меня winword.exe чуть больше 300 кбайт занимает. Сложно не согласиться, что протекторами там все таки нету ![]() PE_Kill пишет: всё банально ZwCreateFile, ZwReadFile А что мешает положить оригинальный EXE в туже папку, внедрить X-Code injection - пропатчить ZwCreateFile, чтобы он указывал путь на оригинал и пусть защита его проверяет на здоровье (как с protect.dll) ? 1: Мне просто после SecuRom'а 7 неинтересно чего-то более в отладчик загружать ![]() Кстати файл с цифровой подписью, она её проверяет при загрузке? Я думаю она поступает проще-проверяет контрольную сумму. Хотя...смотреть над, но GOTO 1: ![]() |
|
Создано: 12 ноября 2010 13:06 · Личное сообщение · #11 ELF_7719116 пишет: У меня winword.exe чуть больше 300 кбайт Спутал. EXCEL.EXE - почти 18 мегабайт. ELF_7719116 пишет: А что мешает положить оригинальный EXE в туже папку, внедрить X-Code injection Ничто не мешает, лично я так не делаю, т.к. это слишком уныло. Как сделает автор - ему решать. ELF_7719116 пишет: Хотя...смотреть над, но GOTO 1: Если ты прот то его там нет, всё банально. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 12 ноября 2010 19:25 · Поправил: criogen · Личное сообщение · #12 Я поковырял её и вот какие вопросы возникли: 1. В програме для ZwCreateFile передаеться ссылка на него UNICODE "\Device\HarddiskVolume1\cah\Manager.exe". Для этого вызываеться ZwQueryVirtualMemory. Как можно подменить строчку? есть ли какой-то готовый лоадер который может её перехватить и заменить на другую? 2. Выделяется VirtualAlloc 200h памяти 2 блока, в один из них идет чтение из файла. Я прикрепил содержание то что в один заполняется. Такой последовательности байтов в распакованном вообще, а в запакованом есть, я думаю что это всетаки цифровая подпись потому что чуть дальше идет VeriSign Time Stamping Services Signer .... и это все находиться в конце файла. Можно как-то подписать распакованый файл? ![]() ![]() |
|
Создано: 16 ноября 2010 12:50 · Поправил: criogen · Личное сообщение · #13 ELF_7719116 пишет: А что мешает положить оригинальный EXE в туже папку, внедрить X-Code injection - пропатчить ZwCreateFile, чтобы он указывал путь на оригинал и пусть защита его проверяет на здоровье (как с protect.dll) ? А можно ссылку? Я не нашел информации об этом. Если будет с примером будет вообще отлично! ![]() |
|
Создано: 16 ноября 2010 13:36 · Поправил: ELF_7719116 · Личное сообщение · #14 PE_Kill не будем вдаваться в тонкости! ![]() criogen По существу! Собственно "как подменить строчку", т.е. заинжектить ZwCreateFile ! Рабочего варианта на ассемблере я не смог у себя найти, поэтому сшил на VС++ на скорую руку. Идея вообщем-то проста: структура процедуры ZwCreateFile и остальных ей подобных обверток в ntdll имеет вид: Code:
Есть несколько вариантов, но в данной ситуации лучшим будет пропатчить операнд по адресу 7C827444h, который укажет на наш лоадер, осуществим перестановку аргумента, а после из лоадера прыгнем в KiFastSystemCall. Учитвая, что наш "лоадер" будет ловить все вызовы ZwCreateFile, то логично поставить фильтр, который подменяет строку только в требуемом нами случае. Чтобы не париться со сравнением строк, пойдем в обход - сравним адрес возврата, если вызов не из системной библиотеки, "лоадер" приходит к несложному выводу, что это защтный механизм! Самое время послать его куда надо. ![]() Сишный код будет выглядить следующем образом (заранее извиняюсь, если есть косяки, но в конечном случае вы обработаете его напильником для себя; требуется конечную строку перегнать в юникод; не забудьте что переменные НЕ должны размещаеться стеке!): Code:
![]() |
|
Создано: 17 ноября 2010 00:01 · Личное сообщение · #15 |
|
Создано: 17 ноября 2010 14:51 · Поправил: criogen · Личное сообщение · #16 daFix пишет: Парни, одумайтесь Ну так намного проще! У меня только несколько вопросов. 1. Как ты нашел это место, где пропатчил: Code:
2. После подключение к базе вылетает сообщение об ошибке и идет выход из программы. Вот такое сообщение: --------------------------- Microsoft Visual C++ Runtime Library --------------------------- Runtime Error! Program: C:\temp1\Managerfixed.exe R6030 - CRT not initialized Пробывал на двух компьютерах, она выскакивает. У меня вопрос, это только у меня такая ошибка может быть на обоих WinXP SP3? Причем на одном к компьютере когда подключаеться к одной базе нормально, к остальным эта ошибка вылазит. ![]() |
|
Создано: 17 ноября 2010 16:17 · Личное сообщение · #17 |
|
Создано: 17 ноября 2010 16:33 · Поправил: criogen · Личное сообщение · #18 daFix пишет: criogen Ошибка только на моём выскакивает? Да. На распакованном и не патченом не вылазет. Если убрать эти патчи, тогда её тоже нет. 1931736: B0 55 1931737: 01 8B 1931738: C3 EC 1931790: B0 FF 1931791: 01 50 1931792: 90 0C Я посмотрел в Олли, эта функция вызывается 3 раза. Ей в стек передаються : 12FF3C 12FD54 12FB90 ![]() |
|
Создано: 17 ноября 2010 19:36 · Личное сообщение · #19 |
|
Создано: 18 ноября 2010 00:24 · Личное сообщение · #20 |
|
Создано: 18 ноября 2010 01:22 · Личное сообщение · #21 |
|
Создано: 18 ноября 2010 05:03 · Личное сообщение · #22 |
|
Создано: 18 ноября 2010 11:14 · Личное сообщение · #23 |
|
Создано: 18 ноября 2010 11:34 · Поправил: criogen · Личное сообщение · #24 Вот что в стеке: Code:
А вот откуда оно вызывается: Code:
Если поменять jump то оно базу откроет, хоть и с двумя ошибка по чтению памяти. Если не править ту функцию то в [23CA030] находиться указатель на область памяти размером 4000h Access=RW. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Программа после распаковки(crc?) |