SlideShare a Scribd company logo
1 of 18
Download to read offline
시작! 리버싱
김 종범
2016 Kerference
차례
소개 쓰임새 어셈블리 시연 끄읕
소스코드를 역추적하는 것
개발자가 코딩을 완료하고 빌드를 하게 되면 소스코드를 컴파일과정을 거
쳐 오브젝트 파일이 만들어지며, 여러 링크된 라이브러리와 오브젝트 파일
을 결합해 최종적으로 EXE DLL등이 생성된다.
빌드된 EXE, DLL등을 바이너리 분석을 거쳐서 소스코드가 어떤 식으로
만들어져 있는지 파악이 가능해진다. PE Header 분석을 통해 어떤 라이브
러리가 링크돼 있는지 분석하고, 버튼을 눌렀을 때 가동되는 코드의 흐름을
추적해 원래의 코드가 어떤 식으로 제작돼 있는지 알 수 있게 된다.
• 소스코드의 구조를 분석해서 코드변조를 통해 허가되지 않은 액
션이 가능한지등 취약점 발견
모의해킹 취약점 발견
• 해커의 침입 여부를 역분석해서 그에 상응하는 보안 모듈 개발보안코드 개발
• 코드상에선 문제가 없지만 다른 모듈이 결합했을 때 등, 예상치 못
한 상황에서 예외가 발생했을 때 등에 대해 원인 파악 가능
버그 수정
• 새로운 프로그램이 등장했는데, 구글링해도 나오지 않을 때, 리버
싱하면 기술에 대한 궁금증을 해결
신기술 연구와 학습
어셈블리어(Assembly language)
• 기본 구조
• 명령 포맷
• 레지스터
• 외울 필요없는 명령어
• 스택
• 함수의 호출
• 리턴 주소
Void 물마심()
{
BOOL bOpen = 냉장고문오픈();
if (bOpen)
{
물을꺼냄();
마심();
}
}
__asm{
냉장고앞으로간다
냉장고문을잡는다
냉장고문을연다
오픈성공:
냉장고안을본다
손을든다
냉장고안에넣는다
물병을잡는다
물병을꺼낸다
뚜껑을연다
물을컵에따른다
컵을손에든다
컵에든것을마신다.
C/C++ 코드와의 결정적인 차이
: “한 번에 한 가지 동작”
[어셈블리는 간단명료하다]
기본 구조(feat. 물마심)
명령 포맷
• X86 CPU의 기본 구조인 IA-32를 기본 플랫폼으로 삼아 소개함
 대부분의 PC가 Intel CPU를 사용하며, AMD의 경우도 대부분의 코드가 Intel
Processor와 호환되기 때문이다.
• “명령어 + 인자”
 IA-32의 기본 형태
 명령어 mov, push 같은 것들. 옵코드(opcode)
 인자: “어떤 장소로 값을 넣을 것인지”, “명령어에 해당하는 값.” 오퍼랜드(operand)
• Push 337
 Push는 옵코드, 337는 오퍼랜드
• Mov eax, 1
 Mov는 옵코드, eax와 1이 오퍼랜드
 모든 오퍼랜드는 앞의 것이 destination 뒤의 것이 source
레지스터
EAX
산술 계산을 하며, 리턴 값을 전달하는 변수.
A = Accumulator
EDX
각종 연산에 쓰이나,
리턴 값에 쓰이지 않는 변수
D = Data
ECX
C = Count
For 문에서 int I 라고 선언할 때의 i의 역할
카운팅 할 필요 없을 때는 그저 변수.
EBX
레지스터가 하나 더
필요할 때 사용되는 것.
• ESI (Source Index)
 시작지 인덱스
 데이터를 조작하거나, 복사 시에 데이
터의 주소가 저장되는 변수
• EDI (Destination Index)
 목적지 인덱스
 복사 시에 목적지의 주소가 저장되는
변수
• EBP(Stack Pointer)
 스택 프레임의 끝 지점 주소가 저장됨.
• ESP(Baste Pointer)
 스택프레임의 시작 주소가 저장됨.
기본적인명령어
• ADD, SUB
 ADD : Src에서 dest로 값을 더하는 명령어
 SUB : Src에서 dest로 값을 빼는 명령어
• INT
 인터럽트를 일으키는 명령어
• CALL
 함수를 호출하는 명령어
 CALL뒤에 오퍼랜드로 번지가 붙는다. 해당
번지를 호출하고 끝나면 call다음 번지로 돌
아온다.
• INC, DEC
 INC = i++; DEC = i--;
• PUSH, POP
 PUSH : 스택에 값을 넣는 명령어
 POP : 스택에 있는 값을 가져오는 명령어
• MOV
 값을 넣는 명령어
 Mov eax, 1 : eax에 1을 넣는 코드
 Mov ebx, ecx : ebx에 ecx를 넣는 코드
• LEA
 주소를 넣는 것
 Lea eax, dword ptr ds:[esi] : eax에 0x401000
 Mov eax, dword ptr ds:[esi] : eax에 5640EC83
 Lea eax, dword ptr ss:[esp+8] :eax에 0x13FF40
 Mov eax, dword ptr ss:[esp+8] : eax에 33
기본적인 명령어
• AND, OR ,XOR
 비트연산자
 XOR는 동일한 오퍼랜드로 처리가능
 Ex : XOR EAX, EAX : EAX = 0
• NOP
 아무것도 하지 말라는 명령어
• CMP, JMP
 비교해서 점프하라는 명령어
• 그 외의 명령어는 구글링
스택(stack)
• 지역 변수 사용
• 함수 호출 시 파라미터가 들어가는 방향
• 리턴 주소
지역 변수 사용
Push ebp
Mov ebp, esp
Sub esp, 50h
• Ebp 레지스터를 스택에 넣는다.
• 그리고 현재 esp의 값을 ebp에 넣는
다.
• Ebp와 esp가 같아지면서 이제 이 함
수에서 지역변수는 ebp에서부터 얼
마든지 계산할 수 있다.
• Ebp를 기준으로 오프셋을 더하고 빼
는 작업으로 스택을 처리할 수 있게
된다.
• Sub esp, 50h LIFO특성으로 인해
특정 값만큼 뺀다는 것은 그만큼 스
택을 사용하겠다는 것이고, 즉 50h
만큼 지역변수를 사용하는 것이다.
함수의 호출
DWORD HelloFunction(DWORD
dwParam1, DWORD dwParam2,
DWORD dwParam3)
HelloFunctioni 호출
Main(){
DWORD dwRet =
HelloFunction(0x37,0x38,0x39);
If(dwRet)
//….
}
Push 39h
Push38h
Push 37h
Call 401300h
• 스택에 값을 LIFO 순으로 넣기 떄문에
실제 소스코드에서 호출한 것과는 반
대로 들어간다.
리턴 주소
• DWORD HelloFunction(DWORD
dwParam1, DWORD dwParam2,
DWORD dwParam3){
• DWROD dwRetAddr = 0;
• __asm
• {
push eax
mov eax,[ebp+4]
mov dwRetAddr, eax
pop eax
}
Printf(“dwRetAddr: %08xn”,
dwRetAddr);
}
• 결과를 보면 HelloFunction()을 호출
한 뒤 호출한 쪽의 다음 번지가 바로 리
턴 주소다.
시연
크랙 미 1번 • 크랙 미 5번
끄읕

More Related Content

What's hot

Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2Jinkyoung Kim
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5Jinkyoung Kim
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9Jinkyoung Kim
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1Jinkyoung Kim
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8Jinkyoung Kim
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3Jinkyoung Kim
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6Jinkyoung Kim
 
Kth개발자 세미나 1회
Kth개발자 세미나 1회Kth개발자 세미나 1회
Kth개발자 세미나 1회Byeongsu Kang
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7Jinkyoung Kim
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4Jinkyoung Kim
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3Jinkyoung Kim
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이fromitive
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling ConventionGangSeok Lee
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1Jinkyoung Kim
 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작GangSeok Lee
 

What's hot (20)

Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 
System+os study 3
System+os study 3System+os study 3
System+os study 3
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
Kth개발자 세미나 1회
Kth개발자 세미나 1회Kth개발자 세미나 1회
Kth개발자 세미나 1회
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이
 
System+os study 7
System+os study 7System+os study 7
System+os study 7
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
[2008 CodeEngn Conference 02] seaofglass - Immunity Debugger 활용과 플러그인 제작
 

Viewers also liked

경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)NAVER D2
 
[Kerference] Nefarious SQL - 김동호(KERT)
[Kerference] Nefarious SQL - 김동호(KERT)[Kerference] Nefarious SQL - 김동호(KERT)
[Kerference] Nefarious SQL - 김동호(KERT)NAVER D2
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)NAVER D2
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이NAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promiseNAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functionsNAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generatorNAVER D2
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제NAVER D2
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제NAVER D2
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제NAVER D2
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이NAVER D2
 
오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님NAVER D2
 
개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님NAVER D2
 
오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님NAVER D2
 
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님NAVER D2
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 

Viewers also liked (20)

경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
경희대 해커 기술 세미나 - Xamarin을 이용한 크로스 플랫폼 앱 개발(이현규)
 
[Kerference] Nefarious SQL - 김동호(KERT)
[Kerference] Nefarious SQL - 김동호(KERT)[Kerference] Nefarious SQL - 김동호(KERT)
[Kerference] Nefarious SQL - 김동호(KERT)
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 4. promise
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 2. functions
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 3. generator
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
 
오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님오픈소스 맛보기 - 정민우님
오픈소스 맛보기 - 정민우님
 
개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님개알못의 오픈소스이야기 - 이상준님
개알못의 오픈소스이야기 - 이상준님
 
오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님오픈소스 SW 라이선스 - 박은정님
오픈소스 SW 라이선스 - 박은정님
 
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
JavaScript 비동기 프로그래밍 집중 탐구 - 조유성님
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 

Similar to [Kerference] 시작! 리버싱 - 김종범(KERT)

해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기Jinkyoung Kim
 
Main Variable Program
Main Variable ProgramMain Variable Program
Main Variable Program경섭 심
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2Jinkyoung Kim
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)one_two_12
 
Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이fromitive
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개Jaewook Byun
 
칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서EG Lim
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1resoliwan
 
TenforFlow Internals
TenforFlow InternalsTenforFlow Internals
TenforFlow InternalsKiho Hong
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XpressEngine
 
델파이와 유니코드
델파이와 유니코드델파이와 유니코드
델파이와 유니코드Devgear
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용Woonbong Kim
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel CaliforniaTheori
 

Similar to [Kerference] 시작! 리버싱 - 김종범(KERT) (20)

해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
 
Main Variable Program
Main Variable ProgramMain Variable Program
Main Variable Program
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)
 
Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개
 
칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서
 
1 mysql아키텍쳐 v1
1 mysql아키텍쳐 v11 mysql아키텍쳐 v1
1 mysql아키텍쳐 v1
 
TenforFlow Internals
TenforFlow InternalsTenforFlow Internals
TenforFlow Internals
 
Database
DatabaseDatabase
Database
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
 
델파이와 유니코드
델파이와 유니코드델파이와 유니코드
델파이와 유니코드
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
ES6 for Node.js Study 4주차
ES6 for Node.js Study 4주차ES6 for Node.js Study 4주차
ES6 for Node.js Study 4주차
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
(Lisp)
(Lisp)(Lisp)
(Lisp)
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

[Kerference] 시작! 리버싱 - 김종범(KERT)

  • 3. 소스코드를 역추적하는 것 개발자가 코딩을 완료하고 빌드를 하게 되면 소스코드를 컴파일과정을 거 쳐 오브젝트 파일이 만들어지며, 여러 링크된 라이브러리와 오브젝트 파일 을 결합해 최종적으로 EXE DLL등이 생성된다. 빌드된 EXE, DLL등을 바이너리 분석을 거쳐서 소스코드가 어떤 식으로 만들어져 있는지 파악이 가능해진다. PE Header 분석을 통해 어떤 라이브 러리가 링크돼 있는지 분석하고, 버튼을 눌렀을 때 가동되는 코드의 흐름을 추적해 원래의 코드가 어떤 식으로 제작돼 있는지 알 수 있게 된다.
  • 4. • 소스코드의 구조를 분석해서 코드변조를 통해 허가되지 않은 액 션이 가능한지등 취약점 발견 모의해킹 취약점 발견 • 해커의 침입 여부를 역분석해서 그에 상응하는 보안 모듈 개발보안코드 개발 • 코드상에선 문제가 없지만 다른 모듈이 결합했을 때 등, 예상치 못 한 상황에서 예외가 발생했을 때 등에 대해 원인 파악 가능 버그 수정 • 새로운 프로그램이 등장했는데, 구글링해도 나오지 않을 때, 리버 싱하면 기술에 대한 궁금증을 해결 신기술 연구와 학습
  • 5. 어셈블리어(Assembly language) • 기본 구조 • 명령 포맷 • 레지스터 • 외울 필요없는 명령어 • 스택 • 함수의 호출 • 리턴 주소
  • 6. Void 물마심() { BOOL bOpen = 냉장고문오픈(); if (bOpen) { 물을꺼냄(); 마심(); } } __asm{ 냉장고앞으로간다 냉장고문을잡는다 냉장고문을연다 오픈성공: 냉장고안을본다 손을든다 냉장고안에넣는다 물병을잡는다 물병을꺼낸다 뚜껑을연다 물을컵에따른다 컵을손에든다 컵에든것을마신다. C/C++ 코드와의 결정적인 차이 : “한 번에 한 가지 동작” [어셈블리는 간단명료하다] 기본 구조(feat. 물마심)
  • 7. 명령 포맷 • X86 CPU의 기본 구조인 IA-32를 기본 플랫폼으로 삼아 소개함  대부분의 PC가 Intel CPU를 사용하며, AMD의 경우도 대부분의 코드가 Intel Processor와 호환되기 때문이다. • “명령어 + 인자”  IA-32의 기본 형태  명령어 mov, push 같은 것들. 옵코드(opcode)  인자: “어떤 장소로 값을 넣을 것인지”, “명령어에 해당하는 값.” 오퍼랜드(operand) • Push 337  Push는 옵코드, 337는 오퍼랜드 • Mov eax, 1  Mov는 옵코드, eax와 1이 오퍼랜드  모든 오퍼랜드는 앞의 것이 destination 뒤의 것이 source
  • 9. EAX 산술 계산을 하며, 리턴 값을 전달하는 변수. A = Accumulator EDX 각종 연산에 쓰이나, 리턴 값에 쓰이지 않는 변수 D = Data ECX C = Count For 문에서 int I 라고 선언할 때의 i의 역할 카운팅 할 필요 없을 때는 그저 변수. EBX 레지스터가 하나 더 필요할 때 사용되는 것.
  • 10. • ESI (Source Index)  시작지 인덱스  데이터를 조작하거나, 복사 시에 데이 터의 주소가 저장되는 변수 • EDI (Destination Index)  목적지 인덱스  복사 시에 목적지의 주소가 저장되는 변수 • EBP(Stack Pointer)  스택 프레임의 끝 지점 주소가 저장됨. • ESP(Baste Pointer)  스택프레임의 시작 주소가 저장됨.
  • 11. 기본적인명령어 • ADD, SUB  ADD : Src에서 dest로 값을 더하는 명령어  SUB : Src에서 dest로 값을 빼는 명령어 • INT  인터럽트를 일으키는 명령어 • CALL  함수를 호출하는 명령어  CALL뒤에 오퍼랜드로 번지가 붙는다. 해당 번지를 호출하고 끝나면 call다음 번지로 돌 아온다. • INC, DEC  INC = i++; DEC = i--; • PUSH, POP  PUSH : 스택에 값을 넣는 명령어  POP : 스택에 있는 값을 가져오는 명령어 • MOV  값을 넣는 명령어  Mov eax, 1 : eax에 1을 넣는 코드  Mov ebx, ecx : ebx에 ecx를 넣는 코드 • LEA  주소를 넣는 것  Lea eax, dword ptr ds:[esi] : eax에 0x401000  Mov eax, dword ptr ds:[esi] : eax에 5640EC83  Lea eax, dword ptr ss:[esp+8] :eax에 0x13FF40  Mov eax, dword ptr ss:[esp+8] : eax에 33
  • 12. 기본적인 명령어 • AND, OR ,XOR  비트연산자  XOR는 동일한 오퍼랜드로 처리가능  Ex : XOR EAX, EAX : EAX = 0 • NOP  아무것도 하지 말라는 명령어 • CMP, JMP  비교해서 점프하라는 명령어 • 그 외의 명령어는 구글링
  • 13. 스택(stack) • 지역 변수 사용 • 함수 호출 시 파라미터가 들어가는 방향 • 리턴 주소
  • 14. 지역 변수 사용 Push ebp Mov ebp, esp Sub esp, 50h • Ebp 레지스터를 스택에 넣는다. • 그리고 현재 esp의 값을 ebp에 넣는 다. • Ebp와 esp가 같아지면서 이제 이 함 수에서 지역변수는 ebp에서부터 얼 마든지 계산할 수 있다. • Ebp를 기준으로 오프셋을 더하고 빼 는 작업으로 스택을 처리할 수 있게 된다. • Sub esp, 50h LIFO특성으로 인해 특정 값만큼 뺀다는 것은 그만큼 스 택을 사용하겠다는 것이고, 즉 50h 만큼 지역변수를 사용하는 것이다.
  • 15. 함수의 호출 DWORD HelloFunction(DWORD dwParam1, DWORD dwParam2, DWORD dwParam3) HelloFunctioni 호출 Main(){ DWORD dwRet = HelloFunction(0x37,0x38,0x39); If(dwRet) //…. } Push 39h Push38h Push 37h Call 401300h • 스택에 값을 LIFO 순으로 넣기 떄문에 실제 소스코드에서 호출한 것과는 반 대로 들어간다.
  • 16. 리턴 주소 • DWORD HelloFunction(DWORD dwParam1, DWORD dwParam2, DWORD dwParam3){ • DWROD dwRetAddr = 0; • __asm • { push eax mov eax,[ebp+4] mov dwRetAddr, eax pop eax } Printf(“dwRetAddr: %08xn”, dwRetAddr); } • 결과를 보면 HelloFunction()을 호출 한 뒤 호출한 쪽의 다음 번지가 바로 리 턴 주소다.
  • 17. 시연 크랙 미 1번 • 크랙 미 5번