CRACKL@B Оригинальный DVD-ROM крэкера: CRACKL@B DVD !
Домой | Статьи | RAR-cтатьи | Форум | Программирование | Скачать | DVD-ROM
Новичку | FAQ | Ссылки | Интервью | Архив | Новости | Связь


Русский / Russian English / Английский

Сейчас на форуме: VaD, denvenya, Xoluay, um0v, Iona, Ara, download (+5 невидимых пользователей)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 CRACKL@B —› Протекторы —› Анализ AsProtect
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 18 . 19 . >>
Посл.ответ Сообщение
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 28 марта 2008 15:30:10 · Поправил: Модератор
Личное сообщение #1

На http://dump.ru/files/o/o489862518/ я выложил свой первый туториал по анализу AsProtect v2.4 build 12.20. В этом туториале я подробно описал процесс восстановления эмулированных инструкций типа:
PUSH 0
PUSH 0CC5850
PUSH 0DB180C
CALL 00CEB814

Это - первая статья из нескольких статей по анализу протектора AsProtect v2.4 build 12.20. Мной уже подготовлены статьи по восстановлению таблицы IAT на основе таблиц данных AsProtect, прохода на OEP, и завершаю подготовку статьи по работе ключа активации программы.

Буду благодарен за критику, замечания, пожелания и отзывы. Возможно, удастся совместными усилиями разработать универсальный скрипт для восстановления всех эмулируемых инструкций.
Medsft

Ранг: 92.5 (постоянный)
Статус: Участник

Создано: 7 июня 2008 10:06:54 · Поправил: Medsft
Личное сообщение #2

А что нельзя использовать теорию vnekrilov`а по нахождению ворованного после bpmx ведь как я понял и он анализирует прогу стоя на так называемом boep который находиться в секции code
Bronco


Ранг: 527.7 (!)
Статус: Участник

Создано: 7 июня 2008 11:01:42
Личное сообщение #3

Smon пишет:
ни один аспр не ворует оеп у библ, по всей видимости из-за сложностей в реализации

+1
//возможно из-за релоков

-----
Чтобы юзер в нэте не делал,его всё равно жалко..
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 7 июня 2008 16:03:52
Личное сообщение #4

Medsft пишет:
Но вот вопрос возможно ли сделать скрипты из статьи универсальными или нет.


Не получается! Я проверил несколько последних версий аспра, по восстановлению эмулированных инструкций. В каждой версии, в таблице ТЭИ используются разные адреса, которые содержат нужные данные для восстановления кода подпрограммы. Поэтому приходится делать сравнительную таблицу этих адресов, и выполнять их корректировку. Хотя, если использовать оригинальные инструкции CALL EDX, то, вероятно, это возможно сделать. Но скрипт будет усложнен. Хотя можно попытаться это сделать.
pavka

Ранг: 994.0 (! ! !)
Статус: Участник

Создано: 7 июня 2008 18:19:11
Личное сообщение #5

vnekrilov пишет:
Но вот вопрос возможно ли сделать скрипты из статьи универсальными или нет.

Так у волка универсальные скрипты
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 7 июня 2008 18:27:46
Личное сообщение #6

pavka пишет:
Так у волка универсальные скрипты


Скрипты волка не восстанавливают инструкции типа
PUSH 0
PUSH 0CC5850
PUSH 0DB180C
CALL 00CEB814

Как я понял, Medsft это имел ввиду.
pavka

Ранг: 994.0 (! ! !)
Статус: Участник

Создано: 7 июня 2008 18:31:40
Личное сообщение #7

vnekrilov
Те аспры что китайцы выкладывали анпакнуты скриптами волка
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 7 июня 2008 20:19:56
Личное сообщение #8

pavka пишет:
Те аспры что китайцы выкладывали анпакнуты скриптами волка


Я проверил последний скрипт волка на AsProtect v2.41 build 02.26 (оригинальном, не пропатченном файле). Этот скрипт не восстанавливает инструкции типа:

004A47CE PUSH D3808EE5
004A47D3 PUSH 2D7FB744
004A47D8 PUSH 0D7A224
004A47DD CALL 00CD6A20

А здесь разработчики пакера предусмотрели очень интересный ход. Выполнение CALL 00CD6A20 раскриптовывает закриптованные данные эмулированных инструкций, и меняет этот код на следующий:

004A47CE PUSH 0
004A47D3 PUSH 2D3FB744
004A47D8 PUSH 0D80CC8
004A47DD CALL 00CD6A4C

Однако реализация эмуляции этого кода проводится несколько иначе (это относится к первому байту опкода инструкций). Здесь разработчики используют инструкцию BT [EAX],EDX, и после тестирования байта, указанного в регистре EDX, выполняют нужную ветку кода. В прямом виде получить раскриптованный первый байт опкода мне пока не удалось. Сейчас думаю, как это сделать. В частности, в коде программы AsProtect v2.41 build 02.26, таких инструкций я насчитал 28.

Китайцы, в своей анпакнутой версии AsProtect v2.4 build 11.20, восстановили эти куски кода, судя по записи кода в таких местах, по ранним версиям этого пакера, которые не содержали эмуляцию инструкций такого типа.
Smon


Ранг: 471.5 (мудрец)
Статус: Участник

Создано: 7 июня 2008 21:32:33
Личное сообщение #9

Такие же эмуленные инструкции есть и в коде ASProtect 2.30 build 06.26, китайцами они восстановлены в анпакнутой by shoooo версии, и есть предположение, что этот код срисован с предыдущего билда - ASProtect 2.30 build 05.14, где такой эмуляции в секции кода изначально нет, она только в aspr.dll

-----
© Не каждый программист - крэкер, но каждый крэкер - программист ;)
PE_Kill


Ранг: 455.4 (мудрец)
Статус: Участник
Шаман

Создано: 8 июня 2008 21:08:51
Личное сообщение #10

vnekrilov пишет:
В прямом виде получить раскриптованный первый байт опкода мне пока не удалось. Сейчас думаю, как это сделать.

И не получится. Они сделали обычную замену опкодов, а всё остальное осталось также.

Например nop 90h теперь 1Dh.

А насчет BT не парься, она здесь для другого.

-----
Любой каприз за ваши деньги
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 9 июня 2008 09:48:53
Личное сообщение #11

PE_Kill пишет:
А насчет BT не парься, она здесь для другого


Да! Инструкция BT здесь применяется для указания ветки кода, где извлекаются и выполняются остальные байты опкода инструкций. Для уточнения этой ветки кода разработчики заложили еще два рядом идущих закриптованных параметра, которые раскриптовываются с помощью последнего байта константы. Эти параметры также получаются на базе первого байта опкода инструкций. Хочу посмотреть, как аспр определяет эти три параметра: ведь он должен использовать какой-то алгоритм для обработки первого байта опкода инструкций, чтобы получить эти три параметра. Попытаюсь проработать этот вопрос.
PE_Kill


Ранг: 455.4 (мудрец)
Статус: Участник
Шаман

Создано: 9 июня 2008 10:18:30
Личное сообщение #12

Для начала надо найти опкоды замены, т.е. таблицу какому опкоду соответствует какой индекс, думаю она есть где то в теле протектора.

-----
Любой каприз за ваши деньги
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 9 июня 2008 10:48:59
Личное сообщение #13

Спасибо за подсказку. Я примерно так и думал.
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 10 июня 2008 08:13:44
Личное сообщение #14

Нужен совет. Для определения первого байта опкода эмулированной инструкции разработчики применяют инструкцию BT [EAX],EDX. Число этих инструкций в Asprotect.dll - 34. При этом одним из основных параметров этой инструкции является значение регистра EDX, которое указывает, какой нужно тестировать байт. Регистр EDX может иметь следующие значения: 0, 1, 2, 3, 6 и 7. Для вычисления нужной ветки кода, которая должна соответствовать, например, инструкции MOV EAX,EBX, первый опкод которой - это байт 8B, пакер несколько раз вызывает инструкцию BT [EAX],EDX, с разными значениями регистра EDX. При этом он тестирует несколько битов в содержимом регистра EAX, после чего делает вывод о том, что это будет инструкция MOV. Мне кажется, что это каким-то образом напоминает своеобразный штрих-код, в котором в двоичном виде записана вся необходимая информация об этом байте опкода. Возникает вопрос, каким образом, имея значение регистра EAX (оно берется из таблицы ТЭИ), и зная, какие тестируются биты, можно определить значение первого байта опкода? Может быть кто-то может поделиться какими-то идеями. Можно, чтобы не засорять топик, писать мне на ПМ vnekrilov@yandex.ru.
PE_Kill


Ранг: 455.4 (мудрец)
Статус: Участник
Шаман

Создано: 10 июня 2008 09:53:32
Личное сообщение #15

vnekrilov чисто математически это невозможно, надо искать как аспр кодирует эти значения. А засорять тут нечего так как это и есть контент топика.

-----
Любой каприз за ваши деньги
Medsft

Ранг: 92.5 (постоянный)
Статус: Участник

Создано: 10 июня 2008 15:15:00
Личное сообщение #16

У кого доступ на exetools качните сюда плз. последний скрипт от волка.
Medsft

Ранг: 92.5 (постоянный)
Статус: Участник

Создано: 10 июня 2008 15:31:58
Личное сообщение #17

Сам нашел если еще у кого то нет ссылка внизу теперь другой вопрос odbscript 1.64 может кто поделится


b397_10.06.2008_CRACKLAB.rU.tgz - aspr2.xx v1.14ae.RAR
Medsft

Ранг: 92.5 (постоянный)
Статус: Участник

Создано: 10 июня 2008 15:47:32
Личное сообщение #18

Баа как я гуглить научился

ac5b_10.06.2008_CRACKLAB.rU.tgz - ODbgScript.1.64.3.VC6.rar
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 13 июня 2008 09:48:30 · Поправил: vnekrilov
Личное сообщение #19

Потихоньку добиваю вопрос восстановления эмулированных инструкций типа:
004A47CE PUSH D3808EE5
004A47D3 PUSH 2D7FB744
004A47D8 PUSH 0D7A224
004A47DD CALL 00CD6A20

Возникла следующая идея. Для выполнения эмулированной инструкции, протектор использует инструкцию BT [EAX],EDX, в сочетании с двумя другими значениями, которые расположены в таблице ТЭИ по адресам Byte_15h и Byte_16h. При этом, как мне кажется, первый байт опкода инструкции жестко привязан к конкретной ветке кода подпрограммы эмуляции, поскольку, далее пакер извлекает второй и последующие байты опкода эмулируемой инструкции, после чего выполняет ее. Попытки сделать защиту тестовой программы, которая имела бы такой-же эмулированный код, у меня не увенчалась успехом.
Может ли кто-либо проконсультировать, как сделать такую защиту тестовой программы, поскольку хелп такой подсказки не дает.
PE_Kill


Ранг: 455.4 (мудрец)
Статус: Участник
Шаман

Создано: 13 июня 2008 23:43:38
Личное сообщение #20

vnekrilov мне удалось это. Делается так. Берешь исходник какого нибудь проекта, оформальяешь функции макросом begin_crypt/end_crypt только одним и темже например первым. Функций должно быть не меньше 6, лучше 10-15. Затем компилишь и накрываешь аспром с опциями использовать активационные ключи, расшифровывать куски кода и ОБЯЗАТЕЛЬНО привязка к Hardware ID. Только тогда СКОРЕЕ ВСЕГО аспр накроет новой ВМ ОДНУ из функций обрамленных криптомакросами. Ну и конечно чтобы это увидеть надо запустить защищенную прогу и сгенерить ей ключ чтобы расшифровался код.
И еще функции не должны быть слишком маленькими.

-----
Любой каприз за ваши деньги
PE_Kill


Ранг: 455.4 (мудрец)
Статус: Участник
Шаман

Создано: 14 июня 2008 01:53:22
Личное сообщение #21

ADD Если и после этого аспр не навесит ВМ, то надо просто накатать какую нибудь прожку которая будет проверять куски пошифрованого кода на предмет ВМ 68????????68????????... и перезащищать файл пока он не навесит ВМ. По нормальному надо бы найти в аспре где вызывается рандом и пофиксить его. А пока у меня выходит из 10 попыток защитить 2 раза навешивается ВМ.

-----
Любой каприз за ваши деньги
PE_Kill


Ранг: 455.4 (мудрец)
Статус: Участник
Шаман

Создано: 14 июня 2008 02:42:51 · Поправил: PE_Kill
Личное сообщение #22

Хочу поделиться тем что я нарыл поверхностно осмотрев ВМ. Первое тестирование
бита (когда тестируется 7й бит) нужно аспру для определения размера операнда.
По дефолту стоит 4 - DWORD, это и понятно 32 битная система всё таки.
Вот тут это происходит
mov edx, 7h
mov eax, dword ptr [esi+82h]
call 0C93FECh
test al, al
je 0C9A7E1h

Если je 0C9A7E1h не выполнится то аспр установит указатель размерности в 1,
я так понимаю BYTE.

Разбираю опкоды 90h-9Fh. В аспровом case они проходят как индекс 1Dh,
в ветке, которая обрабатывает 1Dh тестируется нулевой бит. Если бита нет то
аспр перейдет в другой case, иначе это однобайтовая команда диапазона 90h-97h.
С ними всё просто, их аспр рассматривает как
xchg r32, r32, даже nop. Т.к. по спецификациям кодирования он проходит как
xchg eax, eax. Далее команды:
mov al, byte ptr [eax]
add al, byte ptr [esi+4h]
and eax, 0FFh
извлекают правые 4 бита опкода. Т.е. если команда была xchg eax, edx (92h), то в
al у нас будет 02h.
Тут в принципе всё ясно.

А вот во втором case идет сопоставление индексов опкодам.
Команды
mov al, byte ptr [eax]
add al, byte ptr [esi+4h]
and eax, 0FFh
Расшифровывают индекс и пошло сравнение:
Индекс A8h - Опкод 98h (CWDE)
Индекс 1Dh - Опкод 99h (CDQ)
*** и так далее ***

Пока не знаю весь ли диапазон 98h-9Fh охватывет этот case, некогда смотреть.
Но то, что видно уже щас говорит о том, что как в аспре всё было на коленке
сделано, так и осталось.

-----
Любой каприз за ваши деньги
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 14 июня 2008 06:21:34
Личное сообщение #23

PE_Kill

Очень интересный анализ. Спасибо за подсказку. Посмотрю в этом направлении.
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 21 июня 2008 14:01:42 · Поправил: vnekrilov
Личное сообщение #24

На обменнике http://www.sendspace.com/file/mz4n9f я выложил свою очередную статью, в которой описал эмуляцию инструкций пакером в главной области кода программы. Это - первая часть статьи, в которой описан процесс эмуляции инструкций первого типа. Во второй части статьи я опишу процесс эмуляции инструкций второго типа.

Хочу выразить благодарность PE_Kill за его ценные советы и подсказки. Как всегда, буду признателен за отзывы, пожелания, замечания и критику.
winndy

Ранг: 8.8 (гость)
Статус: Участник

Создано: 21 июня 2008 16:42:16
Личное сообщение #25

vnekrilov,do you have English tutorials about your asprotect unpacking tutorials?
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 21 июня 2008 17:11:38
Личное сообщение #26

winndy пишет:
vnekrilov,do you have English tutorials


Unfortunately, I do not know sufficiently English language to make their translation. There can be it will make someone who well knows English.
winndy

Ранг: 8.8 (гость)
Статус: Участник

Создано: 21 июня 2008 17:23:16
Личное сообщение #27

your tutorials are worth with translation.
It's great.
Few people would like to share their knowledge.
I use google translate to read your tutorials.
But if there is anyone who knows both Russian and English.
It will be great.
Your tutorials will be more popular.

Thanks
BR
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 21 июня 2008 22:50:16
Личное сообщение #28

winndy

Thanks for an estimation of mine tutorials.
Jupiter


Ранг: 357.7 (мудрец)
Статус: Участник
Research & Development

Создано: 22 июня 2008 19:03:59
Личное сообщение #29

vnekrilov

в данном контексте:

Полученный результат является указателем, который сообщает подпрограмме эмуляции, прибавлять ли ImageBase области кода к извлеченному значению из таблицы ТЭИ, или нет.

слово "указатель" следует заменить на "флаг", т.к. термин "указатель" имеет другое значение.

-----
EnJoy!
vnekrilov

Ранг: 188.6 (ветеран)
Статус: Участник

Создано: 23 июня 2008 08:46:02
Личное сообщение #30

Jupiter пишет:
слово "указатель" следует заменить на "флаг", т.к. термин "указатель" имеет другое значение


Спасибо за уточнение, учту.

Судя по всему, я нашел подход к созданию скрипта для восстановления эмулированных инструкций в области кода программы. Правда, пока он будет восстанавливать только те инструкции, которые выполняются в подпрограмме, описанной в первой части статьи. А вот эмулированные инструкции, которые выполняются во второй подпрограмме, пока-что, по видимому, придется восстанавливать вручную. Правда, таких инструкций в программе имеется немного. Скоро, через день-два, я выложу вторую часть статьи, в которой описана работа второй подпрограммы при выполнении эмулированных инструкций. Черновик этой статьи уже готов.

И еще одна просьба к участникам форума. У меня что-то не получается прикрепить к топику статьи. Происходит сброс (видимо маленькая скорость передачи данных). Если кто-то может, прикрепите к данному топику первую часть статьи, а потом, когда я выложу вторую часть, то и вторую часть статьи.
[HEX]


Ранг: 465.5 (мудрец)
Статус: Участник
Иной :)

Создано: 23 июня 2008 09:31:41
Личное сообщение #31

vnekrilov
Вот.

6889_22.06.2008_CRACKLAB.rU.tgz - Emulation in Asprotect (Parte 1) by vnekrilov.rar

-----
Computer Security Laboratory
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 18 . 19 . >>
 CRACKL@B —› Протекторы —› Анализ AsProtect
    Для печати 


Оригинальный DVD-ROM крэкера: CRACKL@B DVD !


Вы находитесь на форуме сайта CRACKLAB.RU
Проект ReactOS