Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Криптостойкость 0% у любой программы

Автор: delover
Дата сообщения: 16.03.2012 13:32
wasilissk

Цитата:
на эти функции в четыре щелчка.

Щелчков то может быть не 4. Вобщем первым я узнал об этом методе из постов на руборде. Смотрите анналы. Дело было давно, и rubord-вец писал что он вообще всю таблицу импорта полностью подделывал. Я тогда не стал спрашивать зачем же именно всю таблицу, но очевидно у него были на то основания. Брейкпоинт как мне известно это инструкция прерывания внедрённая прямо в код. Помоему int3 и то есть это записанные конкретные байты туда где их быть не должно. Как вариант - не выполнять такую функцию где брейкпоинты. Как вариант - можно "затрахать" прочитав перед этим ini файл и много чего другого. Всё таки ближе к телу. Перечисленные аргументы.
1. 2. Изучать в дебажнике статические вызовы легко и удобно. А так жне осуществлять их поиск.
3.

Цитата:
Ага, а при динамической, хакер сразу как бы забывает, что есть такая функция

Ну и что что он не забыл? Он во все программы сразу же пихает брейкпоинты на эту функцию? Отлично, тогда наверно псевдополезный затрахиватель поможет ему понять, что туда надо ставить брейкпоинт только в тот момент когда будет выполнятся реально полезный код. А так как с географией вызовов по процессу туго, сложно будет поставить ещё один брейкпоинт чтобы попасть в тот момент когда нужен брейкпоинт на реальный код.
Перед этим хакеру надо изначально подозревать все программы, потом тратить время на затрахиватели, потом убедиться что куча баги действительно должна быть может быть взята только хитростью. А потом уже пересмотреть правильно ли он сделал когда подозревал что программа делает VirtualProtect? Может это очередная веселуха или замануха.
4.
Цитата:
Hook на что невозможен? На вызов API функций? Уверены?

Hook не возможен. При статической линковке организуется таблица импорта, при загрузке организуется таблица JMP адрес DLL и на эти JMP указывают вызовы статических функций. Hook это операция записи в таблицу JMP своих адресов. Операция по подмене реального кода на свой собственный для перехвата с последующим востановлением затираемых инструкций называется иначе но по сути это тот же Hook. Но при динамичнеской загрузке адрес хукаемой функции находится в хипе процесса и ни как не связан с кодом программы. На каком предположении вы сделаете вывод что пачка байтов в хипе это и есть тот адрес который надо подменить? Hook - в таком виде не возможен.

Добавлено:
ЗЫ
Кстати ладно, поделюсь... Самые полезные затрахиватели это те которые работакют при перерисовке окон. Вы переключаетесь из дебаггера в окно программы, она перерисовывается и в любом случае вы получаете дополнительный полезнай брейк, далее видите окно дебаггера и так прыгаете некоторое время туда сюда.

Добавлено:
Ну и если уже у вас вся таблица импорта под рукой то можно сыграть очень красивую и многоголосую музычку в самые разные места.
Автор: wasilissk
Дата сообщения: 16.03.2012 14:17

Цитата:
Щелчков то может быть не 4

В OllyDbg именно 4.

Цитата:
Смотрите анналы

Т.е. слышал звон, да не знаю, где он?

Цитата:
1. 2. Изучать в дебажнике статические вызовы легко и удобно.

Да не отличаются ничем эти вызовы.

Цитата:
А так жне осуществлять их поиск.

Написав лишнюю килотонну текста, обеспечив себе геморой и вырезав из таблицы импорта некую функцию, вы заставите хаккира сделать два дополнительных клика и искать в несолько более обширном списке имен. Так ему злодею.

Цитата:
Ну и что что он не забыл? ... Может это очередная веселуха или замануха.

Опять старые песни о главном. Ну, а если VirtualProtect статически вызывается, то все что вы перечислили сразу автоматом исключается?
Если будет подозрение на самомодифицирующийся код, он поставит бряк на вашу VirtualProtect, а вовсе не потому что он ее в таблице импорта увидит.

Цитата:
Hook это операция записи в таблицу JMP своих адресов.

Hook - это рыболовный крючок, а не то что вы написали. А если серьезно, то привидите авторитетный источник подтверждающий ваше определение.
Вот BoundChecker например на ура перехватывает динамически вызываемые функции. Это наверно потому что это не настоящий хук, запрещенный, гадкий, хакерский?
Автор: delover
Дата сообщения: 16.03.2012 15:46
wasilissk

Цитата:
хук, запрещенный, гадкий, хакерский?

Совершенно верно. Пока своими глазами не увижу не поверю. На ура он может перехватывать если только он сам реализует GetProcAddr. Конечно про это я ещё не писаль, но куча гемороя (денька два) я выдумывал защиту от этого и написал за часик. Дело в том что GetProcAddr может вернуть вам не правильный - свой хукавый адресс, только если опять же он сам хукнут. Это гадкий хук конечно. Можно даже не сомневаться что он умеет когда GetProcAddr(GetProcAddr) возвращать себя. И можно не сомневаться что он сделан на основе хука изначального статического, потому что без изначального статического не узнать ни одного динамического. Осталось только дотянуться до реального GetProcAddr, чтобы гадкий хакерский способ перестал работать. Предложу самостоятельно подумать как это сделать. Был бы у меня BoundChecker мне было бы легче найти его уязвимость.


Цитата:
привидите авторитетный источник подтверждающий

Моё определение не оконно-хендлового хука в том что он основан на замене адреса для того чтобы сделать перехват - крючёк. В случае с BoundChecker это тот же хук и то же определение. Я писал, что внедрение когда, боюсь выглядеть безграмотным как то типо так же как называется это у вирусов не помню как. Авторитетного источника нет.


Цитата:
Если будет подозрение на самомодифицирующийся код

Вот тут то совершенно точно. И может сильно пролететь мимо если программа переодически не снимает от туда брейкпоинты. Хотя я этого и не делал, запарить мозг хакеру - есть ещё множество способов. Я разрабатывал свои способы на работе, тогда мне дали 2 недели на это. Однако воспроизвести их дома для своей проги ушло гораздо меньше времени - а именно сколько занимает копипаст с некоторым рефакторингом. Так что я временя терял только на заработок.


Цитата:
Да не отличаются ничем эти вызовы.

То есть для Вас нет разницы между
CALL [EDI+1234]
и
CALL [AA0055] // kernel32.LookResource
????
Для меня есть разница - в первом случае я не вижу сразу куда идёт вызов и чтобы понять я должен сделать туда Step а потом прогуляться до выхода. В первом случае это миллисекунда. Во втором случае зависит от скоросли с которой вы делаете свои щелчки.


Цитата:
Т.е. слышал звон, да не знаю, где он?

Вы просто так это спросили чтобы сьязвить или Вы не сумели спросить чегото?


Цитата:
В OllyDbg именно 4.

Я имел ввиду сколько брейкпоинтов ставит 4 щелчка? Мне нужно поставить ровно 14 брейкпоинтов. Пока не поставлю, понять что происходит с моей прогой не смогу. Там простое дублирование битовой логики и совместное хранение данных в одном байте. А вычисления условий и состояний происходит предварительно вообще в других местах программы. Я предлагаю, я Вам вышлю программу взломайте её ради бога не жаль))) И как Вы утверждаете выдерите пожалуйста дешифрующий код когда пароль известен. Ну и хотя бы напишите перебор который будет работать естественно долго, так как моя расшифровка долгая. Когда будет готова вышлите мне я проверю судовольствием подтвержу, что за такойто срок вы справились, я автор проги и ломал её 2 недели, вам ещё алгоритмы выдирать и ломалку пароля делать. Там на окне ввода пароля хук висит который в последующие хуки ESC рассылает. Мониторил кейспаем - он видит только правильно нажимаемые ескейпы. Так что Ваша ломалка была бы даже полезной. От пароля берётся хэш по этому пароль востанавливается только перебором.
Автор: wasilissk
Дата сообщения: 16.03.2012 16:35
delover

Цитата:
CALL [EDI+1234]
и
CALL [AA0055] // kernel32.LookResource

В обоих случаях будет kernel32.LookResource, никуда проваливатся не нужно.

Цитата:
Вы просто так это спросили чтобы сьязвить или Вы не сумели спросить чегото?

Я спросил, что дает вызов функций через GetProcAddress, осмысленного ответа так и не получил. Потому как сам по себе этот вызов в плане защиты ничего не дает кроме гемора.
Автор: Molniev
Дата сообщения: 16.03.2012 16:43
delover
Ваш GetProcAddress приводит лишь к небольшому увеличению времени на анализ программы. И никакой не

Цитата:
Первый метод защиты от взлома
Автор: delover
Дата сообщения: 17.03.2012 09:29
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" http://forum.ru-board.com/topic.cgi?forum=33&topic=8142&start=1620#19

Это прокомпилить сможете там я выкладывал?

Добавлено:

Цитата:
В обоих случаях будет kernel32.LookResource

Спасибо за ценную информацию. Подросли ребятки )))). Значит хакеры отказались ломать из-за свойств лени-able. Кстати развивать лени-able у хакеров можно другими способами я рассказал про первый. Увидел отличные ответы, кстати посмотрел в исходниках - там блок GetProcAddr закоментирован. Есть только GetProcAddr(GetProcAddr).

Добавлено:
ЗЫ может вы уговорите меня писать ещё одну программу, которую откажутся ломать. Когда у меня крякнул винт я потерял генератор ключей, шифровальник ресурсов, модификатор хеша версии на ключи, ну то чего не хватает в утилитке undeb32. Первая прога осталась на практике не взломанной. Надо над второй подумать.
Автор: delover
Дата сообщения: 18.03.2012 15:03


В первую тему - определение светлого программиста - он никогда и никогда не пойдёт на нанесение вреда собственной программе, как пошол я. Светлый программист будет рад даже если его взломают, но он постарается развлечь хаккера возможностью решить чтото типа сумдоку. Если такой хакер выростет это будет нашим спасением от вторжения терминаторов. Кто уважает терминатора сплюнте. Я предлагаю обсудить метод врастания - взлом = нет кайфа в программе.
Автор: Eternal_Shield
Дата сообщения: 18.03.2012 22:23
*сплюнул*
Автор: delover
Дата сообщения: 19.03.2012 17:26
Eternal_Shield
А что так вкрадчиво? )

МЕТОД ТЕНИ
Думая над тем почему меня обидели хакеры и не взломали, я пришёл к выводу что знаю основной секрет. Моё предположение - сработал метод тени. Мы начали с криптостойкости и подошли конкретно к взлому. Почему же не взломали? Первое правило старухи Джо, которой проруху сулили... Введу два различающихся понятия - отличный и супер отличный.
1) Чаще всего супер отличный хакер - отличный программист. Супер отличный программист не обязательно хороший хакер.
2) Супер отличный программист - это программист использующий ноу хао, которое может быть не раскрученным официально. Хакер как отличный программист - скептик и ноу хао в глаза не видит.
Перевожу теорию на понятный хакерам язык
Есть свойство интерфейсов быть преобразованный к другому GUID. Практически 100% программистов понимают такое преобразование одинакого. Либо преобразование вернёт нужную таблицу интерфейса, либо преобразование вернёт implements ссылку прописанную в интерфейсе класса. 100% программистов забывают что метод QueryInterface это виртуальный метод. Допустим у нашего интерфейса нет вообще методов кроме IUnknown. Наш интерфейс реализует доступ к внутренней коллекции интерфейсов которая формируется динамически. Метод Query переписан, чтобы возвращать первый из доступных в коллекции которые отвечает условию Supported=true. Supported это функция WinAPI. Когда хакер видит такую функцию под отладчиком он не видит смысла её отлаживать под Debug. Тут то его скептицизм сыграл плохую роль. Он не знает что Support динамический. И соответственно не знает чем результат его баги отличается от результата который должен в реальности быть. За вызовом WinAPI скрыто то чего рядовой хакер не знает. Он видел кучу мусора, которую его дебаг обходит, но добиться результата - попасть в алгоритм шифрования не вышло. Хакер ссылается на грязь, а в реальности был использован его стереотип. Стереотип как программиста.

Добавлено:
Demo of dynamic support interface.
Это ноу-хао в общедоступном месте. Однако я думаю хакер сделает Step out когда увидит win.supported, вместо того чтобы сделать Step in. Таким оббразом наши шансы перед хакерами не читавшими пост николько не изменились.

Добавлено:
Нет
Всё же думаю хакеров сломали трубы - моё локальное понятие. Данные хранятся по ссылке1 на ссылку2 на ... ссылка6. преобразование. Другие переменные обращаются сюда же, но под ассемблером этого не видно. Фокус в том что математическое дофига скрыто синтаксическим ничто. Inline в помощь (аналог шаблонов Си). Есть 6 поинтеров расставленные в цепочку чтобы привести к памяти где хранится значение. Другие 6 поинтеров - другие на половину, но ведут к этим же данным. Аналитические машины под это не готовы. Халявшик будет вычислять всю эту лабуду в уме.
Автор: Molniev
Дата сообщения: 19.03.2012 20:39
delover
Мне кажется что на этом форуме вас не могут оценить по достоинству. Возможно стоит найти более подходящею аудиторию для вашего ... так сказать текстов.
Автор: delover
Дата сообщения: 20.03.2012 06:55
Molniev
Да меня и так устраивает. Бывает заходят знакомые просто почитать как очередной анегдот. Думаю многим этого просто не нужно, однако. Доказана криптостойкость XOR алгоритма для закрытия мнемоники преобразований. Если бы было иначне, то инструкцию XOR не использовали бы в алгоритмах шифрования.

Добавлено:
Ну и путь до шифрующего алгоритма может быть достаточно долгим. Имплементация тоже позволяет делать нечто подобное, ИМХО она не удобна. При обнулении объекта в имплементации остаётся "покалеченный объект" и кривая таблица интерфейсов. Если зайнтересоваться почему интерфейс не создан, надо искать место его создания, убедившись что объект создаётся, надо искать место его уничтожения. Ну а далее после того как то место где его освобождают взломано, нужно убедиться, что программа всё равно ведёт себя не правильно. Надо искать второе место, где освобождается интерфейс. Я просто рассказываю как сам ломал свою прогу.
Автор: delover
Дата сообщения: 20.03.2012 17:56
Поимев печальный результат в своём случае, хотя я добился чего хотел - шифрование не взломато, случай всё же печальный. По сему мои рекомендации - для защиты проги используйте стороннее программное обеспечение платное. Вы избежите многих кашмаров. Если бы все поступали согласно этому правилу можно было бы вспомнить про научное понятие криптостойкости, которым все любят оперировать не понимая его заниженной актуальности. Люди которые оперируют доказанной криптостойкостью не отличаются в реальности от магнитофона который воспроизводит магнитную ленту засунутую в него, ленту с рекламными роликами. Это только по факту а не по классически обоснованной теории. Приведу пример:
- Взломайте мне пожалуйста программу, чтобы она в бухгалтерию правильную счёт-фактуру печатала. У меня дробные в копейках цены и исходную цену я не храню, есть только фактическая цена общая и количество. Ну кроме того что мы имеем недостаточные данные мы имеем невозможность выбора между скрытием налогов и торговлей в убыток. Хотя даже не помню когда в аптеке мне сдавали копейки. Думаю никто так и не взломает НДС. Хотя в дробной цене исходной больше справедливости, она расчитана с банковским округлением, но если мир бухгалтерии рухнет то плохо будет всем. И здесь возникает выбор - при публикации цены в чек что вы используете в качестве округления - например есть округление в сторону бесконечности. По факту округление в сторону кассира. Хотелось бы внятного отзыва на счёт того что криптостойкость программы не 0% (без купленных утилит). Иначе только балоболство.

Добавлено:


Холодный период
Во первызх ребята, программирование - это не наука, это прикладная наука. А вот хакерство вообще не наука - народное целительство. Так что арбитраж понятий с уклоном в википедию не даёт гарантий ни на грам. Достоверность не подтверждена. Есть реальное предложение - забыть про интересы хакеров. Если они читают рубоард они будут в курсе. Вы ничем себя не подставите. Программа в исходных кодах в паблике интернета. Но ей нужен лицензионный файл. Лицензионный файл это данные + CRC после шифровки. Программа дающая адекватный CRC методом перебора работает 1 час. 1 вычислительный час на лицензию. Программист умеющий тупо удалить ненужный код справится за пол минуты. Хакер незнающий где искать концы может не успеть за 5 часов. Мои цифры не факт а как мера - чтобы задуматься.Я хочу к вопросам ответам если вы стесняетесь спросить в варезе.

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

Добавлено:
Короче есть данные расшифрованные правильно = взломать прогу не смогли, по стереотипу рубордовцев - это косяк руборда.

Добавлено:
Впечатление такое что хакеры это делянка калхозников не знакомых с правилом как надо руки вытирать. Я против такого мнения по этому и пишу. Мои призывы - обоснованная научсная практика можете спасибо не говорить.
Автор: Eternal_Shield
Дата сообщения: 21.03.2012 09:54
delover
Не то чтобы вкрадчиво ... просто, мне пока не ясно: а что именно комментировать? ... и то был единственный повод для комментария

Если программист - это магнитофон исключительно с функциями: rec, stop, play, forward ... то хакер - это программист с доп. функцией reverse;

Если брать среднестатистического программиста (это те, которые знают кучу "полезного" и профи ни в чём...человеки-комбайны), то мы получим попсовое множество подходов (есесна взятых из гугла) + пару-тройку своих (обычно, ничего особенного) для решения конкретного множества задач. Всё. Шаг влево, шаг вправо - гугл молчит, т.е. у нас есть множество шаблонов и штампов.

С хакерами тоже самое: есть множество отмычек/способов и хороших мест, где надо быстро бегать и всё. Гугло-рожденые солюшоны в лёгкую щелкаются гугло-хакером, но вот нестандартный поворот (то, про что Вы тут написали) и всё, но анализ то никто не отменял. Ну посидит хакер больше положенного 1-2 раза над вашими чудесах на виражах и всё ... потом он будет их щёлкать так же, как и гугло-солюшоны.

Это было про хакеров.

Что касается Ваших теорий, то я не вижу смысла корячить код ради доп. парочки часов работы хакера над этим Любой нестандартный подход (если он часто используется) рано или поздно становится стандартным =)
Автор: delover
Дата сообщения: 22.03.2012 17:27
Eternal_Shield
Я вижу человека выдвинувшего свою теорию и готового понять более широкие аспекты, о которых хотелось бы немного сказать...

Жизнь перед нами иногда ставит одни и те же задачи, и тут мы всегда делаем что-то новое. Незнакомое. Если есть программист готовый" Нестандартный подход" сопоставить == "Чтото новое", то те задачи которые ставит нам жизнь становятся задачами для нажего милого хакера, но только знакомого с кодом или текстом программы. Например задача - передать информацию. Такая задача не всегда выполнима. Например пока хакер не нашёл ответы на эту задачу. Чащё всего случается когда человек нашел ответы на интересующие его вопросы Ваши задачи становятся автоматически менее приоритетными. Краткость сестра таланта. \/ Например: сложно сопоставить реплицируемые данные - актуальные к неактуальным. То есть задача реплицировать 2 массива о которых знает третий массив.Четвертый массив анализирует сводную и юзает третьего, чтобы тот чтото поменял. Пятые объект находит четвёртого длинными путями и говорит что вот это не так или это.
Пятый объект тусует по трубам соответсвие которое можно нарушить. Как правило это Директор. Есть ещё теневые объекты арбиторы на кафицентах участия, но их взаимодействие можно не рассматривать. У них свойтво раздробить размельчить распылить но только в движении информации... ООО Фирма я зашифровал как Фирма ООО и проги не справляются.

Добавлено:
Напомню
Что у хакера есть только 2 возможности, первая сломать прогу чтобы она вообще не работала, 2 сломать правильно, и взлом нашей проги может быть равносилень взлому понятий хакера. Чем не трибуна для достижений?

Добавлено:
Eternal_Shield
Теперь исключительно Вам. Вы тоже романтик хакеров, что позволительно в силу общественных предпочтений. 2 часа хакера обычно 2 минуты моей работы. Я Сумашедший не сравниваю себя с подаванами. Чаше подаваны за пол минуты роздают то что хакер отменяет за 2 дня. Это программа минимум. Но желательно чтобы урок отмены был уроком для понимающего лица. Прививка от моей программы остаётся локальной прививкой хакера романтика который так же надеятся что он кому-то интересен. Но у него один +, он знает новые технологии. Я бы не променял такого хакера на 10 воздыхателей.

Добавлено:
Eternal_Shield

Цитата:
а что именно комментировать?

По моей технологии - комментировать всё что вызывает подозрения реалиста а не теоретика. Такова задума топика.
Автор: delover
Дата сообщения: 22.03.2012 20:16
Упростим. Озадачить хакера - не проблема - озадачит ламер не читавший топик. Однако когда Вы вводите правило программы - логику нельзя ориентироваться на хакера, иначе на программе уже будет вред, но ещё не принесённый. Но когда Вы внедяете технологию незнакомую хакерам, мой совет крутите цену на умножение в 10 раз. Вы без посредников знаете алгоритм XOR. Может я Вас буду учить как извлекать данные о том где деньги? Суть шифрования чтобы отвлечь сопляков от кормушек где деньги.
Автор: wasilissk
Дата сообщения: 23.03.2012 06:00
По-моему, данному топику чрезвычайно не хватает конкретики. Я увидел совет номер один, про динамическое связывание и все, совета номер два так и не последовало. Оно конечно очень удобно с одной стороны, можне всегда сказать, что вас не правильно поняли, но в этом случае не понятно, о чем вообще дискутировать.
Афоризмы и каламбуры это конечно здорово, но мне во-первых "Странник и его тень" больше нравится, во-вторых тут вроде как форум прикладного программирования, а не метафизического.
Автор: Eternal_Shield
Дата сообщения: 23.03.2012 10:11
delover

Цитата:
По моей технологии - комментировать всё что вызывает подозрения реалиста а не теоретика. Такова задума топика.

Никогда не задавался вопросом шифрования. Не знаю принципы, основы и всякие реализации. Поэтому оценить Ваши мысли не могу ... соотв. прокомментировать их тоже.

Как говорится: Я просто проходил мимо
Автор: delover
Дата сообщения: 23.03.2012 21:04
wasilissk
Нате вам 10 советов про динамику. Я в топике не рожать собрался, а найти волну. Одну грамотную мысль я всё же сказал. Ну остальное удача.
Автор: delover
Дата сообщения: 27.03.2012 21:55
Да из любопытства - было ли что нибудь новое чем проведения информации по дереву? Увлекательная картина смотреть как месаджи по дереву идут к хендлам. Ещё бы заранее знать что это способ передать шестым способом информацию не обязательную для алгоритмов, но дополнительную, о состоянии защиты? И так лучше вернуться к криптостойкости. Наиболее непонятными для систем шифрования являются вычисления с плавающей точкой. Например каждую тетраду байов умножаем ровно на 99. Только после этого берём пол тетрады в другом типе и делим. Ущёрб хаотичности шифра - минимальный, - успех против криптостойкости за 5 минут - максимальный. Так вот - некоторые типы данных становятся криптостойкими со временем. Если типы с плавающей точкой, то более криптостойкие.
Автор: delover
Дата сообщения: 30.03.2012 19:42
Кстати ребята.
Я вдруг понял что чем больше пишу про защиту - тем больше вы понимаете что Вам это нафег не надо. И тут кулл-согласие. Но всё же топик я уморил до сонной мухи. Может найдётся противоречивое мнение в принцыпе?

В защиту хакеров
Вот так хранится нужный гуид


Код: [no]function guidConverter.From(b: array of Byte): TGUID;
//(b: array of Byte)
//(a: Integer; b: Smallint; c: Smallint; d: Byte; e: Byte; f: Byte; g: Byte; h: Byte; i: Byte; j: Byte; k: Byte)
//(a: Integer; b: Smallint; c: Smallint; d: array of Byte)
//(g: string)
//(a: Cardinal; b: Word; c: Word; d: Byte; e: Byte; f: Byte; g: Byte; h: Byte; i: Byte; j: Byte; k: Byte)
{$IFNDEF CIL}
type
ArgumentException = EConvertError;
{$ENDIF}
var
B2: Byte;
begin
if High(B) <> 15 then
raise ArgumentException.Create(SByteArrayForGUID);
B2 := B[3];
B[3] := B[0];
B[0] := B2;
B2 := B[2];
B[2] := B[1];
B[1] := B2;
B2 := B[4];
B[4] := B[5];
B[5] := B2;
B2 := B[6];
B[6] := B[7];
B[7] := B2;
Result := Create(B);
FIID := Result;
end;[/no]

Страницы: 12

Предыдущая тема: Шифрование с помощью XOR - криптоанализ


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.