Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
게임 해킹툴의
변칙적 공격 기법 분석

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,483 views

Published on

2013 CodeEngn Conference 09

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

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

Published in: Education
  • Be the first to comment

[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.

×