Сейчас на форуме: site-pro, Rio, johnniewalker, vsv1 (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› RarVM
Посл.ответ Сообщение


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 30 сентября 2012 19:25
· Личное сообщение · #1

Инструментарий для RarVM на github
github.com/taviso/rarvmtools

Описание на английском:
RarVM Toolchain

This is a basic toolchain for the RarVM, a virtual machine included with the popular WinRAR compression suite. Rar includes a VM to support custom data transformations to improve data redundancy, and thus improve compression ratios. However, it also represents a widely deployed machine architecture about which very little is known...that is just too tempting a target for exploration to ignore

Currently two basic tools are available for experimentation, a linker and an assembler. A dissassembler will be available soon, and perhaps eventually a compiler (in the form of a llvm backend or gcc target).

Статья на английском:
Fun with Constrained Programming

Исходники RarVM в составе UnRAR:
UnRAR source

-----
EnJoy!


| Сообщение посчитали полезным: 4kusNick, yagello, yanus0, TLN, _ruzmaz_

Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 30 сентября 2012 20:00
· Личное сообщение · #2

Тоже сегодня увидел эту новость, интересно, то что это давно известный факт..Только как то не очень его афишируют. Например в исходниках разных библиотек для распаковки Rar есть код этой виртуальной машины http://www.koders.com/c/fid501AA0DE57324722404C2CD9DCD10F3F3D92B2A6.aspx#L578 http://nunrar.codeplex.com/SourceControl/changeset/view/4d341d827d03#NUnrar%2fUnpack%2fVM%2fRarVM.cs



Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 30 сентября 2012 21:19
· Личное сообщение · #3

А к чему, вообще, позволяет обращаться RarVM?




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 30 сентября 2012 22:41
· Личное сообщение · #4

yanus0
Добавил в шапку ссылку на оригинальные исходники UnRAR
rarvm.cpp
rarvm.hpp
rarvmtbl.cpp

-----
EnJoy!




Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 01 октября 2012 10:41 · Поправил: Promix_17
· Личное сообщение · #5

Судя по такому коду:
Code:
  1. inline void RarVM::SetValue(bool ByteMode,uint *Addr,uint Value)
  2. {
  3.          if (ByteMode)
  4.          {
  5.          #ifdef BIG_ENDIAN
  6.                  if (IS_VM_MEM(Addr))
  7.                         *(byte *)Addr=Value;
  8.                  else
  9.                         *Addr=(*Addr & ~0xff)|(Value & 0xff);
  10.          #else
  11.                  *(byte *)Addr=Value;
  12.          #endif
  13.          }
  14.          else
  15.          {
  16.          #if defined(BIG_ENDIAN) || !defined(ALLOW_NOT_ALIGNED_INT) || !defined(PRESENT_INT32)
  17.                  if (IS_VM_MEM(Addr))
  18.                  {
  19.                         ((byte *)Addr)[0]=(byte)Value;
  20.                         ((byte *)Addr)[1]=(byte)(Value>>8);
  21.                         ((byte *)Addr)[2]=(byte)(Value>>16);
  22.                         ((byte *)Addr)[3]=(byte)(Value>>24);
  23.                  }
  24.                  else
  25.                         *(uint *)Addr=Value;
  26.          #else
  27.                  *(uint32 *)Addr=Value;
  28.          #endif
  29.          }
  30. }

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

Всё, разобрался:
Code:
  1. inline uint* RarVM::GetOperand(VM_PreparedOperand *CmdOp)
  2. {
  3.   if (CmdOp->Type==VM_OPREGMEM)
  4.     return((uint *)&Mem[(*CmdOp->Addr+CmdOp->Base)&VM_MEMMASK]);
  5.   else
  6.     return(CmdOp->Addr);
  7. }


| Сообщение посчитали полезным: Admintools
 eXeL@B —› Крэки, обсуждения —› RarVM
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати