본문 바로가기

Project/PE Viewer

PE Viewer 개발 5일차 오늘은 IMAGE_DOS_HEADER 출력 부분을 서식문자로 바꿔서 정렬을 하였고, IMAGE_NT_HEADER역시 정렬이 되어 있지 않았던 부분을 정렬하였다.그리고 IMAGE_FILE_HEADER의 Machine, TimeDataStamp, Characteristics 부분을 해석해 주는 부분을 넣었고, IMAGE_OPTIONAL_HEADER에서 DataDirectory를 제외한 나머지 부분을 완성시켰다. IMAGE_FILE_HEADER 완성DataDirectory를 제외한 IMAGE_OPTIONAL_HEADER이제 DataDirectory를 추가하고, 각 섹션 헤더들을 출력하는 부분을 추가해야겠다. 더보기
PE Viewer 개발 4일차 오늘은 Dos Stub출력 부분과 IMAGE_NT_HEADER를 약간만 분석하도록 만들었다. Dos Stub은 사이즈를 계산해서 hex로만 출력하는 기능을 넣었고, IMAGE_NT_HEADER 중에서 Signature, IMAGE_FILE_HEADER 부분을 만들었다. 각각 읽어 들이고, Machine이나 Time Stamp Data, Characteristics 같은 멤버 변수들을 분석하는 부분을 넣어야 한다. 그리고 출력을 할 때에 지금까지는 직접 문자열을 하드코딩으로 직접 다 넣었는데 이제는%s를 잘 사용하여 알아서 거리를 계산하여 보기 좋게 출력하도록 만들어야겠다. Dos_Stub정렬안된 IMAGE_NT_HEADER Signature정렬안된 IMAGE_NT_HEADER IMAGE_FILE_HEAD.. 더보기
PE Viewer 개발 3일차 오늘은 DOS_IMAGE_HEADER 부분을 완성시켰다. 출력하는 부분을 어떻게 처리할까 계속 고민하다가 반복문으로 하게 되면 제약이 너무 많아지기 때문에 그냥 각 멤버 변수 하나씩 printf로 노가다 해서 출력해 줬다. 이렇게 hex로만 표현해 주는 부분과 분석을 해서 출력하게 하는 부분을 만들었다. IMAGE_DOS_HEADER에서 가장 중요한 멤버 변수인 e_magic하고 e_flanew는 특별히 ★까지 붙여줬다. 이제 Dos Stub출력 부분과 NT_IMAGE_HEADER 앞부분을 분석하는 부분을 만들어야겠다. 더보기
PE Viewer 개발 2일차 오늘은 많은 부분을 제작하지 못했다. 일단 메모리에 파일을 올리는 것은 그대로 매핑해서 올리기로 하고, 전역변수에다가 각 헤더와 섹션을 구분해서 저장하기로 했다. 그리고 헥스로 출력하는 부분을 좀 더 나눠서 함수로 만들었다. 그리고 IMAGE_DOS_HEADER를 읽어와서 이를 각 멤버 변수들과 의미 등으로 구분해서 출력을 해야 하는데 이 부분을 반복문으로 처리하기가 약간 까다롭다.. 각 멤버 변수들마다 크기도 다르고, 이름도 제각각 달라서 어떻게 효율적으로 출력해야 할 지 고민중이다.. 아마도 각 변수들의 크기, 이름, 설명 등을 전부 테이블로 만들어서 반복문으로 처리하게 될 것 같은데 좀만 더 방법을 찾아봐야겠다.. 더보기
PE Viewer 개발 1일차 오늘은 기본적인 프로그램을 읽어 들이는 부분과 읽어들인 파일을 헥스로 표현하는 부분을 구현하였다. cpp파일을 main.cpp, loadPE.cpp, printPE.cpp 이렇게 새 개로 나누어서 함수를 작성하고 header.h 하나를 작성하였다. 헤더파일 안에 전역변수를 선언했었는데 자꾸만 이미 정의되어있는 변수라면서 에러를 마구 내뿜었었다. 검색을 해 보니 헤더파일에 선언을 할 때에는 extern 키워드를 앞에 붙여서 중복 선언이 방지되도록 해야 한다고 했다. 그렇게 오류를 해결하고 파일을 잘 읽어 들이고, 헥스로 출력하도록 했다.파일을 읽어 들이는 것은 먼저 CreateFile 함수로 파일 객체를 생성하고, CreateFileMapping 함수로 파일 매핑 객체를 생성하고 난 뒤에 MapViewOf.. 더보기