ShHelper Update

[0x00] Concept

기존에 루트킷을 개발하거나, 다양한 PoC 코드를 개발할 때 사용하던 템플릿을 공유합니다.

이를 공유하는 이유는 다양한 이슈를 제보받음으로써 개발력을 좀 더 향상시키기 위함입니다.

[0x01] Features

루트킷에 들어간 기능들은 대부분 비공개로, 안티 치트 업무에 있어서는 치명적일 수 있는 부분이 분명 존재하기 때문에 포함되지 않습니다.

Mini FilterObject Callback, Notify Routine 에 대한 간단한 예제가 포함되어 있습니다.

주요 기능 몇 가지만 소개하도록 하겠습니다.

[-] Pe Parser

기본적인 PE 포맷을 파싱하기 위한 기능입니다.

[-] Process

프로세스의 정보들과 메모리 관련 루틴들이 포함되어 있습니다.

프로세스와의 통신 등의 용도로 활용 가능한 공유 메모리 생성 기능이 포함되어 있습니다.

VAD 관련 기능은 포함되지 않습니다.

[-] Global Offset

InitializeOffset_Unsafe 루틴은 서비스 제공자는 사용하지 않는 것이 좋습니다.

버전 별 오프셋을 제공하지만, 지속적인 업데이트가 필요하기 때문입니다.

가장 현명한 방법은 심볼을 이용하는 것 입니다.

실제 루트킷의 경우 유저 애플리케이션에서 심볼을 파싱한 후 이를 드라이버로 전달하여 설정하는 방법을 사용합니다.

또는 버전과 관계없이 동일한 루틴을 이용하여 오프셋을 찾는 방법이 있습니다.

하지만 이 방법 또한 지속적으로 관찰이 필요한 부분입니다.

[-] Pool Manager

메모리 관리는 어려운 과제 중 하나라고 생각했습니다.

때문에 풀을 용도에 맞게 미리 할당하고 이를 사용하는 방식으로 구현하였습니다.

최종적으로 드라이버가 언로드될 때는 미리 할당된 풀들을 해제함으로써 메모리 관리를 조금 더 수월하게 하려고 구성하였습니다.

[0x02] Conclusion

단지 개발의 편의성을 위해 만들어 둔 템플릿 입니다.

이를 활용한 프로젝트가 https://github.com/Shhoya/Shh0yaTool 입니다.

많은 피드백 부탁드리겠습니다.