암 걸리는 arm리버싱 이태양 제 13회 해킹캠프 첫 인사 자기소개 0.5분 Arm 소개 5분 레지스터 및 명령어 25분

Slides:



Advertisements
Similar presentations
L o g o TVM ver. Beta 설계 제안서 L o g o Contents 프로젝트 개요 1 프로젝트 진행일정 2 프로젝트 목표 3 프로젝트 구성 4.
Advertisements

컴퓨터와 인터넷.
안드로이드 악성코드 분석론 및 리버싱 27th OCTOBER 2013.
3. 명령어 집합 구조 순천향대학교 정보기술공학부 이상정.
ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.
MicroVision.- STR711F Board MicroVision & ST Seminar ARM7TDMI Processor.
Lecture #2 제2장 CPU의 구조와 기능(1).
2.1 CPU의 기본 구조 2.2 명령어 실행 2.3 명령어 파이프라이닝 2.4 명령어 세트
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
임베디드 시스템.
12장. 제어 장치 다루는 내용 CPU속의 제어장치 마이크로 연산 제어장치의 동작.
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
어셈블리 문법 보강 4월 10일.
제 3장 컴퓨터 시스템의 구조.
System Programming 제1장 배경지식 시스템 프로그래밍.
Text LCD control.
REVERSE ENGINEERING HeXA 1st
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
AT MEGA 128 기초와 응용 I 기본적인 구조.
9장. 제어장치 Lecture #9.
제10강 중앙처리장치 1.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6 중앙처리장치의 조직과 기능 IT CookBook, 컴퓨터 구조와 원리 2.0.
제2장 CPU의 구조와 기능. 제2장 CPU의 구조와 기능 CPU의 기능 명령어 인출(Instruction Fetch): 기억장치로부터 명령어를 읽어온다. 명령어 해독(Instruction Decode): 수행해야 할 동작을 결정하기 위하여 인출된 명령어를 해독한다.
ARM 명령어 집합 Lecture #7.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
DK-128 ADC 실습 아이티즌 기술연구소
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
PSW : PROGRAM STATUS WORD
8051기반의 음성 인식 프로세서 설계 Chang-Min Kim and Soo-Young Lee
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
JA A V W. 03.
디지털회로설계 (15주차) 17. 시프트 레지스터와 카운터 18. 멀티바이브레이터 * RAM & ROM.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
ARM Development Suite v1.2
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2. 컴퓨터 시스템의 동작 명령어 구성 연산 종류와 기능에 따라 오퍼랜드 부분을 다양하게 활용 가능.
ARM Development Suite v1.2
ATmega128의 특징 아이티즌 기술연구소
10장. 실현기술 10.1 유한 어장 영향 10.2 디지털 필터의 기본 하드웨어 10.3 하드웨어에 의한 디지털필터 실현
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
Canary value 스택 가드(Stack Guard).
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
Lecture #3 제2장 CPU의 구조와 기능(2).
DK-128 직렬통신 실습 아이티즌 기술연구소
AT MEGA 128 기초와 응용 I 기본적인 구조.
ARM Development Suite v1.2
컴퓨터구조 연습문제 발표 Chapter 3 - 컴퓨터의 기능 및 상호연결의 최상위 관점
Chapter 10 데이터 검색1.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
TVM ver 최종보고서
발표자 : 이지연 Programming Systems Lab.
3.2 분기 명령어.
ARM Development Suite v1.2
ARM Development Suite v1.2
13. 포인터와 배열! 함께 이해하기.
Assembly 05 방호남 07 반지훈 09 박상욱.
ARM Development Suite v1.2
Presentation transcript:

암 걸리는 arm리버싱 이태양 제 13회 해킹캠프 첫 인사 자기소개 0.5분 Arm 소개 5분 레지스터 및 명령어 25분 문제풀이 10분 이태양

목차 1 자기소개 2 arm 소개 3 arm 레지스터 및 명령어 소개 4 실제 문제 풀어보기 목차 소개

1 자기소개 이름 : 이태양 학교 : 한국디지털미디어고등학교 나이 : 18세 관심분야 : 리버싱, 포너블 3 자기소개 이름 : 이태양 학교 : 한국디지털미디어고등학교 나이 : 18세 관심분야 : 리버싱, 포너블 닉네임 : 5unKn0wn 블로그 : 5unKn0wn.tistory.com 페이스북 : www.facebook.com/SunKn0wn 자기 소개 – 0.5분 너무 말이 빠르지 않도록 페이스북 주소 5가 아니라 S임 암 걸리는 arm리버싱

2 ARM 소개 4 ARM RISC Advanced RISC Machine 임베디드 기기에 많이 사용되는 RISC 프로세서 Reduced Instruction Set Computer 명령어가 축약된 형태로 되어있음 명령어의 길이가 일정함 ARM 소개 – 5분 내용을 슬라이드를 보지 않아도 될 정도로 공부할 것 RISC – 하드웨어의 구조가 간단해짐 길이가 일정해서 명령어를 더욱 빠르게 해석 가능 암 걸리는 arm 리버싱

2 ARM 소개 5 Pipe Line Data Type ARM에서 명령어를 처리하는 과정과 순서 Fetch -> 명령어를 메모리에 적재 Decode -> 적재된 명령어를 해석 Execute -> 해석된 명령어를 실행 명령어를 메모리에 적재 후 해석한 뒤에 실행 Data Type 8 Bit Byte 16 Bit Half word 32 Bit Word Pipe Line - 현재 주소가 실행 중이라면 다음 주소는 해석 중, 그 다음 주소는 적재 중임 명령어의 속도를 빠르게 해 줌 뒤에 레지스터에서 한 번 더 나옴 암 걸리는 arm 리버싱

3 6 ARM 레지스터와 명령어 Register 레지스터 7분 유저 모드에서의 레지스터를 알아보자 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 7 Register R0 ~ R15 R0 ~ R12 : 범용 레지스터 R13(SP) : 스택 포인터 : 스택의 맨 위를 가리킴 R14(LR) : 링크 레지스터 : 서브루틴 후에 돌아갈 리턴 주소 저장 R15(PC) : 프로그램 카운터 : 현재 fetch되고 있는 명령어의 주소 따라서 현재 실행되는 명령어의 다음다음 주소 범용 레지스터, 다시 말해서 ‘다목적’ 레지스터 범용 레지스터 중에서도 특정한 약간의 목적이 있는 레지스터가 있음 R13-R15는 특수한 목적이 있음 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 8 Register CPSR 암 걸리는 arm 리버싱 저 필드들 다 외울 필요 없다 N Z C V 만 보자 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 9 Register CPSR 현재 동작중인 프로세서의 상태를 저장 N(Negative) : 연산 결과가 음수일 경우 Z(Zero) : 연산 결과가 0인 경우 비교 결과가 같을 경우 C(Carry) : 연산 결과에서 자리 올림이 발생했을 경우 V(oVer flow) : 연산의 결과가 overflow 났을 경우 Intel 아키텍쳐와 비교하는 방식으로 설명하지 말 것 캐리와 오버플로우는 같지 않아요~ 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 10 Instruction 접미사 ARM 명령어 형식 ADD Rd, Rn, Op2 ; Rd = Rn + Op2 Rd = Destination Register Rn = Operand1 Op2 = Operand2 첫 번째 오퍼랜드는 항상 레지스터(Rn) 두 번째는 레지스터 혹은 상수(상수 앞에는 #이 붙음) ADD r0, r1, r2 ; r0 = r1 + r2 명령어 18분 ADD Rd, Rn, Op2 ADD -> 어떤 명령어를 취할것인가 Rd -> 결과값 저장할 레지스터 접미사를 잘 설명할 것 -> if의 역할을 한다, 조건(S제외) 접미사 CPSR레지스터의 조건 플래그 값에 따라 명령어 수행 ADDEQ r0, r1, r2 ; if (ZF) r0 = r1 + r2 ADDS r0, r1, #13 ; r0 = r1 + 13 ; set condition flags 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 11 접미사 EQ Z Set equal NE Z Clear not equal GE N equal V greater or equal LT N not equal V less than GT Z Clear and (N equal V) greater than LE Z Set or (N not equal V) less than or equal S 명령어 수행 후 CPSR 레지스터 세팅 접미사는 힘들게 외우지 말고 영어의 줄임말로 외워요 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 12 산술 연산 명령어 문법 예제 ADD : operand1 + operand2 SUB : operand1 – operand2 MUL : operand1 * oprerand2 문법 <Operation>{<cond>}{S} Rd, Rn, Op2 예제 ADD r3, r2, r1 ; r3 = r2 + r1 SUBNE r1, r4, r3 ; if (!ZF) r1 = r4 – r3 MULEQ r4, r3, r2 ; if (ZF) r4 = r3 * r2 어렵지 않아요 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 13 비교 연산 명령어 문법 예제 비교연산의 결과는 자동으로 CPSR의 플래그를 설정함 CMP : operand1 – operand2 (암묵적) TST : operand1 & operand2 (암묵적) 문법 <Operation>{<cond>} Rn, Op2 예제 CMP r0, r1 TSTEQ r2, #5 CMPLT r7, #30 암묵적임을 강조 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 14 논리 연산 명령어 문법 예제 AND : operand1 & operand2 EOR : operand1 ^ operand2 ORR : operand1 | operand 2 문법 <Operation>{<cond>}{S} Rd, Rn, Op2 예제 AND r0, r1, r2 EORNE r0, r1, #30 ORRS r0, r4, r3 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 15 데이터 이동 명령어 (메모리 접근 불가) 문법 예제 MOV : operand1 = operand2 MVN : operand1 = ~operand2 문법 <Operation>{<cond>}{S} Rd, Op2 예제 MOV r0, r1 MOVGE r3, #27 MOVS r2, r0 메모리에 접근이 불가하다는 것을 강조 레지스터와 상수끼리만 가능 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 16 데이터 이동 명령어 (메모리 접근 가능) 문법 예제 LDR : operand1 = operand2(memory) STR : operand2(memory) = operand1 문법 <Operation>{<cond>}{B, H}{S} Rn, Op2 예제 LDR r0, [r1] ; r0 = *r1; LDR r3, =0x601020 ; r3 = *0x601020 STR r1, [r3, #24] ; *(r3 + 24) = r1; LDRB r3, [r0, r2] ; r3 = *(Byte*)(r0 + r2); STRH r4, [r2] ; *(Half Word*)r2 = r4; 메모리에 접근이 가능하다는 것을 강조 중요한 것은 LDR과 STR의 값을 넣는 오퍼랜드 방향이 반대라는 것을 강조 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 17 주소 분기 명령어 문법 예제 B : Jump to operand1 BL : Jump to operand1, LR = BL 호출 다음 주소 문법 <Operation> {<cond>}{S} Label(function) 예제 BL _printf ; printf함수 호출 B success ; success로 분기 BEQ fail ; Z플래그가 세팅되어 있다면 fail로 분기 B는 단순 점프 BL은 함수 호출 LR에 리턴 주소 저장 암 걸리는 arm 리버싱

3 ARM 레지스터와 명령어 18 배럴 쉬프트(Barrel Shift) 문법 예제 LSL : op2 = op2 << Shift LSR : op2 = op2 >> Shift 문법 <Operation> {<cond>}{S} Rd, Rn, Op2, {<Barrel>} Shift 예제 ADD r1, r2, r3, LSL #3 ; r1 = r2 + (r3 << 3) EOREQ r0, r3, r2, LSR r7 ; if (ZF) r0 = r3 ^ (r2 >> r7) LDR r1, [r0, r3, LSR #8] ; r3 = *(r0 + (r3 >> 8)) 암 걸리는 arm 리버싱

3 19 ARM 레지스터와 명령어 연습해보자! ADD r0, r1, r2, LSL #4 ; r0 = r1 + (r2 << 4) AND r3, r5, r6, LSR r7 ; r3 = r5 & (r6 >> r7) MOVEQS r0, r4, LSR #4 ; if (ZF) r0 = (r4 >> 4); CPSR LDRB r3, [r0], LSL #8 ; r3 = *(Byte*)r0 << 8 EORGT r4, r3, r2 ; Greater than r4 = r3 ^ r2 BL sub_401000 ; sub_401000함수 호출 암 걸리는 arm 리버싱

4 20 실제 문제 풀어보기 유명한 Reversing.kr의 HateIntel을 풀어보자! 암 걸리는 arm 리버싱

4 실제 문제들 풀어보기 21 암 걸리는 arm 리버싱 주요 부분을 짚으며 주석을 기반으로 설명 // 소스 사진 추가, 사진 변경 암 걸리는 arm 리버싱

4 22 실제 문제들 풀어보기 암호화 방식을 설명하고 그 암호화 방식을 C로 옮겨 온 소스 암 걸리는 arm 리버싱

4 23 실제 문제들 풀어보기 최종 Table과의 비교를 설명하고 키 값을 구하는 브루트포싱 소스 소개 암 걸리는 arm 리버싱

24 뀨앤에이 QnA 암 걸리는 arm 리버싱