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

прочее EVM Vanity Generator

duk

🦆 quack
КИДАЛА
Регистрация
05.01.2023
Сообщения
169
Реакции
120
Гарант сделки
2
Пожалуйста, обратите внимание, что пользователь заблокирован
Генератор красивых адресов для сетей EVM (ETH)
Немного доработал и вынес из TRX генератора https://xss.pro/threads/103260

evnGen.png


Добавлено:
  • Сохранение всех результатов в текстовые файлы в корне скрипта (каждый поиск дозаписывает результаты в файл)
  • Опция поиска по рандомным, но последовательно повторяющимся символам
  • Скорость сгенерированных и проверенных кошельков за минуту

1. Поиск по первым символам
Приватный ключ: 1f0a8f4ab07ac6399aedeefb620642a171b6891564447c21721fc8223958cdb4
Адрес: 0x00000973F9BE5AdD8Ff0DC30302866c3106A7F32

2. Поиск по последним символам
Приватный ключ: 5b91e18a8f80560cb49db902e43c241773ac7c5ccee994ea0cd9afff25752c42
Адрес: 0x0CA17A48363dB04630FA5906Fb12b01636300000

3. Поиск по первым и последним символам
Приватный ключ: be0f7aedf53efaf026db52d1c2bc7a7d399e0819e4d710bd0f85b77d04bcd2c3
Адрес: 0x0007A03b93DFCc91B60E6Fc25A5944745CA0bb00

4. Поиск по любой последовательности символов
Приватный ключ: 3774d6fdd13f7e363eeb644397c77c737e53d38be26e32efba4b03d01d740cce
Адрес: 0x887E65Ecf2648400000380116669Dda45cd52c6f

5. Поиск по рандомным, но последовательно повторяющимся символам
Приватный ключ: df5b9655f81afc172a02480e0e9e9b51f2a05cad740b6a15214449b1a7091b88
Адрес: 0x363953ba86694D6825BdBa07d9e58444444422d3

Код:
package main

import (
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "os"
    "strings"
    "time"

    "github.com/ethereum/go-ethereum/common/hexutil"
    "github.com/ethereum/go-ethereum/crypto"
)

type key struct {
    privateKey string
    addressHex string
    attempts   int
}

func main() {
    var searchOption int

    fmt.Println("")
    fmt.Println("🦆 EVM Vanity Generator:")
    fmt.Println("1. Поиск по первым символам")
    fmt.Println("2. Поиск по последним символам")
    fmt.Println("3. Поиск по первым и последним символам")
    fmt.Println("4. Поиск по любой последовательности символов")
    fmt.Println("5. Поиск по рандомным, но последовательно повторяющимся символам")
    fmt.Print("⚡️Выберите опцию: ")
    fmt.Scan(&searchOption)

    var pattern string

    switch searchOption {
    case 1:
        fmt.Print("Введите первые символы адреса (адреса начинаются с 0x): ")
        fmt.Scan(&pattern)
    case 2:
        fmt.Print("Введите последние символы адреса: ")
        fmt.Scan(&pattern)
    case 3:
        var firstCharacters, lastCharacters string
        fmt.Print("Введите первые символы адреса (адреса начинаются с 0x): ")
        fmt.Scan(&firstCharacters)
        fmt.Print("Введите последние символы адреса: ")
        fmt.Scan(&lastCharacters)
        pattern = firstCharacters + "*" + lastCharacters
    case 4:
        fmt.Print("Введите любые символы: ")
        fmt.Scan(&pattern)
    case 5:
        var numRepeatedChars int
        fmt.Print("Введите минимальное количество повторений символа: ")
        fmt.Scan(&numRepeatedChars)
        pattern = strings.Repeat(".", numRepeatedChars)
    default:
        fmt.Println("Неверная опция")
        return
    }

    filename := fmt.Sprintf("%d.txt", searchOption)
    file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        fmt.Println("Ошибка при открытии файла:", err)
        return
    }
    defer file.Close()

    addressChannel := make(chan *key)
    attemptsChannel := make(chan int, 100)

    go func() {
        ticker := time.NewTicker(1 * time.Minute)
        var attempts int

        for {
            select {
            case <-ticker.C:
                fmt.Printf("🚀 Сгенерировано кошельков за последнюю минуту: %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.addressHex, searchOption, pattern) {
                    addressChannel <- k
                    attemptsChannel <- 1
                    return
                }
                attemptsChannel <- 1
                attempts++
            }
        }()
    }

    for i := 0; i < 255; i++ {
        k := <-addressChannel
        result := fmt.Sprintf("Приватный ключ: %s, Адрес: %s\n", k.privateKey, k.addressHex)
        fmt.Print(result)
        if _, err := file.WriteString(result); err != nil {
            fmt.Println("Ошибка при записи в файл:", err)
            return
        }
    }
}

func generateKey(attempts int) (*key, error) {
    privateKey, err := crypto.GenerateKey()
    if err != nil {
        return nil, fmt.Errorf("failed to generate key: %w", err)
    }

    privateKeyBytes := crypto.FromECDSA(privateKey)

    addressHex := crypto.PubkeyToAddress(privateKey.PublicKey).Hex()
    addb, _ := hex.DecodeString(addressHex)
    hash1 := s256(s256(addb))
    secret := hash1[:4]
    addb = append(addb, secret...)

    return &key{
        privateKey: hexutil.Encode(privateKeyBytes)[2:],
        addressHex: addressHex,
        attempts:   attempts,
    }, nil
}

func matchesPattern(address string, searchOption int, pattern string) bool {
    switch searchOption {
    case 1:
        return strings.HasPrefix(address, pattern)
    case 2:
        return strings.HasSuffix(address, pattern)
    case 3:
        parts := strings.Split(pattern, "*")
        return strings.HasPrefix(address, parts[0]) && strings.HasSuffix(address, parts[1])
    case 4:
        return strings.Contains(address, pattern)
    case 5:
        return hasRepeatedCharacters(address, len(pattern))
    default:
        return false
    }
}

func hasRepeatedCharacters(address string, numRepeatedChars int) bool {
    for i := 0; i < len(address)-numRepeatedChars+1; i++ {
        repeated := true
        for j := i; j < i+numRepeatedChars-1; j++ {
            if address[j] != address[j+1] {
                repeated = false
                break
            }
        }
        if repeated {
            return true
        }
    }
    return false
}

func s256(s []byte) []byte {
    h := sha256.New()
    h.Write(s)
    return h.Sum(nil)
}
 

Вложения

  • main.zip
    1.9 КБ · Просмотры: 31
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Есть что нибудь такое под TRC20 (Tron)?
https://xss.pro/threads/103260/
 


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