본문 바로가기

Reversing/Study

PEview Patch 평소에 많은 사람들이 쓰는 PE뷰어인 이 PEView에는 한 가지 단점이 있다. 바로 PE구조를 보면서 헥스 에디터와 같은 것들로 값 변경이 불가능하다는 부분이다. PEView가 멍청하게 파일을 읽기 모드로 열어버려서 쓰기가 안되는 것이다. 평소에 이런 불편함을 가지고 계속 사용하다가 분명히 이렇게 되는 이유는 프로그램을 읽어 들일 때 읽기 모드라서 이런 것이라고 생각하고 직접 올리디버거로 열어서 바이너리를 패치해 주기로 하였다. 먼저 이 PEView는 아무런 패킹이 되어 있지가 않다. 안티디버깅도 없고 해서 분석하기가 굉장히 수월 했었다. 일단 올리디버거로 열어서 CreateFile함수를 호출하는 부분에 브레이크포인트를 걸어 주었다. 여기서 바로 볼 수 있는 것은 바로 CreateFile함수의 Shar.. 더보기
Debug Register 디버그 레지스터는 프로그램 디버깅을 목적으로 프로세서에 의해 사용되는 레지스터로써 DR0~DR7까지 총 8개가 있습니다. 그 중 DR0~DR3까지 4개의 레지스터만 직접 사용이 가능합니다. 우리가 보통 하드웨어 브레이크 포인트를 4개 까지만 설정이 가능한 이유도 이와 같습니다. 그림으로 보면 이렇게 볼 수 있습니다. 그리고 나머지 DR4~DR7 까지 4개의 레지스터는 상태를 관리하기 위해 쓰입니다. 특별히 그 중 DR7레지스터는 Debug Control Register로 불리며 15비트부터 31비트까지 R/W 0~3의 비트가 있습니다. 이 비트들은 DR0~DR3 까지의 브레이크 포인트 속성과 관련 된 내용입니다. 각 비트는 두 개의 비트로 이루어져 있으며 각 의미를 보면 00 - 명령어가 실행 되었을 때.. 더보기
Control Register 컨트롤 레지스터란 운영체제의 운영 모드를 변경하고 현재 운영 중인 모드의 기능을 제어하는 레지스터이다. CR0, CR1, CR2, CR3, CR4 이렇게 다섯 개의 레지스터가 존재한다. 전체적인 부분을 그림으로 보면 그리고이렇게 나눌 수 있다. 각 레지스터들을 기능을 나누어 설명하면CR0 - 운영모드를 제어하는 레지스터 PE - Protection Enable (보호모드와 리얼모드 설정) MP - Monitor Coprocessor (wait, fwait 명령시 TS필드의 참조 여부) EM - Emulation (FPU가 내장되었는지 여부 설정) TS - Task Switched (FPU명령 사용시 예외 설정 여부) ET - Extension Type (1로 예약되어있음) NE - Numeric Erro.. 더보기