Immunity Debugger
활용 & Plugin 제작
2nd CodeEngn Seminar
활용 g 제작
유리바다(seaofglass@korea.com)
www.CodeEngn.com
차 례
• Episode I
– 격돌!
Immunity Debugger vs Cheat Engine
• Episode II
– OEP를 찾아서
• Episode III
– 내 사랑 Plugin !
PyCommand
기본형식
!command
예) !list
- 목록 보기
!pinball
시연
Think!
Pinball with HOOK?!
import immlib
from immlib import LogBpHook
class pinball_hooks(LogBpHook):
def __init__(self):
LogBpHook.__init__(self)
def run(self, regs):def run(self, regs):
imm = immlib.Debugger()
imm.Run()
def main(args):
imm = immlib.Debugger()
bp_address = 0x0101757C
logbp_hook = pinball_hooks()
logbp_hook.add("pinball_game", bp_address)
immlib.py
• Log(“msg”)
– Log 윈도우에 메시지를 남김 (Alt + L)
• updateLog()
– Log 윈도우 업데이트g 윈 우 업데이
• setStatusBar(“msg”)
– 상태창에 메시지 설정
• clearStatusBar()
– 상태창에 설정된 메시지 지움
immlib.py
• stepIn() # F7
• stepOver() # F8
• Run() # F9
• runTillRet() # Ctrl+F9
• setBreakpoint(0xbadc0ded)
• deleteBreakpoint(0xbadc0ded)
immlib.py
• writeMemory(self, address, buf)
– 메모리 지정한 주소에 데이터 쓰기
dM ( lf dd i )• readMemory(self, address, size)
– 메모리로 부터 지정한 크기의 데이터 읽기
• isvmWare()
– 현재 디버거가 vmware에서 작동 여부 확인
immlib.py
• isAnalysed(regs['EIP'])
– 코드가 분석되어져 있는가?
l C d ( ['EIP'])• analyseCode(regs['EIP'])
– 코드 분석 수행
• openTextFile(path="")
– MDI창으로 텍스트 파일을 읽어온다.
immlib.py
• regs=imm.getRegs()
imm.Log("OEP : 0x%08X " % regs['EIP'])
tR ("ESP" 0 FFFFFFFF)• setReg("ESP", 0xFFFFFFFF)
• getDebuggedName()
– 디버깅되고 있는 process module 이름 얻기
immlib.py
• getDebuggedPid()
– 디버깅되고 있는 프로세스 아이디 얻기
i Ad i ()• isAdmin()
– 디버깅이 운영자 권한으로 실행되는가 여부
• ps()
– 현재 활성화 된 프로세스 리스트 얻기
immlib.py
• getAllThreads()
– 모든 프로세스의 thread 리스트 얻기
llSt k()• callStack()
– Back Trace를 리스트 형으로 얻어옴
• markBegin(), markEnd()
– 시작 마크, 종료 마크 (시간 값)
immlib.py
• inputBox(“title”)
– 입력 창 생성
• comboBox(“title”, “[list1, list2]”)
– 콤보 박스 생성
Episode II
넌 누구냐?
Unpacker OEP 찾기!
• 예제 : FSG 2.0
– OP Code를 이용하여 원하는 위치 찾기
– BreakPoint 걸기
– 디버거를 실행하여 BP 위치 도달
– BreakPoint 해제
– StepOver()로 OEP 도달하기
주소 찾기
#code = "JMP DWORD PTR DS:[EBX+C]“
opcode = "xFFx63x0C“
res = imm Search(opcode)res = imm.Search(opcode)
Search( ) 함수
입력 : OP Code
출력 : 찾은 주소 (리스트 형)
디버거 구동
1. 찾은 주소로 중단점 설정
2. 실행 후 중단점에서 정지
3. 중단점 해지
imm.setBreakpoint(res[0])
imm.Run(1)
imm.deleteBreakpoint(res[0])
코드 분석 여부 파악
imm.isAnalysed(regs['EIP'])
imm.analyseCode(regs['EIP'])
OEP에 주석 달기
regs = imm.getRegs()
imm.setComment(regs['EIP'], “OEP!")
Packer OEP 찾기 시연
• 예제 FSG 2.0
Episode III
plugin 제작
• PDK(Plugin Development Kit)를 통한 제작
• 작성 언어 : 델파이(Delphi)
• http://www.peid.info/BobSoft/Source/PDK
forDelphi.zip (지원 라이브러리 및 샘플)
IMMDBG_Plugindata()
function IMMDBG_Plugindata(name: PChar):
Integer; cdecl;
begin
StrLCopy(name, PChar(PLUGIN_NAME), 32);
// Name of plugin
Result := PLUGIN_VERSION;
end;
IMMDBG_Plugininit()
function IMMDBG_Plugininit(ImmDbgVersion:
Integer; hWndImmDbg: HWND; features:
PULONG): Integer; cdecl;
begin
g_hwndImmDbg := hWndImmDbg;
Addtolist(0, 0, 'ImmunityDebugger Plugin');
Result := 0;
end;
IMMDBG_Pluginmenu()
function IMMDBG_Pluginmenu(origin: Integer; pData: PChar; pItem:
Pointer): Integer; cdecl;
begin
case origin of
PM_MAIN:
begin
// Pl i i i i d// Plugin menu in main window
StrCopy(pData, '0 &menu1, 1 &menu2,|2 &About...');
Result := 1;
end;
else
Result := 0; // Any other window
end;
end;
IMMDBG_Pluginaction()
procedure IMMDBG_Pluginaction(origin: Integer; action: Integer; pItem: Pointer); cdecl;
var
sExePath: string;
begin
if (origin = PM_MAIN) then
begin
sExePath := GetExePath;
case action of
0: MessageBox(g_hwndImmDbg, PChar(MENU1), PChar(PLUGIN_NAME), MB_OK);
1: MessageBox(g_hwndImmDbg, PChar(MENU2), PChar(PLUGIN_NAME), MB_OK);
2: MessageBox(g_hwndImmDbg, PChar(ABOUT), PChar(PLUGIN_NAME), MB_OK);
end;
end;
end;
Plugin.pas
• PM_MAIN : 메인 윈도우 처리
• PM_DUMP : DUMP창 처리
• PM_THREADS : THREADS창 처리
• PM_BREAKPOINTS : BreakPoint 창 처리
• PM_RTRACE : Run Trace 창 처리
• PM_DISASM : CPU창 팝업 메뉴 처리
• PM_CPUREGS : CPU Register 처리
Plugin.pas
• TIMMDBG_Pluginmainloop()
• TIMMDBG_Pluginsaveudd()
• TIMMDBG_Pluginuddrecord()
• TIMMDBG_Pluginshortcut()
• TIMMDBG_Pluginreset()
• TIMMDBG_Pluginclose()
• TIMMDBG_Plugindestroy()
Sample plugin
참고 사이트
• 이뮤니티 포럼
– http://forum.immunityinc.com
• PDK for Delphi
– http://www.peid.info/BobSoft/
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
Quiz
Reverse Engineering과 연관 있다고
생각되는 동물과 그 이유?
평가 – 공감성, 논리성
앞으로의 여정?
배우고자 하는 누군가를 위하여
학습 할 수 있는 토대를 만드는 것은학습 할 수 있는 토대를 만드는 것은
참으로 의미 있는 일이다!
감
사
합
2nd CodeEngn Seminar
합
니
다
www.CodeEngn.com

More Related Content

PDF
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
PDF
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
PDF
[Kerference] 시작! 리버싱 - 김종범(KERT)
PDF
알고리즘 시각화 라이브러리 ipytracer 개발기
PDF
Hello world
PDF
모두의 JIT 컴파일러
PPTX
[KGC 2011]Boost 라이브러리와 C++11
PDF
Hello c++ world
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)
알고리즘 시각화 라이브러리 ipytracer 개발기
Hello world
모두의 JIT 컴파일러
[KGC 2011]Boost 라이브러리와 C++11
Hello c++ world

What's hot (20)

PPTX
2016 hack festival igrus
PDF
Iocp 기본 구조 이해
PDF
[C++ Korea 2nd Seminar] C++17 Key Features Summary
PPTX
WTL 소개
PPTX
Windows reversing study_basic_2
 
PDF
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
PPTX
Dependency hell과 빌드지옥 탈출
PDF
Boost 라이브리와 C++11
PDF
사내스터디 발표 온라인게임서버이해 20100401
PDF
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
PDF
병렬 프로그래밍2
PPTX
Pwnable study basic_3
 
PDF
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
PPTX
파이썬 스터디 9장
PPTX
C++11
PPTX
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
PPTX
파이썬 스터디 15장
PDF
Google coding guide
PPTX
Assembly 스터디 2
 
PDF
2. c언어의 기본
2016 hack festival igrus
Iocp 기본 구조 이해
[C++ Korea 2nd Seminar] C++17 Key Features Summary
WTL 소개
Windows reversing study_basic_2
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
Dependency hell과 빌드지옥 탈출
Boost 라이브리와 C++11
사내스터디 발표 온라인게임서버이해 20100401
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
병렬 프로그래밍2
Pwnable study basic_3
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
파이썬 스터디 9장
C++11
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
파이썬 스터디 15장
Google coding guide
Assembly 스터디 2
 
2. c언어의 기본
Ad

Viewers also liked (9)

PDF
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
PDF
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
PDF
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
PDF
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
PDF
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
PDF
[2013 CodeEngn Conference 08] pwn3r - Pwning multiplayer game - case Starcraf...
PDF
Inc0gnito fuzzing for_fun_sweetchip
PDF
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
PDF
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
[2013 CodeEngn Conference 08] pwn3r - Pwning multiplayer game - case Starcraf...
Inc0gnito fuzzing for_fun_sweetchip
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
Ad

Similar to [2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작 (20)

PPTX
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
PDF
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PDF
이산수학 C1 프로젝트 7
PPTX
Pwnable study basic_1
 
PPTX
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
PDF
이산수학07
PPTX
호서대학교 - 다양한 오픈소스 활용법 (Colab을 이용하여)
PPTX
Windows reversing study_basic_8
 
PDF
병렬 프로그래밍
PDF
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
PDF
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
PPTX
kics2013-winter-biomp-slide-20130127-1340
PPTX
Windows reversing study_basic_7
 
PPTX
파이선 실전공략-1
PDF
Django의 배신(주니어 개발자의 Django 삽질기)
PDF
HI-ARC PS 101
PPTX
초보 프로그래머
PDF
[OpenTRS-001] Vitor
PDF
6. code level reversing
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
이산수학 C1 프로젝트 7
Pwnable study basic_1
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
이산수학07
호서대학교 - 다양한 오픈소스 활용법 (Colab을 이용하여)
Windows reversing study_basic_8
 
병렬 프로그래밍
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
kics2013-winter-biomp-slide-20130127-1340
Windows reversing study_basic_7
 
파이선 실전공략-1
Django의 배신(주니어 개발자의 Django 삽질기)
HI-ARC PS 101
초보 프로그래머
[OpenTRS-001] Vitor
6. code level reversing

More from Code Engn (20)

PDF
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
PDF
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
PDF
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
PDF
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
PDF
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
PDF
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
PDF
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
PDF
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
PDF
[2014 CodeEngn Conference 10] 정광운 - 안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
PDF
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
PDF
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
PDF
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
PDF
[2013 CodeEngn Conference 09] proneer - Malware Tracker
PDF
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
PDF
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
PDF
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
PDF
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
PDF
[2010 CodeEngn Conference 04] Max - Fighting against Botnet
PDF
[2010 CodeEngn Conference 04] window31 - Art of Keylogging 키보드보안과 관계없는 키로거들
PDF
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
[2014 CodeEngn Conference 10] 정광운 - 안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
[2013 CodeEngn Conference 09] proneer - Malware Tracker
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2010 CodeEngn Conference 04] Max - Fighting against Botnet
[2010 CodeEngn Conference 04] window31 - Art of Keylogging 키보드보안과 관계없는 키로거들
[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이

[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작