게임 해킹툴의
변칙적 공격 기법 분석

www.CodeEngn.com
2013 CodeEngn Conference 09

박근영
2013.11.30
Contents
01

[ 공격 기법 1 ] 게임 코드 조작 By OpenProcess

02

[ 방어 기법 1 ] OpenProcess 접근 방어

03

[ 공격 기법 2 ] 게임 코드 조작 By BrainSwit...
기사 자료

© AhnLab, Inc. All rights reserved.
실험 대상
TargetFPS.exe

© AhnLab, Inc. All rights reserved.
[공격 기법 1]

게임 코드 조작 By OpenProcess

TargetFPS.exe
CodeModify.exe
코드 조작 by OpenProcess
hProcess =OpenProcess(…,TargetFPS_PI...
[방어 기법 1]

OpenProcess 접근 방어

TargetFPS.exe
Protector_dll.dll

OpenProcess
접근 방어
IF (OpenProcess 대상 PID==TargetFPS PID)
IF...
[공격 기법 2]

게임 코드 조작 By BrainSwitching

TargetFPS.exe
Protector_dll.dll

OpenProcess
접근 방어
IF (OpenProcess 대상 PID==TargetFP...
[공격 기법 2]

게임 코드 조작 By BrainSwitching

CodeModify.exe CodeModify.섹션별VA,
BrainSwitching.exe
WriteProcessMemory(TaskMgr_PI->...
[공격 기법 3]

게임 코드 조작 By DLL-Injection

TargetFPS.exe
Protector_dll.dll

OpenProcess
접근 방어
IF (OpenProcess 대상 PID==TargetFPS...
[방어 기법 2]

메모리 CRC 비교

TargetFPS.exe
Protector_dll.dll

OpenProcess
접근 방어

Memory CRC
비교

if (원본Mem_Crc32 != 현재Mem_Crc32)
...
[공격 기법 4]

게임 코드 조작 By DR 조작

TargetFPS.exe
Protector_dll.dll

OpenProcess
접근 방어

Memory CRC
비교

CodeModify.exe

BrainSwit...
[공격 기법 4]

게임 코드 조작 By DR 조작

LONG __stdcall DebugHookHandler(PEXCEPTION_POINTERS ExceptionInfo)
{ …
ctx.ContextFlags = CO...
[공격 기법 4]

게임 코드 조작 By DR 조작

Kernel32 ! AddVectoredExceptionHandler(0, DebugHookHandler)
hThread = OpenThread( THREAD_SUS...
[공격 기법 4]

게임 코드 조작 By DR 조작

Debug Register

DR0 = BP 주소

[예외 핸들러]
인터럽트 1

인터럽트 발생 당시
의 CPU 레지스터 정
보를 갖고 있음

© AhnLab, In...
[공격 기법 4]

게임 코드 조작 By DR 조작

Debug Register

• Debug Register: 디버깅 목적으로 프로세서에서 사용하는 레지스터
• DR0 ~ DR3
• BreakPoint를 설정할 주소...
조작 기법별 테크맵
TargetFPS.exe
Protector_dll.dll

OpenProcess
접근 방어

Memory CRC
비교

CodeModify.exe

BrainSwitching.exe

코드 조작 by...
Thank you
Q&A
www.CodeEngn.com
2013 CodeEngn Conference 09
© AhnLab, Inc. All rights reserved.
Upcoming SlideShare
Loading in …5
×

[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석

1,237 views

Published on

2013 CodeEngn Conference 09

게임 보안 제품의 보안성이 강화됨에 따라 해킹툴의 공격 기법 또한 다양해 지고 있다. 몇 몇 해킹툴은 게임에 접근하기 위해 OS의 디버깅 메커니즘 악용한다거나 시스템 프로세스로 위장하게 되는데 이와 같은 몇가지 변칙적인 기법에 대해 알아보고자 한다.

http://codeengn.com/conference/09
http://codeengn.com/conference/archive

Published in: Education
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,237
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
27
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석

  1. 1. 게임 해킹툴의 변칙적 공격 기법 분석 www.CodeEngn.com 2013 CodeEngn Conference 09 박근영 2013.11.30
  2. 2. Contents 01 [ 공격 기법 1 ] 게임 코드 조작 By OpenProcess 02 [ 방어 기법 1 ] OpenProcess 접근 방어 03 [ 공격 기법 2 ] 게임 코드 조작 By BrainSwitching 04 [ 공격 기법 3 ] 게임 코드 조작 By DLL-Injection 05 [ 방어 기법 2 ] 메모리 CRC 비교 06 [ 공격 기법 4 ] 게임 코드 조작 By DR 조작
  3. 3. 기사 자료 © AhnLab, Inc. All rights reserved.
  4. 4. 실험 대상 TargetFPS.exe © AhnLab, Inc. All rights reserved.
  5. 5. [공격 기법 1] 게임 코드 조작 By OpenProcess TargetFPS.exe CodeModify.exe 코드 조작 by OpenProcess hProcess =OpenProcess(…,TargetFPS_PID) VirtualProtectEx(hProcess, 0x4071e7, 0x3, PAGE_EXECUTE_READWRITE , ..) szPatchedByte[0] = 0x90; szPatchedByte[1] = 0x90; szPatchedByte[2] = 0x90; WriteProcessMemory(hProcess, 0x4071e7, szPatchedByte, 3, ..) © AhnLab, Inc. All rights reserved.
  6. 6. [방어 기법 1] OpenProcess 접근 방어 TargetFPS.exe Protector_dll.dll OpenProcess 접근 방어 IF (OpenProcess 대상 PID==TargetFPS PID) IF (접근 시도 Process != OS Process) return FAIL CodeModify.exe 코드 조작 by OpenProcess hProcess =OpenProcess(…,TargetFPS_PID) VirtualProtectEx(hProcess, 0x4071e7, 0x3, PAGE_EXECUTE_READWRITE , ..) szPatchedByte[0] = 0x90; szPatchedByte[1] = 0x90; szPatchedByte[2] = 0x90; WriteProcessMemory(hProcess, 0x4071e7, szPatchedByte, 3, ..) © AhnLab, Inc. All rights reserved.
  7. 7. [공격 기법 2] 게임 코드 조작 By BrainSwitching TargetFPS.exe Protector_dll.dll OpenProcess 접근 방어 IF (OpenProcess 대상 PID==TargetFPS PID) IF (접근 시도 Process != OS Process) return FAIL © AhnLab, Inc. All rights reserved. CodeModify.exe BrainSwitching.exe 코드 조작 by OpenProcess
  8. 8. [공격 기법 2] 게임 코드 조작 By BrainSwitching CodeModify.exe CodeModify.섹션별VA, BrainSwitching.exe WriteProcessMemory(TaskMgr_PI->hProcess, pTaskMgr_Image , CodeModify.헤더 데이 pTaskMgr_Image = VirtualAllocEx(TaskMgr_PI->hProcess, CodeModify.이미지베이스, + ResumeThread(TaskMgr_PI->hThread) SetThreadContext(TaskMgr_PI->hProcess, &Context) Context.Eax = (CodeModify.이미지베이스 + &Context) GetThreadContext(TaskMgr_PI->hProcess,CodeModify.엔트리포인트주소) NtDll ! UnmapViewOfSection(TaskMgr_PI->hProcess, TaskMgr.이미지베이스) CreateProcess(.. ”TaskMgr.exe”, .. ,CREATE_SUSPENDED, .. , &TaskMgr_PI) CodeModify.섹션별 데이타, ..) X 섹션개수 타, ..) CodeModify.이미지전체사이즈, ..) CreateProcess(..) TaskMgr.exe CodeModify.exe (Process) (File-base) NtDll ! UnmapViewOfSection(..) header header VirtualAllocEx(..) .text .text WriteProcessMemory(..) WriteProcessMemory(..) .rdata .rdata GetThreadContext(..) .data .data .rsrc .rsrc Ctx.Eax = CodeModify.이미지 SetThreadContext(..) ResumeThread(..) © AhnLab, Inc. All rights reserved.
  9. 9. [공격 기법 3] 게임 코드 조작 By DLL-Injection TargetFPS.exe Protector_dll.dll OpenProcess 접근 방어 IF (OpenProcess 대상 PID==TargetFPS PID) IF (접근 시도 Process != OS Process) return FAIL CodeModify.exe BrainSwitching.exe 코드 조작 by OpenProcess DLL_Injector.exe CodeModify_dll.dll 코드 조작 by DLL-인젝션 VirtualProtect(0x4071e7, 0x3, PAGE_EXECUTE_READWRITE , ..) szPatchedByte[0] = 0x90; szPatchedByte[1] = 0x90; szPatchedByte[2] = 0x90; memcpy((LPVOID) 0x4071e7, szPatchedCodes, 3); © AhnLab, Inc. All rights reserved.
  10. 10. [방어 기법 2] 메모리 CRC 비교 TargetFPS.exe Protector_dll.dll OpenProcess 접근 방어 Memory CRC 비교 if (원본Mem_Crc32 != 현재Mem_Crc32) 코드조작 감지! CodeModify.exe BrainSwitching.exe 코드 조작 by OpenProcess DLL_Injector.exe CodeModify_dll.dll 코드 조작 by DLL-인젝션 © AhnLab, Inc. All rights reserved.
  11. 11. [공격 기법 4] 게임 코드 조작 By DR 조작 TargetFPS.exe Protector_dll.dll OpenProcess 접근 방어 Memory CRC 비교 CodeModify.exe BrainSwitching.exe 코드 조작 by OpenProcess DLL_Injector.exe CodeModify_dll.dll 코드 조작 by DLL-인젝션 DR_Modify_dll.dll 코드 조작 by DR 조작 © AhnLab, Inc. All rights reserved.
  12. 12. [공격 기법 4] 게임 코드 조작 By DR 조작 LONG __stdcall DebugHookHandler(PEXCEPTION_POINTERS ExceptionInfo) { … ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS; | THREAD_GET_CONTEXT | if(ExceptionInfo->예외발생주소 == 0x4071e7) hThread = OpenThread( THREAD_SUSPEND_RESUME SuspendThread(hThread )) &ctx ) Kernel32 ! AddVectoredExceptionHandler(0, DebugHookHandler) { ResumeThread( hThread |THREAD_QUERY_INFORMATION, FALSE, TargetThreadID ) SetThreadContext( 0x004071e7 ctx.Dr0 = (DWORD) hThread, THREAD_SET_CONTEXT ExceptionInfo->ContextRecord->Eip = 0x004071e7 + 0x3; Return..; ctx.Dr7 |= 0x00000001 }… } TargetFPS.exe DR_Modify_dll.dll 코드 조작 by DR 조작 AddVectoredExceptionHandler(..) hThread = OpenThread(..) SuspendThread( hThread ) ctx.ContextFlags= CONTEXT_DEBUG_REGISTERS; ctx.Dr0 = 0x4071e7; ctx.Dr7 |= 0x00000001; SetThreadContext( hThread,&ctx ); ResumeThread( hThread ); © AhnLab, Inc. All rights reserved.
  13. 13. [공격 기법 4] 게임 코드 조작 By DR 조작 Kernel32 ! AddVectoredExceptionHandler(0, DebugHookHandler) hThread = OpenThread( THREAD_SUSPEND_RESUME | THREAD_GET_CONTEXT | THREAD_SET_CONTEXT |THREAD_QUERY_INFORMATION, FALSE, TargetThreadID ) SuspendThread( hThread ) ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS; ctx.Dr0 = (DWORD) 0x004071e7 ctx.Dr7 |= 0x00000001 SetThreadContext( hThread, &ctx ) ResumeThread( hThread ) LONG __stdcall DebugHookHandler(PEXCEPTION_POINTERS ExceptionInfo) { … if(ExceptionInfo->예외발생주소 == 0x4071e7) { ExceptionInfo->ContextRecord->Eip = 0x004071e7 + 0x3; Return..; }… } © AhnLab, Inc. All rights reserved.
  14. 14. [공격 기법 4] 게임 코드 조작 By DR 조작 Debug Register DR0 = BP 주소 [예외 핸들러] 인터럽트 1 인터럽트 발생 당시 의 CPU 레지스터 정 보를 갖고 있음 © AhnLab, Inc. All rights reserved.
  15. 15. [공격 기법 4] 게임 코드 조작 By DR 조작 Debug Register • Debug Register: 디버깅 목적으로 프로세서에서 사용하는 레지스터 • DR0 ~ DR3 • BreakPoint를 설정할 주소를 저장 • DR6 • 디버그 상태 레지스터 • DR7 • 디버그 제어 레지스터 : breakpoint 상태를 선택적으로 활성화/비활성화 © AhnLab, Inc. All rights reserved.
  16. 16. 조작 기법별 테크맵 TargetFPS.exe Protector_dll.dll OpenProcess 접근 방어 Memory CRC 비교 CodeModify.exe BrainSwitching.exe 코드 조작 by OpenProcess DLL_Injector.exe CodeModify_dll.dll 코드 조작 by DLL-인젝션 DR_Modify_dll.dll 코드 조작 by DR 조작 © AhnLab, Inc. All rights reserved.
  17. 17. Thank you Q&A www.CodeEngn.com 2013 CodeEngn Conference 09 © AhnLab, Inc. All rights reserved.

×