Виртуальная машина в Winrar , RarVM и его хак. - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 01.10.2012, 17:48   #1
Пользователь

Автор темы (Топик Стартер) Виртуальная машина в Winrar , RarVM и его хак.

Специалист по безопасности Тэвис Орманди покопался в коде архиватора WinRAR и разработал инструментарий для встроенной в архиватор виртуальной машины RarVM.

Мало кто знает, что внутри WinRAR есть примитивная x86-совместимая виртуальная машина. В ней всего около 50 инструкций, а вся виртуальная машина со стандартными фильтрами занимает чуть больше 1000 строк. Она реализована внутри архиватора с одной целью: улучшить сжатие x86-кода. Например, представим программу вроде такой.

Код:
mov foo, bar
cmp bar, baz
push foo
call write
push bar
call write
Повторяющиеся вызовы можно транслировать в абсолютные адреса и более эффективно заархивировать. Поэтому в RAR есть фильтры для десятка стандартных вызовов. Более того, в нём есть возможность создания новых фильтров в процессе архивации! То есть в архив RAR можно включать байткод, который будет исполняться встроенной виртуальной машиной RarVM.

До сих пор не существовало программ, которые бы использовали эту необычную функциональность, поэтому Тэвис Орманди разработал компоновщик и ассемблер, опубликовал документацию для работы с RarVM, в скором будущем планирует выпустить ещё дизассемблер и, может быть, портировать компилятор на основе llvm.

Пример программы, которая выводит классическое “Hello, World!” за счёт CRC-компенсации в проверке CRC.


Код:
$ cat sample.rs
#include
#include
#include
#include
; vim: syntax=fasm

; Test RAR assembly file that just demonstrates the syntax.

_start:
; Install our message in the output buffer
mov r3, #0x1000; Output buffer.
mov [r3+#0], #0x41414141; Padding for compensation
mov [r3+#4], #0x0a414141; Padding for compensation
mov [r3+#8], #0x6c6c6548; 'lleH'
mov [r3+#12], #0x57202c6f; 'W ,o'
mov [r3+#16], #0x646c726f; 'dlro'
mov [r3+#20], #0x00000a21; '!\n'
mov [VMADDR_NEWBLOCKPOS], #0x00001000
mov [VMADDR_NEWBLOCKSIZE], #22

; Compensate to required CRC
push RAR_FILECRC
push [VMADDR_NEWBLOCKSIZE]
push [VMADDR_NEWBLOCKPOS]
call $_compensate_crc
test r0, r0
jz $finished
call $_error

finished:
call $_success
$ make sample.rar
cpp -Istdlib < sample.rs > sample.ri
./raras -o sample.ro sample.ri
./rarld sample.ro > sample.rar
rm sample.ri sample.ro
$ unrar p -idq sample.rar
AAc��!A
Hello, World!




Тема на ExeLab :

http://exelab.ru/f/index.php?action=...=2&topic=20383
Florentino вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 14:52. Часовой пояс GMT +3.

Вверх