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

Blockchain decrypt wallet with Password [source javascript]

Грач

Privet mir
Пользователь
Регистрация
01.10.2018
Сообщения
441
Реакции
374
Для использования требуется NodeJS с установленным пакетом Crypto.
Расшифровывает кошелек при помощи пароля от кошелька.
Зашифрованный кошелек можно получить при помощи ID от BlockChain.
008e3128b4.png


Кому надо - большого труда разобраться не будет думаю., ибо самое сложное уже реализовано за вас.

JavaScript:
let payload;
let password;
let pbkdf2_iterations = 5000;
let SALT_BYTES = 16;
let KEY_BIT_LEN = 256;
let BLOCK_BIT_LEN = 128;
let ALGO = {
    SHA1: "sha1",
    SHA256: "sha256"
};
const crypto = require('crypto');
let Iso10126 = {
    pad: function pad(dataBytes, nBytesPerBlock) {
        var nPaddingBytes = nBytesPerBlock - dataBytes.length % nBytesPerBlock;
        var paddingBytes = crypto.randomBytes(nPaddingBytes - 1);
        var endByte = new Buffer([nPaddingBytes]);
        return Buffer.concat([dataBytes, paddingBytes, endByte])
    },
    unpad: function unpad(dataBytes) {
        var nPaddingBytes = dataBytes[dataBytes.length - 1];
        return dataBytes.slice(0, -nPaddingBytes)
    }
};
let AES = {
    CBC: "aes-256-cbc",
    OFB: "aes-256-ofb",
    ECB: "aes-256-ecb",
    encrypt: function encrypt(dataBytes, key, salt, options) {
        options = options || {};
        var cipher = crypto.createCipheriv(options.mode || AES.CBC, key, salt || "");
        cipher.setAutoPadding(!options.padding);
        if (options.padding) dataBytes = options.padding.pad(dataBytes, BLOCK_BIT_LEN / 8);
        var encryptedBytes = Buffer.concat([cipher.update(dataBytes), cipher.final()]);
        return encryptedBytes
    },
    decrypt: function decrypt(dataBytes, key, salt, options) {
        options = options || {};
        var decipher = crypto.createDecipheriv(options.mode || AES.CBC, key, salt || "");
        decipher.setAutoPadding(!options.padding);
        var decryptedBytes = Buffer.concat([decipher.update(dataBytes), decipher.final()]);
        if (options.padding) decryptedBytes = options.padding.unpad(decryptedBytes);
        return decryptedBytes
    }
};
function decryptBufferWithKey(payload, iv, key, options) {
    options = options || {};
    options.padding = options.padding || Iso10126;
    var decryptedBytes = AES.decrypt(payload, key, iv, options);
    return decryptedBytes.toString("utf8")
}
function pbkdf2(password, salt, iterations, keyLenBytes, algorithm) {
    algorithm = algorithm || ALGO.SHA1;
    return crypto.pbkdf2Sync(password, salt, iterations, keyLenBytes, algorithm);
}
function stretchPassword(password, salt, iterations, keyLenBits) {
    var saltBuffer = new Buffer(salt, "hex");
    var keyLenBytes = (keyLenBits || 256) / 8;
    return pbkdf2(password, saltBuffer, iterations, keyLenBytes, ALGO.SHA1)
}
function decryptDataWithPassword(data, password, iterations, options) {
    var dataHex = new Buffer(data, "base64");
    var iv = dataHex.slice(0, SALT_BYTES);
    var payload = dataHex.slice(SALT_BYTES);
    var salt = iv;
    var key = stretchPassword(password, salt, iterations, KEY_BIT_LEN);
    var res = decryptBufferWithKey(payload, iv, key, options);
    return res
}

var decrypted = decryptDataWithPassword(payload, password, pbkdf2_iterations);

Разбирал Blockchain еще примерно пол год назад - мне не понадобилось, надеюсь кого то заинтересует.
 
Дополню.
На питоне, btcrecover восстанавливает пассфразу и пассфразу2 (секретка). Прогоняем наши мыло:пасс по запросу от блокчейна, качаем сразу письма (aio или от старлея), из них выдираем ID, качаем по ID утилиткой из архива c софтом "серт\кош", прогоняем его бткрекавер'ом на пассы. Если что подобрал, заходим на мыло и логинимся под юзером, сливаем его бабки (я работал только по блокчейну).
Все зависит от ваших словарей, процент пассов вытянутых может до 70% доходить. Сам лично пару раз снял с одного кошелька 4к, и со второго почти 9. По мелочи 100-300 баксов было тоже очень много. Вся проблема в качественных базах (ну и в словарях). К сожалению свой словарик не могу предоставить (еще отрабатываю по теме). Видео как пользоваться раз и два
Подробнейший хелп в наличии в архиве.
Что поддерживает:

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

Насчет второго вопроса, есть два варианта:
1. у тебя только адрес и пароль - проверяешь через любой эксплорер. Без секретки ты ничего не сможешь сделать с балансом. Даже если кошель на сервисе, там скорее всего будет 2фа.
2. у тебя секретник и пароль - получаешь по секретнику два публичных ключа compressed/uncompressed, генеришь по ним адреса и чекаешь на эксплорерах либо импортируешь в свой валлет.
 
Последнее редактирование:


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