전체 글 (49) 썸네일형 리스트형 섹션 헤더 각 섹션의 속성을 정의한 것이 섹션헤더이다. 섹션헤더 구조체를 보기 전에 한번 생각해보자. 앞서 PE파일은 code,data resource등을 각각의 섹션으로 나눠서 저장한다했다. 그렇다면 PE File Format을 설계한 사람들은 어떤 장점이 있기 때문에 그랬을 것이다. PE 파일을 여러 개의 섹션 구조로 만들었을 때 장점은 프로그램의 안정성이다. code와 data가 하나의 섹션으로 되어있고 서로 뒤죽박죽 섞여있다면 복잡함은 둘째치더라고 해도 안정성에 문제가 생길수 있다.가령 문자열 data에 값을 쓰다가 어떤 이유로 overflow가 발생가 발생했을때 바로 다음 code를 그대로 덮어써버릴 것이므로 프로그램에 큰 손상이 생긴다. 그래서 PE FILE Format 설계자들은 비슷한 자료를 섹션이라.. NT 헤더 -2 HT Header-optional Header PE 헤더 구조체 중에서 가장 크기가 큰 IMAGE_OPTIONAL_HEADER32이다. typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD Si.. PE 헤더 -1 PE 헤더는 많은 구조체로 이루어져있다. 지금부터 각 구조체에 대해서 하나씩 살펴보자. 1. DOS 헤더 DOS 파일에 대한 하위 호환성을 고려해서 만든 해더. 그 결과로 PE 헤더의 제일 앞부분에는 기존 DOS EXE Header를 확장 시킨 IMAGE_DOS_HEADER 구조체가 존재한다. IMAGE_DOS_HEAGER 구조체의 크기는 40이다. 이 구조체에서 알아 두어야 할 중요한 맴버는 e_magic과 e_lfanew이다. typedef struct _IMAGE_DOS_HEADER { WORD e_magic; // DOS signature : 4D5A ("MZ") WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD .. PE File Format -1 Windows 운영체제의 PE(Process Executable)File Format에 대해서 공부하면 Windows 운영체제의 가장 핵심적인 부분인 Process, Memory,DLL 등에 대한 내용을 정리할 수 있다. PE 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX에서 사용되는 COFF(Commom Object File Format)를 기반으로 만드었다. 애초에는 다른 운영체제에 이식성이 좋게 하려는 의도였으나 실제로는 Windows 계열의 운영체제에서만 사용되고 있다. PE 파일은 32비트 형태의 실행파일을 의미하며 PE32라는 용어를 사용하기도 한다. 64비트 형태의 실행 파일은 PE+ 또는 PE32+라고 부른다. (PE64라고 하지 않음) PE File For.. 함수 호출 규약 함수 호출 규약(Calling Convention)에 대해 할아보자 함수 호출 규약은 함수를 호출할 때 파라미터를 어떤식으로 전달하는가에 대한 일종의 약속이다. 함수 호출 전에 파라미터를 스택을 통해서 전달한다. 스택이란 프로세스에서 정의된 메모리 공간이며 아래방향으로 자란다. 또한 PE헤더에 그 크기가 명시되어있다. 즉 프로세스가 실행될 때 스택 메모리의 크기가 결정된다.(malloc/new 같은 동적 메모리 할당과는 다르다.) 함수가 실행이 완료도었을 때 스택에 들어있던 파라미터는 그대로 놔두는데 어처피 덮어씌워서 사용하는 것을 지우거나 하면 CPU자원을 소모하게 되기 때문이다. 함수가 실행 완료되었을 때 ESP(스택포인터)는 함수 호출 전으로 복원되어야 한다. 그래야 참조가능한 스택의 크기가 줄어들.. Process Explorer란? Process Explorer는 윈도우에서의 작업관리자와 비슷한 프로세스 관리도구이지만 더 심화된 도구라고 볼 수 있습니다. 화면 좌측에는 현재 실행중인 프로세스들의 parent/child의 트리 구조로 표시하고 있고 우측에는 프로세스 각각의 PID와 CPU 점유율, 등록정보 등을 보여주고 있다. Process Explorer의 장점은 다음과 같다 - 트리구조로 프로세스를 파악할수 있다. - 프로세스 실행/종료 시 각각의 색으로 표시 - 프로세스 Suspend/resume가능 - 프로세스 kill 가능 - DLL/Handle 검색(프로세스에 로딩된 DLL 또는 프로세스에서 점유하는 Handle 검색) abex' 2nd crackme 분석 지난번에는 크랙프로그램인 abex' crack#1을 분석했는데 이번에는 시리얼 코드를 받는 프로그램을 분석해봅시다. 일단은 프로그램을 실행해봅시다. 이름과 시리얼코드를 입력하라고 나오는데 일단은 아무거나 넣어봅시다. 아무 수나 입력하면 틀렸다고 하는 메시지가 나오는군요. 그러면 본격적으로 디버깅을 해보자. 처음으로 문자열 검색 기능을 사용하면 다음과 같은 창이 나온다. 보면 Wrong serial과 Congratulations이라는 문자열이 나오는 것을 봐서는 조건에 따라 메시지가 다르게 나오는 것을 생각할 수 있다. 그렇다면 조건의 분기문을 찾아보자. Congratulations에서 조금 위로 올려 보면 0040329에서 보면 __vbaVarTstEq()함수를 호출해서 리턴 값(AX)를 비교(Test명.. abex' crackme#1 분석 아주 간단한 crackme 샘플을 분석하여 디버거와 디스어셈 코드에 익숙해져보자. crackme는 말그대로 크랙 연습을 목적으로 작성되어 공개된 프로그램이다. 프로그램을 실행해보면 다음과 같이 나온다. 음.. 일단 대강 해석하면 너(사용자)의 HD를 CD-ROM이라고 생각하게 만들어줘라는데.. 별거 없으니 확인 확인을 누르면 Error라고 나오고 이건 CD-ROM이 아니라고 하면서 종료됩니다. 이제 이프로그램 자체를 올리 디버거로 디버깅을 해봅시다. EP에서 보면 코드자체는 간단하다. 대강 보면 윗줄에 처음 화면 문구가 중간에 에러 그리고 그 아래 YEAH라고 나오면서 성공시 화면이 보인다. 그렇다면 저 문구가 나올수 있게 수정하면 끝.전에 Hello world 문자열을 패치했을때 메모리 주소를 바꾸는 .. 이전 1 2 3 4 5 6 7 다음