Dark Souls Remaster uses AES-encrypted save files. Basic unpacker is at Dark-Souls-Remastered-SL2-Unpacker

Structure is

struct SaveEntry {
    uint8_t Encyption_IV[16];
    //everything after this is encrypted with the const file key and the randomly generated iv
    uint8_t CHECKSUM_HEADER[16];
    uint32_t remaining_size_of_save_slot; //each slot is 0x060030 bytes, minus the IV and Checksum and Footer
    uint8_t unknown_save_details[0x5FFFC]; //the actual save file info. Format unknown/not documented here atm
    uint8_t FOOTER_PADDING[16];
}
 
struct SaveFileHeader {
    uint32_t magic32_0 = 0x34444E42; // "BND4"
    uint32_t magic32_1 = 0x00000000;
    uint32_t magic32_2 = 0x00010000; // Tarvitz speculated that this was a revision number
    uint32_t slot_count = 11; // Including the main menu data slot, so number of save slots is (slot_count - 1)
    const uint32_t const32b_0 = 0x00000040;
    const uint32_t const32b_1 = 0x00000000;
    const uint32_t const32b_2 = 0x00000000;
    const uint32_t const32b_3 = 0x00000000;
    uint32_t slot_header_size = 0x00000020;
    const uint32_t const32b_4 = 0x00000000;
    uint32_t size = 0x000002C0; // Size of the file header in bytes (Including slot header array and title arrays)
    const uint32_t const32b_5 = 0x00000000;
    const uint32_t const32b_6 = 0x00002001;
    const uint8_t padding[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
}
 
struct SaveSlotHeader {
    const uint32_t const32b_0 = 0x00000050;
    const uint32_t const32b_1 = 0xFFFFFFFF;
    const uint32_t slot_size = 0x060030; // Size of save slot (not including 12 trailing 0 bytes)
    const uint32_t const32b_2 = 0x00000000;
    uint32_t offset = 0; // Offset (from start of file) of save slot struct. The header's size (0x2C0)
    uint32_t title_offset = 0; // Offset of title string (not the same as character name)
    const uint32_t padding_size = 0x00000000; // Length of trailing padding between the current slot and the following slot
    const uint32_t const32b_3 = 0x00000000;
}
 
struct SaveSlotTitle {
    wchar_t prefix[9] = { L'U', L'S', L'E', L'R', L'_', L'D', L'A', L'T', L'A' };
    wchar_t index[3] = { L'0', L'0', L'0' };
    wchar_t terminator = 0;
}
 
struct SaveFile {
    SaveFileHeader header;
    SaveSlotHeader save_headers[11];
    SaveSlotTitle save_titles[11];
    SaveEntry saves[11]; //the 10th of these stores the menu information
}