-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
мб кому-то пригодиться кому лень его включать.
сразу говорю про помощь не пишите, тем кому это нужно сами смогут это реализовать.
сразу говорю про помощь не пишите, тем кому это нужно сами смогут это реализовать.
tpm:
#include "dependencies/safety.hpp"
#include "dependencies/spoof_drv_object.hpp"
#include "dependencies/tpm/tpm_all.hpp"
class tpm_driver {
public:
static TPM2B_PUBLIC_KEY_RSA generated_key;
static NTSTATUS handle_read_public(PDEVICE_OBJECT device, PIRP irp, PVOID context) {
UNREFERENCED_PARAMETER(device);
UNREFERENCED_PARAMETER(irp);
if (!context)
return STATUS_SUCCESS;
auto request = [I]static_cast<driver_utils::ioc_request[/I]>(context);
ExFreePool(context);
auto data = static_cast<driver_utils::tpm_data_read_public*>(request.buffer);
const UINT32 command_size = driver_utils::big_endian_to_little_endian_32(data->header.param_size);
const size_t min_size = offsetof(driver_utils::tpm_data_read_public, out_public.public_area.unique.rsa.buffer) + driver_utils::key_size;
if (command_size < min_size) {
return STATUS_SUCCESS;
}
memcpy(data->out_public.public_area.unique.rsa.buffer, generated_key.buffer, driver_utils::key_size);
return STATUS_SUCCESS;
}
static NTSTATUS dispatch(PDEVICE_OBJECT device, PIRP irp) {
const auto ioc = IoGetCurrentIrpStackLocation(irp);
if (ioc->Parameters.DeviceIoControl.IoControlCode == IOCTL_TPM_SUBMIT_COMMAND) {
const auto header = static_cast<const TPM2_COMMAND_HEADER*>(irp->AssociatedIrp.SystemBuffer);
const TPM_CC command = driver_utils::big_endian_to_little_endian_32(header->command_code);
if (command == TPM_CC_ReadPublic)
driver_utils::change_ioc(ioc, irp, &tpm_ctx.get()->handle_read_public());
}
return STATUS_SUCCESS;
}
};
TPM2B_PUBLIC_KEY_RSA tpm_driver::generated_key = {0};
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver_object, PUNICODE_STRING registry_path) {
UNREFERENCED_PARAMETER(registry_path);
driver_object->DriverUnload = driver_unload;
driver_object->MajorFunction[IRP_MJ_DEVICE_CONTROL] = tpm_driver::dispatch;
UNICODE_STRING driver_name;
RtlInitUnicodeString(&driver_name, L"\\Driver\\TPM");
PDEVICE_OBJECT device_object = nullptr;
auto status = IoCreateDevice(driver_object, 0, &driver_name, FILE_DEVICE_UNKNOWN, 0, FALSE, &device_object);
return STATUS_SUCCESS;
}