리버싱 썸네일형 리스트형 ch07 - 파일 패킹과 언패킹 01 PE 파일 패킹(packing) 02 PE 파일 언패킹(unpacking) 03 수동 언패킹(manual unpacking) ch07 - 파일 패킹과 언패킹 패커(packer) : PE 파일을 실행 가능한 형태로 파일을 압축시켜주는 프로그램으로 압축과 동시에 보호(anti-debugging, encryption 등) 기능을 포함하고 있으면 프로텍터(protector)라고 부르고 단순히 파일의 사이즈만 줄여준다면 그냥 패커(UPX, Aspack)라고 부른다. 프로텍터는 리버싱으로부터 보호하기 위한 것으로 압축 해제 기능뿐만 아니라 안티 리버싱 기법이 적용된 것을 말하며 기법으로는 안티 디버깅(anti-debugging), 가상 머신 탐지(anti-vm), 코드 난독화(code obfuscating),.. 더보기 ch06 - 윈도우 실행 파일 구조 01 윈도우 PE 파일 02 윈도우 PE 파일 구조 03 IAT(Import Address Table) 04 EAT(Export Address Table) 1. 윈도우 PE 파일 1.1 윈도우 PE(Portable Executable) 파일이란? - 윈도우에서 실행 파일은 PE 파일의 구조를 가지여, 여러 가지 확장자로 사용되고 있다. 파일이 실행되는 정보를 볼 수 있고 어느 메모리에서 로딩되는지 등의 정보를 알 수 있다. 윈도우에서 사용되는 실행 파일 종류 - 실행 계열 : exe(실행파일), scr(스크린세이버), msi(윈도우즈 패키지 인스톨 프로그램), bat(명령어 배치파일), cmd(명령어 스크립트), vbs(VB 스크립트) 등.. - 라이브러리 계열 : dll(동적 라이브러리), ocx(OL.. 더보기 ch05 - 코드 분석과 패치 01 문자열 패치 02 코드 패치 03 실행 파일의 코드 분석 연습 1. 문자열 패치 패치 : 프로그램의 파일이나 실행 중인 프로세스의 메모리 내용을 변경하는 작업을 말한다. - 패치가 필요한 경우 프로그램의 일부 기능에 오류가 있거나, 새로운 모듈이 개발되어 그 모듈과의 연결이 필요하거나, 프로그램에 보안 취약점이 존재하여 그 취약점을 삭제하는 등, 프로그램의 일부 코드를 수정하여 문제점을 해결하고자 할 때 패치가 사용된다. 크랙(crack) : 패치와 비슷한 개념이지만 그 의도가 비합법적이고 비도덕적인 경우를 말한다. ex) 유료 소프트웨어를 불법적으로 사용하기 위해서 소프트웨어 인증 과정을 우회하는 경우, 특정 프로그램에 악의적인 코드를 심거나 특정 행위를 수행하지 못하게 코드를 수정하는 경우 1... 더보기 ch04 - 어셈블리어의 이해 1. 어셈블리어 명령어 어셈블리어에선 16진수를 쓰며 10진수와 비교하면 다음과 같다. 10진수 - 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32... 16진수 - 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20... - 인텔 기반 표기 방법(윈도우)과 AT&T 기반 표기 방법(리눅스)이 있다. 1.1 데이터 이동 명령어 - 데이터 이동 방법의 5가지(x86에서는 다섯 가지 모두 사용 가능하지만, ARM에서는 메모리에서 메모리로 직접 이동하는 것은 불가능) 1) 값을 직접 레지스터로 대입하기 2.. 더보기 ch03 - 디버거의 활용 방법(x64DBG/OllyDBG) 01 프로그램 디버깅 02 디버거의 종류 03 디버거 사용법(x64 dbg) 1. 프로그램 디버깅 1.1 프로그래밍 오류 - 1차이 오류(off-by-one error) : 프로그래머가 간과한 곳에서 발생하는 오류로 주로 아이템 사이의 공간과 아이템 수를 착각할 때 주로 발생한다. 이런 오류를 찾기 위해 c언어에서는 디버깅 과정을 거친다. 문법 오류 - 간단한 문법을 빠뜨린 경우(,) 심볼 오류 - 심볼 테이블에서 변수나 함수 이름을 찾을 수 없을 때 발생한다. 변수 선언 문제 메모리 접근 오류 - 변수나 주소를 사용할 때 프로세스에 허용되는 영역을 벗어날 경우 발생한다. 주소의 문제 잘못된 결과 출력 오류 - 원래 기대했던 값과 다른 값이 나온 경우로 어디서 잘못됐는지 찾기 어려워 수정이 어렵다. 장기.. 더보기 ch02 - 컴퓨터 시스템의 명령어 처리 구조 1. 데이터 표현 방식 2. 프로그램의 생성 3. 프로세스 4. 레지스터의 구성과 역할 1. 데이터 표현 방식 1.1 데이터 표현 단위 - 컴퓨터에선 이진 데이터를 기반으로 데이터를 표현. 바이트는 컴퓨터에서 문자를 표현하는 기본 단위이며, 1바이트로 표현하는 문자의 대표적인 예가 아스키코드이다. 컴퓨터에서 명령어 처리를 하거나 연산을 할 때는 워드 단위가 기반이고 4바이트 이상을 1 워드로 표현. 1.2 숫자의 표현 - 정수의 저장 방식을 엔디언(endian)이라 한다. 빅 엔디언 - 원래의 순서대로 저장하는 방법 큰 숫자가 먼저 나타나며, 주로, IBM, Sun, Sparc, 네트워크 주소 등에서 사용한다. ex) 0x12345678은 저장할 때 원래의 값 순서대로 [12 34 56 78]로 저장(리.. 더보기 ch01 - 리버싱과 해킹의 이해 1. 해킹의 이해 2. 리버스 엔지니어링 1. 해킹의 이해 1.1 해커의 의미 - 해커는 초기에 "컴퓨터를 능숙하게 다루는 전문가"나 "시스템 프로그래밍을 잘하는 사람"인 좋은 인식이었지만 점점 "컴퓨터 시스템이나 네트워크의 문제점을 이용하여 침입하거나 정보를 탈취하는 사람"으로 좋지 않은 인식으로 바뀌었다. 화이트햇(White Hat) - 일반적으로 좋은 사람이며 윤리적 해커로 법을 위반하지 않고 악의적인 활동에 관여하지 않는 해커를 말한다. 블랙햇(Black Hat) - 개인적인 이익을 위해 취약점을 이용해 특정 시스템을 공격하며 '크래커'로 불린다. 그레이 햇(Grey Hat) - 악의적인 행동은 아니지만 해킹 방법이 합법적 또는 윤리적 경계를 넘을 수 있는 해커다. 그린햇(Green Hat) - .. 더보기 책 : x64dbg 디버거를 활용한 리버싱과 시스템 해킹의 원리 김민수 저 ch01 - 리버싱과 해킹의 이해 ch02 - 컴퓨터 시스템의 명령어 처리 구조 ch03 - 디버거의 활용 방법 ch04 - 어셈블리어의 이해 ch05 - 코드 분석과 패치 ch06 - 윈도우 실행 파일 구조 ch07 - 파일 패킹과 언패킹 ch08 - 안티 리버싱 ch09 - 메모리 오염 공격 ch10 - 방패와 창 ch11 - 코드 인젝션 ch12 - 악성코드 분석 시작합니다 더보기 이전 1 2 다음