Windows 11 메모장 X-Ways로 뜯어보기-1 (윈도우 26H2 메모장 TabState 포렌식)

  1. 서론

윈도우 메모장에서 수업 내용을 필기 하고 , 중요하지 않은 내용인 것 같아 우상단의 X 버튼을 눌러서 메모장을 종료했다.

다음 수업 때 메모장을 다시 쓸 일이 생겨서 확인해보니 필기내용이 그대로 남아 있었다.

저장하지 않았는데도 내용이 남아 있다는 건, 메모장이 어딘가에 기록을 따로 보관하고 있을 것 같고, 이 기록을 포렌식으로 찾아내 증거로 쓰일 수 있을 것 같아, 구글링과 LLM으로 자료를 조사해보고 X-Ways로 직접 확인하였다.

2. 저장 위치

메모장의 상태 파일은 아래 경로에 저장된다.

%LOCALAPPDATA%\Packages\Microsoft.WindowsNotepad_8wekyb3d8bbwe\

폴더파일내용
LocalState\TabState{GUID}.bin탭 하나당 파일 하나. 탭 본문이 들어 있음
LocalState\TabState{GUID}.0.bin, {GUID}.1.bin탭의 커서 위치, 보기 설정 등 상태 정보
LocalState\WindowState*.0.bin, *.1.bin열린 탭 개수, 탭 순서, 창 위치
Settingssettings.dat메모장 설정 (레지스트리 하이브 형식)

tip : .0.bin과 .1.bin은 번갈아 가며 갱신된다! 둘 중 Sequence Number가 큰 쪽이 최신 파일이다!

3. X-Ways로 직접 확인해보기

우선 메모장을 켜 아무 내용이나 작성한 다음 메모장을 종료한다.

관리자 권한으로 X-Ways를 실행 한 후 C드라이브를 케이스에 추가한다.

드라이브가 추가되면 %LOCALAPPDATA%\Packages\Microsoft.WindowsNotepad_8wekyb3d8bbwe\ 폴더로 이동한다.

위 두개의 사진 하단의 미리보기를 보면 영어로 된 메모는 잘 나오는데 반해 한국어로 된 메모는 다 깨져서 나온다. 이는 파일이 손상 된 것이 아니라 X-Ways가 ASCII형태로 미리보기를 보여줘 깨져서 출력 되는 것이다.

View -> Character set No. 1 -> Unicode UTF-16 LE, misaligned 를 클릭하여 UTF-16 LE 형태로 미리보기를 출력 형태를 변경하면 깨짐 없이 볼 수 있다!


TIP : 본문이 0x0F, 즉 홀수 오프셋에서 시작한다. 그래서 UTF-16 LE 가 아니라 misaligned에서만 한글이 보인다!

위 과정을 거치면 안녕하살법! 이라는 메모가 그대로 잘 보인다!

NP파일을 바이트 단위로 하나하나 설명을 하자면 아래 표와 같다.

오프셋바이트필드해석
0x004E 50Signature“NP”
0x0200Sequence Number0 (탭 본체 파일)
0x0300TypeFlag0 = 한 번도 저장하지 않은 새 탭
0x0401Unknown공개 자료와 같은 고정값
0x0506SelectionStart6
0x0606SelectionEnd6 (선택 없이 6번째 글자 뒤에 커서)
0x0701WordWrap자동 줄 바꿈 켜짐
0x0800RightToLeft꺼짐
0x0900ShowUnicode꺼짐
0x0A03MoreOptions 길이뒤에 3바이트가 더 있음
0x0B01 01Unknown ×2맞춤법 검사·자동 고침 관련으로 추정
0x0D01Formatting1 = 서식 없음(일반 텍스트)
0x0E06ContentLength6 (글자 수)
0x0F48 C5 … 21 00Content (12바이트)안 녕 하 살 법 !
0x1B01Unsaved1 = 저장되지 않은 내용 있음
0x1CEF 41 00 97CRC32아래에서 검증

4. 마무리 글

이번 실험으로 메모장에서 저장하지 않은 내용도 TabState 파일에 그대로 남아 있고, X-Ways로 찾아 확인할 수 있다는 것을 직접 확인했다.

조사하면서 재미있는 점도 하나 알게 됐다. 공개 자료에 따르면 저장하지 않은 편집은 Unsaved Buffer Chunk(커서 위치, 지운 글자 수, 입력한 글자 수, 입력한 글자, CRC32) 단위로 쌓이고, 이 청크를 순서대로 재구성하면 무엇을 쳤다가 지웠는지까지 복원할 수 있다고 한다.

다만 이번에 확인한 파일은 CRC32에서 끝나서 청크가 없었다. 공개 자료에서는 메모장을 닫을 때 청크가 본문에 합쳐진다고 하는데, 어떤 조건에서 청크가 남는지는 다음 실험에서 확인해 볼 예정이다.

참고 문헌

ogmini, Notepad-State-Library, https://github.com/ogmini/Notepad-State-Library

AbdulRhman Alfaifi, notepad_parser, https://github.com/AbdulRhmanAlfaifi/notepad_parser

Velociraptor, TabState artifact, https://docs.velociraptor.app/exchange/artifacts/pages/tabstate

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다