eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

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

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

 eXeL@B —› Софт, инструменты —› XVolkolak 0.10 unpacker emulator
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение

Ранг: 35.9 (посетитель)
Статус: Участник

Создано: 31 марта 2018 12:22 · Поправил: hypn0 New!
Цитата · Личное сообщение · #1

Автор зарелизил, а тут сообщить забыл.
Качайте, пользуйтесь, тестируйте.

https://n10info.blogspot.ru/2018/03/xvolkolak-010.html

Автору большое спасибо!

Xvolkolak is an unpacker emulator.

Unlike programs of this type, it does not use DebugAPI and other features of the operating system. Everything is emulated. You can safely unpack malware for further investigation without the risk of damaging the system.
All machine instructions are not executed on a real processor, so unpacking occurs regardless of the processor type and the operating system.
It is possible to unpack 64 bit files on 32 operating systems.
This build emulates the processors intel x86 and AMD64.
It supports unpacking 32 and 64 bit Windows executable files. If there is community interest, it will be possible to unpack other executable files (ELF, MSDOS, Mach-O) and other processors.

Due to its capabilities, with the correct manual setting, the program engine can be used to unpack almost any packer / tread.
However, this version of the program works in a fully automatic mode and can only unpack simple non-commercial unpackers such as:

UPX
ASPack
NsPack
Mpress
MEW
(Win) Upack
FSG
and some others.

The version of the program with the possibility of unpacking commercial protectors (such as VMProtect, ASProtect and others) will not appear in the public domain for obvious reasons.

| Сообщение посчитали полезным: Gideon Vi, Orlyonok, hors, TRPD, MarcElBichon, mak, Jupiter, HandMill, 4kusNick, Jaa, ADMIN-CRACK



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

Создано: 19 июля 2019 18:04 New!
Цитата · Личное сообщение · #2

daFix

> without the risk of damaging the system.

К примеру пин выполняет сервисы ядра напрямую, тоесть апп уязвимо как и при прямом запуске.

Это не важно, так как все такое запускают на вм. Хотя можно в принципе заблочить опасные операции, но врядле такое нужно, излишнее усложнение. А в общем же подобие ав-вм не может использоваться для запуска пакеров. Так как там всегда фишки юзаются для обхода вм.

Добавлено спустя 3 минуты
Bronco

> получить по смещениям эффективный адрес, как то не светится.

Линейный адрес наверно, эффективный вычисляется без сегментов по MODR/M или прямому смещению. LA = EA + SEG.Base. Просто поправил.

| Сообщение посчитали полезным: Bronco



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

Создано: 19 июля 2019 18:25 New!
Цитата · Личное сообщение · #3

difexacaw пишет:
Линейный адрес наверно,

феньк за уточнения. давно не в теме, многое подзабыл ( или не вникал).
у меня в юникорне пока с этим затык, решал по колхозному(GS&FS), но сейчас уже не вариант, как то оно всё размазано по трассе. И повторюсь, загрузчик для трассера Mr.eXoDia x64 dbg.
difexacaw пишет:
вычисляется без сегментов по MODR/M

доктор, лечи дальше // это не шутка.


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

Создано: 19 июля 2019 18:50 · Поправил: difexacaw New!
Цитата · Личное сообщение · #4

Bronco

Так как произвольный сегмент создать нельзя(LDT), то достаточно определять сегмент по значению регистра. Это касается как 86, так и 64. На 64 префиксы переопределения сегмента кроме тех двух игнорятся.

На 86 я делаю так, определение базы сегмента не нужно:

Code:
  1. ; Eax: EA
  2.                  mov ecx,[ebx].Ia.Rseg    ; XED.RSEG: used s-reg.
  3.                  mov edx,[ebx].State           ; Task state.
  4.                  movzx ecx,W TST.Rsg[edx][ecx*4]   ; Value of RSEG.
  5.                  and ecx,NOT(11B)                 ; ~RPL
  6.                  xor edx,edx
  7.                  cmp rFs,ecx            ; TEB(FS at init) ?
  8.                  cmove edx,fs:[TEB.Tib.Self]
  9.                  add eax,edx            ; Yes, EA to VA.


Те по значению. На 64 будет аналогично. Проблема может быть в дизасме, он должен возвращать используемый сегмент, а не только дефолтный. С учётом переопределений сегмента.


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

Создано: 19 июля 2019 19:19 New!
Цитата · Личное сообщение · #5

difexacaw пишет:
Те по значению.

"доктор", у меня тот же колхоз, только на плюсах, и возня с mem_invalid_hook_дизом_и_фильтрами. значений для GS_or_FS, вроде как не очень много, но млять, для чего тогда в кьюэму&юникорн сегментные регистры?


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

Создано: 19 июля 2019 19:24 · Поправил: difexacaw New!
Цитата · Личное сообщение · #6

Bronco

Тогда не понятно в чём проблема заключается, дизасм возвратит валидный юзаемый сегментный регистр и его значение получается из контекста. Если что то в этой цепочке глючит - дизасм или эмулятор, то втопку такое. А конкретно по qe я не знаю, это не юзаю и его баги хз.


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

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

difexacaw пишет:
Определяет хардкодом ?
Конечно в таком случае нужно использовать сигнатуры для конкретного прота.


Да. Хардкод плюс в некоторых случаях эвристика.

difexacaw пишет:
А есчо сложные проты эмулятор ваш возможно не может крутить, те дойти до фазы дампа(те до OEP).


Было такое что эмулятор спотыкался на некоторые антиэмуляторнае маханизмы. Но всё решалось патчами кода и доработкой самого эмулятора. Это сделать несложно когда работаешь с конкретными протекторами, а не пишешь общее решение для всех.

difexacaw пишет:
Кстате это опенсорсный проект или нет, интересно конкретно посмотреть как там что крутится ?


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


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

Создано: 19 июля 2019 19:48 New!
Цитата · Личное сообщение · #8

difexacaw пишет:
Тогда не понятно в чём проблема заключается

кьюэму юзается не напрямую, а через надстройку юникорна.
Чем собственно и заинтриговал сабж из топа, и хочу услышать почитать коменты&мнение&совет от автора. Ведь загрузчики пакеров&протов то же юзают подобные инструкции, для пеб или теб и тп. а у меня инструкции размазаны по трассе, и фильтровать через структуру диза ModR/M byte, потеря по времени, как минимум.
Пока думается что кривые руки, а там хз.


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

Создано: 19 июля 2019 20:04 · Поправил: hors New!
Цитата · Личное сообщение · #9

Bronco пишет:
У меня вопрос по эмулятору процессора , а точнее по сегментным регистрам.
Под Unicorn, всё тот же QEMU, и сегментные регистры , вроде как есть.
Инфу беру из под дебагера, она стабильно не меняется, но получить по смещениям эффективный адрес, как то не светится.


Всё тоже самое что и на реальном процессоре/операционной системе. Выделяется память под GDT --> Link <--

Если мы говорим о Windows, то выделяется память под TEB --> Link <-- (на неё будут указывать FS)

Заполняем GDT, особенно не забывая про FS

Правим регистр GDTR
Правим сегментные регистры.

| Сообщение посчитали полезным: Bronco



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

Создано: 19 июля 2019 20:26 · Поправил: difexacaw New!
Цитата · Личное сообщение · #10

Bronco

> фильтровать через структуру диза ModR/M byte, потеря по времени

Это как ?
Вначале любая инструкция раскодируется, что бы узнать длину как минимум и адресацию. Те EA известен, о какой потере тайминга идёт речь не понятно. Может вм какую то инфу не предоставляет, например выхлоп диза, а только таскстат, то повторный дизасм в этом случае да, просадка профайла.

С другой строны можно для раскодировки обойтись без диза. Я так сделал при тестах ав-вм. Забил таблицы MODRM(маркеры для инструкций), 4 вроде таблицы. А далее смещение вычисляется элементарно, по соотв. полю. Но там суть была не в тайминге, а в окончании эмуляции - у ав лимит на число инструкций и толстым дизом крутить не получается.

Добавлено спустя 4 минуты
hors

> Нет. Пока не опенсорсный, но я наверное код опубликую в будущем.

А почему не опен ?
Там что, какие то секретные техники используются - наврядле судя по функционалу. Вот мне например интересно глянуть, так бы открыл сурки и посмотрел. Иначе нужно открывать это всё инструментами, пустая трата кучи времени на реверс. Хотя с другой стороны если открыть сурки, глянуть пару минут - понял и закрыл, соответственно забыл.


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

Создано: 19 июля 2019 20:54 New!
Цитата · Личное сообщение · #11

difexacaw пишет:
А почему не опен ?
Там что, какие то секретные техники используются - наврядле судя по функционалу. Вот мне например интересно глянуть, так бы открыл сурки и посмотрел. Иначе нужно открывать это всё инструментами, пустая трата кучи времени на реверс. Хотя с другой стороны если открыть сурки, глянуть пару минут - понял и закрыл, соответственно забыл.


Много причин почему я не хочу публиковать некоторые свои проекты.
Секретные и оригинальные техники кстати там присутствуют тоже.
А иначе зачем тогда это всё делать?


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

Создано: 19 июля 2019 21:10 · Поправил: difexacaw New!
Цитата · Личное сообщение · #12

hors

Механизмы могут быть общими, те их можно описать кратко и понятно. В таком случае сурки не особо нужны, только что бы мелкие детали реализации уточнить. Если же это некий чёрный ящик", который хз как работает, то на словах это не опишешь и показать сурки нужно. В противном случае такой инструмент рассчитан так скажем на не спецов, на людей которые могут только кнопки нажимать в гуе, им не интересно что и как устроено, механизмы, нужен лишь готовый результат, выхлоп тулза. Такие не оценят вашу работу.

ps: не подумайте что мне необходимы ваши сурки. Мне просто интересно, сам метод(эмуляцию ОС) я считаю не пригодным.


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

Создано: 20 июля 2019 00:42 New!
Цитата · Личное сообщение · #13

difexacaw пишет:
Это как ?

шаманить с контекстом можно только на хуках из фейса юникорна, и так чтобы успеть, до фейла...))
в итоге это же костыли. а само значение может формироваться хз где, прежде чем дойдёт до исполнения. и мониторить на врайте, через чтение дизом, не во всех случаях выручает. Лучшим вариантом формировать окружение, ведь по дефолту QEMU на это способен, вот только юникорн научить осталось.
Семпл для х86 скинули, будем на посмотреть.


Ранг: 534.2 (!)
Статус: Участник
оптимист

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

hors пишет:
Много причин почему я не хочу публиковать некоторые свои проекты.
Секретные и оригинальные техники кстати там присутствуют тоже.
А иначе зачем тогда это всё делать?

Иногда лучше держать всё в тайне а то некоторые личности прикидываются шлангами а сами правой рукой защиты пишут и барыжат ими

| Сообщение посчитали полезным: ajax



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

Создано: 21 июля 2019 02:30 New!
Цитата · Личное сообщение · #15

Bronco

А что вы делаете, зачем вам это. Что то ядерное крутите гипером ?


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

Создано: 22 июля 2019 19:02 New!
Цитата · Личное сообщение · #16

Code:
  1. pecompact +
  2. aspack +
  3.  
  4. obsidium
  5.  
  6. [Error] Address: 0x4ca274[0x4ca274] Invalid instruction: 0f0b56f0ff0d6aa24c00e9548eb35f
  7. [Error] 4ca274:(Invalid instruction) Invalid instruction: 0f0b56f0ff0d6aa24c00e9548eb35f
  8.  
  9. themida
  10.  
  11. [Error] Address: 0x14[0x14] UC_HOOK_MEM_INVALID type:21 address:14, size:1, value:0
  12. [Error] Address: 0x14[0x14] Invalid memory fetch (UC_ERR_FETCH_UNMAPPED)
  13. [Error] Address: 0x14[0x14] Invalid memory read (UC_ERR_READ_UNMAPPED)
  14. [Error] Exceptions limit
  15. [Error] 14:(Memory error) Invalid memory read (UC_ERR_READ_UNMAPPED)
  16.  
  17. armadillo
  18.  
  19. [Error] Address: 0x18fc76[0x580] Read from invalid memory address:580, size:1
  20. [Error] Exceptions limit
  21. [Error] 18fc76:(Memory error) Read from invalid memory address:580, size:1
  22.  
  23. enigma
  24.  
  25. [Error] Winapi fails
  26. [Error] Address: 0x60f38b[0x600037ad] KERNEL32.DLL#HeapCreate
  27. [Info] Address: 0x6000301b[0x6000301b] Exit process
  28.  
  29. safeengine
  30.  
  31. loop:
  32. [Disasm] >>>>>>>>>>>>>>>>rdtsc
  33. [Disasm] >>>>>>>>>>>>>>>>rdtsc
  34. [Disasm] >>>>>>>>>>>>>>>>rdtsc
  35. [Disasm] >>>>>>>>>>>>>>>>rdtsc
  36. [Disasm] >>>>>>>>>>>>>>>>rdtsc
  37. [Disasm] >>>>>>>>>>>>>>>>rdtsc
  38. ...
  39.  
  40. YC
  41.  
  42. [Error] Address: 0x4191ee[0x60003b7d] KERNEL32.DLL#FlsFree
  43. [Info] Address: 0x6000301b[0x6000301b] Exit process
  44.  
  45. Pelock
  46.  
  47. [Error] Address: 0x0[0x0] UC_HOOK_MEM_INVALID type:21 address:0, size:1, value:0
  48. [Error] Address: 0x0[0x0] Invalid memory fetch (UC_ERR_FETCH_UNMAPPED)
  49. [Error] Address: 0x0[0x0] Invalid memory read (UC_ERR_READ_UNMAPPED)
  50. [Error] 0:(Memory error) Invalid memory read (UC_ERR_READ_UNMAPPED)
  51.  
  52. Mew
  53.  
  54. bad OEP.


Получается что тулз работает только на самом простом, то что можно проэмулировать. И дело совсем не в том, что какие то протекторы - комерс.


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

Создано: 22 июля 2019 23:01 · Поправил: hors New!
Цитата · Личное сообщение · #17

difexacaw пишет:
Получается что тулз работает только на самом простом, то что можно проэмулировать. И дело совсем не в том, что какие то протекторы - комерс.


Да, это странности самого QEMU.

Но зная какой это протектор/пакер это всё легко обойти. Когда встречаются такие проблемы на пути, то срабатывает обработчик(у каждого пакера/протектора свой), который просто изменяет контекст:
1) Меняет EIP на безопасный код
2) Выравнивает стек
3) Правит цепочку исключений(SEH)
4) Иногда кое-какие дополнительные действия, специфичные для конкретного пакера/протектора.

Если бы я делал общее решение, то наверное надо было бы править сам QEMU, а когда для каждого пакера/протектора свой модуль, то это всё решается быстро. Хотя может быть и не совсем элегантно.


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

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

hors

Но это ведь не ошибки в вашем тулзе, а исключения в протекторах. Это их штатное поведение, так проверяется отладчик или передаётся управление через сех. Причём тут эмулятор(qe) ?


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

Создано: 23 июля 2019 21:03 · Поправил: hors New!
Цитата · Личное сообщение · #19

difexacaw пишет:
Но это ведь не ошибки в вашем тулзе, а исключения в протекторах. Это их штатное поведение, так проверяется отладчик или передаётся управление через сех. Причём тут эмулятор(qe) ?


Воспроизвести механику SEH не составляет большого труда. Проблема в том что QEMU не всегда правильно генерирует исключения. Поэтому воспроизведенный один в один код из Windows работает иногда не так как нужно.
Я почти добился "идеальной работы" SEH, но потом решил обновить QEMU до более новой версии. Так как в новой версии QEMU некоторые проблемы(но не все) были исправлены. В итоге старый код в некоторых случаях перестал работать.

Править заново желания особого больше нет, да это и не нужно.
Как уже говорилось, если мы работаем с отдельными модулями, то можно быстро сделать "костыль" для конкретного протекторы/пакера.


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

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

hors

Я думал что вм должна только поток инструкций ровно эмулить, а окружением занимается тот, кто эту вм юзает. У вас совсем иначе, те по вашему сама вм кривая.

Добавлено спустя 36 минут
hors

> Я почти добился "идеальной работы" SEH, но потом решил обновить QEMU до более новой версии.

Идеальная работа тулза должна выглядеть вот так --> Link <--

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

А что оно может выйти из под монитора - так он на варе запущен, никуда дальше не пойдёт, так что это не плюс эмуляции


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

Создано: 24 июля 2019 00:09 · Поправил: hors New!
Цитата · Личное сообщение · #21

difexacaw пишет:
Я думал что вм должна только поток инструкций ровно эмулить, а окружением занимается тот, кто эту вм юзает. У вас совсем иначе, те по вашему сама вм кривая.


Нет. Неправильно думал. Вот смотри, обьясняю на пальцах:

На реальном процессоре, если в usermode(ring-3) возникает исключение, например неправильная инструкция(#UD), то управление грубо говоря передается на цепочку обработчиков исключений.
Мы можем, пользуясь QEMU, прикрутить сверху обработку SEH. И если бы QEMU работал как и реальный процессор,то никаких проблем не было бы.
Но дело в том, что работа QEMU иногда отличается от реального процессора.
Например версия QEMU, которую я сейчас использую, неправильно интерпретирует в 32 битном режиме команду retf. Неправильно выравнивается стек после неё. Стало быть через некоторое время возникает исключение, которое передаётся на наш SEH. На реальном процессоре такого нет.
Встретить такую инструкцию в нормальном коде почти невозможно. А вот некоторые протекторы/упаковщики её используют в своих стабах. Мне пришлось править QEMU. Это один из примеров.

difexacaw пишет:
Идеальная работа тулза должна выглядеть вот так --> Link <--


Выглядит неплохо.

difexacaw пишет:
Я выбрал произвольным образом протектор, у этого быстрый запуск, что бы не ждать пока крутится.


Что значит быстрый запуск? Попробуй запаковать что-нибудь этим пакером http://www.farbrausch.de/~fg/kkrunchy/ и запустить свою утилиту
Это упаковщик, даже не протектор, никаких хитрых приёмов там нет.


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

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

hors

kkrunchy - запуск 50сек, при этом нет системной активности. После паковки гуй запускается поломанным.


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

Создано: 24 июля 2019 10:07 New!
Цитата · Личное сообщение · #23

difexacaw пишет:
kkrunchy - запуск 50сек, при этом нет системной активности. После паковки гуй запускается поломанным.


Отлично. А твоя утилита уже может дампить распакованный образ из памяти?


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

Создано: 24 июля 2019 17:28 · Поправил: difexacaw New!
Цитата · Личное сообщение · #24

hors

Нет, это же не дампер. Она может находить OEP, вот например в вашей тулзе:


Задачи дампа небыло. Я привёл пример что бы показать, что можно сделать просто и ровно, не используя эмуляторы.

У меня небыло времени утром разбираться, что по kkrunchy ?

Это какой то примитивный пакер, почему именно его привели ?


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

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

kkrunchy для теста трассировки и дампа. Там стаб долго распаковывается и дамп получается большой.


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

Создано: 25 июля 2019 19:06 New!
Цитата · Личное сообщение · #26

hors

Какое же это долго, пол минуты. Долго варятся сложные протекторы, вмп, энигма и тп.


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

Создано: 28 июля 2019 10:53 New!
Цитата · Личное сообщение · #27

hors

Можете сами потестить, я тут --> Link <-- выложил билд.

kk ломает гуй.

{ Атач доступен только для участников форума } - kk.7z

| Сообщение посчитали полезным: hors



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

Создано: 28 июля 2019 14:59 New!
Цитата · Личное сообщение · #28

difexacaw пишет:
Можете сами потестить, я тут --> Link <-- выложил билд.


Половина кода изменилась, теперь нельзя скомпилить нормально ...


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

Создано: 1 августа 2019 18:35 · Поправил: difexacaw New!
Цитата · Личное сообщение · #29

mak

Зачем, ключевые события в виде колбеков. Вполне достаточно что бы мониторить апп. Вносить серьёзные изменения в работу апп - тогда нужно собирать. Но учитывая необходимый для использования скилл, про сборку речь не идёт, тк никто не будет в этом разбираться, может вам и есчо паре человек это интересно. Всем нужны инструменты с кнопками, готовое


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

Создано: 2 августа 2019 16:37 · Поправил: ==DJ==[ZLO] New!
Цитата · Личное сообщение · #30

Какая последняя сборка ? у меня 0.20 в шапке 0.10... или
--> About <--
Почему некоторые файлы с ~100kb после унпака в ~ + - 3-6мб превращается? половина файла нулями забита (


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

Создано: 2 августа 2019 16:56 · Поправил: hors New!
Цитата · Личное сообщение · #31

==DJ==[ZLO] пишет:
Какая последняя сборка ? у меня 0.20 в шапке 0.10... или
--> About <--
Почему некоторые файлы с ~100kb после унпака в ~ + - 3-6мб превращается? половина файла нулями забита (


0.22

https://www.dropbox.com/s/vbac57we8p18qol/xvlk_winxp_public_0.22.zip?dl=1

С нулями вроде решена проблема в последней версии.

| Сообщение посчитали полезным: ==DJ==[ZLO]

<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Софт, инструменты —› XVolkolak 0.10 unpacker emulator

Оригинальный DVD-ROM: eXeL@B DVD !

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