리버싱/이론 정리 (6) 썸네일형 리스트형 PE FILE FORMAT PE FILE FORMAT PE FILE FORMAT이란 윈도우에서 사용되는 실행 파일 형식이다. PE FILE은 header과 body로 나눌수 있다. header부분을 자세히 나눠보면 다음과 같다. 머리(header) - DOS header - MZ // (아스키코드 4D5A)(MZ 꼭들어가야함) - 첫부분 WORD - NT header 시작 주소 // 3C부터 DWORD -DOS stub // 필요없음 - 40부터 NT header 까지 - NT header - Signature -PE // PE로 시작함 16진수로 50 45 00 00 DWORD - File header - Machine // CPU별 고유한 값 WORD - NumberOsSections// 섹션의 갯수(몸통의 갯수) WORD -.. stolen byte stolen byte stolen byte란 프로그램의 일부분을 훔쳐 다른 곳에서 실행을 하는 코드를 말한다. 주로 패킹을 할때 stolen byte를 만드는 것같다. 패킹된 프로그램을 볼때 (이부분이 Entry Point) 1. 압축된 프로그램 1번째 부분 풀기 2. 압축된 프로그램 2번째 부분 풀기 3. 압축된 프로그램 3번째 부분 풀기 4. 압축된 프로그램 4번째 부분 풀기 (이부분에 stolen byte가 있다.) (이부분이 Original Entry Point) 5. 프로그램 1번째부분 실행 6. 프로그램 2번째 부분 실행 7. 프로그램 3번째 부분 실행 8. 프로그램 4번째 부분 실행 stolen byte를 만드는 이유는 패킹된 프로그램을 메모리 덤프를 못하게 하기 위해서이다. 보통 stole.. 패킹 패킹 패킹이란 PE file을 압축하는 방법중 하나이다. 일반적으로 알고있는 알집같은 경우는 프로그램을 압축하면 압축을 풀어야 실행이 가능하다. 하지만 패킹은 압축된 상태에서도 실행이 가능하도록 하는 기술이다. 패킹을 하는 프로그램을 패커라고 하는데 패커의 종류는 아주 다양하다.ex) upx, upack, aspack 압축을 한상태인데 프로그램을 실행이 가능한 이유는 디코딩 소스가 내부에 있기 때문이다. 패킹을 하면 EP는 패킹을 푸는 디코딩 소스를 가리킨다. 예를 들어 프로그램이 다음과 같이 실행이 된다고 하자 1. 프로그램 1번째부분 실행 2. 프로그램 2번째 부분 실행 3. 프로그램 3번째 부분 실행 4. 프로그램 4번째 부분 실행 이 프로그램을 패킹을 한 후 실행 하면 다음과 같이 소스코드가 바뀐.. 레지스터 범용레지스터 범용레지스터란 cpu 내부에 있어 작은 데이터들을 임시로 저장하는 저장공간이다. 범용레지스터의 크기는 4byte 이다. EAX 계산에 대한 값을 저장하는 레지스터 (return 값이 주로 여기에 저장된다.) ECX 카운터 레지스터(반복할때 숫자를 세는 레지스터) EDX 데이터 레지스터 EBX 베이스 레지스터(메모리주소를 저장) ESP 스택의 윗부분(탑) 포인터 EBP 스택의 아랫부분(베이스) 포이터 ESI 데이터의 주소를 저장 EDI 데스티네이션 인덱스 (데이터를 복사할때 목적지주소) ※32bit에서는 EAX이지만 64bit 에서는 E가 아닌 R이다. ex) RAX, RCX, RDX... EAX -> 32bit -> 00000000 AX -> 16bit -> 0000 AH/AL -> 8bit.. 빅엔디언과 리틀엔디언 엔디언은 데이터를 저장하는 바이트순서를 뜻한다. 엔디언중에 빅엔디언과 리틀엔디언이있다. 빅엔디언은 사람이 보기 편한 엔디언이다. 예를 들어, 12 34 56 78 90 을 빅엔디언으로 는 12 34 56 78 90 으로 평상시 우리가 알고있는 순서이다. 하지만 리틀엔디언으로 12 34 56 78 90을 나타내면 90 78 56 34 12 이렇게 나타난다. 올리디버거 단축키 올리디버거 단축키 Ctrl + F2 //재시작F7 // 한줄한줄 실행시키는데 안으로 들어감F8 // 한줄한줄 실행시키는데 자세히안봄 Ctrl + g //원하는 주소로 이동; // 주석을 달수있다. F2 // 브레이크포인트설정F9 // 브레이크폰이트까지 실행 * // 내 위치로 간다. Enter // 안을 자세히 들어가볼수있다. 마우스우클릭 > Search for > All reference text strings // 모든 문자열을 볼수 있다.마우스우클릭 > Search for > All intermodular calls // 모든 함수를 볼수 있다. Ctrl + e // 수정할 때 사용더블클릭 // 어셈블리어를 수정 이전 1 다음