NTCALL64
Windows NT x64 syscall fuzzer.
이 프로그램은 Peter Kosyh의 NtCall을 기반으로 합니다. 이는 고급 버전이 아니며 그 목적은 x64 Windows NT 6+용 NtCall 기능 포트입니다.
시스템 요구 사항
- x64 윈도우 7/8/8.1/10/11;
- 관리 권한이 있는 계정(선택 사항)
용법
NTCALL64 -help[-win32k][-log][-call Id][-pc 값][-wt 값][-s]
- -help - 프로그램 매개변수 도움말을 표시합니다.
- -log - COM1 포트를 통해 로깅을 활성화합니다. 서비스 매개변수가 기록됩니다(느림). 기본값은 비활성화됩니다.
- -pname - 로깅을 위한 포트 이름, 기본 COM1(-log 활성화 필수, -ofile과 상호 배타적);
- -ofile - 로깅을 위한 파일 이름, 기본값 ntcall64.log(-log 활성화 필수, -pname과 상호 배타적);
- -win32k - W32pServiceTable 서비스 퍼징을 시작합니다(때때로 Shadow SSDT라고도 함).
- -call Id - 제공된 ID에 의한 fuzz syscall(id는 모든 테이블 ntos/win32k에서 올 수 있음)
- -pc Value - 각 syscall에 대한 통과 횟수를 설정합니다(최대값은 ULONG64 최대값으로 제한됨). 기본값은 65536입니다.
- -wt 값 - 스레드 호출에 대한 대기 시간 초과를 초 단위로 설정합니다(단일 syscall 퍼징 제외). 기본값은 30입니다.
- -start Id - 주어진 syscall ID에서 시작하는 Fuzz syscall 테이블이며, -call과 상호 배타적입니다.
- -s - LocalSystem 계정에서 프로그램 실행을 시도합니다.
매개변수 없이 사용되면 NtCall64는 KiServiceTable(ntos, SSDT라고도 함)에서 퍼징 서비스를 시작합니다.
각 퍼징 스레드의 기본 시간 초과는 30초로 설정됩니다. 로깅이 활성화되면 시간 초과가 120초로 확장됩니다.
-call 옵션과 함께 사용하면 모든 블랙리스트가 무시되고 퍼징 스레드 시간 초과가 INFINITE로 설정됩니다.
예:
- ntcall64 -로그
- ntcall64 -log -pc 1234
- ntcall64 -log -pc 1234 -전화 4096
- ntcall64 -log -ofile mylog.txt
- ntcall64 -win32k -log -pname COM2
- ntcall64 -win32k
- ntcall64 -win32k -로그
- ntcall64 -win32k -log -pc 1234
- ntcall64 -전화 4097
- ntcall64 -전화 4097 -로그
- ntcall64 -전화 4097 -log -pc 1000
- ntcall64 -pc 1000
- ntcall64 -s
- ntcall64 -pc 1000 -s
참고: 이 도구를 사용하기 전에 Windows 크래시 덤프 설정을 구성해야 합니다.
(예: https://msdn.microsoft.com/en-us/library/windows/hardware/ff542953(v=vs.85).aspx).
작동 원리
시스템 서비스를 무차별 대입하여 미리 정의된 "잘못된 인수" 목록에서 무작위로 가져온 입력 매개변수를 사용하여 여러 번 호출합니다.
구성
badcalls.ini 구성 파일을 사용하면 특정 서비스를 블랙리스트에 올릴 수 있습니다. 이를 수행하려면 - badcalls.ini의 해당 섹션에 서비스 이름(대소문자 구분)을 추가하십시오. 예를 들어 KiServiceTable의 서비스를 블랙리스트에 추가하려면 [ntos] 섹션을 사용하십시오.
badcalls.ini의 예(프로그램과 함께 제공되는 기본 구성)
[엔토스]
Nt닫기
NtInitiatePower액션
NtRaiseHardError
NtReleaseKeyed이벤트
Nt전파완료
NtShutdown시스템
NtSuspend프로세스
NtSuspendThread
NtTerminate프로세스
Nt종료스레드
NtWaitForAlertByThreadId
NtWaitForSingleObject
NtWaitForKeyedEvent
[win32k]
NtUserRealWaitMessageEx
NtUserShowSystemCursor
NtUserSwitch데스크탑
NtUserLockWorkStation
NtUserEnumDisplayMonitors
NtUserGet메시지
NtUserWait메시지
NtUserDoSoundConnect
NtUserRealInternalGetMessage
NtUserBroadcastThemeChangeEvent
NtUserWaitAvailableMessageEx
NtUserMsgWaitForMultipleObjectsEx
경고
이 프로그램은 운영 체제를 충돌시키고 안정성에 영향을 미쳐 데이터가 손실되거나 프로그램 자체가 충돌할 수 있습니다. 귀하는 자신의 책임 하에 이를 사용합니다.
NtCall64에서 발견된 버그
- win32k!NtGdiDdDDISetHw보호해제복구
- win32k!NtUserCreateActivationObject
- win32k!NtUserOpenDesktop
- win32k!NtUserSetWindowsHookEx
- win32k!NtUserInitialize->win32kbase!Win32kBaseUserInitialize
- nt!NtLoadEnclaveData
- nt!NtCreateIoRing
- nt!NtQuery정보Cpu파티션
짓다
NTCALL64는 작은 어셈블러 사용으로 C로 작성된 전체 소스 코드와 함께 제공됩니다. 소스에서 빌드하려면 Microsoft Visual Studio 2017 이상 버전이 필요합니다.
지침
- 빌드하려는 솔루션의 프로젝트에 대해 먼저 플랫폼 도구 세트를 선택합니다(프로젝트->속성->일반).
- Visual Studio 2017용 v141;
- Visual Studio 2019용 v142;
- Visual Studio 2022용 v143.
- v140 이상의 경우 대상 플랫폼 버전을 설정합니다(프로젝트->속성->일반):
- v140인 경우 8.1을 선택합니다.
- v141 이상인 경우 10을 선택합니다.
- 최소 필수 Windows SDK 버전 8.1
저자
(c) 2016 - 2023 NTCALL64 프로젝트
Peter Kosyh(일명 Gloomy(c) 2001)의 원본 NtCall, http://gl00my.chat.ru/