ScyllaHide - 유저모드 안티-안티-디버그 치트시트
ScyllaHide는 고급 오픈소스 유저모드 안티-안티-디버그 라이브러리다 (Windows, x86/x64). 멀웨어와 상용 패커는 잘 알려진 API 호출과 플래그 세트를 통해 디버거를 감지한다; ScyllaHide는 해당 함수를 훅하여 “디버거가 없다”고 반환하므로 분석가가 보호된 코드를 디버깅할 때 회피를 트리거하지 않는다. x64dbg, IDA, OllyDbg의 플러그인으로 제공되며, 대상에 주입하여 독립 실행형으로도 실행할 수 있다.
승인된 멀웨어 분석 및 소프트웨어 연구에만 해당. ScyllaHide는 방어 연구 도구다; 분석할 권한이 있는 샘플과 소프트웨어에만 사용하라.
설치
| 방법 | 방법 |
|---|
| x64dbg | 플러그인 DLL을 x64dbg/plugins/에 드롭 |
| IDA | IDA 플러그인을 IDA의 plugins/ 폴더로 복사 |
| Standalone (injector) | InjectorCLIx64.exe / InjectorGUI.exe 사용 |
| 소스 | x64dbg/ScyllaHide 리포지토리에서 빌드 |
| 확인 | 디버거의 플러그인 메뉴 표시 |
숨기는 것
| 기술 | ScyllaHide가 대응 |
|---|
IsDebuggerPresent | false 반환 |
CheckRemoteDebuggerPresent | 디버거 없음 보고 |
PEB BeingDebugged 플래그 | 제거됨 |
NtGlobalFlag | 정규화됨 |
NtQueryInformationProcess | ProcessDebugPort/Flags 스푸핑 |
| Heap 플래그 | 정규화됨 |
NtSetInformationThread (HideFromDebugger) | 차단됨 |
타이밍 체크 (GetTickCount, rdtsc) | 선택적 완화 |
OutputDebugString / 하드웨어 중단점 | 처리됨/숨겨짐 |
플러그인 사용 (x64dbg)
| 단계 | 작업 |
|---|
| 타겟 열기 | x64dbg에서 패킹됨/보호된 바이너리 로드 |
| 옵션 | Plugins → ScyllaHide → Options |
| 프로필 선택 | 훅 프로필 선택 또는 조정 |
| 훅 첨부 | 안티-디버그 체크를 통과하기 전에 활성화 |
| 실행 | 계속 실행; 체크가 이제 통과 |
프로필
| 프로필 | 사용 |
|---|
| 사전 설정된 템플릿 | 일반적인 패커 (예: VMProtect, Themida 스타일) |
| 사용자 정의 | 까다로운 타겟을 위해 개별 훅 토글 |
| 저장/로드 | 샘플/패커당 프로필 유지 |
Standalone 주입
# 이미 실행 중인 (또는 생성된) 프로세스에 ScyllaHide 주입
InjectorCLIx64.exe <pid|path> HookLibraryx64.dll <profile>
| 옵션 | 목적 |
|---|
| Spawn vs attach | ScyllaHide 아래에서 타겟 시작 또는 나중에 첨부 |
| Hook library | 훅을 설치하는 DLL |
| Profile | 적용할 안티-디버그 훅 |
전형적인 언팩 워크플로우
ScyllaHide는 일반적으로 그의 형제 도구와 함께 언팩 도구 키트의 한 부분이다.
| 도구 | 역할 |
|---|
| ScyllaHide | OEP에 도달하기 위해 실행할 수 있도록 안티-디버그 무효화 |
| x64dbg | 원래 진입점 디버그 및 도달 |
| Scylla | 가져오기 주소 테이블 재구성, PE 덤프 |
| Detect It Easy | 패커 식별 / 언팩된 파일 확인 |
# 개념: 보호된 샘플 언팩
1. ScyllaHide가 활성화된 x64dbg에서 샘플 로드
2. 패커 스텁을 통과하여 OEP 실행 (안티-디버그 중립화됨)
3. 프로세스 덤프 및 Scylla로 IAT 재구성
4. Detect It Easy로 덤프 확인
ScyllaHide vs 관련 도구
| 측면 | ScyllaHide | TitanHide | 수동 패칭 |
|---|
| 레이어 | Usermode 훅 | 커널 모드 드라이버 | 개별 체크 패치 |
| 범위 | 광범위 API 세트 | 커널 수준 은닉 | 패치한 것만 |
| 설정 | 플러그인/주입 | 드라이버 설치 | 지루함 |
| 최고 | 일상적인 RE 디버깅 | 더 깊은 은닉 필요 | 일회성 체크 |
자료