You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Seems that AD encryption section (it's decryption part) is wrong.
Trying to decrypt a simple E01 encrypted file (created with the help of AccessData FTK Imager 4.7.1.2) using password "test" (file attached):
#include <iostream>
#include <fstream>
#include <vector>
#include <cassert>
#include <openssl/evp.h>
#include <openssl/hmac.h>
std::vector<unsigned char> read_at_offset(const char* fn, unsigned offset, size_t size) {
std::vector<unsigned char> buffer;
std::ifstream file(fn, std::ios::binary);
if (!file.is_open()) {
std::cerr << "Failed to open file " << fn << std::endl;
return buffer;
}
file.seekg(offset, std::ios::beg);
// read the data
buffer.resize(size);
file.read((char*)buffer.data(), buffer.size());
assert(file.gcount() == buffer.size());
return buffer;
}
int main()
{
const char fp[] = "C:/temp/E01/small-enc-pass.E01";
char pass[] = "test";
auto iter_count = *(unsigned int*)read_at_offset(fp, 32, 4).data();
auto salt_len = *(unsigned int*)read_at_offset(fp, 36, 4).data();
auto key_len = *(unsigned int*)read_at_offset(fp, 40, 4).data();
auto hmac_len = *(unsigned int*)read_at_offset(fp, 44, 4).data();
auto salt = read_at_offset(fp, 48, salt_len);
auto fkey = read_at_offset(fp, 48 + salt_len, key_len);
auto hmac = read_at_offset(fp, 48 + salt_len + key_len, hmac_len);
auto pkey = std::vector<unsigned char>(key_len);
auto success = PKCS5_PBKDF2_HMAC(pass, sizeof(pass)-1, salt.data(), salt.size(), iter_count, EVP_sha512(), pkey.size(), pkey.data());
assert(success == 1);
assert(hmac_len == EVP_MAX_MD_SIZE);
unsigned char hmac_result[EVP_MAX_MD_SIZE];
HMAC(EVP_sha512(), pkey.data(), pkey.size(), fkey.data(), fkey.size(), hmac_result, &hmac_len);
assert(EVP_MAX_MD_SIZE == hmac.size());
for (auto i = 0; i < EVP_MAX_MD_SIZE; i++) {
printf("%02u\n", hmac[i]);
printf("%02u\n", hmac_result[i]);
assert(hmac[i] == hmac_result[i]);
}
printf("OK\n");
}
The text was updated successfully, but these errors were encountered:
Seems that AD encryption section (it's decryption part) is wrong.
Trying to decrypt a simple E01 encrypted file (created with the help of AccessData FTK Imager 4.7.1.2) using password "test" (file attached):
The text was updated successfully, but these errors were encountered: