# Phân tích mã độc cơ bản Windows

## I. Windows APIs

Windows API là các chức năng giúp mã độc tương tác với các thư viện của Microsoft. Windows API trong các thư viện rất đầy đủ nên hầu hết các nhà phát triển ứng dụng rất ít khi phải sử dụng các thư viện của bên thứ ba.

Windows API bao gồm thuật ngữ, tên và các quy ước.

Các biến tiêu chuẩn của C thường không được sử dụng, thay vào đó, các tham số, đối số hay các biến của Windows API thường sẽ sử dụng tên riêng và đại diện cho kiểu dữ liệu cụ thể.

Ví dụ: WORD (w), DWORD (dw), Handle (h), Long Pointer (LP)...

<figure><img src="/files/HSOD5LVpCDErVnmfYOe5" alt=""><figcaption></figcaption></figure>

Ta nhận thấy hProcess sẽ là HANDLE

Handle đơn giản là nó tham chiếu đến một đối tượng, giúp API windows xử lý đối tượng đó.

Các đối tượng thường gặp như: window, process, module, menu, file,...

Ví dụ khi gọi hàm CreateWindowExA:

<figure><img src="/files/tFRz6hKZtBD1XaTwKMHg" alt=""><figcaption></figcaption></figure>

Chúng ta sẽ nhận được một "handle" của cái cửa sổ (window) vừa tạo. Và từ đây, khi chúng ta muốn làm gì "đối tượng" cửa sổ này, "đóng cửa" chẳng hạn thì chúng ta cần dùng "handle" của cửa sổ đó và dùng "DestroyWindow"

Mã độc có thể tác động vào các thành phần của hệ điều hành Windows: File System, Files, Data, Windows Registry, Network, Process... rất nhiều, chúng ta cùng tìm hiểu tiếp nha!

### 1. Hệ thống tệp

Hành vi phổ biến nhất của các phần mềm độc hại đó là tạo hoặc sửa đổi các tệp (file) trong hệ điều hành.

Do đó, các hoạt động, các thay đổi của mã độc đối với file sẽ giúp chúng ta có cái nhìn về những gì mã độc đang làm.

Ví dụ: mã độc đọc, copy file chứa tài khoản mật khẩu lưu trong trình duyệt ->....

Microsoft cung cấp các chức năng windows API để truy cập vào hệ thống file.

Một số chức năng:

* CreateFile: được sử dụng để tạo và mở tệp
* ReadFile, WriteFile: được sử dụng để đọc và ghi vào tệp
* CreateFileMapping và MapViewOfFile: tải tệp vào bộ nhớ và thao tác.

Mã độc hay sử dụng API này để thực thi các tệp PE độc hại trong bộ nhớ.

<figure><img src="/files/hNzoHCDryrtSFPw6P8AI" alt=""><figcaption></figcaption></figure>

Ngoài ra còn các phiên bản "mới" của các Windows API, có thêm hậu tố "Ex" chức năng thì khá tương tự, và thường cung cấp các tính năng bổ sung hoặc khả năng mở rộng so với các phiên bản không có hậu tố đó.

Windows không chỉ có các tệp ở trên ổ đĩa thông thường mà còn có các loại file đặc biệt khác: shared files, file namespaces, data streams. Những loại tệp này sẽ không truy cập bằng cách sử dụng đường dẫn gồm ký tự ổ đĩa và tên thư mục (ví dụ: C:\Users) như bình thường.

Shared files hay các tệp được chia sẻ lưu trữ trên mạng sẽ truy cập bằng các tiền tố: `\\?\`

Ví dụ: `\\?\serverName\Share`

File namespaces: gồm các tệp truy cập thông tin qua những "không gian tên". Mã độc có thể truy cập vào thiết bị vật lý và đọc ghi chúng như một tệp. Ví dụ: Mã độc truy cập vào \\\\.\PhysicalDisk1 để sửa đổi đĩa.

### 2. Windows Registry

Hệ điều hành và các phần mềm lưu các thông tin cài đặt, cấu hình tại Windows Registry. Đây cũng là thành phần mã độc sẽ khai thác rất nhiều bởi các thông tin được lưu tại đây rất có giá trị. Vì vậy tương tự với hệ thống tệp, các tác động của mã độc đối với Windows Registry cũng sẽ "nói lên" chức năng hay hành vi của mã độc là gì.

Các phiên bản Windows ban đầu lưu các thông tin cấu hình trong tệp với định dạng `.ini`. Về sau trên Windows NT, các thông tin được lưu dưới dạng tệp nhị phân và nằm trong thư mục `%SystemRoot%\System32\Config\`.

Các thông tin cụ thể bao gồm: networking, driver, startup, user account..v.v

Mã độc thường sử dụng Windows Registry để lấy thông tin và “trú ngụ” bằng cách lưu thông tin, cấu hình, dữ liệu hoặc để gia tăng khả năng tồn tại như đăng ký tự động khởi động cùng hệ thống.

Windows Registry thực sự là một “miếng mồi lớn” cho các phần mềm độc hại.

Hai root key được mã độc sử dụng nhiều nhất đó là HKLM và HKCU.

Thực ra khóa HKCU được lưu trữ trong HKEY\_USERS\SID, trong đó SID là mã định danh của user (người dùng) hiện tại đang đăng nhập.

### 3. Registry Functions

Làm sao mã độc có thể đăng ký một key run để khởi động cùng hệ điều hành?

Mã độc thường sử dụng các Registtry function, Windows API để sửa đổi registry. Một số API phổ biến đó là:

* RegOpenKeyEx: Mở registry để chỉnh sửa và truy vấn. Có nhiều hàm cho phép bạn truy vấn và chỉnh sửa khóa đăng ký mà không cần mở trước
* RegGetValue: trả về dữ liệu (data) cho một giá trị (Value)
* RegSetValueEx: thêm một giá trị (value) mới và dữ liệu (data)

Và còn nhiều các API khác nhé..

Không phải chỉ dùng Windows API hay Regedit mới có thể cấu hình cho Registry. Registry còn có "script" riêng, các file với định dạng .reg chứa các thông tin có thể dễ dàng đọc và chỉnh sửa cấu hình.

<figure><img src="/files/O79CdxK0EEHB2Q5kp56W" alt=""><figcaption></figcaption></figure>

Người dùng chỉ cần "double-clicks" vào file .reg và nó sẽ tự động thiết lập các giá trị được cấu hình.

### 4. Netwworking APIs

Phần mềm độc hại hầu hết sử dụng các chức năng liên quan đến mạng để thực hiện các hành vi, ví dụ như: kill switch malware, download file, data transaction...

Windows cung cấp nhiều tùy chọn về mạng, trong số đó, mã độc có thể sử dụng mô hình mạng sockets

Các chức năng mạng của socket được tích hợp trong thư viện `Winsock`, chủ yếu trong `ws2_32.dll` bao gồm:

* socket: tạo một socket
* blind: gắn một socket vào một cổng cụ thể
* listen: cho biết socket sẽ lắng nghe các kết nối đến
* accept: mở kết nối và chấp nhận kết nối
* connect: mở kết nối
* recv: nhận dữ liệu
* send: gửi dữ liệu

Ngoài API Winsock, có một API "cao cấp" hơn đó là API WinINet. Các hàm chức năng nằm trong thư viện Wininet.dll. Nếu mã độc có import dll này thì chứng tỏ chúng đang sử dụng các API mạng cao cấp này.

API WinINet giúp triển khai các giao thức ví dụ: HTTP, FTP thuộc lớp ứng dụng. Mã độc mở các kết nối sử dụng các API:

* InternetOpen: Khởi tạo kết nối internet
* InternetOpenUrl: Kết nối từ một URL
* InternetReadFile: Đọc dữ liệu từ tệp được tải xuống từ Internet.&#x20;

## II. Malware Behavior

### 1. Downloaders

Hành vi có thể nói là phổ biến nhất của mã độc hiện giờ đó là downloader. Hành vi này đóng vai trò giúp kẻ tấn công có thể tải từng phần của mã độc hoặc tải xuống nhiều mã độc phục vụ mục đích tấn công.

Downloaders thường sử dụng các windows API internet để hỗ trợ tải xuống như:

> WinExec, FtpPutFile, HttpOpenRequest, HttpSendRequest, HttpSendRequestEx, InternetCloseHandle, InternetOpen, InternetOpenUrl, InternetReadFile, InternetReadFileEx, InternetWriteFile, URLDownloadToFile, URLDownloadToCacheFile, URLOpenBlockingStream, URLOpenStream, Accept, Bind, Connect, Gethostbyname, Inet\_addr, Recv, Send, WSAStartup, Gethostname, Socket, WSACleanup, Listen, ShellExecute, ShellExecuteEx, DnsQuery\_A, DnsQueryEx, WNetOpenEnum, FindFirstUrlCacheEntry, FindNextUrlCacheEntry, InternetConnect, InternetSetOption, WSASocket, Closesocket, WSAIoctl, ioctlsocket, HttpAddRequestHeaders…

Ngoài việc sử dụng các API thì mã độc còn có thể thực hiện hành vi downloader bằng cách lợi dụng các tính năng của phần mềm khác như: chrome, edge, powershell, certutil, regsvr32...

### 2. Dropper

Ngoài việc sử dụng downloader để trốn tránh anti-virus, một số mã độc cũng có thể cài đặt và thực thi mã độc bằng cách drop mã độc từ trong resource của chúng.

Các API mã độc sử dụng:

> CreateFile, CreateFileEx, WriteFile, GetModuleFileName, FindResource, LoadResource , LockResource , SizeofResource…

### 3. Launchers/Loader

Đây là hành vi thực thi hoặc cài đặt mã độc ngay khi chúng được tải xuống (hành vi này thường đi kèm với downloader) hoặc thực thi sau đó, khi có điều kiện thích hợp chẳng hạn.

Các Windows API mã độc có thể dùng để thực hiện hành vi này:

> ShellExecute, ShellExecuteEx, WinExec, CreateProcess, CreateProcessAsUser, CreateRemoteThread, CreateRemoteThreadEx, CreateThread…

### 4. Reverse Shells

Hành vi này thường sử dụng cmd.exe nhằm giúp kẻ tấn công có thể điều khiển, thực hiện các lệnh từ xa trên máy cục bộ.

Hacker thường dùng Netcat hoặc sử dụng kỹ thuật đa luồng (multithreaded) sử dụng cmd.

Windows API sử dụng chủ yếu là CreateProcess, tham số bao gồm tiến trình cmd.exe cùng với handle kết nối với socket được nằm trong cấu trúc <mark style="color:red;">STARTUPINFO</mark>. Cùng với kỹ thuật đa luồng và tạo ra các pipe để thu nhận các đầu vào, đầu ra tiêu chuẩn (stdin, stdout, error)

Các API đặc trưng của hành vi:

> WSAStartup, WSASocket, WSAConnect, CreateProcess, CreatePipe, PeekNamedPipe, CreateThread,...

### 5. Remote Access

Đây là hành vi hoặc cũng có thể gọi là tính năng của mã độc giúp kẻ tấn công có thể điều khiển một hoặc nhiều máy tính từ xa. Thông thường hành vi này được thực hiện trên các cổng kết nối tiêu chuẩn như 80 hay 443, sử dụng các API liên quan đến gửi nhận dữ liệu.

Các API mã độc sử dụng để thực hiện hành vi:

> InternetOpen, InternetOpenUrl, InternetReadFile, InternetReadFileEx, recv, connect, send, socket, WSAStartup, HttpSendRequest, HttpOpenRequest, HttpSendRequestEx, HttpAddRequestHeaders...

### 6. Info/Credential Stealers

Thông tin người dùng bao gồm cả thông tin xác thực tài khoản mật khẩu hay cookies là miếng mồi không thể bỏ qua của mã độc. Vì vậy hành vi đánh cắp thông tin này đã là hành vi rất phổ biến của chúng.

Để đánh cắp thông tin, mã độc thường có các hành vi cụ thể như:

* Đợi người dùng đăng nhập vào máy (log in) để đánh cắp thông tin user
* Dump thông tin từ windows, process(lsass.exe) lấy cắp mã LM và NTLM hash để sử dụng cho cuộc tấn công pass-the-hash. Các công cụ mã độc có thể lợi dụng đó là Pwdump, PSH, Minikatz Toolkit. (sử dụng các API đọc bộ nhớ)
* Ghi lại cá thông tin (logger) nhập từ bàn phím, chuột, màn hình, micro, camera... (sử dụng các API quản lý phần cứng, API hook)
* Đọc dữ liệu cookies, user data, login data của các trình duyệt (sử dụng các api đọc file)
* Lấy dữ liệu trong clipboard (sử dụng các api quản lý clipbroad data)

Các API mã độc có thể sử dụng:&#x20;

> LoadLibrary, GetProcAddress, GetModuleHandle, AttachThreadInput, CallNextHookEx, GetAsyncKeyState, GetClipboardData, GetDC, GetDCEx, GetForegroundWindow, GetKeyboardState, GetKeyState, GetMessageA, GetRawInputData, GetWindowDC, MapVirtualKeyA, MapVirtualKeyExA, PeekMessageA, PostMessageA, PostThreadMessageA, RegisterHotKey, RegisterRawInputDevices, SendMessageA, SendMessageCallbackA, SendMessageTimeoutA, SendNotifyMessageA, SetWindowsHookExA, SetWinEventHook, UnhookWindowsHookEx, BitBlt, StretchBlt, GetKeynameText, waveInStart, waveInAddBuffer, waveInOpen, CreateFile, CreateFileEx, OpenFile, ReadFile, ReadfileEx, CryptUnprotectData…

### 7. Persistence

Hầu hết mã độc khi xâm nhập được vào hệ thống sẽ cố gắng tạo ra sự bền bỉ để tồn tại trên hệ thống lâu nhất có thể.

<figure><img src="/files/EHjfpdbiv9G0afzmPRxL" alt=""><figcaption></figcaption></figure>

Có rất nhiều cách để mã độc thực hiện hành vi này:

* sử dụng windows registry "autoruns giúp tự động thực thi mã độc khi khởi động hệ thống. Key quốc dân mã độc thường dùng chắc chắn là: `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run`
* Sử dụng Task Scheduler, WMI: đây đều là các tính năng của windows cung cấp khả năng tự khởi chạy cho mã độc. (sử dụng COM)
* Sử dụng cơ chế DLL Hijacking: thay vì mã độc tự chạy dưới tiến trình của nó thì chúng sẽ tìm cách để "được tải" bởi các tiến trình chuẩn hoặc phần mềm đã được xác thực.
* Sử dụng cơ chế Injection (sử dụng các API tác động đến process, memory, thread).
* Copy chính nó vào các thư mục system, user, windows, startup... (sử dụng các API liên quan đến lấy đường dẫn đưaọc biệt, các API copyfile)

Các API mã độc hay sử dụng:

> RegCreateKeyEx, RegCreateKey, RegSetValueEx, RegSetKeyValue, RegOpenKeyEx, RegReplaceKey, RegRestoreKey, CoCreateInstance, GetWindowsDirectory, SHGetFolderPath, SHGetSpecialFolderPath, SHGetFolderPathAndSubDir, , GetModuleBaseName, GetModuleFileName, GetModuleFileNameEx, GetTempPath, GetSystemDirectory, GetEnvironmentStrings, ExpandEnvironmentStrings, GetLongPathName, GetTempPath2, GetAppContainerFolderPath, GetCurrentDirectory, GetDefaultUserProfileDirectory, GetProfilesDirectory, GetUserProfileDirectory, GetAllUsersProfileDirectory, ExpandEnvironmentStringsForUser, CopyFile, CopyFileEx, CreateFileMappingA, CreateProcessA, CreateRemoteThread, CreateRemoteThreadEx, GetModuleHandleA, GetProcAddress, GetThreadContext, HeapCreate, LoadLibraryA, LoadLibraryExA, LocalAlloc, MapViewOfFile, MapViewOfFile2, MapViewOfFile3, MapViewOfFileEx, OpenThread, Process32First, Process32Next, QueueUserAPC, ReadProcessMemory, ResumeThread, SetProcessDEPPolicy, SetThreadContext, SuspendThread, Thread32First, Thread32Next, Toolhelp32ReadProcessMemory, VirtualAlloc, VirtualAllocEx, VirtualProtect, VirtualProtectEx, WriteProcessMemory, VirtualAllocExNuma, VirtualAlloc2, VirtualAlloc2FromApp, VirtualAllocFromApp, VirtualProtectFromApp, CreateThread, WaitForSingleObject, OpenProcess, OpenFileMappingA, GetProcessHeap, GetProcessHeaps, HeapAlloc, HeapReAlloc, GlobalAlloc, AdjustTokenPrivileges, CreateProcessAsUserA, OpenProcessToken, CreateProcessWithTokenW, NtAdjustPrivilegesToken, NtAllocateVirtualMemory, NtContinue, NtCreateProcess, NtCreateProcessEx, NtCreateSection, NtCreateThread, NtCreateThreadEx, NtCreateUserProcess, NtDuplicateObject, NtMapViewOfSection, NtOpenProcess, NtOpenThread, NtProtectVirtualMemory, NtQueueApcThread, NtQueueApcThreadEx, NtQueueApcThreadEx2, NtReadVirtualMemory, NtResumeThread, NtUnmapViewOfSection, NtWaitForMultipleObjects, NtWaitForSingleObject, NtWriteVirtualMemory, RtlCreateHeap, LdrLoadDll, RtlMoveMemory, RtlCopyMemory, SetPropA, WaitForSingleObjectEx, WaitForMultipleObjects, WaitForMultipleObjectsEx, KeInsertQueueApc, Wow64SetThreadContext, NtSuspendProcess, NtResumeProcess, DuplicateToken, NtReadVirtualMemoryEx, CreateProcessInternal…

### 8. Evasion

Không phải mã độc nào sau khi thực thi lần đầu cũng thực thi hành vi độc hại hay cố gắng duy trì tồn tại trên hệ thống, nên một số mã độc còn có hành vi che dấu, thực thi khi có điều kiện cụ thể, xóa dấu vết

Một số hành vi cụ thể như:

* Tự xóa các thành phần của mã độc sau khi thực thi (sử dụng các API xóa file, key, termiante process)
* Thực hiện các lệnh sleep hoặc delay execution.
* Debug Evasion

Các API liên quan đến hành vi:

> CreateFileMappingA, DeleteFileA, GetModuleHandleA, GetProcAddress, LoadLibraryA, LoadLibraryExA, LoadResource, SetEnvironmentVariableA, SetFileTime, Sleep, WaitForSingleObject, SetFileAttributesA, SleepEx, NtDelayExecution, NtWaitForMultipleObjects, NtWaitForSingleObject, CreateWindowExA, RegisterHotKey, timeSetEvent, WaitForSingleObjectEx, WaitForMultipleObjects, WaitForMultipleObjectsEx, SetWaitableTimer, CreateTimerQueueTimer, CreateWaitableTimer, SetWaitableTimer, SetTimer, Select, ImpersonateLoggedOnUser, SetThreadToken, DuplicateToken, CreateProcessInternal, TimeGetTime, ExitProcess, TerminateProcess, GetTickCount.

### 9. Anti Virtualization/Sandbox, Debugging

Để che dấu các hành vi khác thì mã độc sẽ cố gắng phát hiện có đang chạy trong môi trường debug, sandbox hay không.

Các API mã độc sử dụng thường là các API lấy thông tin hệ thống:&#x20;

> CreateToolhelp32Snapshot, GetLogicalProcessorInformation, GetLogicalProcessorInformationEx, GetTickCount, OutputDebugStringA, CheckRemoteDebuggerPresent, Sleep, GetSystemTime, GetComputerNameA, SleepEx, IsDebuggerPresent, GetUserNameA, NtQueryInformationProcess, ExitWindowsEx, FindWindowA, FindWindowExA, GetForegroundWindow, GetTickCount64, QueryPerformanceFrequency, QueryPerformanceCounter, GetNativeSystemInfo, RtlGetVersion, GetSystemTimeAsFileTime, CountClipboardFormats, GetACP, GetOEMCP, GetCPInfo, GlobalMemoryStatusEx, GetPhysicallyInstalledSystemMemory...

### 10. Privilege Escalation

Đặc quyền của người dùng rất quan trọng đối với mã độc, vì vậy nếu chúng được thực thi dưới đặc quyền user thường (không phải administrator hay system) thì mã độc sẽ cố gắng nâng đặc quyền để thực hiện các hành vi khác yêu cầu quyền cao hơn.&#x20;

Để thực hiện hành vi này, mã độc thường sử dụng API:&#x20;

> OpenProcessToken, SeDebugPrivilege, AdjustTokenPrivileges, LookupPrivilegeValue…

### 11. Encrypt File (Ransomware)

Hành vi mã hóa file gắn liền với các API đặc trưng để xử lý các thuật toán mã hóa, vì vậy mã độc tống tiền thường sử dụng các hàm:

> CryptAcquireContextA, EncryptFileA, CryptEncrypt, CryptDecrypt, CryptCreateHash, CryptHashData, CryptDeriveKey, CryptSetKeyParam, CryptGetHashParam, CryptSetKeyParam, CryptDestroyKey, CryptGenRandom, DecryptFileA, FlushEfsCache, GetLogicalDrives, GetDriveTypeA, CryptStringToBinary, CryptBinaryToString, CryptReleaseContext, CryptDestroyHash, EnumSystemLocalesA…

### 12. Enumeration

Một số hành vi khác của mã độc yêu cầu chúng phải liệt kê các thông tin của hệ thống, ví dụ: lây file cần liệt kê danh sách file, thư mục, Inject thì cần liệt kê danh sách các process chẳng hạn.

Do đó khi thấy mã độc sử dụng các API liệt kê chúng ta cần chú ý:&#x20;

> CreateToolhelp32Snapshot, EnumDeviceDrivers, EnumProcesses, EnumProcessModules, EnumProcessModulesEx, FindFirstFileA, FindNextFileA, GetLogicalProcessorInformation, GetLogicalProcessorInformationEx, GetModuleBaseNameA, GetSystemDefaultLangId, GetVersionExA, GetWindowsDirectoryA, IsWoW64Process, Module32First, Module32Next, Process32First, Process32Next, ReadProcessMemory, Thread32First, Thread32Next, GetSystemDirectoryA, GetSystemTime, ReadFile, GetComputerNameA, VirtualQueryEx, GetProcessIdOfThread, GetProcessId, GetCurrentThread, GetCurrentThreadId, GetThreadId, GetThreadInformation, GetCurrentProcess, GetCurrentProcessId, SearchPathA, GetFileTime, GetFileAttributesA, LookupPrivilegeValueA, LookupAccountNameA, GetUserNameA, RegEnumKeyExA, RegEnumValueA, RegQueryInfoKeyA, RegQueryMultipleValuesA, RegQueryValueExA, NtQueryDirectoryFile, NtQueryInformationProcess, NtQuerySystemEnvironmentValueEx, EnumDesktopWindows, EnumWindows, NetShareEnum, NetShareGetInfo, NetShareCheck, GetAdaptersInfo, PathFileExistsA, GetNativeSystemInfo, RtlGetVersion, GetIpNetTable, GetLogicalDrives, GetDriveTypeA, RegEnumKeyA, WNetEnumResourceA, WNetCloseEnum, FindFirstUrlCacheEntryA, FindNextUrlCacheEntryA, WNetAddConnection2A, WNetAddConnectionA, EnumResourceTypesA, EnumResourceTypesExA, GetSystemTimeAsFileTime, GetThreadLocale, EnumSystemLocalesA…

## III. Basic Static Analysis

1. Quét Virus: sử dụng các hệ thống AI có sẵn để kiểm tra qua xem
2. Kiểm tra mã bằm (hash): sử dụng công cụ như Certutil có sẵn của windows với những tính toán mã băm phổ biến như MD5, SHA. Ngoài ra có thể sử dụng các công cụ ngoài như: md5deep, CFF Explorer... Sau khi có mã băm của tệp, ta so sánh với mã băm của nhà cung cấp trên trang web chính thức. Nếu khác nhau thì file ta tải về đã khác với file gốc và có thể liên quan đến việc file đã drop mã độc trong đó...
3. Tìm chuỗi (string): giúp chúng ta có thể hình dung ra được các tính năng của chúng. Nhưng lưu ý rằng các phần mềm độc hại thường che dấu các chuỗi đáng ngờ nên chúng thường có ít chuỗi hơn và không có ý nghĩa gì về chuỗi ấy cả.
4. Kiểm tra trình đóng gói (packer): Một số chương trình sử dụng các trình đóng gói để giảm kích thước phần mềm, trong đó có cả phần mềm độc hại, ngoài giảm kích thước, các phần mềm độc hại còn dùng với mục đích che dấu các đoạn mã độc hại.

   <figure><img src="/files/6YB73ShB8QOL1tcL0ENE" alt=""><figcaption></figcaption></figure>
5. Kiểm tra các thư viện được liên kết (import): Thông tin hữu ích giúp phân tích tệp thực thi đó là các thư viện và các hàm mà tệp sử dụng. Để thực hiển các hành vi độc hại, mã độc thường sẽ sử dụng các Windows API tương ứng. Khi biết được chương trình sử dụng thư viện hay các hàm nào chúng ta có thể đoán được hành vi của chúng.

   <figure><img src="/files/NDiTRKd5hna9INzcsIaA" alt=""><figcaption></figcaption></figure>
6. Thông tin cấu trúc của tệp thực thi (FE format)

   <figure><img src="/files/5cQGSWABo2d2bAGZjnbU" alt=""><figcaption></figcaption></figure>

***

Nguồn:

1. <https://whitehat.vn/threads/phan-tich-ma-doc-windows-co-ban-phan-i.16951/>
2. Tìm hiểm về Registry? <https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry>
3. Tìm hiểu về Windows APIs <https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-api-list>
4. Làm chủ Windows Registry: <https://sec.vnpt.vn/2023/05/lam-chu-windows-register-part-1/> ; <https://sec.vnpt.vn/2023/06/lam-chu-windows-register-part-2/>
5.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/mal/phan-tich-ma-doc-co-ban-windows.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
