> For the complete documentation index, see [llms.txt](https://twentysick.gitbook.io/twentysick/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://twentysick.gitbook.io/twentysick/sharing/series-phat-minh-lai-cai-banh-xe/windows-native-application/lam-sao-de-tao-ra-windows-native-application.md).

# Làm sao để tạo ra Windows Native Application?

Giống như các SubSystem khác, thay vì sử dụng các hàm WinMain, Main,... để khai báo giá trị EntryPoint, Native Application sử dụng NtProcessStartup để khai báo.

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FSsuM86t7Sgil1VE0k9f5%2Fimage10.png?alt=media&amp;token=f4cee509-6091-4a02-ae17-85da30dd8de3" alt=""><figcaption></figcaption></figure>

Ở đây, để viết 1 chương trình là "Native Application", mình sử dụng Visual Studio 2022 và trình biên dịch MSVC

## Tạo Project (Console App)

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FBbbT85RlSReJQgfe1LHK%2Fimage.png?alt=media&amp;token=d09b21ba-d379-4b15-ad0d-8f78cb0e8516" alt=""><figcaption></figcaption></figure>

## Chuẩn bị

### Library

Clone repo: <https://github.com/Fyyre/ntdll>

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2F3u0w8FYwahvTH9CERY6r%2Fimage12.png?alt=media&amp;token=85fd0a28-2694-4fd2-9f94-bd1995a3d5c0" alt=""><figcaption></figcaption></figure>

Sau khi clone repo về, *sử dụng Developer Command Prompt (hoặc Developer PowerShell) của Visual Studio* và lệnh `nmake msvc` để build thư viện (ntdll64.lib và ntdll86.lib)

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FRPjHM3YiLZN6sLXhpVlh%2Fimage.png?alt=media&amp;token=3078f677-b40c-4aab-8fb1-14d324a691ca" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FgahqC5QsbW4ydYCNwOaa%2Fimage13.png?alt=media&amp;token=84c31d28-e16f-416d-9b99-3925c0352459" alt=""><figcaption></figcaption></figure>

### Header

Sử dụng bộ headers trong repo `phnt` (repo này tổng hợp các Native API và được sử dụng cho công cụ System Informer (trước là Process Hacker), đến nay vẫn được update)

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FuxvEIHZFrXSKYx5ERwTI%2Fimage11.png?alt=media&amp;token=174fd7b2-2ecd-4298-a181-db0c2b1dcee6" alt=""><figcaption></figcaption></figure>

Clone repo: <https://github.com/winsiderss/phnt>

Đường dẫn tới repo đã clone sẽ được sử dụng để config project

### Config Project

#### SubSystem

{% code overflow="wrap" %}

```
Properties
↳ Linker
  ↳ System
    ↳ SubSystem
      ↳ NATIVE
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FInTgUgJuAyQcIt49AYkt%2Fimage.png?alt=media&amp;token=49830691-6319-425f-b44c-4702e9c9aabf" alt=""><figcaption></figcaption></figure>

#### Additional Dependencies:&#x20;

{% code overflow="wrap" %}

```
Properties
↳ Linker
  ↳ Input
    ↳ Additional Dependencies
      ↳ Thêm đường dẫn tới file ntdll64.lib (Trên môi trường x86 làm tương tự)
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FAsowQDklHI02D7DgK42E%2Fimage.png?alt=media&amp;token=ae6ac576-98e2-4018-b559-493b7c422719" alt=""><figcaption></figcaption></figure>

#### Ignore All Default Libraries:&#x20;

{% code overflow="wrap" %}

```
Properties
↳ Linker
  ↳ Input
    ↳ Ignore All Default Libraries
      ↳ YES (/NODEFAULTLIB)
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2Fdie6BSbF2LrU5PKk9Tht%2Fimage.png?alt=media&amp;token=caab9576-0d62-4fd6-a90a-e3e762588cf8" alt=""><figcaption></figcaption></figure>

#### Additional Include Directories:&#x20;

{% code overflow="wrap" %}

```
Properties
↳ C/C++
  ↳ General
    ↳ Additional Include Directories
      ↳ Thêm đường dẫn tới folder chứa các header phnt
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2Fvzs2OzuhY5Kzu2EvWbOX%2Fimage.png?alt=media&amp;token=8cad7ba8-a784-46fd-ab39-87909c9f8572" alt=""><figcaption></figcaption></figure>

#### Basic Runtime Checks:

{% code overflow="wrap" %}

```
Properties
↳ C/C++
  ↳ Code Generation
    ↳ Basic Runtime Checks
      ↳ Default
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FtA0ZaLlqUitOdntnJLtI%2Fimage.png?alt=media&amp;token=ab0fe25a-9cfc-48cf-aae8-54c4a4ab0369" alt=""><figcaption></figcaption></figure>

#### Security Check:

{% code overflow="wrap" %}

```
Properties
↳ C/C++
  ↳ Code Generation
    ↳ Security Check
      ↳ Disable Security Check (/GS-)
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FLPSGNTKPyiMIhFKGPCDG%2Fimage.png?alt=media&amp;token=e3752ba8-13ac-4fd2-9e28-79a64722b267" alt=""><figcaption></figcaption></figure>

#### Debug Information Format:

{% code overflow="wrap" %}

```
Properties
↳ C/C++
  ↳ General
    ↳ Debug Information Format
      ↳ Program Database (/Zi)
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2F8EMc99UEPav1nvVBhLZt%2Fimage.png?alt=media&amp;token=d29417af-e23d-4db4-be71-68dab9de3ab5" alt=""><figcaption></figcaption></figure>

#### SDL checks:

{% code overflow="wrap" %}

```
Properties
↳ C/C++
  ↳ General
    ↳ SDL checks
      ↳ No (/sdl-)
```

{% endcode %}

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FKj3uNomXmZnZdeQlZ1mD%2Fimage.png?alt=media&amp;token=e2cc11ef-d7c0-4bd6-aee2-56b8828f396e" alt=""><figcaption></figcaption></figure>

## Code

{% code overflow="wrap" %}

```c
/*
Source: 
https://github.com/zodiacon/winnativeapibooksamples/blob/main/Chapter03/SimpleNative/SimpleNative.cpp
*/

#include <phnt_windows.h>
#include <phnt.h>

extern "C" int swprintf_s(
	wchar_t* _Buffer, USHORT size,
	wchar_t const* _Format, ...);

NTSTATUS NtProcessStartup(PPEB peb) {
	RTL_OSVERSIONINFOEXW osvi = { sizeof(osvi) };
	RtlGetVersion(&osvi);
	WCHAR text[256];
	swprintf_s(text, ARRAYSIZE(text), L"Windows version: %d.%d.%d\n",
		osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber);

	UNICODE_STRING str;
	RtlInitUnicodeString(&str, text);
	NtDrawText(&str);

	LARGE_INTEGER li;
	li.QuadPart = -10000000 * 10;
	NtDelayExecution(FALSE, &li);

	return STATUS_SUCCESS;
}
```

{% endcode %}

## Biên dịch và thực thi

Sau khi code, build thành file thực thi, copy file vừa build vào thư mục *C:\Windows\System32*

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FggRlMbGR695q99WYopSS%2Fimage.png?alt=media&amp;token=3d36e481-8057-4e22-8fc4-76b2f7157d58" alt=""><figcaption></figcaption></figure>

Sửa RegistryKey *HKLM\SYSTEM\CurrentControlSet\Control\Session Manager*, thêm tên file vào giá trị của *BootExecute*

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FEy5ogmeDR3bIFSPLtomB%2Fimage.png?alt=media&amp;token=57254738-7760-4a20-b5e3-b6ad67c0da66" alt=""><figcaption></figcaption></figure>

Restart máy và chương trình sẽ được thực thi trong quá trình boot

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FXb23thRYeCsTHPfyBkqk%2Fimage.png?alt=media&amp;token=208d0b53-94b2-4e31-9bde-8cd5fb588930" alt=""><figcaption></figcaption></figure>

## Tool toys?

Bên cạnh đó, file có thể thực thi thông qua sử dụng kết hợp 2 hàm *RtlCreateProcessParameters* và *RtlCreateUserProcess*. Có thể tham khảo file *nativerun* trong repo *winnativeapibooksamples* của Zodiacon (đây là tác giả của quyển sách *Windows Native API Programming* và repo chính là các sample cho các chapter trong sách)

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FBYnTmBwy2BWkZYFt2HKQ%2Fimage17.png?alt=media&amp;token=356a79a1-9bb6-41b6-a169-18cf6392afac" alt=""><figcaption></figcaption></figure>

Ví dụ ***Native Application*** thực hiện Process Injection, gọi calc.exe

<figure><img src="https://3579869334-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqj23826F0xExp2MNexN5%2Fuploads%2FVF7xE2yC70EKhvk2AQiw%2Fimage18.png?alt=media&amp;token=11dc4d84-c1f8-40d9-af0e-4f216d6e2e15" alt=""><figcaption></figcaption></figure>
