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

Сейчас на форуме: soft, Zaxar90800 (+8 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Протекторы —› Анализ ASProtect
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 38 . 39 . >>
Посл.ответ Сообщение

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

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

Я выложил свой первый туториал по анализу ASProtect v2.4 build 12.20 (Анализ подпрограммы эмуляции инструкций.rar http://dump.ru/files/o/o489862518/ ). В этом туториале я подробно описал процесс восстановления эмулированных инструкций типа:
Code:
  1. PUSH 0
  2. PUSH 0CC5850
  3. PUSH 0DB180C
  4. CALL 00CEB814


Полный цикл статей по распаковке ASProtect (Актуальная версия 25 декабря 2009):
ASProtect_Unpacking_Tutorial_2009-12-25.rar http://rapidshare.com/files/325720799/ASProtect_Unpacking_Tutorial_2009-12-25.rar 7,9 МБ
Программы, рассматриваемые в статьях:
ASProtect_Unpacking_Apps_2009-12-25.rar http://rapidshare.com/files/325718084/ASProtect_Unpacking_Apps_2009-12-25.rar 22,2 МБ

Буду благодарен за критику, замечания, пожелания и отзывы.

Скрипты:
Текущая рекомендуемая версия ODBGScript [1.78.3]:
{ Атач доступен только для участников форума } - ODbgScript.dll

Последний текущий комплект скриптов [от 19 февраля 2011]:
{ Атач доступен только для участников форума } - Скрипты для распаковки Asprotect от 19 февраля 2011.rar

Статьи по частям:
Актуальная версия статей [Последняя - 25.11.2010]:
Выпуск 2
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 1
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 2
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 3
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 4
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 5
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 5 (продолжение)
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 6
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 7
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 8
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 9
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 10
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 11
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 12
{ Атач доступен только для участников форума } - Распаковка ASProtect - Часть 13
{ Атач доступен только для участников форума } - Распаковка Asprotect - Часть 14
{ Атач доступен только для участников форума } - Распаковка Asprotect - Части 15 и 16

DriEm конвертировал мой цикл статей в формате PDF, который можно скачать по ссылке --> Link <--

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

Создано: 7 июня 2008 18:27 New!
Цитата · Личное сообщение · #2

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


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

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

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

Создано: 7 июня 2008 18:31 New!
Цитата · Личное сообщение · #3

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

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

Создано: 7 июня 2008 20:19 New!
Цитата · Личное сообщение · #4

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, восстановили эти куски кода, судя по записи кода в таких местах, по ранним версиям этого пакера, которые не содержали эмуляцию инструкций такого типа.


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

Создано: 7 июня 2008 21:32 New!
Цитата · Личное сообщение · #5

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


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

Создано: 8 июня 2008 21:08 New!
Цитата · Личное сообщение · #6

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

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

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

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

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

Создано: 9 июня 2008 09:48 New!
Цитата · Личное сообщение · #7

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


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


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

Создано: 9 июня 2008 10:18 New!
Цитата · Личное сообщение · #8

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

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

Создано: 9 июня 2008 10:48 New!
Цитата · Личное сообщение · #9

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

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

Создано: 10 июня 2008 08:13 New!
Цитата · Личное сообщение · #10

Нужен совет. Для определения первого байта опкода эмулированной инструкции разработчики применяют инструкцию 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.


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

Создано: 10 июня 2008 09:53 New!
Цитата · Личное сообщение · #11

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

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

Создано: 10 июня 2008 15:15 New!
Цитата · Личное сообщение · #12

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

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

Создано: 10 июня 2008 15:31 New!
Цитата · Личное сообщение · #13

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


{ Атач доступен только для участников форума } - aspr2.xx v1.14ae.RAR

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

Создано: 10 июня 2008 15:47 New!
Цитата · Личное сообщение · #14

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

{ Атач доступен только для участников форума } - ODbgScript.1.64.3.VC6.rar

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

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

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

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


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

Создано: 13 июня 2008 23:43 New!
Цитата · Личное сообщение · #16

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


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

Создано: 14 июня 2008 01:53 New!
Цитата · Личное сообщение · #17

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


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

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

Хочу поделиться тем что я нарыл поверхностно осмотрев ВМ. Первое тестирование
бита (когда тестируется 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, некогда смотреть.
Но то, что видно уже щас говорит о том, что как в аспре всё было на коленке
сделано, так и осталось.

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

Создано: 14 июня 2008 06:21 New!
Цитата · Личное сообщение · #19

PE_Kill

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

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

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

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

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

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

Создано: 21 июня 2008 16:42 New!
Цитата · Личное сообщение · #21

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

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

Создано: 21 июня 2008 17:11 New!
Цитата · Личное сообщение · #22

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.

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

Создано: 21 июня 2008 17:23 New!
Цитата · Личное сообщение · #23

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

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

Создано: 21 июня 2008 22:50 New!
Цитата · Личное сообщение · #24

winndy

Thanks for an estimation of mine tutorials.


Ранг: 603.8 (!)
Статус: Модератор
Research & Development

Создано: 22 июня 2008 19:03 New!
Цитата · Личное сообщение · #25

vnekrilov

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

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

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

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

Создано: 23 июня 2008 08:46 New!
Цитата · Личное сообщение · #26

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


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

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

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


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

Создано: 23 июня 2008 09:31 New!
Цитата · Личное сообщение · #27

vnekrilov
Вот.

{ Атач доступен только для участников форума } - Emulation in Asprotect (Parte 1) by vnekrilov.rar

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

Создано: 11 июля 2008 08:48 · Поправил: vnekrilov New!
Цитата · Личное сообщение · #28

Написал вторую часть статьи по восстановлению эмулированных инструкций в AsProtect. К этой статье приложено два скрипта - Восстановление эмулированных подпрограмм в Asprotect_dll.osc и Восстановление эмулированных подпрограмм в главной области кода программы.osc. Немного позже я сделаю универсальным скрипт Восстановление эмулированных подпрограмм в Asprotect_dll.osc, который будет восстанавливать эмулированные инструкции в Asprotect_dll, без его привязки к конкретной программе. Скрипт Восстановление эмулированных подпрограмм в главной области кода программы.osc является предварительным, поскольку он не восстанавливает эмулированные инструкции, описанные во второй части статьи. Эти инструкции он заменяет инструкциями NOP.
Здесь я хотел бы получить совет по следующему вопросу. Подпрограмма выполнения эмулированных инструкций, описанная во второй части статьи, выполняет инструкции следующих типов:
MOV REG_1,REG_2
MOV REG_2,REG_1
MOV DWORD PTR DS:[REG_1+CONST_1],REG_2
MOV REG_1,DWORD PTR DS:[REG_2+CONST_2]
MOV REG_1,DWORD PTR DS:[REG_1]
MOV REG_1,BYTE PTR DS:[REG_1]
MOV REG_2,DWORD PTR DS:[REG_2]
MOV REG_2,BYTE PTR DS:[REG_2]
ADD REG_1,REG_2
SUB REG_1,REG_2
MOV DWORD PTR DS:[REG_1],REG_1
MOV DWORD PTR DS:[REG_1],REG_2
MOV BYTE PTR DS:[REG_1],BYTE REG_1
MOV BYTE PTR DS:[REG_1],BYTE REG_2

Эти типы жестко привязаны к своим участкам кода, и определить, какие здесь выполняются эмулированные инструкции, не представляет никакого труда. В отладчике OllyDbg легко ассемблируются инструкции с помощью соответствующего окна ассемблирования, т.е., зная, например, что сейчас выполняется инструкция MOV EAX, DWORD PTR DS:[EBP+534], ее записываем в это окно, и получаем ассемблированный код этой инструкции. Однако, я что-то пока не придумал, как это реализовать в скрипте. Можно, конечно, использовать команду ASM, но тогда придется значительно усложнять сам скрипт, поскольку вся основная работа по восстановлению эмулированных инструкций проводится в подпрограмме, код которой записывается скриптом на свободное место в подпрограмме (для AsProtect v2.4 build 02.26, я использую адрес 00585000, который заполнен нолями). Желательно бы дописать код этой подпрограммы таким образом, чтобы он ассемблировал нужную инструкцию. Буду очень признателен за советы и подсказки.

{ Атач доступен только для участников форума } - Emulation in Asprotect (Parte 2) by vnekrilov.rar


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

Создано: 11 июля 2008 11:07 New!
Цитата · Личное сообщение · #29

Ну тут только смотреть как кодируются команды и самому побайтно их собирать следуя мануалу кодирования от интел например.


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

Создано: 11 июля 2008 11:25 · Поправил: kioresk New!
Цитата · Личное сообщение · #30

vnekrilov,

если хочешь сделать скрипт универсальными, то не надо записывать код в память программы/обнулять ее/спрашивать где размещать код. Можно же просто выделить память alloc'ом, записать туда код и не делать никаких лишних движений.

Если адрес обработчика ВМ'леных комманд можно найти самому, то сделай обработку, чтобы не спрашивать его адрес тоже.

По поводу восстановления комманд — посмотри опкоды нужной тебе комманды и восстанавливай ее кодом (без использования комманды asm в скрипте), имхо так проще будет.

В качестве примера рассмотрим команду mov reg32, reg32.

Ее опкоды:

8BC0 mov eax, eax
8BC1 mov eax, ecx
8BC2 mov eax, edx
8BC3 mov eax, ebx
8BC4 mov eax, esp
8BC5 mov eax, ebp
8BC6 mov eax, esi
8BC7 mov eax, edi

8BC8 mov ecx, eax
8BC9 mov ecx, ecx
8BCA mov ecx, edx
8BCB mov ecx, ebx
8BCC mov ecx, esp
8BCD mov ecx, ebp
8BCE mov ecx, esi
8BCF mov ecx, edi

...

За базу берешь 8BC0, дальше прибавляешь к ней индекс первого регистра умноженный на 8 и индекс второго регистра.

Где индексы регистров от 0 до 8 в том порядке в котором они идут в отладчике, т.е.

0 eax
1 ecx
...
7 edi

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


Постскриптум

Немного конструктивной (или неконструктивной) критики — что у тебя за мания все на русском писать (ТЕИ-ШМЕИ)?. Делом верным занимаешь, но пишешь так (вкупе с раскрасками), что мозг выносит.

Я так в доки и не стал вкуривать.

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

Создано: 11 июля 2008 12:50 New!
Цитата · Личное сообщение · #31

PE_Kill
kioresk

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

kioresk пишет:
Можно же просто выделить память alloc'ом, записать туда код и не делать никаких лишних движений.


Я сначала думал об этом. Но, код для восстановления эмулированных инструкций занимает около 14 кб. Как правило, всегда можно найти свободное место в теле программы, куда и можно поместить этот код, поэтому я и решил ввести в скрипт возможность выбора области памяти.
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 38 . 39 . >>
 eXeL@B —› Протекторы —› Анализ ASProtect

Видеокурс ВЗЛОМ