
Rtl* 함수를 의도하지 않은 방식으로 사용하는 대체 읽기 및 쓰기 프리미티브
Rtl* 함수를 의도와 다른 방식으로 사용하여 대체 읽기 및 쓰기 프리미티브를 시연하는 스크립트가 포함된 저장소입니다.
RtlFillMemory는 대상 메모리에 대한 포인터, 쓸 바이트 수, 단일 바이트 값이라는 세 가지 인자를 받습니다. 지정된 메모리 블록에 바이트 하나만 씁니다.
RtlInitializeBitMapEx와 RtlFillMemory를 조합하여 사용하는 쓰기 프리미티브입니다.
먼저, 문자열을 16바이트 청크로 반복 처리하며 각 블록을 두 개의 8바이트 값으로 분할합니다. 첫 번째 8바이트 블록은 RtlInitializeBitMapEx의 첫 번째 인자에 저장되고, 두 번째 8바이트 블록은 두 번째 인자에 저장됩니다.
그런 다음, 추가 8바이트 블록이 남아 있으면 두 번째 매개변수를 NULL로 하여 RtlInitializeBitMapEx로 그것을 작성합니다.
마지막으로, 8바이트 미만이 남아 있으면 RtlFillMemory를 사용하여 전체 문자열이 대상 버퍼에 복사될 때까지 한 번에 한 바이트씩 작성합니다.
RtlQueryDepthSList를 사용하는 읽기 프리미티브입니다. ROP 가젯 헌팅, 바이트 비교, 후크 탐지 등에 유용합니다. 여기서는 ROP 가젯을 사용한 간단한 프로세스 인젝션을 시연합니다. RtlQueryDepthSList는 읽을 메모리 주소라는 단일 인자만 받지만, 2바이트만 읽고 4바이트 값을 반환합니다.