---
title: 'PCA - Anti Forensics ngưng đọng thời gian'
date: '2026-06-29T23:57:21+07:00'
author: Chigger
tags:
  - digital-forensics
  - windows
draft: false
summary: 'Chỉ cần 1 ký tự đặc biệt đóng băng artifact'
series: digital-forensics
part: 5
---

# Giới thiệu về PcaAppLaunchDic.txt

Trong bài viết trước về [Program Compatibility Assistant](https://blog.chiggerlord.uk/posts/program-compatibility-assistant-ghi-lai-bang-chung-program-execution-duoc-kich-h), tôi đã giới thiệu `PcaAppLaunchDic.txt` — một artifact quan trọng ghi nhận bằng chứng thực thi chương trình trên Windows 11 22H2 trở lên.

Tuy nhiên, sau khi tìm hiểu sâu hơn từ [nghiên cứu của Sygnia](https://www.sygnia.co/blog/new-windows-11-pca-artifact/), tôi tái tạo một **bug nghiêm trọng** trong bài nghiên cứu này: khi đường dẫn chứa ký tự không thuộc bảng mã ANSI (CP-1252), **toàn bộ quá trình ghi nhận execution sẽ bị đóng băng** — không phải chỉ đối với path đó, mà cho **mọi execution tiếp theo** trên hệ thống.

Đây không đơn thuần là một lỗi kỹ thuật. Trong tay attacker, nó trở thành một **kỹ thuật anti-forensics** có thể vô hiệu hóa một nguồn evidence quan trọng.

# ANSI (CP-1252) vs Unicode

## Bảng mã ANSI (CP-1252) là gì?

`PcaAppLaunchDic.txt` được Microsoft lưu với encoding **ANSI (CP-1252)** — một bảng mã 8-bit cũ, chỉ hỗ trợ **256 ký tự**:

- 128 ký tự ASCII chuẩn (A-Z, 0-9, ký hiệu cơ bản)

- 128 ký tự mở rộng (chủ yếu là ký tự Tây Âu: à, é, ñ, ü...)

## Những gì KHÔNG thuộc CP-1252?

- Tiếng Việt có dấu: ă, â, ơ, ư, ê, ô, đ, các dấu thanh (á, à, ả, ã, ạ)

- Tiếng Trung, Nhật, Hàn (CJK characters)

- Tiếng Nga, Ả Rập, Hebrew, Thái

- Emoji và ký tự đặc biệt ngoài Latin-1

## Tại sao đây là vấn đề?

Windows 11 hỗ trợ  Unicode cho filenames từ rất lâu . Người dùng hoàn toàn có thể tạo folder/file với bất kỳ ngôn ngữ nào. Nhưng `PcaAppLaunchDic.txt` lại sử dụng encoding cũ — tạo ra xung đột ngay từ đầu.

> Điểm kỳ lạ: Trong cùng thư mục `%SystemRoot%\AppCompat\PCA\`, file `PcaGeneralDb0.txt` lại sử dụng **UTF-16LE** — hỗ trợ đầy đủ Unicode. Nếu Microsoft thống nhất dùng UTF-16LE cho cả `PcaAppLaunchDic.txt`, bug này đã không tồn tại.
> 

| Đặc điểm | PcaAppLaunchDic.txt | PcaGeneralDb0/1.txt |
| --- | --- | --- |
| Encoding | ANSI (CP-1252) | UTF-16LE |
| Hỗ trợ Unicode | Không | Có |
| Bị bug non-ANSI | Có | Không |

# Mô tả chi tiết Bug

Bug biểu hiện qua ba hệ quả xảy ra đồng thời.

## Hệ quả 1: Truncate đường dẫn

Khi service gặp ký tự non-ANSI trong đường dẫn, nó **dừng ghi tại vị trí đó**. Toàn bộ phần path phía sau (bao gồm tên file và thư mục con) **biến mất hoàn toàn** khỏi file.

**Ví dụ**:

- Đường dẫn thực tế: `C:\Users\Public\测试文件夹\malware.exe`

- Ghi trong file: `C:\Users\Public\` ← dừng tại ký tự `测`

## Hệ quả 2: Mất timestamp

Vì service dừng ghi giữa chừng, **dấu `|` phân cách** và **timestamp** cũng không được viết. Một dòng trong `PcaAppLaunchDic.txt` **không bao giờ** kết thúc mà không có timestamp — đây là đặc điểm rõ ràng nhất để nhận biết bug đã trigger.

Ví dụ dòng bình thường:
C:\Users\John\Desktop\notepad.exe|2026-06-29 14:32:18.5

Dòng bị bug:
C:\Users\Public\

## Hệ quả 3: Đóng băng ghi record mới

Đây là hệ quả  nghiêm trọng nhất . Sau khi bug trigger một lần, từ thời điểm đó trở đi:

- Không có dòng mới nào được thêm vào file

- Các dòng cũ vẫn hoạt động bình thường (vẫn update timestamp khi file đó chạy lại)

- Mọi file  chưa từng xuất hiện trong file sẽ không bao giờ được ghi nhận

> Hiểu đơn giản: File `PcaAppLaunchDic.txt` bị "đóng băng" ở chế độ **update-only** cho tới khi hệ thống restart hoặc service PcaSvc được khởi động lại.
> 

# Thực nghiệm: Cách trigger bug

https://youtu.be/aYUtfK9E3aA
