---
# System prepended metadata

title: HƯỚNG DẪN THỰC HÀNH DEMO CHI TIẾT

---

# Process Manager
## Slide 1
- Vấn đề: Khi quản trị từ xa, việc chỉ nhìn màn hình là không đủ. Client cần biết cái gì đang chạy ngầm và chiếm tài nguyên

- Giải pháp: Xây dựng một Module Process Manager hoạt động thời gian thực, có khả năng liệt kê, lọc và can thiệp sâu vào hệ thống, tương tự như Windows Task Manager nhưng chạy trên Web.
## Slide 2
- Kiến trúc luồng dữ liệu


- Server: Gọi Windows API (TlHelp32) -> Lấy Snapshot hệ thống.

- Đóng gói danh sách thành JSON -> Gửi qua WebSocket.

- React Client: Nhận JSON -> Lưu vào State -> Xử lý Logic (Gom nhóm/Lọc).

- UI: Hiển thị lên bảng Dashboard.

- Cho phép mở ứng dụng (ví dụ: notepad), hoặc mở website (ví dụ: https://google.com) 

## Slide 6
- Làm sao để kill được các process hệ thống hoặc Antivirus?

- Giải quyết:

- Sử dụng OpenProcess với quyền PROCESS_TERMINATE (Đã có quyền Admin).

- Độ trễ mạng khi gửi danh sách process lớn.

- Giải quyết: Chỉ gửi các thông tin thiết yếu (PID, Name), không gửi các thông tin rườm rà (RAM, CPU usage chi tiết) để tối ưu băng thông WebSocket.


# Screen Shot
- Tiếp theo, em xin trình bày về tính năng quan trọng nhất trong việc giám sát hình ảnh: Screenshot - Chụp ảnh màn hình. Khác với tính năng Livestream ưu tiên tốc độ, chức năng Screenshot ưu tiên chất lượng hình ảnh và tính bảo mật. Mục tiêu là lấy được bằng chứng rõ nét nhất về những gì đang hiển thị trên màn hình nạn nhân mà không để lại bất kỳ dấu vết file nào trên ổ cứng của họ

- Đặc điểm nổi bật:

Silent Capture: Không lưu file trên ổ cứng nạn nhân .

High Compatibility: Sử dụng GDI, hoạt động trên mọi phiên bản Windows.

Instant Feedback: Hiển thị và lưu trữ lịch sử ngay trên Dashboard.

Luồng hoạt động: Admin Click -> Server Capture -> Encode Base64 -> Client Render.

# Streaming
Slide:
Công nghệ lõi: DXGI (DirectX Graphics Infrastructure)

Sử dụng giao diện IDXGIOutputDuplication. Đây là API được Microsoft giới thiệu từ Windows 8, cho phép truy cập trực tiếp vào bộ nhớ GPU để lấy hình ảnh màn hình.

Ưu điểm: Tốc độ cực nhanh, ít ngốn CPU hơn so với GDI (BitBlt) vì GPU làm việc nặng nhọc nhất.

Script:

"Để giám sát nạn nhân trong thời gian thực, chúng em xây dựng 1 module 
streaming:

- dùng DXGI - công nghệ của Windows DirectX.
Thay vì chụp từng screenshot, ta sử dụng Desktop Duplication API để 
capture trực tiếp framebuffer của GPU. Mỗi frame được JPEG encode 
và gửi qua WebSocket với độ trễ chỉ ~30ms.

Trên phía Client React, ta nhận các frame này liên tục:
- Mỗi khi nhận screen_frame, ta update state liveStreamSrc

Điểm mạnh: Latency thấp (~30ms), bandwidth tiết kiệm (JPEG quality 60%), 
và có thể điều khiển bật/tắt stream bất kỳ lúc nào.

Copy framebuffer → JPEG → WebSocket binary (header riêng cho screen)
Nhận screen_frame, cập nhật liveStreamSrc để render realtime.


# Webcam
Để lấy video từ camera máy nạn nhân, tụi em dùng Windows Media Foundation

Khi bắt đầu streaming:
- Mỗi frame, ta trích xuất ra raw pixel data
- Dùng GDI+ Bitmap wrapper bọc ngoài dữ liệu pixel
- Encode sang JPEG với chất lượng khoảng 60% để tiết kiệm bandwidth
- Ghi JPEG vào memory stream, rồi đọc ra thành vector bytes
- Encode thành Base64 string để gửi qua WebSocket

Ở phía client React, khi nhận được webcam_frame:

- Component image sẽ re-render hiển thị frame mới
- Cứ liên tục nhận frame thế nên thành ra video stream liên tục

Lợi ích: Webcam capture rất hiệu quả, độ trễ thấp, dữ liệu nén JPEG nên 
đỡ tốn bandwidth. Nhược điểm là chỉ support 1 camera, và nếu nạn nhân 
tắt camera hoặc che camera thì không thấy gì."

# Keylogger
- Về phần keylogger, bên em triển khai hoàn toàn ở phía server C++ bằng global keyboard hook của Windows
- Khi client gửi lệnh start_keylog, server tạo một thread riêng
- Mỗi lần nạn nhân bấm phím, server sẽ xử lý phím đó và chuyển sang ký tự tương ứng, xử lý thêm Shift, Caps Lock và các phím đặc biệt. Chuỗi ký tự đó được ghép vào buffer và được truyền sang client nên sẽ cập nhật real time

- Ưu điểm là hook chạy ở mức hệ thống nên bắt được gần như mọi phím bấm trên toàn máy, kể cả khi nạn nhân không ở trong cửa sổ trình duyệt

# Get password
- Về phần trích xuất dữ liệu trình duyệt như Password, Cookies và Thẻ thanh toán, tụi em sử dụng cơ chế giải mã DPAPI chuẩn của Windows
- Code sẽ tìm đường dẫn User Data của trình duyệt, sau đó nhắm tới các file SQLite quan trọng:

- Login Data: Chứa mật khẩu đã lưu.

- Network/Cookies (hoặc Cookies): Chứa session cookies (đăng nhập không cần pass).

- Web Data: Chứa thông tin thẻ tín dụng (Credit Card) và AutoFill.
- chương trình sẽ quét folder User Data của Chrome để tìm file Local State, từ đó lấy ra được encrypted_key.

- Sau đó, code sẽ truy cập vào các file database SQLite như Login Data (chứa password), Cookies (chứa session) và Web Data (chứa thẻ tín dụng). Dữ liệu trong này được mã hóa AES-GCM. Tụi em dùng Master Key đã lấy được ở bước trước để giải mã toàn bộ, chuyển thành text rõ (plaintext).

# File Explore

- File Explorer là một công cụ có thể thao tác dữ liệu toàn diện từ xa
- Ở phía Backend, thay vì sử dụng các hàm WinAPI cũ kỹ và rườm rà như FindFirstFile, em đã áp dụng thư viện std::filesystem của chuẩn C++17. Lựa chọn này giúp code ngắn gọn hơn, xử lý đường dẫn unicode tốt hơn và quan trọng nhất là tính ổn định.
- Những chức năng của file explorer bao gồm scan file, sửa file, tạo file, xóa file, và có thể xem cây thư mục
- Edit chỉ hỗ trợ file văn bản thuần (Text-based như .txt, .cpp, .html). Với file nhị phân như Word, client cần dùng chức năng Download về sửa rồi Upload lại."
- Một tính năng đặc biệt mà em muốn nhấn mạnh Làm hỏng file. Thông thường, khi xóa file, dữ liệu gốc vẫn còn trên đĩa cứng và có thể khôi phục. Tính năng 'Corrupt' của em hoạt động theo cách khác là: Nó mở file ra và ghi đè toàn bộ nội dung bằng các chuỗi ký tự rác. Kết quả là file vẫn còn, dung lượng có thể không đổi, nhưng cấu trúc bên trong đã bị phá. Nên sẽ không thể khôi phục được nữa.
- Cuối cùng là khả năng biến máy nạn nhân thành trạm trung chuyển. Với chức năng Upload & Execute, Admin có thể tải bất kỳ file .exe nào từ máy mình lên máy nạn nhân và ra lệnh chạy nó ngay lập tức. Đặc biệt, em điều chỉnh server khi gọi hàm thực thi file, chương trình sẽ chạy ngầm hoàn toàn, nạn nhân không hề hay biết máy mình vừa bị cài thêm phần mềm nào khác

# Clip board
- Tiếp theo là chức năng giám sát Clipboard, cho phép chúng ta lấy bất cứ thứ gì nạn nhân copy, dù là text hay hình ảnh.

- Khi chúng ta nhấn nút "Get Clipboard", client sẽ gửi lệnh get_clipboard xuống server C++.

- Server nhận lệnh, nó sẽ dùng Windows API để mở clipboard ra và kiểm tra xem bên trong đang chứa định dạng gì.

- Nếu là text, nó sẽ đọc chuỗi ký tự đó, convert sang UTF-8 rồi gửi về client.

- Nếu là hình ảnh, server sẽ đọc dữ liệu bitmap, dùng GDI+ để nén ảnh đó lại thành JPEG, sau đó encode Base64 rồi mới gửi về client.

- Phía client React sẽ nhận dữ liệu và hiển thị tương ứng trong tab Clipboard. Chức năng này cực kỳ hữu ích để lấy các thông tin nhạy cảm mà nạn nhân copy-paste, ví dụ như mật khẩu, mã 2FA, hoặc các đoạn chat riêng tư.
# Network Blocker
- tiếp đến là tính năng Network Blocker, giúp chúng ta chặn nạn nhân truy cập vào các website nhất định.

- Về mặt kỹ thuật, tụi em sử dụng phương pháp cổ điển nhưng hiệu quả là can thiệp vào file HOSTS của Windows.

- Khi các bạn nhập một tên miền, ví dụ như 'bkav.com.vn' và bấm Block, client sẽ gửi lệnh xuống server. Server C++ (nếu đang có quyền Admin) sẽ âm thầm mở file C:\Windows\System32\drivers\etc\hosts và thêm một dòng 127.0.0.1 bkav.com.vn.

- Điều này có nghĩa là khi nạn nhân cố gắng vào trang web đó, máy tính sẽ tự chuyển hướng về chính nó (localhost) thay vì kết nối ra Internet, làm cho trang web không thể tải được.

- Tính năng này rất hữu ích để chặn nạn nhân tải các phần mềm diệt virus, hoặc chặn các trang web update của hệ điều hành. Để bỏ chặn, server chỉ cần đọc lại file hosts, lọc bỏ dòng đó đi và lưu lại là xong."

# Live chat
- Tiếp theo chức năng Live Chat, cho phép giao tiếp hai chiều trực tiếp với nạn nhân.

- Ở phía Server C++, tụi em không dùng thư viện đồ họa bên ngoài mà code trực tiếp bằng Win32 API thuần để tạo ra cửa sổ chat gọn nhẹ nhất.

- Cửa sổ này được thiết lập chế độ TopMost, tức là luôn nổi lên trên cùng màn hình, đảm bảo nạn nhân không thể bỏ qua tin nhắn.

- Điểm đặc biệt là module ChatManager này không chỉ nhận văn bản.

- Nếu admin gửi file hoặc ảnh, server sẽ tự động tải về thư mục Temp và mở nó lên ngay lập tức trước mặt nạn nhân.

- Nếu admin gửi tin nhắn bắt đầu bằng từ khóa audio:, server sẽ kích hoạt bộ tổng hợp giọng nói của Windows (Text-to-Speech) để máy tính nạn nhân tự động 'nói' ra câu đó

- Phía giao diện React thì đơn giản hơn, nó đóng vai trò như một ứng dụng nhắn tin thông thường, hiển thị lịch sử chat và trạng thái gửi nhận theo thời gian thực."

# Remote desktop
- Để hoàn thiện khả năng kiểm soát, tính năng Remote Desktop của nhóm em  cho phép tương tác trực tiếp với server.

- Về phần hiển thị, như đã trình bày, tụi em dùng công nghệ DXGI của DirectX để stream màn hình về với độ trễ cực thấp, chỉ khoảng 30ms, giúp thao tác mượt mà như đang ngồi trước máy.

- Về phần điều khiển, khi CLient di chuột hay gõ phím trên trình duyệt, các sự kiện này được bắt lại, tính toán tọa độ tương đối, rồi đóng gói gửi ngay lập tức qua WebSocket.

- Tại máy nạn nhân, Server C++ nhận các gói tin này sẽ giả lập lại y hệt các hành động đó. Điều này cho phép Admin có thể mở ứng dụng, gõ văn bản, quản lý file, hay thực hiện bất kỳ thao tác nào như thể đang cầm chuột và bàn phím của chính máy đó."

# Interactive shell
Tiếp theo là chức năng Interactive Shell. Nó cho phép client thực thi bất kỳ lệnh Windows nào trên máy nạn nhân, giống như mở Command Prompt bình thường nhưng từ xa qua internet.

Ở phía Server C++, tụi em sử dụng một kỹ thuật gọi là Windows Pipes . Thay vì giao tiếp trực tiếp với cmd.exe, server tạo ra hai ống: một ống để đưa lệnh vào, một ống để lấy kết quả ra.

Cụ thể hơn:

Server sử dụng API CreatePipe để tạo hai pipes riêng.

Sau đó, server tạo một process con chạy cmd.exe và yêu cầu nó sử dụng các pipes này làm stdin/stdout.

Một thread riêng liên tục đọc từ pipe output, mỗi khi nhận được dữ liệu, nó gửi ngay lập tức qua WebSocket về Client.

Phía Client React - người dùng gõ lệnh vào ô input (ví dụ dir hay ipconfig), gửi đi, Server nhận, gõ vào pipe input của cmd.exe, chờ kết quả, rồi gửi lại.

Điều này cho phép client có thể quản lý toàn bộ hệ thống nạn nhân từ cửa sổ terminal, chạy các script, cài đặt/gỡ cài phần mềm, hay thậm chí tạo ra các tài khoản người dùng mới mà không cần bấm vào giao diện

# Registry Editor
Chức năng Registry Editor là một trong những tính năng nguy hiểm.

Windows Registry là một cơ sở dữ liệu khổng lồ chứa toàn bộ cài đặt hệ thống - từ cài đặt phần mềm, driver, đến các policy bảo mật. Nó được tổ chức như một cây thư mục.

Ở phía Server C++, tụi em sử dụng các Windows API cấp thấp như RegOpenKeyEx, RegEnumKeyEx, RegSetValueEx, RegDeleteKey để truy cập và chỉnh sửa Registry. Những API này cần quyền Administrator.

Phía Client React cung cấp giao diện để duyệt Registry như Windows Regedit. Admin có thể:

Duyệt các folder (Keys) và file (Values)

Xem loại dữ liệu (REG_SZ là text, REG_DWORD là số 32-bit)

Chỉnh sửa giá trị 

Tạo entries mới

Xóa entries cũ

# Network Topology
Chức năng Network Topology cho phép Admin khám phá tất cả các thiết bị kết nối trên mạng LAN.

Ở phía Server C++, tụi em sử dụng ARP (Address Resolution Protocol) - một giao thức mạng thấp để tìm tất cả các IP/MAC đã từng giao tiếp. Điều này không cần phát tán (broadcast) mà chỉ cần đọc bảng ARP cache của hệ thống.

Sau khi có danh sách IP/MAC, server sẽ tìm hiểu loại thiết bị là gì bằng cách xem 6 bytes đầu của MAC address (gọi là OUI). Ví dụ:

Nếu OUI là AC:BC:32 → đó là thiết bị Apple

Nếu OUI là TP-Link → đó là router

Nếu OUI là Intel → đó là máy tính

Phía Client React sẽ hiển thị tất cả các thiết bị dưới dạng một bản đồ, mỗi thiết bị có:

IP address

MAC address

Vendor (hãng sản xuất)

Loại thiết bị (desktop, router, mobile, server)

Admin có thể dùng thông tin này để:

Khám phá mạng - biết có bao nhiêu thiết bị ngoài kia

# GPS
Chức năng GPS Location Tracking cho phép Admin biết chính xác nạn nhân đang ở đâu trên thế giới.

Server sử dụng WiFi Triangulation - một kỹ thuật được sử dụng rộng rãi bởi Google Maps, Apple Maps, v.v.

Cơ chế hoạt động như sau:

Windows có một dịch vụ Geolocation tích hợp luôn chạy ở background.

Dịch vụ này quét tất cả các WiFi network gần đó (SSID, MAC address, signal strength).

Nó lookup MAC address của các router này trong một database công cộng (do Apple, Google, v.v. duy trì).

Database có thông tin: 'MAC address này tương ứng với một router ở tọa độ (latitude, longitude)'.

Bằng cách kết hợp signal strength từ nhiều router, nó triangulate được vị trí chính xác của device.

Độ chính xác thường là 50-100 mét, tốt hơn ở thành phố, kém hơn ở ngoài đô thị.

Phía Server C++ sẽ truy cập Windows Geolocation API (hoặc Registry) để lấy:

Latitude (vĩ độ)

Longitude (kinh độ)

Accuracy (độ chính xác)

Nếu dịch vụ Geolocation bị tắt, server sẽ tự động kích hoạt nó bằng cách sửa Registry.

Với thông tin này, Admin có thể:

Biết nạn nhân ở đâu - địa điểm chính xác

Theo dõi chuyển động - ghi lại vị trí qua thời gian

Geofencing - kích hoạt tấn công khi nạn nhân ở một nơi nhất định

Phát hiện bất thường - nếu chủ nhân account bất ngờ ở nước khác → có thể là bị hack"

# Change Password
"Chức năng Change Password User là một trong những tính năng phá hoại nhất của RAT này.

Nó cho phép Admin thay đổi mật khẩu của bất kỳ tài khoản nào trên máy - kể cả tài khoản Administrator.

Cơ chế hoạt động:

Server sẽ gọi Windows API NetUserSetInfo hoặc command net user <username> <newpassword>.

Cả hai đều cần quyền Administrator để chạy (và server đã có quyền này từ lúc injection).

Mật khẩu được đổi ngay lập tức trên hệ thống Windows.

Điều nguy hiểm nhất:

Nếu đổi mật khẩu Admin: Chủ sở hữu máy (người dùng gốc) sẽ bị khóa ra khỏi máy của mình. Họ không thể đăng nhập được nữa, dù có physical access cũng không giúp được vì Windows sẽ yêu cầu password.

Nếu tạo tài khoản mới: Attacker có thể tạo một hidden account với mật khẩu của riêng họ → backdoor lâu dài để truy cập lại sau này.

# Shutdown, Restart
- Cuối cùng là chức năng Power Control - Shutdown & Restart.

Cơ chế rất đơn giản nhưng hiệu quả:

Server sẽ gọi Windows command shutdown /s /t 0 hoặc shutdown /r /t 0 sẽ khiến máy server thực thi ngập lập tức shutdown hoặc restart



Shutdown: Khi máy bật lại, nếu malware có persistence (chạy lại tự động), Admin vẫn kiểm soát được.


# HƯỚNG DẪN THỰC HÀNH DEMO CHI TIẾT
## RAT Control V2 - Nhóm 3

---

## 📋 CHECKLIST TRƯỚC KHI TRÌNH BÀY

### Environment Setup (24 giờ trước)

- [ ] **Server C++** đã compile & run trên máy victim
  - `./server.exe` hoặc tích hợp vào system
  - Lắng nghe trên port 8080
  - Test: `netstat -an | grep 8080` → LISTENING

- [ ] **Client React** đã build
  - `npm run build` hoặc `npm start`
  - Chạy trên localhost:3000 hoặc deployed domain
  - Test kết nối: Chrome dev tools → Network tab

- [ ] **Network Config**
  - Victim PC (Server) IP: **192.168.1.50** (ví dụ)
  - Admin PC (Client) IP: **192.168.1.100** (ví dụ)
  - Cùng subnet (192.168.1.0/24)
  - Firewall port 8080 mở hoặc tạm disable

- [ ] **Data Preparation**
  - Chrome profiles đã có password lưu (tạo fake account)
  - WiFi list có password (export từ WiFi quốc phòng)
  - Clipboard có dữ liệu test
  - File test ready (README.txt, sample.docx)

- [ ] **Screen & Audio**
  - HDMI/USB-C cable sẵn sàng
  - Projector/Monitor test → 1920x1080 minimum
  - Loa test (nếu cần sound)
  - 2 laptop: 1 run server, 1 run client (hoặc VM)

---

## 🎮 DETAILED DEMO SCRIPT

### **PREP (5 phút trước trình bày)**

```bash
# Terminal 1: Chạy Server (Máy Victim)
cd /path/to/project
./server.exe
# Output: "WebSocket Server listening on 0.0.0.0:8080"

# Terminal 2: Chạy Client (Máy Admin)
cd /path/to/client
npm start
# Output: "Compiled successfully. Compiled at XX:XX"
# Browser tự mở: http://localhost:3000
```

**Kiểm tra:**
- Client load xong, hiển thị connection screen
- Status: `DISCONNECTED`
- Input box: "Enter server IP"

---

## 🚀 DEMO FLOW (15 PHÚT)

### **PHASE 1: INTRO (1 PHÚT) - Nhất Bảo**

#### Bước 1: Mở Landing Page (30 giây)

```
[Chrome screen share - Show localhost:3000]

Hiển thị:
├─ Header: "RAT Control V2"
├─ Tagline: "Redefine Remote Administration"
├─ Hero section: Ảnh hệ thống
├─ 3 Features:
│  ├─ Hybrid Architecture (C++ + React)
│  ├─ Real-time Control (~30ms latency)
│  └─ Multi-Protocol Support (LAN/Cloud)
└─ Scroll: "Trusted by..." section

Action:
- Scroll smoothly
- Point to key phrases
- No click yet
```

**Audio Script (nói tự nhiên):**
> "Các bạn thấy đây là landing page của ứng dụng. Hệ thống kết hợp 
> C++ backend (tốc độ, system access) với React frontend (UI đẹp).
> Hỗ trợ kết nối LAN trực tiếp hoặc qua Cloud tunnel."

#### Bước 2: Navigate to Connection Screen (30 giây)

```
[Scroll xuống, tìm nút "CONNECT" hoặc nhấn tab "Connection"]

Hiển thị form:
┌─────────────────────────────────────┐
│ Server Connection                   │
├─────────────────────────────────────┤
│                                     │
│ Input: [192.168.1.50      ]        │
│ Status: [ DISCONNECTED    ]        │
│                                     │
│ [Scan Network]  [Connect]           │
│ [Cloud Server]  [Upload Server]     │
│                                     │
│ Thông tin:                          │
│ - Hỗ trợ LAN direct connect         │
│ - Hỗ trợ Cloud (Cloudflare, Ngrok) │
│ - Auto-discover qua UDP broadcast   │
│                                     │
└─────────────────────────────────────┘

Action:
- Clear input field (nếu có text cũ)
- Type: "192.168.1.50"
- Hiện button "Connect" ready to click
```

**Audio Script:**
> "Để kết nối tới server, client nhập IP victim. Chúng ta hỗ trợ:
> - IP trực tiếp LAN (192.168.1.50)
> - Cloud domain nếu server behind NAT
> 
> Hôm nay server chạy trên máy này, IP là 192.168.1.50."

---

### **PHASE 2: ARCHITECTURE (2 PHÚT) - Đông Quân**

#### Bước 1: Kết nối & Show Process List (1 phút)

```
[Nhấn "CONNECT"]

Loading animation: "CONNECTING..."
[Đợi 2-3 giây]

Kết quả: Status → "CONNECTED" (xanh lá)

Tự động hiển thị tab "Processes":
┌────────────────────────────────┐
│ PROCESSES (Auto-loaded)        │
├────────────────────────────────┤
│ PID  │ Name           │ Path   │
├──────┼────────────────┼────────┤
│ 1234 │ explorer.exe   │ C:\... │
│ 5678 │ chrome.exe     │ C:\... │
│ 9999 │ notepad.exe    │ C:\... │
│ 4567 │ server.exe     │ C:\... │
└────────────────────────────────┘
```

**Audio Script (Đông Quân):**
> "Sau khi nhấn Connect, hệ thống ngay lập tức:
> 
> 1. Tạo WebSocket connection từ client → server
> 2. Server nhận handshake, accept connection
> 3. Client tự động gửi lệnh 'list_process'
> 4. Server scan các process đang chạy
> 5. Trả dữ liệu JSON về client
> 6. Client render bảng process
> 
> Toàn bộ quá trình này mất < 1 giây. Đó là lợi ích của WebSocket - 
> real-time communication, không polling."

#### Bước 2: Architecture Diagram (1 phút)

```
[Mở slide hoặc diagram trong app]

Giải thích structure:

CLIENT SIDE (React):
├─ App.tsx
│  ├─ Connection Component
│  ├─ Surveillance tabs
│  ├─ Data Extraction tabs
│  ├─ Network tabs
│  └─ Remote Control overlay
└─ useRemoteControl.ts (Hook)
   ├─ WebSocket logic
   ├─ Command sender
   ├─ Message handler
   └─ State management

SERVER SIDE (C++):
├─ main.cpp (WebSocket listener)
├─ ChatManager (tin nhắn)
├─ DXGIManager (capture desktop)
├─ WebcamEngine (webcam stream)
├─ ReverseShell (terminal)
├─ SystemController (process/app)
└─ UDPDiscovery (LAN broadcast)

Communication:
JSON (command) → WebSocket → Binary (media)
```

**Audio Script:**
> "Architecture của dự án tương đối đơn giản nhưng mạnh mẽ:
> 
> Server là Listener - nó chỉ chờ lệnh từ client.
> Mỗi lệnh là một JSON message qua WebSocket.
> 
> Ví dụ:
> - Client: {\"command\": \"screenshot\"}
> - Server nhận → thực thi DXGIManager.Capture()
> - Trả hình JPEG (binary) về
> - Client decode và hiển thị
> 
> Module modular → dễ extend thêm feature mới."

---

### **PHASE 3: SURVEILLANCE DEMO (4 PHÚT) - Nhất Bảo**

#### Feature 1: Screenshot (1 phút)

```
[Vào tab "SURVEILLANCE"]

[Nhấn nút "SCREENSHOT"]

Timeline:
0s: Nút được highlight, loading spinner
1s: Ảnh load, hiển thị full desktop
2s: Bảng history update (1 item)

Hiển thị:
┌─────────────────────────────────┐
│ SCREENSHOT                      │
├─────────────────────────────────┤
│ [Loading...] (spinner 1-2s)     │
│ Sau đó: [Ảnh desktop victim]    │
│ Resolution: 1920x1080 JPEG      │
│ Timestamp: 14:32:45             │
│                                 │
│ History (Latest):               │
│ ├─ 14:32:45 Screenshot 1        │
│ └─ (nếu click "SCREENSHOT" lại) │
└─────────────────────────────────┘
```

**Audio Script:**
> "Tính năng đầu tiên: **Screenshot**
> 
> Cách hoạt động:
> 1. Client gửi: {\"command\": \"screenshot\"}
> 2. Server thực thi: DXGIManager::Capture()
> 3. DirectX DXGI dump backbuffer của desktop
> 4. Encode JPEG (quality 80, size ~100KB)
> 5. Gửi binary data về client
> 6. Client decode & display
> 
> **Mục đích**: Xem victim đang làm gì, screen share, record, v.v."

#### Feature 2: Screen Stream (1 phút)

```
[Nhấn nút "START SCREEN STREAMING"]

Timeline:
0s: Nút highlight, loading
1s: Video bắt đầu stream
~5s: Có ~5 frame hiển thị

Hiển thị:
┌─────────────────────────────────┐
│ LIVE SCREEN STREAM              │
├─────────────────────────────────┤
│ [Video streaming...]            │
│ [Frame 1]  [Frame 2]  [Frame 3] │
│ FPS: ~10fps (nếu bandwidth ok)   │
│ Latency: 30ms avg               │
│ Status: STREAMING               │
│ [STOP STREAMING]                │
└─────────────────────────────────┘
```

**Audio Script:**
> "Khác với Screenshot (1 ảnh), **Live Stream** là video liên tục.
> 
> Server:
> - Loop capture frame mỗi 100ms (~10fps)
> - JPEG encode & send liên tục
> - Bandwidth: ~1-2 Mbps nếu 10fps
> 
> Client hiển thị như xem YouTube - frames cập nhật liên tục.
> Latency chỉ ~30ms = rất mượt."

#### Feature 3: Webcam Stream (1 phút)

```
[Vào tab "WEBCAM" hoặc nút "START WEBCAM"]

[Nhấn "START WEBCAM"]

Hiển thị:
┌─────────────────────────────────┐
│ WEBCAM STREAM                   │
├─────────────────────────────────┤
│                                 │
│ [Video webcam victim...]        │
│ [Thấy khuôn mặt hoặc phòng]    │
│                                 │
│ Status: STREAMING (webcam)      │
│ [STOP WEBCAM]                   │
│                                 │
│ Label: Đây là camera trên máy   │
│ victim, attacker xem được       │
│                                 │
└─────────────────────────────────┘
```

**Audio Script:**
> "**Webcam Stream** - xem camera laptop/PC của victim.
> 
> Ứng dụng:
> - Xem victim đang làm gì trong phòng
> - Xem mặt, biểu cảm, hành động
> - Thậm chí có thể xem password khi victim nhập
> 
> Rất nguy hiểm cho privacy."

#### Feature 4: Keylogger (1 phút)

```
[Vào tab "KEYLOGGER"]

[Nhấn "START KEYLOGGING"]

Timeline:
- Ngay lập tức status: "Monitoring active..."
- Tại server (máy victim): mở Notepad, gõ text

[Để victim gõ vài từ: "Hello password123"]

Client nhận được:
┌─────────────────────────────────┐
│ KEYLOGGER LOG                   │
├─────────────────────────────────┤
│ [Status: Monitoring active...] │
│                                 │
│ Log:                            │
│ Hello password123               │
│                                 │
│ [STOP KEYLOGGING]               │
│ [CLEAR LOG]                     │
│                                 │
└─────────────────────────────────┘
```

**Audio Script:**
> "**Keylogger** ghi lại mọi phím victim nhấn.
> 
> Server hook Windows keyboard events → mỗi phím add vào buffer.
> Client nhận & display log.
> 
> **Mục đích**: Capture password, PIN, messages - bất cứ gì victim gõ.
> 
> Đây là tính năng **VERY HIGH VALUE** vì capture tất cả user input."

---

### **PHASE 4: DATA EXTRACTION DEMO (5 PHÚT) - Đông Quân**

#### Feature 1: Chrome Passwords (1.5 phút)

```
[Vào tab "DATA EXTRACTION" → sub-tab "CHROME"]

[Nhấn nút "EXTRACT CHROME PASSWORDS"]

Loading: "Extracting... (30 giây - gọi API, giải mã DPAPI)"

Result:
┌──────────────┬────────────────┬──────────────┐
│ Origin       │ Username       │ Password     │
├──────────────┼────────────────┼──────────────┤
│ facebook.com │ victim@gm.com  │ FbPass123!   │
│ gmail.com    │ victim@gm.com  │ GmailP@ss    │
│ bank.vn      │ acc_number     │ B@nk#2024    │
│ github.com   │ victim_github  │ GitH*bToken1 │
└──────────────┴────────────────┴──────────────┘

Show button: "COPY ALL" (copy tất cả vào clipboard)
```

**Audio Script:**
> "**Chrome Password Extraction** - điểm cao nhất.
> 
> Cơ chế:
> 1. Server locate Chrome profile: C:\\Users\\[User]\\AppData\\Local\\Google\\Chrome\\User Data
> 2. Mở SQLite database \"Login Data\"
> 3. Password được mã hóa DPAPI (Windows cipher)
> 4. Server gọi Windows DPAPI API để giải mã (require Admin)
> 5. Return clear-text password
> 6. Client hiển thị bảng
> 
> **Kết quả**: Attacker lấy TẤT CẢ password, hay cai từ Gmail, Banking, Shopping.
> 
> **Đánh giá**: ⭐⭐⭐⭐⭐ (Extremely High Value)"

#### Feature 2: Cookies (1 phút)

```
[Tab "COOKIES"]

Hiển thị:
┌──────────────┬─────────────────┬──────────────────┐
│ Domain       │ Name            │ Value (truncated)│
├──────────────┼─────────────────┼──────────────────┤
│ facebook.com │ c_user          │ 12345678910...   │
│ facebook.com │ xs              │ 9a8b7c6d5e...    │
│ gmail.com    │ SSID            │ AjsfK9s9d2...    │
│ github.com   │ logged_in       │ no...            │
└──────────────┴─────────────────┴──────────────────┘

Show option: Click row → copy cookie value
```

**Audio Script:**
> "**Chrome Cookies** - Session tokens của trình duyệt.
> 
> Tại sao quan trọng?
> - Cookies = session ID authenticated
> - Attacker copy cookie → tạo request with cookie header
> - Truy cập được account (session hijacking)
> 
> Ví dụ: Copy Facebook c_user + xs cookie → truy cập Facebook victim."

#### Feature 3: Payment Methods (1 phút)

```
[Tab "PAYMENT METHODS"]

Click "View Details" cho 1 card:

┌──────────────┬──────────────┬──────────┐
│ Cardholder   │ Card Number  │ Exp      │
├──────────────┼──────────────┼──────────┤
│ VICTIM NAME  │ 4111****3777 │ 12/2026  │
└──────────────┴──────────────┴──────────┘

Expand:
Full Number: 4111111111113777
CVC: 123
Billing: 123 Main St, ...
```

**Audio Script:**
> "**Payment Methods** - thông tin credit card.
> 
> Chrome lưu card info trong SQLite (encrypted DPAPI).
> Server giải mã → client hiển thị số card, CVC, ngày hết hạn.
> 
> Attacker có thể:
> - Fraud online (shop, payment)
> - Sell card data trên dark web (~$100/card)"

#### Feature 4: File Scanner (1.5 phút)

```
[Tab "FILES"]

Input: 
- Extension: ".docx"
- Directory: "All" / "Desktop" / "Documents"
[Nhấn "SCAN"]

Loading: "Scanning C:\\ ... (5-10 giây)"

Result:
┌──────────────┬──────────────────────────┬──────┐
│ Filename     │ Full Path                │ Size │
├──────────────┼──────────────────────────┼──────┤
│ report.docx  │ C:\\Users\\User\\Desk...  │ 250K │
│ resume.docx  │ C:\\Users\\User\\Doc...   │ 80K  │
│ private.txt  │ C:\\Users\\User\\Down...  │ 5K   │
│ project.zip  │ C:\\Users\\User\\Dev...   │ 2.3M │
└──────────────┴──────────────────────────┴──────┘

[Chọn file → nhấn "DOWNLOAD"]
```

**Audio Script:**
> "**File Scanner** tìm file theo extension.
> 
> Ứng dụng:
> - Scan .docx → tìm document cá nhân, công ty
> - Scan .zip → project source code
> - Scan .txt → notes, password, secrets
> - Scan .db → database (credentials)
> 
> Server scan toàn bộ ổ C:\\ (có thể mất vài phút).
> Client download file về máy."

---

### **PHASE 5: NETWORK & MALWARE (2 PHÚT) - Phúc Nguyên**

#### Feature 1: Network Map (1 phút)

```
[Vào tab "NETWORK"]

[Nhấn "SCAN NETWORK"]

Loading: ARP scan + MAC vendor lookup...

Result - Force Graph Visualization:
       [Router - TP-Link]
          /  |  \\
    [PC-1] [PC-2] [Phone]
    (Dell) (ASUS) (Apple)

Hover node → show: IP, MAC, Vendor
```

**Audio Script:**
> "**Network Map** vẽ topologia LAN.
> 
> Server:
> - ARP scan (broadcast who-has → replies)
> - Get MAC → call API vendor lookup
> - Client vẽ graph visualization
> 
> Mục đích: Attacker biết có máy gì trên mạng, chọn target tiếp theo."

#### Feature 2: Domain Blocking (1 phút)

```
[Tab "DOMAIN BLOCKER"]

Input: "google.com"
[Nhấn "BLOCK"]

Result:
- Server modify C:\\Windows\\System32\\drivers\\etc\\hosts
- Add: 127.0.0.1 google.com
- Victim không thể vào google.com nữa

[Show blocked domain list]
┌─────────────────┐
│ blocked domains │
├─────────────────┤
│ google.com      │
│ facebook.com    │
│ antivirus.com   │
└─────────────────┘
```

**Audio Script:**
> "**Domain Blocking** sử dụng HOSTS file injection.
> 
> Tác động:
> - Block antivirus website
> - Block firewall update
> - Block banking (tránh victim check balance)
> 
> Rất hiệu quả, simple, nhưng dễ detect."

---

### **PHASE 6: WRAP UP (1 PHÚT) - Nhất Bảo**

#### Summary Slide

```
╔════════════════════════════════════════╗
║  RAT CONTROL V2 - KEY ACHIEVEMENTS    ║
╠════════════════════════════════════════╣
║                                        ║
║ ✓ 20+ Feature đầy đủ                   ║
║ ✓ Hybrid C++ + React                   ║
║ ✓ Real-time WebSocket (~30ms)         ║
║ ✓ Admin Auto-elevation & Transparent   ║
║ ✓ Multi-protocol (LAN/Cloud)           ║
║                                        ║
║ High-Value Features Implemented:       ║
║ ⭐⭐⭐ Chrome Passwords                   ║
║ ⭐⭐⭐ Payment Methods                    ║
║ ⭐⭐⭐ Browser History                    ║
║ ⭐⭐⭐ WiFi Password Recovery             ║
║ ⭐⭐⭐ File Scanner & Download            ║
║ ⭐⭐⭐ Keylogger                          ║
║ ⭐⭐⭐ Location Tracking                  ║
║ ⭐⭐⭐⭐⭐ Cross-LAN Connectivity           ║
║                                        ║
╚════════════════════════════════════════╝
```

**Audio Script:**
> "Tóm lại, dự án của chúng em:
> 
> - **Công nghệ**: C++ backend (system level) + React frontend (modern UX)
> - **Giao thức**: WebSocket real-time, < 30ms latency
> - **Tính năng**: 20+ đầy đủ, bao hồm mọi mục tiêu cao
> 
> Hệ thống hoàn toàn functional, có thể production-ready.
> 
> Cảm ơn các thầy cô đã lắng nghe. Chúng em sẵn sàng trả lời câu hỏi."

---

## ⚠️ TROUBLESHOOTING

### Problem: Server không connect

**Symptoms:**
- Status: DISCONNECTED
- Error: "WebSocket connection failed"

**Fix:**
1. Check server chạy: `netstat -an | grep 8080`
2. Check firewall: Windows Defender → disable port 8080 hoặc add exception
3. Check IP: `ipconfig` → confirm victim IP
4. Try `localhost:8080` trước khi try LAN IP

### Problem: Screenshot chậm/ảnh bị lag

**Symptoms:**
- Loading spinner lâu (> 5 giây)
- Ảnh quality kém

**Fix:**
1. Reduce JPEG quality (code: `crf 25` → `crf 30`)
2. Reduce resolution (1920x1080 → 1280x720)
3. Check network bandwidth
4. Restart server, reconnect client

### Problem: Chrome password không extract

**Symptoms:**
- Popup "Extraction failed" hoặc trống

**Fix:**
1. Confirm Chrome profile folder exists: `C:\Users\[User]\AppData\Local\Google\Chrome\User Data`
2. Close Chrome (database locked nếu Chrome open)
3. Confirm Server running as Admin
4. Check DPAPI is enabled (thường có by default)

### Problem: Keylogger không capture

**Symptoms:**
- Gõ text trên server nhưng client không thấy

**Fix:**
1. Confirm keylogger started: status = "Monitoring active..."
2. Try gõ text trong Notepad (visible window)
3. Restart server (hook có thể fail)
4. Check browser console cho error

---

## 📋 DEMO CHECKLIST (15 PHÚT TRC)

- [ ] Laptop server (victim) khởi động, display HDMI kết nối
- [ ] Laptop client (admin) sẵn sàng
- [ ] Chrome 2 cái, localhost:3000 load
- [ ] Server WebSocket listening, ready
- [ ] Network: ping 192.168.1.50 → OK
- [ ] Volume: test speaker
- [ ] Backup: USB drive có source code
- [ ] Slides: PDF ready, hoặc Google Slides backup
- [ ] Power: cả 2 laptop charged 100%
- [ ] Clock: sync system time (nếu Cloud connect)
- [ ] Screenshot saved: sẵn ảnh demo nếu network lag
- [ ] Exit browser cache: clear, để UI fresh

---

**Good luck! 加油!** 🎯
# HƯỚNG DẪN THỰC HÀNH DEMO CHI TIẾT
## RAT Control V2 - Nhóm 3

---

## 📋 CHECKLIST TRƯỚC KHI TRÌNH BÀY

### Environment Setup (24 giờ trước)

- [ ] **Server C++** đã compile & run trên máy victim
  - `./server.exe` hoặc tích hợp vào system
  - Lắng nghe trên port 8080
  - Test: `netstat -an | grep 8080` → LISTENING

- [ ] **Client React** đã build
  - `npm run build` hoặc `npm start`
  - Chạy trên localhost:3000 hoặc deployed domain
  - Test kết nối: Chrome dev tools → Network tab

- [ ] **Network Config**
  - Victim PC (Server) IP: **192.168.1.50** (ví dụ)
  - Admin PC (Client) IP: **192.168.1.100** (ví dụ)
  - Cùng subnet (192.168.1.0/24)
  - Firewall port 8080 mở hoặc tạm disable

- [ ] **Data Preparation**
  - Chrome profiles đã có password lưu (tạo fake account)
  - WiFi list có password (export từ WiFi quốc phòng)
  - Clipboard có dữ liệu test
  - File test ready (README.txt, sample.docx)

- [ ] **Screen & Audio**
  - HDMI/USB-C cable sẵn sàng
  - Projector/Monitor test → 1920x1080 minimum
  - Loa test (nếu cần sound)
  - 2 laptop: 1 run server, 1 run client (hoặc VM)

---

## 🎮 DETAILED DEMO SCRIPT

### **PREP (5 phút trước trình bày)**

```bash
# Terminal 1: Chạy Server (Máy Victim)
cd /path/to/project
./server.exe
# Output: "WebSocket Server listening on 0.0.0.0:8080"

# Terminal 2: Chạy Client (Máy Admin)
cd /path/to/client
npm start
# Output: "Compiled successfully. Compiled at XX:XX"
# Browser tự mở: http://localhost:3000
```

**Kiểm tra:**
- Client load xong, hiển thị connection screen
- Status: `DISCONNECTED`
- Input box: "Enter server IP"

---

## 🚀 DEMO FLOW (15 PHÚT)

### **PHASE 1: INTRO (1 PHÚT) - Nhất Bảo**

#### Bước 1: Mở Landing Page (30 giây)

```
[Chrome screen share - Show localhost:3000]

Hiển thị:
├─ Header: "RAT Control V2"
├─ Tagline: "Redefine Remote Administration"
├─ Hero section: Ảnh hệ thống
├─ 3 Features:
│  ├─ Hybrid Architecture (C++ + React)
│  ├─ Real-time Control (~30ms latency)
│  └─ Multi-Protocol Support (LAN/Cloud)
└─ Scroll: "Trusted by..." section

Action:
- Scroll smoothly
- Point to key phrases
- No click yet
```

**Audio Script (nói tự nhiên):**
> "Các bạn thấy đây là landing page của ứng dụng. Hệ thống kết hợp 
> C++ backend (tốc độ, system access) với React frontend (UI đẹp).
> Hỗ trợ kết nối LAN trực tiếp hoặc qua Cloud tunnel."

#### Bước 2: Navigate to Connection Screen (30 giây)

```
[Scroll xuống, tìm nút "CONNECT" hoặc nhấn tab "Connection"]

Hiển thị form:
┌─────────────────────────────────────┐
│ Server Connection                   │
├─────────────────────────────────────┤
│                                     │
│ Input: [192.168.1.50      ]        │
│ Status: [ DISCONNECTED    ]        │
│                                     │
│ [Scan Network]  [Connect]           │
│ [Cloud Server]  [Upload Server]     │
│                                     │
│ Thông tin:                          │
│ - Hỗ trợ LAN direct connect         │
│ - Hỗ trợ Cloud (Cloudflare, Ngrok) │
│ - Auto-discover qua UDP broadcast   │
│                                     │
└─────────────────────────────────────┘

Action:
- Clear input field (nếu có text cũ)
- Type: "192.168.1.50"
- Hiện button "Connect" ready to click
```

**Audio Script:**
> "Để kết nối tới server, client nhập IP victim. Chúng ta hỗ trợ:
> - IP trực tiếp LAN (192.168.1.50)
> - Cloud domain nếu server behind NAT
> 
> Hôm nay server chạy trên máy này, IP là 192.168.1.50."

---

### **PHASE 2: ARCHITECTURE (2 PHÚT) - Đông Quân**

#### Bước 1: Kết nối & Show Process List (1 phút)

```
[Nhấn "CONNECT"]

Loading animation: "CONNECTING..."
[Đợi 2-3 giây]

Kết quả: Status → "CONNECTED" (xanh lá)

Tự động hiển thị tab "Processes":
┌────────────────────────────────┐
│ PROCESSES (Auto-loaded)        │
├────────────────────────────────┤
│ PID  │ Name           │ Path   │
├──────┼────────────────┼────────┤
│ 1234 │ explorer.exe   │ C:\... │
│ 5678 │ chrome.exe     │ C:\... │
│ 9999 │ notepad.exe    │ C:\... │
│ 4567 │ server.exe     │ C:\... │
└────────────────────────────────┘
```

**Audio Script (Đông Quân):**
> "Sau khi nhấn Connect, hệ thống ngay lập tức:
> 
> 1. Tạo WebSocket connection từ client → server
> 2. Server nhận handshake, accept connection
> 3. Client tự động gửi lệnh 'list_process'
> 4. Server scan các process đang chạy
> 5. Trả dữ liệu JSON về client
> 6. Client render bảng process
> 
> Toàn bộ quá trình này mất < 1 giây. Đó là lợi ích của WebSocket - 
> real-time communication, không polling."

#### Bước 2: Architecture Diagram (1 phút)

```
[Mở slide hoặc diagram trong app]

Giải thích structure:

CLIENT SIDE (React):
├─ App.tsx
│  ├─ Connection Component
│  ├─ Surveillance tabs
│  ├─ Data Extraction tabs
│  ├─ Network tabs
│  └─ Remote Control overlay
└─ useRemoteControl.ts (Hook)
   ├─ WebSocket logic
   ├─ Command sender
   ├─ Message handler
   └─ State management

SERVER SIDE (C++):
├─ main.cpp (WebSocket listener)
├─ ChatManager (tin nhắn)
├─ DXGIManager (capture desktop)
├─ WebcamEngine (webcam stream)
├─ ReverseShell (terminal)
├─ SystemController (process/app)
└─ UDPDiscovery (LAN broadcast)

Communication:
JSON (command) → WebSocket → Binary (media)
```

**Audio Script:**
> "Architecture của dự án tương đối đơn giản nhưng mạnh mẽ:
> 
> Server là Listener - nó chỉ chờ lệnh từ client.
> Mỗi lệnh là một JSON message qua WebSocket.
> 
> Ví dụ:
> - Client: {\"command\": \"screenshot\"}
> - Server nhận → thực thi DXGIManager.Capture()
> - Trả hình JPEG (binary) về
> - Client decode và hiển thị
> 
> Module modular → dễ extend thêm feature mới."

---

### **PHASE 3: SURVEILLANCE DEMO (4 PHÚT) - Nhất Bảo**

#### Feature 1: Screenshot (1 phút)

```
[Vào tab "SURVEILLANCE"]

[Nhấn nút "SCREENSHOT"]

Timeline:
0s: Nút được highlight, loading spinner
1s: Ảnh load, hiển thị full desktop
2s: Bảng history update (1 item)

Hiển thị:
┌─────────────────────────────────┐
│ SCREENSHOT                      │
├─────────────────────────────────┤
│ [Loading...] (spinner 1-2s)     │
│ Sau đó: [Ảnh desktop victim]    │
│ Resolution: 1920x1080 JPEG      │
│ Timestamp: 14:32:45             │
│                                 │
│ History (Latest):               │
│ ├─ 14:32:45 Screenshot 1        │
│ └─ (nếu click "SCREENSHOT" lại) │
└─────────────────────────────────┘
```

**Audio Script:**
> "Tính năng đầu tiên: **Screenshot**
> 
> Cách hoạt động:
> 1. Client gửi: {\"command\": \"screenshot\"}
> 2. Server thực thi: DXGIManager::Capture()
> 3. DirectX DXGI dump backbuffer của desktop
> 4. Encode JPEG (quality 80, size ~100KB)
> 5. Gửi binary data về client
> 6. Client decode & display
> 
> **Mục đích**: Xem victim đang làm gì, screen share, record, v.v."

#### Feature 2: Screen Stream (1 phút)

```
[Nhấn nút "START SCREEN STREAMING"]

Timeline:
0s: Nút highlight, loading
1s: Video bắt đầu stream
~5s: Có ~5 frame hiển thị

Hiển thị:
┌─────────────────────────────────┐
│ LIVE SCREEN STREAM              │
├─────────────────────────────────┤
│ [Video streaming...]            │
│ [Frame 1]  [Frame 2]  [Frame 3] │
│ FPS: ~10fps (nếu bandwidth ok)   │
│ Latency: 30ms avg               │
│ Status: STREAMING               │
│ [STOP STREAMING]                │
└─────────────────────────────────┘
```

**Audio Script:**
> "Khác với Screenshot (1 ảnh), **Live Stream** là video liên tục.
> 
> Server:
> - Loop capture frame mỗi 100ms (~10fps)
> - JPEG encode & send liên tục
> - Bandwidth: ~1-2 Mbps nếu 10fps
> 
> Client hiển thị như xem YouTube - frames cập nhật liên tục.
> Latency chỉ ~30ms = rất mượt."

#### Feature 3: Webcam Stream (1 phút)

```
[Vào tab "WEBCAM" hoặc nút "START WEBCAM"]

[Nhấn "START WEBCAM"]

Hiển thị:
┌─────────────────────────────────┐
│ WEBCAM STREAM                   │
├─────────────────────────────────┤
│                                 │
│ [Video webcam victim...]        │
│ [Thấy khuôn mặt hoặc phòng]    │
│                                 │
│ Status: STREAMING (webcam)      │
│ [STOP WEBCAM]                   │
│                                 │
│ Label: Đây là camera trên máy   │
│ victim, attacker xem được       │
│                                 │
└─────────────────────────────────┘
```

**Audio Script:**
> "**Webcam Stream** - xem camera laptop/PC của victim.
> 
> Ứng dụng:
> - Xem victim đang làm gì trong phòng
> - Xem mặt, biểu cảm, hành động
> - Thậm chí có thể xem password khi victim nhập
> 
> Rất nguy hiểm cho privacy."

#### Feature 4: Keylogger (1 phút)

```
[Vào tab "KEYLOGGER"]

[Nhấn "START KEYLOGGING"]

Timeline:
- Ngay lập tức status: "Monitoring active..."
- Tại server (máy victim): mở Notepad, gõ text

[Để victim gõ vài từ: "Hello password123"]

Client nhận được:
┌─────────────────────────────────┐
│ KEYLOGGER LOG                   │
├─────────────────────────────────┤
│ [Status: Monitoring active...] │
│                                 │
│ Log:                            │
│ Hello password123               │
│                                 │
│ [STOP KEYLOGGING]               │
│ [CLEAR LOG]                     │
│                                 │
└─────────────────────────────────┘
```

**Audio Script:**
> "**Keylogger** ghi lại mọi phím victim nhấn.
> 
> Server hook Windows keyboard events → mỗi phím add vào buffer.
> Client nhận & display log.
> 
> **Mục đích**: Capture password, PIN, messages - bất cứ gì victim gõ.
> 
> Đây là tính năng **VERY HIGH VALUE** vì capture tất cả user input."

---

### **PHASE 4: DATA EXTRACTION DEMO (5 PHÚT) - Đông Quân**

#### Feature 1: Chrome Passwords (1.5 phút)

```
[Vào tab "DATA EXTRACTION" → sub-tab "CHROME"]

[Nhấn nút "EXTRACT CHROME PASSWORDS"]

Loading: "Extracting... (30 giây - gọi API, giải mã DPAPI)"

Result:
┌──────────────┬────────────────┬──────────────┐
│ Origin       │ Username       │ Password     │
├──────────────┼────────────────┼──────────────┤
│ facebook.com │ victim@gm.com  │ FbPass123!   │
│ gmail.com    │ victim@gm.com  │ GmailP@ss    │
│ bank.vn      │ acc_number     │ B@nk#2024    │
│ github.com   │ victim_github  │ GitH*bToken1 │
└──────────────┴────────────────┴──────────────┘

Show button: "COPY ALL" (copy tất cả vào clipboard)
```

**Audio Script:**
> "**Chrome Password Extraction** - điểm cao nhất.
> 
> Cơ chế:
> 1. Server locate Chrome profile: C:\\Users\\[User]\\AppData\\Local\\Google\\Chrome\\User Data
> 2. Mở SQLite database \"Login Data\"
> 3. Password được mã hóa DPAPI (Windows cipher)
> 4. Server gọi Windows DPAPI API để giải mã (require Admin)
> 5. Return clear-text password
> 6. Client hiển thị bảng
> 
> **Kết quả**: Attacker lấy TẤT CẢ password, hay cai từ Gmail, Banking, Shopping.
> 
> **Đánh giá**: ⭐⭐⭐⭐⭐ (Extremely High Value)"

#### Feature 2: Cookies (1 phút)

```
[Tab "COOKIES"]

Hiển thị:
┌──────────────┬─────────────────┬──────────────────┐
│ Domain       │ Name            │ Value (truncated)│
├──────────────┼─────────────────┼──────────────────┤
│ facebook.com │ c_user          │ 12345678910...   │
│ facebook.com │ xs              │ 9a8b7c6d5e...    │
│ gmail.com    │ SSID            │ AjsfK9s9d2...    │
│ github.com   │ logged_in       │ no...            │
└──────────────┴─────────────────┴──────────────────┘

Show option: Click row → copy cookie value
```

**Audio Script:**
> "**Chrome Cookies** - Session tokens của trình duyệt.
> 
> Tại sao quan trọng?
> - Cookies = session ID authenticated
> - Attacker copy cookie → tạo request with cookie header
> - Truy cập được account (session hijacking)
> 
> Ví dụ: Copy Facebook c_user + xs cookie → truy cập Facebook victim."

#### Feature 3: Payment Methods (1 phút)

```
[Tab "PAYMENT METHODS"]

Click "View Details" cho 1 card:

┌──────────────┬──────────────┬──────────┐
│ Cardholder   │ Card Number  │ Exp      │
├──────────────┼──────────────┼──────────┤
│ VICTIM NAME  │ 4111****3777 │ 12/2026  │
└──────────────┴──────────────┴──────────┘

Expand:
Full Number: 4111111111113777
CVC: 123
Billing: 123 Main St, ...
```

**Audio Script:**
> "**Payment Methods** - thông tin credit card.
> 
> Chrome lưu card info trong SQLite (encrypted DPAPI).
> Server giải mã → client hiển thị số card, CVC, ngày hết hạn.
> 
> Attacker có thể:
> - Fraud online (shop, payment)
> - Sell card data trên dark web (~$100/card)"

#### Feature 4: File Scanner (1.5 phút)

```
[Tab "FILES"]

Input: 
- Extension: ".docx"
- Directory: "All" / "Desktop" / "Documents"
[Nhấn "SCAN"]

Loading: "Scanning C:\\ ... (5-10 giây)"

Result:
┌──────────────┬──────────────────────────┬──────┐
│ Filename     │ Full Path                │ Size │
├──────────────┼──────────────────────────┼──────┤
│ report.docx  │ C:\\Users\\User\\Desk...  │ 250K │
│ resume.docx  │ C:\\Users\\User\\Doc...   │ 80K  │
│ private.txt  │ C:\\Users\\User\\Down...  │ 5K   │
│ project.zip  │ C:\\Users\\User\\Dev...   │ 2.3M │
└──────────────┴──────────────────────────┴──────┘

[Chọn file → nhấn "DOWNLOAD"]
```

**Audio Script:**
> "**File Scanner** tìm file theo extension.
> 
> Ứng dụng:
> - Scan .docx → tìm document cá nhân, công ty
> - Scan .zip → project source code
> - Scan .txt → notes, password, secrets
> - Scan .db → database (credentials)
> 
> Server scan toàn bộ ổ C:\\ (có thể mất vài phút).
> Client download file về máy."

---

### **PHASE 5: NETWORK & MALWARE (2 PHÚT) - Phúc Nguyên**

#### Feature 1: Network Map (1 phút)

```
[Vào tab "NETWORK"]

[Nhấn "SCAN NETWORK"]

Loading: ARP scan + MAC vendor lookup...

Result - Force Graph Visualization:
       [Router - TP-Link]
          /  |  \\
    [PC-1] [PC-2] [Phone]
    (Dell) (ASUS) (Apple)

Hover node → show: IP, MAC, Vendor
```

**Audio Script:**
> "**Network Map** vẽ topologia LAN.
> 
> Server:
> - ARP scan (broadcast who-has → replies)
> - Get MAC → call API vendor lookup
> - Client vẽ graph visualization
> 
> Mục đích: Attacker biết có máy gì trên mạng, chọn target tiếp theo."

#### Feature 2: Domain Blocking (1 phút)

```
[Tab "DOMAIN BLOCKER"]

Input: "google.com"
[Nhấn "BLOCK"]

Result:
- Server modify C:\\Windows\\System32\\drivers\\etc\\hosts
- Add: 127.0.0.1 google.com
- Victim không thể vào google.com nữa

[Show blocked domain list]
┌─────────────────┐
│ blocked domains │
├─────────────────┤
│ google.com      │
│ facebook.com    │
│ antivirus.com   │
└─────────────────┘
```

**Audio Script:**
> "**Domain Blocking** sử dụng HOSTS file injection.
> 
> Tác động:
> - Block antivirus website
> - Block firewall update
> - Block banking (tránh victim check balance)
> 
> Rất hiệu quả, simple, nhưng dễ detect."

---

### **PHASE 6: WRAP UP (1 PHÚT) - Nhất Bảo**

#### Summary Slide

```
╔════════════════════════════════════════╗
║  RAT CONTROL V2 - KEY ACHIEVEMENTS    ║
╠════════════════════════════════════════╣
║                                        ║
║ ✓ 20+ Feature đầy đủ                   ║
║ ✓ Hybrid C++ + React                   ║
║ ✓ Real-time WebSocket (~30ms)         ║
║ ✓ Admin Auto-elevation & Transparent   ║
║ ✓ Multi-protocol (LAN/Cloud)           ║
║                                        ║
║ High-Value Features Implemented:       ║
║ ⭐⭐⭐ Chrome Passwords                   ║
║ ⭐⭐⭐ Payment Methods                    ║
║ ⭐⭐⭐ Browser History                    ║
║ ⭐⭐⭐ WiFi Password Recovery             ║
║ ⭐⭐⭐ File Scanner & Download            ║
║ ⭐⭐⭐ Keylogger                          ║
║ ⭐⭐⭐ Location Tracking                  ║
║ ⭐⭐⭐⭐⭐ Cross-LAN Connectivity           ║
║                                        ║
╚════════════════════════════════════════╝
```

**Audio Script:**
> "Tóm lại, dự án của chúng em:
> 
> - **Công nghệ**: C++ backend (system level) + React frontend (modern UX)
> - **Giao thức**: WebSocket real-time, < 30ms latency
> - **Tính năng**: 20+ đầy đủ, bao hồm mọi mục tiêu cao
> 
> Hệ thống hoàn toàn functional, có thể production-ready.
> 
> Cảm ơn các thầy cô đã lắng nghe. Chúng em sẵn sàng trả lời câu hỏi."

---

## ⚠️ TROUBLESHOOTING

### Problem: Server không connect

**Symptoms:**
- Status: DISCONNECTED
- Error: "WebSocket connection failed"

**Fix:**
1. Check server chạy: `netstat -an | grep 8080`
2. Check firewall: Windows Defender → disable port 8080 hoặc add exception
3. Check IP: `ipconfig` → confirm victim IP
4. Try `localhost:8080` trước khi try LAN IP

### Problem: Screenshot chậm/ảnh bị lag

**Symptoms:**
- Loading spinner lâu (> 5 giây)
- Ảnh quality kém

**Fix:**
1. Reduce JPEG quality (code: `crf 25` → `crf 30`)
2. Reduce resolution (1920x1080 → 1280x720)
3. Check network bandwidth
4. Restart server, reconnect client

### Problem: Chrome password không extract

**Symptoms:**
- Popup "Extraction failed" hoặc trống

**Fix:**
1. Confirm Chrome profile folder exists: `C:\Users\[User]\AppData\Local\Google\Chrome\User Data`
2. Close Chrome (database locked nếu Chrome open)
3. Confirm Server running as Admin
4. Check DPAPI is enabled (thường có by default)

### Problem: Keylogger không capture

**Symptoms:**
- Gõ text trên server nhưng client không thấy

**Fix:**
1. Confirm keylogger started: status = "Monitoring active..."
2. Try gõ text trong Notepad (visible window)
3. Restart server (hook có thể fail)
4. Check browser console cho error

---

## 📋 DEMO CHECKLIST (15 PHÚT TRC)

- [ ] Laptop server (victim) khởi động, display HDMI kết nối
- [ ] Laptop client (admin) sẵn sàng
- [ ] Chrome 2 cái, localhost:3000 load
- [ ] Server WebSocket listening, ready
- [ ] Network: ping 192.168.1.50 → OK
- [ ] Volume: test speaker
- [ ] Backup: USB drive có source code
- [ ] Slides: PDF ready, hoặc Google Slides backup
- [ ] Power: cả 2 laptop charged 100%
- [ ] Clock: sync system time (nếu Cloud connect)
- [ ] Screenshot saved: sẵn ảnh demo nếu network lag
- [ ] Exit browser cache: clear, để UI fresh

---

**Good luck! 加油!** 🎯
