Микро-архиватор?

Discussion in 'WASM.HEAP' started by test555, Jan 2, 2010.

  1. test555

    test555 New Member

    Blog Posts:
    0
    Господа, возможно ли теоретически, написать архиватор в несколько десятков байт?

    Суть в том, что написан шел-код, допустим на 500 байт, еще на 50 дешифровщик этого кода.
    В итоге получается 550 байт. Реально ли написать мини-распаковщик, размер которого + размер запакованного кода < размер исходного кода??

    Вопрос чисто теоретический.. Повторяющихся фрагментов почти нет..
     
  2. cornolio

    cornolio New Member

    Blog Posts:
    0
    можеш попробовать использовать RtlDecompressBuffer
     
  3. Freeman

    Freeman New Member

    Blog Posts:
    0
    зависит от энтропии. у аплиб около 180 байт вроде распаковщик, а жмет довольно неплохо. +жать лучше нешифрованный код обычно
     
  4. gazlan

    gazlan Member

    Blog Posts:
    0
    Шифрованный _по_определению_ несжимаем.
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    имхо это бред жмется все что угодно вопрос только с каким коэффициентом

    ну применить такую теорию сжатия - для всех dword'ов посмотреть статистику - очень не плохо если они все кучкуются вокруг у нескольких значений с радиусом в байт, а дальше кодируешь каждое значение - ставишь "опорный кадр" и дальше идут байты добавки
     
  6. Partner

    Partner Павел

    Blog Posts:
    0
    В точку. Шифрованый жмется с коэффициентом 1 или очень близко к этому.
     
  7. InsidE

    InsidE Member

    Blog Posts:
    0
    Rockphorr
    случайные данные хрень сожмешь )),а в шифрованных данных,энтропия стремится к нулю к 1
     
  8. InsidE

    InsidE Member

    Blog Posts:
    0
    т.е. к 1)))
     
  9. Clerk

    Clerk Забанен

    Blog Posts:
    0
    RtlDecompressBuffer() является стабом для RtlDecompressBufferLZNT1(). Уложился в 50 байт(базу и лимит кодовой секции найдёт сторонний код):
    Code (Text):
    1. GET_RtlDecompressBufferLZNT1 proc C
    2. ; Esi: База секции кода нтдлл.
    3. ; Edi: Предел секции кода.
    4. ;   cld
    5.     mov edx,esi
    6. Check:
    7.     mov eax,dword ptr [edx]
    8.     cmp eax,esi
    9.     jb Next
    10.     cmp eax,edi
    11.     jnb Next
    12.     mov ecx,dword ptr [edx + 2*4]
    13.     cmp ecx,esi
    14.     jb Next
    15.     cmp ecx,edi
    16.     jnb Next
    17.     cmp dword ptr [edx + 3*4],ecx
    18.     jne Next
    19. ; STATUS_UNSUPPORTED_COMPRESSION = 0xC000025F
    20.     cmp dword ptr [ecx],00025FB8H   ; 0xXX00025F
    21.     jne Next
    22.     cmp byte ptr [eax + 5],51H
    23.     je Exit
    24. Next:
    25.     inc edx
    26.     cmp edx,edi
    27.     jb Check
    28.     xor eax,eax
    29. Exit:
    30.     ret
    31. GET_RtlDecompressBufferLZNT1 endp
    Хотя у LZ малая степень сжатия.
     
  10. InsidE

    InsidE Member

    Blog Posts:
    0
    ну я бы так не говорил,особенно учитывая соотношение скоростей компрессия/декомпрессия,и обьем юзаемой памяти( как и при компрессии так и при декомпрессии )

    остальные,более "крутые" алгосы,жрут дофига памяти,и очень медленны ))

    п.с.
    хотя для специализированных данных( например ASCII текста ),можно найти и алгосы получше.
     
  11. gazlan

    gazlan Member

    Blog Posts:
    0
    Compression of random data
    h**p://w*w.faqs.org/faqs/compression-faq/part1/section-8.html
     
  12. persicum

    persicum New Member

    Blog Posts:
    0
    Наверное для 500 байт вместо LZ достаточно построить код хаффмана чтоли, те присвоить более частым байтам или ниблам более короткие последовательности бит. Наверное код построения частотного дерева можно уместить в несколько десятков байт. Сначала нужно построить дерево и посмотреть наскоро оно жментся а потом подумать об оптимальном распаковщике
     
  13. persicum

    persicum New Member

    Blog Posts:
    0
    Вернее так, можно сначала комфортно запаковать на Си с использованием даблов для хранения вероятностей, а потом убедивщись что сжатие стоит свеч написаать мааленький префиксный расспаковщих на Асме с готовой таблицей-деревом.
     
  14. persicum

    persicum New Member

    Blog Posts:
    0
    небольшой оффтоп =))) случайные данные равно как и архивированные можно сильно запаковать если записать их на оптический носитель каждый пит которого поддерживает четыре, восемь, или больше градаций яркости =))) однако внешне это будет выглядеть как повышение емкости самого носителя по сравнению со стандартной болванкой такого де размера. Но мы то знаем что там просто идет многократное ужатие всей информации.
     
  15. test555

    test555 New Member

    Blog Posts:
    0
    Всем спасибо за ответы.
    RtlCompressBuffer жмет слишком плохо, мой код она только на 4 байта увеличила, в то время как другая либо на 20 байт ужала.
    Для теста сжал первые 65535 байт kernel32.dll:
    RtlCompressBuffer их сжал их до 43к, а вот Zlib до 32к..
    Винрар еще чуть посильнее. Это конечно удобно что таскать либу не надо, но жмет хренова 0_о

    Вопрос решен другим способом. А именно хранение части кода в другом месте и юзание его загрузочника.
     
  16. Clerk

    Clerk Забанен

    Blog Posts:
    0
    persicum
    Процессор цифровой, соответственно память юзает битовую, а не аналоговую, так что бит битом останется.
    test555
    Она обычно удовлетворительно ужимает модуля, в частности секции данных. Разумеется что всяко качественный пикод пожат ею будет очень плохо.
     
  17. Blackbeam

    Blackbeam New Member

    Blog Posts:
    0
    есть теория - в ДНК записана инфа в исчислении по модулю 20 - очень крутое "сжатие"

    в одной из книжек про Луну автор посчитал, что код ДНК надо равернуть в картинку предположительно 2ххх на 8хх пикселей.

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

    вот
     
  18. dyn

    dyn New Member

    Blog Posts:
    0
    Blackbeam
    оффтоп
    А кто создал сверхцивилизацию? Где об этом инфу получить? :)
     
  19. asmlamo

    asmlamo Well-Known Member

    Blog Posts:
    0
    А практика показывает что по основанию 4

    гуанин (G), аденин (A),
    тимин (T) и цитозин(C)