diff options
| author | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-09-25 10:38:06 +0200 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-09-25 10:38:06 +0200 |
| commit | f34d39946213f68c4d49c47eaaedb99b0f5f47ad (patch) | |
| tree | c98ab1d8e90275c203b5e4b8e6ce1b53ff3d0eff /tools/src | |
| parent | daa4f8c748d290feba8a71e889743a8a3097ad7d (diff) | |
IMP: Add driver creation tool, zxdmake. Also adding a FireWall system.
- A FW is used to block connections from unknown ends.
- The ZXD is a format used to describe a ZKA PE32+ driver.
- Some refactors have been done as well.
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'tools/src')
| -rw-r--r-- | tools/src/zxdmake.cxx | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tools/src/zxdmake.cxx b/tools/src/zxdmake.cxx new file mode 100644 index 00000000..8a3276ff --- /dev/null +++ b/tools/src/zxdmake.cxx @@ -0,0 +1,72 @@ +/* + * Created on Thu Aug 22 09:29:13 CEST 2024 + * + * Copyright (c) 2024 ZKA Technologies + */ + +#include <zxd.hxx> + +/// @brief This program converts a PE32+ driver, into a custom format, the ZXD. +/// @note ZXD is a format for ZKA signed drivers. +int main(int argc, char* argv[]) +{ + for (size_t i = 1ul; i < argc; ++i) + { + if (strcmp(argv[i], "/?") == 0) + { + std::cout << "zxdmake: ZKA ZXD Driver Tool.\n"; + std::cout << "zxdmake: © ZKA Technologies, all rights reserved.\n"; + + return 0; + } + } + + if (!std::filesystem::exists(argv[1]) || + !std::string(argv[1]).ends_with(kDriverExt)) + return -1; + + ZXD::ZXD_HEADER zxd_hdr{0}; + + zxd_hdr.d_binary_version = 1; + + memcpy(zxd_hdr.d_binary_magic, kSignedDriverMagic, strlen(kSignedDriverMagic)); + memcpy(zxd_hdr.d_binary_name, argv[1], strlen(argv[1])); + + zxd_hdr.d_binary_size = std::filesystem::file_size(argv[1]); + + memset(zxd_hdr.d_binary_padding, 0x00, 512); + + zxd_hdr.d_binary_checksum = 0; + + std::string signed_path = argv[1]; + signed_path.erase(signed_path.find(kDriverExt), strlen(kDriverExt)); + signed_path += kDriverSignedExt; + + std::ofstream of_drv(signed_path, std::ios::binary); + std::ifstream if_drv(argv[1], std::ios::binary); + + std::stringstream ss; + ss << if_drv.rdbuf(); + + if (!ZXD::zxd_check_for_mz(ss.str())) + { + std::filesystem::remove(signed_path); + std::cout << "zxdmake: Couldn't sign current driver, Input driver isn't a valid executable.\n"; + + return 1; + } + + for (auto ch : ss.str()) + { + zxd_hdr.d_binary_checksum |= ch; + } + + zxd_hdr.d_binary_checksum ^= zxd_hdr.d_binary_size; + + of_drv.write((char*)&zxd_hdr, sizeof(ZXD::ZXD_HEADER)); + of_drv.write(ss.str().c_str(), ss.str().size()); + + std::cout << "zxdmake: Signing is done, quiting, Checksum: " << zxd_hdr.d_binary_checksum << ".\n"; + + return 0; +} |
