Во время теста я обнаружил окно входа в систему и провел простой анализ шифрования пароля, увидев внешнее шифрование. Откройте сеть в консоли и сопоставьте Fetch/XHR. Вы увидите, что пароль зашифрован.
Глобальный поиск шифрования в js Здесь вы можете видеть, что используется шифрование AES в режиме ECB (вы можете использовать библиотеку Python Crypto-js для написания сценариев шифрования и дешифрования или извлечь js из внешнего интерфейса для обратного проектирования, поскольку в библиотеке есть функция, вызываемая в c(t ) enc, метод AES)
Первый метод использует скрипт Python для шифрования.
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
key = b'0123456789ABCDEF'
cipher = AES.new(key, AES.MODE_ECB)
def encrypt(msg):
plaintext = msg.encode('utf-8')
padded_plaintext = pad(plaintext, AES.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
return base64.b64encode(ciphertext).decode('utf-8')
def decrypt(ciphertext):
ciphertext_bytes = base64.b64decode(ciphertext.encode('utf-8'))
padded_plaintext = cipher.decrypt(ciphertext_bytes)
plaintext = unpad(padded_plaintext, AES.block_size)
return plaintext.decode('utf-8')
enData = encrypt('123456')
print(enData)
print(decrypt(enData))
Результаты запуска (вы можете видеть, что они соответствуют значению шифрования пароля на картинке)
Второй метод извлекает интерфейсный js для обратного проектирования. Общий код выглядит следующим образом.
const CryptJs = require('crypto-js');
function c(t) {
var e = CryptJs.enc.Utf8.parse(t);
return CryptJs.AES.encrypt(e, {
"words": [
808530483,
875902519,
943276354,
1128547654
],
"sigBytes": 16
}, {
mode: CryptJs.mode.ECB,
padding: CryptJs.pad.Pkcs7
}).toString()
}
data = 123456;
console.log(c(data))
Результаты бега также соответствуют
Весь процесс выглядит следующим образом Сначала найдите основную функцию функции c(t) и установите точки останова в начале и конце этой функции.
Переместите курсор на i.a, и вы увидите, что используется метод из библиотеки crypto-js, поэтому вы можете заменить i.a переменной CryptJs (поскольку const CryptJs = require('crypto-js'); определен в js файл, чтобы вы могли напрямую использовать CryptJs для замены i.a)
При запуске этого js-файла будет сообщено об ошибке o не определено.
В это время вернитесь к точке останова и переместите курсор на переменную o (или выведите значение o в консоль и скопируйте его)
На данный момент замените o значением, которое мы скопировали.
Результат выполнения соответствует запросу
При взрыве ящиков входа вы можете использовать этот сценарий для пакетного шифрования и использовать зашифрованные пароли в качестве словаря для взлома.
Запишите обратный анализ шифрования параметров входа во время теста.zip (1,972 МБ). Загрузите вложение https://xzfile.aliyuncs.com/upload/affix/20230413125742-b92ccc22-d9b7-1.zip.