Download presentation
Presentation is loading. Please wait.
1
암 걸리는 arm리버싱 이태양 제 13회 해킹캠프 첫 인사 자기소개 0.5분 Arm 소개 5분 레지스터 및 명령어 25분
문제풀이 10분 이태양
2
목차 1 자기소개 2 arm 소개 3 arm 레지스터 및 명령어 소개 4 실제 문제 풀어보기 목차 소개
3
1 자기소개 이름 : 이태양 학교 : 한국디지털미디어고등학교 나이 : 18세 관심분야 : 리버싱, 포너블
3 자기소개 이름 : 이태양 학교 : 한국디지털미디어고등학교 나이 : 18세 관심분야 : 리버싱, 포너블 닉네임 : 5unKn0wn 블로그 : 5unKn0wn.tistory.com 페이스북 : 자기 소개 – 0.5분 너무 말이 빠르지 않도록 페이스북 주소 5가 아니라 S임 암 걸리는 arm리버싱
4
2 ARM 소개 4 ARM RISC Advanced RISC Machine 임베디드 기기에 많이 사용되는 RISC 프로세서
Reduced Instruction Set Computer 명령어가 축약된 형태로 되어있음 명령어의 길이가 일정함 ARM 소개 – 5분 내용을 슬라이드를 보지 않아도 될 정도로 공부할 것 RISC – 하드웨어의 구조가 간단해짐 길이가 일정해서 명령어를 더욱 빠르게 해석 가능 암 걸리는 arm 리버싱
5
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 리버싱
6
3 6 ARM 레지스터와 명령어 Register 레지스터 7분 유저 모드에서의 레지스터를 알아보자 암 걸리는 arm 리버싱
7
3 ARM 레지스터와 명령어 7 Register R0 ~ R15 R0 ~ R12 : 범용 레지스터
R13(SP) : 스택 포인터 : 스택의 맨 위를 가리킴 R14(LR) : 링크 레지스터 : 서브루틴 후에 돌아갈 리턴 주소 저장 R15(PC) : 프로그램 카운터 : 현재 fetch되고 있는 명령어의 주소 따라서 현재 실행되는 명령어의 다음다음 주소 범용 레지스터, 다시 말해서 ‘다목적’ 레지스터 범용 레지스터 중에서도 특정한 약간의 목적이 있는 레지스터가 있음 R13-R15는 특수한 목적이 있음 암 걸리는 arm 리버싱
8
3 ARM 레지스터와 명령어 8 Register CPSR 암 걸리는 arm 리버싱 저 필드들 다 외울 필요 없다
N Z C V 만 보자 암 걸리는 arm 리버싱
9
3 ARM 레지스터와 명령어 9 Register CPSR 현재 동작중인 프로세서의 상태를 저장
N(Negative) : 연산 결과가 음수일 경우 Z(Zero) : 연산 결과가 0인 경우 비교 결과가 같을 경우 C(Carry) : 연산 결과에서 자리 올림이 발생했을 경우 V(oVer flow) : 연산의 결과가 overflow 났을 경우 Intel 아키텍쳐와 비교하는 방식으로 설명하지 말 것 캐리와 오버플로우는 같지 않아요~ 암 걸리는 arm 리버싱
10
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 = r ; set condition flags 암 걸리는 arm 리버싱
11
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 리버싱
12
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 리버싱
13
3 ARM 레지스터와 명령어 13 비교 연산 명령어 문법 예제 비교연산의 결과는 자동으로 CPSR의 플래그를 설정함
CMP : operand1 – operand2 (암묵적) TST : operand1 & operand2 (암묵적) 문법 <Operation>{<cond>} Rn, Op2 예제 CMP r0, r1 TSTEQ r2, #5 CMPLT r7, #30 암묵적임을 강조 암 걸리는 arm 리버싱
14
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 리버싱
15
3 ARM 레지스터와 명령어 15 데이터 이동 명령어 (메모리 접근 불가) 문법 예제
MOV : operand1 = operand2 MVN : operand1 = ~operand2 문법 <Operation>{<cond>}{S} Rd, Op2 예제 MOV r0, r1 MOVGE r3, #27 MOVS r2, r0 메모리에 접근이 불가하다는 것을 강조 레지스터와 상수끼리만 가능 암 걸리는 arm 리버싱
16
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, =0x ; 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 리버싱
17
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 리버싱
18
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 리버싱
19
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_ ; sub_401000함수 호출 암 걸리는 arm 리버싱
20
4 20 실제 문제 풀어보기 유명한 Reversing.kr의 HateIntel을 풀어보자! 암 걸리는 arm 리버싱
21
4 실제 문제들 풀어보기 21 암 걸리는 arm 리버싱 주요 부분을 짚으며 주석을 기반으로 설명
// 소스 사진 추가, 사진 변경 암 걸리는 arm 리버싱
22
4 22 실제 문제들 풀어보기 암호화 방식을 설명하고 그 암호화 방식을 C로 옮겨 온 소스 암 걸리는 arm 리버싱
23
4 23 실제 문제들 풀어보기 최종 Table과의 비교를 설명하고 키 값을 구하는 브루트포싱 소스 소개 암 걸리는 arm 리버싱
24
24 뀨앤에이 QnA 암 걸리는 arm 리버싱
Similar presentations