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

Тема в разделе "WASM.HEAP", создана пользователем test555, 2 янв 2010.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Господа, возможно ли теоретически, написать архиватор в несколько десятков байт?

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

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

    cornolio New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2009
    Сообщения:
    50
    можеш попробовать использовать RtlDecompressBuffer
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    зависит от энтропии. у аплиб около 180 байт вроде распаковщик, а жмет довольно неплохо. +жать лучше нешифрованный код обычно
     
  4. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Шифрованный _по_определению_ несжимаем.
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    имхо это бред жмется все что угодно вопрос только с каким коэффициентом

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

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    В точку. Шифрованый жмется с коэффициентом 1 или очень близко к этому.
     
  7. InsidE

    InsidE Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    Rockphorr
    случайные данные хрень сожмешь )),а в шифрованных данных,энтропия стремится к нулю к 1
     
  8. InsidE

    InsidE Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    т.е. к 1)))
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    RtlDecompressBuffer() является стабом для RtlDecompressBufferLZNT1(). Уложился в 50 байт(базу и лимит кодовой секции найдёт сторонний код):
    Код (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

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    ну я бы так не говорил,особенно учитывая соотношение скоростей компрессия/декомпрессия,и обьем юзаемой памяти( как и при компрессии так и при декомпрессии )

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

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

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Compression of random data
    h**p://w*w.faqs.org/faqs/compression-faq/part1/section-8.html
     
  12. persicum

    persicum New Member

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

    persicum New Member

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

    persicum New Member

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

    test555 New Member

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

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    persicum
    Процессор цифровой, соответственно память юзает битовую, а не аналоговую, так что бит битом останется.
    test555
    Она обычно удовлетворительно ужимает модуля, в частности секции данных. Разумеется что всяко качественный пикод пожат ею будет очень плохо.
     
  17. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    есть теория - в ДНК записана инфа в исчислении по модулю 20 - очень крутое "сжатие"

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

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

    вот
     
  18. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Blackbeam
    оффтоп
    А кто создал сверхцивилизацию? Где об этом инфу получить? :)
     
  19. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.738
    А практика показывает что по основанию 4

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