diff --git a/src/unlocker/dbdcrypt.cpp b/src/unlocker/dbdcrypt.cpp index 69726f1..129f0b7 100644 --- a/src/unlocker/dbdcrypt.cpp +++ b/src/unlocker/dbdcrypt.cpp @@ -50,7 +50,27 @@ std::string DBDCrypt::encrypt(const std::string& data, const std::string& access return "DbdDAQEB" + b64Enc(fullPayload); } + if (type == TYPE_2) + { + auto transformedKey = transformCDNKey(CDN_KEY_BASE64); + + std::string shiftedData = data; + for (char& c : shiftedData) + c = (char)((unsigned char)c - 1); + + std::vector padded(shiftedData.begin(), shiftedData.end()); + int padLen = 16 - (padded.size() % 16); + if (padLen < 16) padded.insert(padded.end(), padLen, 0); + + auto encryptedBody = aesECBEncrypt(padded, transformedKey); + if (encryptedBody.empty()) return ""; + + std::vector fullPayload(encryptedBody.begin(), encryptedBody.end()); + return "DbdDAgAC" + b64Enc(fullPayload); + } + if (type == TYPE_3) + { auto decodedKey = b64Dec(accessKey); if (decodedKey.empty()) return "";