Giới thiệu về PcaAppLaunchDic.txt
Trong bài viết trước về Program Compatibility Assistant, 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, 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\, filePcaGeneralDb0.txtlạ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.txtbị "đóng băng" ở chế độ update-only cho tới khi hệ thống restart hoặc service PcaSvc được khởi động lại.