Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
ПК с отключенным режимом Secure Boot также будут пропускать установку таких драйверов;
Если же говорить про программерские задачи, аналога strace на винде не подскажите?procmon.exe
EVENT_TRACE_FLAG_SYSTEMCALL в https://msdn.microsoft.com/en-us/library/windows/desktop/aa363784(v=vs.85).aspx. «Ограниченное» значит «только адреса вызываемых функций и возвращаемые значения, без аргументов».[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30
[2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF96000127A6C
[2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = NTSTATUS= 50
[2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039F3090
[2]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [Thread] Context Switch from 4836. to 0.
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND)
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039C6430
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND)
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A7190
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF80003990C40
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039C6430
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0xc0000034(STATUS_OBJECT_NAME_NOT_FOUND)
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039A5E30
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = STATUS_SUCCESS
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Enter SysCallAddress=0xFFFFF800039ACAD0
[0]FFFFFFFF.FFFFFFFF::08/02/2016-21:25:37.851 [PerfInfoEvent]System Call Exit NtStatus = 0x8000001a(STATUS_NO_MORE_ENTRIES)
Конкретно это — выдача tracelog -start -eflag 1 0x90 && [пауза] && tracelog -stop && tracefmt -tmf system.tmf LogFile.Etl в формате [CPU]PID.TID::time event. PID/TID, впрочем, придётся отслеживать руками по событиям Context Switch.#!/usr/sbin/dtrace -C -s
#pragma D option quiet
proc:::exec-success
{
printf("\nEXECNAME: %s\n", execname);
this->isx64=(curproc->p_flag & P_LP64)!=0;
#define SELECT_64_86(x64, x86) (this->isx64 ? (x64) : (x86))
#define GET_POINTER(base, offset) (user_addr_t)SELECT_64_86(*(uint64_t*)((base)+sizeof(uint64_t)*(offset)), *(uint32_t*)((base)+sizeof(uint32_t)*(offset)))
this->ptrsize=SELECT_64_86(sizeof(uint64_t),sizeof(uint32_t));
this->argc=curproc->p_argc;
this->isClean=SELECT_64_86(1, (curproc->p_dtrace_argv==(uregs[R_SP],sizeof(uint32_t),sizeof(uint32_t))));
this->argv=(uint64_t)copyin(curproc->p_dtrace_argv,this->ptrsize*this->argc);
/* printf("%s with args:%d (%p, %p)\n",execname, this->argc, curproc->pdtraceargv, uregs\[R_SP\]); */
printf("EXEC: %s ", (0 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,0)) : "");
printf("%s ", (1 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,1)) : "");
printf("%s ", (2 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,2)) : "");
printf("%s ", (3 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,3)) : "");
printf("%s ", (4 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,4)) : "");
printf("%s ", (5 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,5)) : "");
printf("%s ", (6 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,6)) : "");
printf("%s ", (7 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,7)) : "");
printf("%s ", (8 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,8)) : "");
printf("%s ", (9 < this->argc && this->isClean) ? copyinstr(GET_POINTER(this->argv,9)) : "");
printf("\n");
#undef GET_POINTER
#undef SELECT_64_86
}
А потом за каждое подписывание драйвера по 5 баксов, нормально так, по еврейски....
несколько дней на сертификацию затеряются напрочьНужна не сертификация, а просто идентификационная подпись от Microsoft, она получается почти автоматом в течение 5–10 минут, никакой сертификации не требуется.
2. Начать процесс сертификации драйвера по процедуре Extended Validation (EV) Code Signing Certificate. Все драйверы, которые планируется загрузить для проверки, должны быть подписаны сертификатом EV.
Все драйверы режима ядра для Windows 10 (1607) теперь должны быть подписаны Microsoft