Насколько случайны байты вне стека?

Тема в разделе "WASM.CRYPTO", создана пользователем EvilsInterrupt, 5 янв 2005.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Суть такова:

    стек растет от старшего к младшему адресу,соответственоо чтобы обратиться

    к области стека надо esp+nh, а за пределы можно esp-nh.

    Вопрос такой в программе в области esp-nh насколько случайна? И как часто

    меняется?



    У меня такая проблема неполный блок может состоять в диапазоне 1-7 байтов,

    его необходимо дополнить, делать ГПСЧ слишком громоздко, а заполнить надо

    вот и подумал, что стек довольно часто используется, значит часто меняется

    и решил использовать байты для дополнения блока оттуда!



    Да на идеальный ГПСЧ это не претендует, но возможно забьется байтами значе-

    ния которых проследить не так уж и просто.
     
  2. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    может rdtsc и не париться?
     
  3. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Разумеется, не случайны. Ниже вершины стека иногда застревают данные, которые использовались в ранее вызванных процедурах. Бывает, что оттуда удается извлечь разные полезные адреса, которые разработчики хотели спрятать от чужих глаз.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    CyberManiac



    Спасибо, что это сказал. Но здесь мне надо дополнить блок всякой лабудой, якобы случайной.

    Поэтому и подумал на стек.



    Тогда может заюзать GUID, или и он не очень может подойти?
     
  5. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    EvilsInterrupt

    если тебе нужны более-менее _случайные_ данные, то бери rdtsc/QueryPerformanceCounter (только не целиком, 1-2 бладших байта).

    Для дополнения блоков при зашифровании данных ИМХО подойжет обычный rand(), т.к.от знания открытого текста атакующий ничего не получит -- стойкие шифры устойчивы к атакам типа 'known plaintext'. Так что, в принципе, можно и нулями дополнять, но это слишком уж неспортивно :)





    вообще, ИМХО, в программе шифрования должен быть простенький ГПСЧ -- тебе рано или поздно IV прийдется генерить -- тут использовать нули, стек или rdtsc уже не стоит. Так что возьми напиши RC4 -- просто, компакто, быстро.. позволяет из относительно небольшого кол-ва (псевдо)случайных байт получить неплохую последовательность...
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    flankerx

    Да стеком дополню, а при более серьезной задаче все таки ты прав, придется писать ГПСЧ. А здесь линки шифрвать какая разница чем дополнять, все равно текст то короткий :)
     
  9. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    Кстати, в винде есть функции, выдающие последовательности случайных байт.



    CryptAcquireContext()

    CryptGenRandom()
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Да, у меня и примерчик есть (фасм) - создает файл, нужного размера, с псевдослучайными данными

    [​IMG] _2071416777__randfile.zip
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    ТО что я приатачил, еще на стадии разработки, но мне бы хотелось бы услышать ваше мнение по поводу моего проекта, т.к. я его разрабытываею для пополнения коллекции васма

    [​IMG] _192326702__gost28147_89.rar
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    RE:Узнать.txt



    esi,edi,ebp,ebx не меняются после API, можешь их использовать, например вместо ecx, когда в "коде цикла" вызываются api, тогда "push ecx и pop ecx" не нужны, а test ecx,ecx вообще не нужен после dec ecx, я когда-то сам его ставил :) Например так
    Код (Text):
    1.     mov   ebp,count
    2.     test  ebp,ebp
    3.     jz    exit
    4. round:
    5.     ...
    6.     место А
    7.     ...
    8.     код цикла
    9.     ...
    10.     dec   ebp
    11.     jnz   round
    12. exit:
     
  13. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    bogrus



    Это я для себя писал! :))) Просто под руку попалось
     
  14. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    только переварил, что ты написал. Круто!!! Еще буду думать, т.к. чувствуется мне не вся я осознал :)))
     
  15. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    bogrus.



    Неповеришь но в Юрове:



    Команда loop работает так:

    1. Уменьшает на единицу регистр cx/ecx

    2. проверяет его на нуль

    3. И если не нуль то переход на метку в команде loop



    слова свои, но смысл тот же!

    Спец.Справочник по ассемблеру стр.104



    Поэтому я и сделал test ecx,ecx!



    Следовательно:



    dec ecx

    test ecx,ecx

    jz имя метки ; является верным!



    ;---------------------------------------



    То для чего мне нужено аналог loop это алгоритм,который должен работать

    следующим образом:



    mov ecx,count

    round:



    dec ecx

    test ecx,ecx

    jnz round



    здесь count говорит о том сколько сделать итераций над буфером,

    оно может быть не NULL!!! но если уж не нуль то цикл выполняется

    нужно проверить на последнюю итерацию, если да то надо после этой

    конечной итерации опять!!! опять перейти на выполнение eip = round!!!



    не хочу делать лишний код после цикла. Если ты глядел проект,то

    должен был заметить что подопытный делиться на 512байтные куски,

    а ведь файл может иметь рамер некратным 512!! Вот потому то мне

    и нужен такой изощренный алгоритм,что бы заставить цикл обрабатывать

    и не полный блок!!!



    Надеюсь ты меня понял, я старался описать все технически - грамотно,

    если что поправь или укажи место, где можно понять двояко.



    ;--------------------------------------------



    Этой прогой я хочу избежать проблемы вареза, выкладывать нельзя Володя голову

    оторвет, а про шифрограммы он ничего не говорил :))) иль я не слышал?
     
  16. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Я через слово прочитал это все, нифига не понял. НО test ecx,ecx не нужен.
     
  17. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Я через слово прочитал это все, нифига не понял.



    Ты не одинок в своем горе ;)