본문 바로가기

리버싱

03; 연산 루틴 리버싱 08. 시리얼 추출 방법 F-Secure Reverse Engineering 대회 Level 1 문제 풀이 사전 정보 획득 첫 번째 - 파일 스캐너로 스캔 사전 정보 획득 두 번째 - API 확인 사전 정보 획득 세 번째 - 파일의 이미지 베이스 확인 Level 2 문제 풀이 문자열 컨트롤 안티 디버깅 기법 WinMain보다 먼저 가동되는 코드 09. 코드 속이기 Level 3 문제 풀이 데이터 속에 숨은 코드 리버싱으로 방정식 세우기 바이너리 파싱 재사용이 어려운 코드 디스어셈블러 속이기 정리 더보기
02; 리버스 엔지니어링 중급 5. PE 헤더(PE Header) PE에 대한 상식적인 개념 빌드 과정 PE 파일 구조 IMAGE_DOS_HEADER IMAGE_NT_HEADER IMAGE_FILE_HEADER IMAGE_OPTIONAL_HEADER IMAGE_SECTION_HEADER PE와 API 호출의 원리 IAT에서 API를 계산하는 방법 익스포트 테이블(export table) 마무리 6.흔히 사용하는 패턴 조건문의 기본 심화된 조건문 반복문 break가 들어가는 경우 continue가 들어갈 경우 return이 생기는 경우 문자열 컨트롤 strcy strcat strlwr 정리 7. MFC 리버싱 리버스 엔지니어링에 필요한 MFC 구조 MFC로 개발됐는지 여부 확인 MFC 초기화 루틴 찾기 버튼 핸들러 찾아내기 헤더 파일 .. 더보기
01 ; 리버스 엔지니어링만을 위한 어셈블리 리버싱이란?[reverse engineering] : 역공학이란 뜻으로 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 발견하는 과정이다.우리가 하는 악성코드 분석(소프트웨어 리버스 엔지니어링)에서는 악성코드를 분석해서 악성코드를 발견하는 과정이다.https://ko.wikipedia.org/wiki/%EC%97%AD%EA%B3%B5%ED%95%99 기계어(0,1) 어셈블러(PUSH, MOV..) c, python.. 어셈블리어란?[assemly language] : 컴퓨터 프로그래밍에서 사용하는 저급 언어로 컴퓨터가 사용하는 언어다.ex)push, pop, mov.. 같은 것이 있다.   https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%.. 더보기
책 : 리버스 엔지니어링 바이블 시작 01 리버스 엔지니어링 기본 eax, edx, ecx,ebx, esi,edi push, mov, lea, add, sub, int, call inc,dec,and/or/xor, nop, cmp, jmp, 함수 호출, 리턴 주소.. C 문법과 디스어셈블링 C++ 클래스와 리버스 엔지니어링 DLL 분석 02 리버스 엔지니어링 중급 PE헤더(IMAGE_DOS_HEADER, ..) 흔히 사용하는 패턴(break, continue, return) MFC리버싱 03 연산 루틴 리버싱 시리얼 추출 방법 코드 속이기 04 안티 리버싱 엔지니어링 한단계 위 패커가 사용하는 기술 우회 방법 05 OllyDBG 플러그인 OllyDBG 플러그인 SDK 리버싱 보조 플러그인 메모리 스캔 플러그인 개발 06 보안 모듈 우회 바이.. 더보기
ch11 - 코드 인젝션 11.1 PE 재배치와 코드 패치 원리 11.2 DLL 인젝션 11.3 쓰레드 인젝션 11.4 코드 인젝션 11.5 프로세스 인젝션 11.1 PE 재배치와 코드 패치 원리 1.1 PE 재배치(relocation) - 프로그램이 로드(load)될 주소에 이미 다른 프로그램이 적재되어 있다면, 다른 주소로 찾아서 로드된다. (로드될 위치가 바뀌면 실행 프로그램이 사용하는 주소들의 재배치가 필요) - 윈도우 PE 파일이 로드되는 주소는 IMAGE_OPTIONAL_HEADER의 ImageBase 값이다. 이 값을 기준으로 코드, 데이터 공간, 그리고 여러 섹션의 주소가 결정된다. 윈도우 비스타 이후에 추가된 ASLR기능이 사용되면, 실행될 때마다 로드되는 주소가 달라진다. 정적 라이브러리는 프로그램이 실행할 때.. 더보기
ch10 - 방패와 창 01 스택 오버플로우 공격 특징 02 데이터 공간 실행 방지 03 데이터 공간 오염 방지 04 공격 방지 기법의 회피 방법 01 - 스택 오버플로우 공격 특징 1) 스택을 오버플로우 하여 스택에 쉘 코드(shell code)를 복제한다. 2) 복귀 주소(return address) 위치에는 복제된 쉘 코드의 시작 주소를 기록한다. 3) 현재의 함수가 끝나면, 복귀 주소를 EIP 레지스터로 가져온다. 4) 결국, 복제된 쉘 코드의 시작 주소를 EIP로 가져오게 되어 쉘 코드가 실행된다. 2)에서는 복제된 쉘 코드의 시작 주소가 실행할 때마다 달라지도록 ASLR(Address Space Layout Randomization) 기능을 부여할 수 있다. 3)에서 스택에 오버플로우가 발생하였음을 검사하는 것이 c.. 더보기
ch09 - 버퍼 오버플로우 공격 01 시스템 메모리 02 스택 오버플로우 공격 03 데이터 공간 오버플로우 공격 04 UAF 공격 01 - 시스템 메모리 1.1 시스템 메모리 영역 - 프로세스 메모리는 코드, 데이터, 스택, 힙 등으로 나누어진다. 각 영역은 세그먼트로 나누어 있으며 일정한 크기를 가진다. PE 헤더 정보(PE Header) : 메모리 맵에서 첫 세그먼트는 PE 헤더 정보가 들어가는 부분으로 실행 파일의 헤더와 같은 내용이다. 세그먼트 크기가 0x1000이기 때문에 PE 헤더가 들어간 곳의 주소는 0x400000~0x400FFF이다. 이 세그먼트는 읽기 권한만 부여되어 있다. 코드 세그먼트(Code Segment) : ".text"라고 표시된 세그먼트는 텍스트 세그먼트 또는 코드 세그먼트라고 불린다. 그래서 실행과 읽기.. 더보기
ch08 - 안티 리버싱 / WindDgb 01 디버거 탐지 02 난독화 안티 리버싱(Anti-Reversing) : 디버거를 통한 분석을 어렵게 하는 기술이다. 일반적으로 복제 방지나 디지털 저장권 보호를 위해 소프트웨어적으로 불법적인 접근을 막는 기술을 말한다.(정적 방식 / 동적 방식) 정적 안티 리버싱 기술 - 디버거를 탐지하여 프로그램이 정상적으로 실행하지 못하도록 방해한다. 대표적인 것이 디버거를 탐지하여, 디버거를 수행 중일 때는 다른 동작을 수행하는 방법 동적 안티 리버싱 기술 - 디버거로 코드 수행 과정을 관찰하는 것을 방해하여 원 프로그램의 동작 원리를 이해하기 어렵게 방해한다. 패킹, 암호화, 중단점 설정 무시나 오류 처리, 코드 난독화(code obfuscation), 가상 머신 탐지, API 리다이렉트 등 여러 가지 기법이.. 더보기