Ассемблер и Си для Хакера #26. Шифр Вернама

Поделиться
HTML-код
  • Опубликовано: 14 дек 2024

Комментарии • 9

  • @AvitoBot
    @AvitoBot 2 месяца назад +1

    Молодец!

  • @panfilovandrey
    @panfilovandrey 2 месяца назад +1

    Четко объясняешь, приятно слушать и смотреть. Несколько комментариев: 1. в качестве учебного примера - очень даже хорошо, а вот для реального шифрования может обломаться на больших файлах, которые просто не поместятся в память, В таком случае лучше считывать оба файла потоком и писать в новый файл. 2 стоит добавить опцию не перезатирать файл, а создать новый зашифрованный. 3. В качестве примера работы алгоритма можно было показать, как зашифруется файл с картинкой, а ключом взять текст, а потом назад расшифровать, все сработает, но зрителям было бы полезно. И вопрос, я не совсем понял, как работают функции с побитовым сдвигом? Они сдвигают исходные данные, ключ или то, что получилось их объединением? Этот сдвиг всегда на один бит?

    • @firststepsforward
      @firststepsforward  2 месяца назад

      Коммманды ROL и ROR - побитные.
      Если ROL 10110011 ,1 - сдвигает все биты влево на одну позицию. Бит, который выходит за пределы слева, возвращается в конец справа. Например, если у вас есть 8-битное значение 10110011, после выполнения операции ROL оно станет 01100111. Происходит как-бы "вращение" (rotate) левого операнда в конец битовой цепочки - поэтому rol - rotate operande left.
      Расположите операнд 10110011 по кругу (по колесу , циферблату из 8 значений). Указатель 8-значных часов - сверху, как в обычных часах. А затем, в случае ROL 10110011 ,1 - поверните циферблат на одно значение влево, ROL 10110011 ,2 - 2 значения влево. И читайте результат с указателя - слева на право. Так, наверное понятно, почему rotate.
      Комманда ROR работает аналогично, но "вращение" в противоположном направлении. Она сдвигает все биты вправо на одну позицию. Бит, который выходит за пределы справа, возвращается в начало слева. Например, для 8-битного значения 10110011 после выполнения ROR оно станет 11011001.
      Во время выполнения комманды ROL (Rotate Left) и ROR (Rotate Right) в 32-битной архитектуре, второй операнд указывает количество битов, на которое нужно выполнить сдвиг.
      Возможные значения второго операнда:
      0: Если второй операнд равен 0, то значение не изменяется.
      1: Сдвиг на 1 бит влево или вправо.
      2: Сдвиг на 2 бита.
      3: Сдвиг на 3 бита.
      ...
      31: Сдвиг на 31 бит.
      Важно отметить, что при значении второго операнда, превышающем 31, результат будет эквивалентен сдвигу на остаток от деления этого значения на 32. Например, сдвиг на 32 бита будет равен сдвигу на 0 бит, а сдвиг на 33 бита будет равен сдвигу на 1 бит. Таким образом, допустимые значения второго операнда для операций ROL и ROR в 32-битной архитектуре варьируются от 0 до 31, и любые значения выше 31 будут обрабатываться с учетом остатка от деления на 32.
      Поэтому шифровка и дешифровка - зеркальные вызовы ROL И ROR.

    • @panfilovandrey
      @panfilovandrey 2 месяца назад

      @@firststepsforward я знаю, что такое сдвиг, вопрос то был в том, как при этом используется ключ, он же туда тоже передаётся, и в каком порядке применяется

  • @Albert-nc1rj
    @Albert-nc1rj 2 месяца назад +2

    Спасибо автору!

  • @bill8126
    @bill8126 2 месяца назад +1

    А по Си или С++ будут уроки ? Особенно с Windows Api или Kernel nt api.
    Можно прям вирусы какие-то делать, главное делать приписочку "строго в образовательных целях", тогда ютуб должен пропустить.

    • @firststepsforward
      @firststepsforward  2 месяца назад

      По поводу Си. Можно чистый код, который в библиотеках Masm32 в PellesC добавить, можно библиотеку masm32 подключить к проекту.
      Смотрите дальше видео. Есть более оптимальные методы использования "встроенного" в Win Api шифрования.
      Чтобы защищаться - нужно знать, как организована атака.
      "Вирусы какие-то" делать не надо. Нужно понимать, как это всё устроено в целях защиты.
      До защиты от отладки мы дойдём ещё.
      Спасибо!