INNER CODE UNIT · C++

past_secdir

trailofbits/uthenticode · src/uthenticode.cpp:451

  auto const *const past_secdir = raw_cert_table.data() + raw_cert_table.size();
  // Let us tread carefully, we expect all members of WIN_CERTIFICATE up to bCertificate
  while (current_wincert + 8 < past_secdir) {
    size_t offset = 0;
    std::uint32_t length = *reinterpret_cast<std::uint32_t *>(current_wincert + offset);
    offset += sizeof(length);

    std::uint16_t revision = *reinterpret_cast<std::uint16_t *>(current_wincert + offset);
    offset += sizeof(revision);

    std::uint16_t type = *reinterpret_cast<std::uint16_t *>(current_wincert + offset);
    offset += sizeof(type);

    // Continue only we can satisfy the length
    if (current_wincert + length <= past_secdir && length > offset) {
      std::vector<std::uint8_t> cert_data(current_wincert + offset, current_wincert + length);

      certs.emplace_back(static_cast<certificate_revision>(revision),

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…