payload analysis
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <span>
|
||||
#include <string>
|
||||
|
||||
template <typename T>
|
||||
struct ObjectInfo {
|
||||
std::size_t GetSize() const { return sizeof(T); }
|
||||
T data;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct ObjectInfo<std::string> {
|
||||
std::size_t GetSize() const { return data.size(); }
|
||||
std::size_t SetSize(std::size_t size) {
|
||||
data.resize(size);
|
||||
return data.size();
|
||||
}
|
||||
|
||||
std::string data;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct ObjectInfo<std::vector<std::uint8_t>> {
|
||||
std::size_t GetSize() const { return data.size(); }
|
||||
std::size_t SetSize(std::size_t size) {
|
||||
data.resize(size);
|
||||
return data.size();
|
||||
}
|
||||
|
||||
std::vector<std::uint8_t> data;
|
||||
};
|
||||
|
||||
struct OLEObjectHeader {
|
||||
ObjectInfo<std::uint32_t> OLEVersion;
|
||||
ObjectInfo<std::uint32_t> FormatID;
|
||||
ObjectInfo<std::string> ClassName;
|
||||
ObjectInfo<std::string> TopicName;
|
||||
ObjectInfo<std::string> ItemName;
|
||||
};
|
||||
|
||||
struct EmbededObject {
|
||||
OLEObjectHeader Header;
|
||||
ObjectInfo<std::vector<std::uint8_t>> NativeData;
|
||||
};
|
||||
|
||||
struct LinkedObject {};
|
||||
|
||||
struct OLEObject {
|
||||
OLEObjectHeader Header;
|
||||
|
||||
std::unique_ptr<EmbededObject> EObject = nullptr;
|
||||
std::unique_ptr<LinkedObject> LOobject = nullptr;
|
||||
};
|
||||
|
||||
OLEObject OLEObjectParser(std::span<const std::uint8_t> data);
|
||||
+3
-1
@@ -1 +1,3 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include <vector> // IWYU pragma: export
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
#include <filesystem>
|
||||
|
||||
std::string ReadEntireFileIntoString(std::filesystem::path path);
|
||||
void WriteStringToFile(std::filesystem::path path,
|
||||
std::vector<std::uint8_t> data);
|
||||
Reference in New Issue
Block a user