Пожалуйста, обратите внимание, что пользователь заблокирован
К своему сожалению, имел неосторожность отправть N-ую сумму на идентичный моему получателю кошелек. Как в этом треде - https://xss.pro/threads/82463/
Вашему вниманию, Golang скрипт для генерации адресов в сети TRON
1. Поиск по первым символам (pKey: 524f8fd83cb54259a4209d178abe686bf45eef77b92a8956439f34d178b0669f, address: TXSSemgwBZVb5SHZTYZ6XVVBWS688MTomF)
2. Поиск по последним символам (pKey: b8ae5661b8d1f8bf5de9beff97b27c81a7323190c41e2b2a8cf22b575d328f63, address: TRkgSp7xGzopgraWqiLdXwfRnQhqhFbXSS)
3. Поиск по первым и последним символам (см. спойлер)
4. Поиск по последовательности символов (pKey: 2c9e13aa731a04ac2caca775f01c045a999ce9dfb0fa174fa308d258541f3b95, address: TTvwsCKNDSg4zE6tQAv5iZBgv2y1XSSisF)
Данные адреса можно использовать в аналогичных атаках
Если будете генерировать какой-либо красивый кошелек для себя (например начинающийся с 5 символов T), - не забывайте про мультиподпись.
- Кошельки начинающиеся более чем с 5 символов T подсвечены
- Вывод скорости генераций
Вашему вниманию, Golang скрипт для генерации адресов в сети TRON
1. Поиск по первым символам (pKey: 524f8fd83cb54259a4209d178abe686bf45eef77b92a8956439f34d178b0669f, address: TXSSemgwBZVb5SHZTYZ6XVVBWS688MTomF)
2. Поиск по последним символам (pKey: b8ae5661b8d1f8bf5de9beff97b27c81a7323190c41e2b2a8cf22b575d328f63, address: TRkgSp7xGzopgraWqiLdXwfRnQhqhFbXSS)
3. Поиск по первым и последним символам (см. спойлер)
4. Поиск по последовательности символов (pKey: 2c9e13aa731a04ac2caca775f01c045a999ce9dfb0fa174fa308d258541f3b95, address: TTvwsCKNDSg4zE6tQAv5iZBgv2y1XSSisF)
Данные адреса можно использовать в аналогичных атаках
Если будете генерировать какой-либо красивый кошелек для себя (например начинающийся с 5 символов T), - не забывайте про мультиподпись.
- Кошельки начинающиеся более чем с 5 символов T подсвечены
- Вывод скорости генераций
Код:
package main
import (
"crypto/ecdsa"
"crypto/sha256"
"encoding/hex"
"errors"
"fmt"
"strings"
"time"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/crypto"
"github.com/fatih/color"
"github.com/mr-tron/base58"
)
type key struct {
privateKey string
publicKey string
addressHex string
addressBase58 string
attempts int
numT int
}
func main() {
var searchOption int
fmt.Println("█████████████████████████████████████████████████████████")
fmt.Println("█─▄─▄─█▄─▄▄▀█▄─▀─▄███▄─█─▄██▀▄─██▄─▀█▄─▄█▄─▄█─▄─▄─█▄─█─▄█")
fmt.Println("███─████─▄─▄██▀─▀█████▄▀▄███─▀─███─█▄▀─███─████─████▄─▄██")
fmt.Println("▀▀▄▄▄▀▀▄▄▀▄▄▀▄▄█▄▄▀▀▀▀▀▄▀▀▀▄▄▀▄▄▀▄▄▄▀▀▄▄▀▄▄▄▀▀▄▄▄▀▀▀▄▄▄▀▀")
fmt.Println("")
fmt.Printf("Wallets starting with more than 5 characters \033[32mT\033[0m are \033[32mhighlighted\033[0m\n")
fmt.Println("The generation rate is output every 5 minutes")
fmt.Println("")
fmt.Println("Choose search option:")
fmt.Println("1. Search by first characters")
fmt.Println("2. Search by last characters")
fmt.Println("3. Search by both first and last characters")
fmt.Println("4. Search by any sequence of letters or numbers")
fmt.Print("Enter the option number: ")
fmt.Scan(&searchOption)
var firstCharacters, lastCharacters, sequence string
switch searchOption {
case 1:
fmt.Print("Enter the first characters to search: ")
fmt.Scan(&firstCharacters)
case 2:
fmt.Print("Enter the last characters to search: ")
fmt.Scan(&lastCharacters)
case 3:
fmt.Print("Enter the first characters to search: ")
fmt.Scan(&firstCharacters)
fmt.Print("Enter the last characters to search: ")
fmt.Scan(&lastCharacters)
case 4:
fmt.Print("Enter any sequence of letters or numbers to search: ")
fmt.Scan(&sequence)
default:
fmt.Println("Invalid option")
return
}
addressChannel := make(chan *key)
attemptsChannel := make(chan int, 100)
go func() {
ticker := time.NewTicker(time.Duration(5 * time.Minute))
var attempts int
for {
select {
case <-ticker.C:
fmt.Printf("speed: %d\n", attempts)
attempts = 0
case <-attemptsChannel:
attempts++
}
}
}()
for i := 0; i < 255; i++ {
go func() {
attempts := 1
for {
k, err := generateKey(attempts)
if err != nil {
fmt.Println(err)
return
}
if matchesPattern(k.addressBase58, searchOption, firstCharacters, lastCharacters, sequence) {
addressChannel <- k
attemptsChannel <- 1
return
}
attemptsChannel <- 1
attempts++
}
}()
}
for i := 0; i < 255; i++ {
select {
case k := <-addressChannel:
var numTColor, addressColor string
switch {
case k.numT <= 5:
numTColor = color.WhiteString("%d", k.numT)
addressColor = k.addressBase58
case k.numT == 6:
numTColor = color.GreenString("%d", k.numT)
addressColor = color.GreenString(k.addressBase58)
case k.numT >= 7:
numTColor = color.RedString("%d", k.numT)
addressColor = color.RedString(k.addressBase58)
}
fmt.Printf("attempts: %d, tNum: %s, pKey: %s, address: %s\n", k.attempts, numTColor, k.privateKey, addressColor)
}
}
}
func matchesPattern(address string, searchOption int, firstCharacters, lastCharacters, sequence string) bool {
switch searchOption {
case 1:
return strings.HasPrefix(address, firstCharacters)
case 2:
return strings.HasSuffix(address, lastCharacters)
case 3:
return strings.HasPrefix(address, firstCharacters) && strings.HasSuffix(address, lastCharacters)
case 4:
return strings.Contains(address, sequence)
default:
return false
}
}
func generateKey(attempts int) (*key, error) {
var k key
privateKey, err := crypto.GenerateKey()
if err != nil {
return nil, fmt.Errorf("failed to generate key: %w", err)
}
privateKeyBytes := crypto.FromECDSA(privateKey)
k.privateKey = hexutil.Encode(privateKeyBytes)[2:]
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
if !ok {
return nil, errors.New("error casting public key to ECDSA")
}
publicKeyBytes := crypto.FromECDSAPub(publicKeyECDSA)
k.publicKey = hexutil.Encode(publicKeyBytes)[2:]
address := crypto.PubkeyToAddress(*publicKeyECDSA).Hex()
address = "41" + address[2:]
k.addressHex = address
addb, _ := hex.DecodeString(address)
hash1 := s256(s256(addb))
secret := hash1[:4]
addb = append(addb, secret...)
k.addressBase58 = base58.Encode(addb)
k.attempts = attempts
k.numT = countStartingTs(k.addressBase58)
return &k, nil
}
func s256(s []byte) []byte {
h := sha256.New()
h.Write(s)
bs := h.Sum(nil)
return bs
}
func countStartingTs(address string) int {
var count int
for _, char := range address {
if char == 'T' {
count++
} else {
break
}
}
return count
}
Последнее редактирование: