Trao đổi với tôi

http://www.buidao.com

12/19/16

[System Info] Inside Native App

Inside_Native_App

Dowload : https://www.fshare.vn/file/7CV3KAF2O2UW

Introduction

Tôi chắc chắn rằng, chúng ta ai cũng quen thuộc với Windows NT, bạn có thể nhận ra rằng: API mà những ứng dụng Win32 không dùng là những API NT thực. Những môi trường NT như POSIX, OS/2 và Win32 giao tiếp với các ứng dụng “khách” (client) bằng các API mà nó sở hữu, các Native API.

Không biết các bạn có nghe qua các ứng dụng native (native applications) hay chưa, nó rất gần với chúng ta, nó tồn tại trên nền NT, nhưng lại không phải là những ứng dụng “khách” của bất kỳ môi trường nào. Chúng dùng NT Native API và không sử dụng những APIs mà để giao tiếp với WIN32.

Một câu hỏi đặt ra là: Vì sao chúng ta cần những ứng dụng NATIVE?
Bất kỳ một chương trình nào mà khởi động trước khi WIN32 SUBSYSTEM được khởi động thì đó là những ứng dụng NATIVE. Điển hình là ứng dụng “autochk”, một trình kiểm tra đĩa. Vốn dĩ môi trường điều hành server của Win32, CSRSW.EXE cũng là một ứng dụng NATIVE.

Trong bài viết này tôi sẽ mô tả làm cách nào tạo ra những ứng dụng NATIVE và chúng hoạt động như thế nào. Tôi cũng cung cấp mã nguồn cho ứng dụng NATIVE này, bạn dễ dàng cài đặt và nó sẽ hiện ra trên màn hình xanh xanh lúc boot một chuỗi tùy ý bạn.

How Does Autochk Get Executed

Autochk chạy giữa thời điểm boot của NT và thời điểm hệ thống bắt đầu load các drivers, và khi chế độ phân trang (PAGING) được cho phép. Trong lúc sequence Session Manager (smss.exe) khởi động thì nó sẽ lấy môi trường phiên người dùng và lúc này những chương tình khác không được hoạt động. Trong khóa sau:
The HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute Giá trị tại đây là MULTI_SZ chứa đựng tên và các tham số của chương trình mà được thực thi bởi Session Manager, và đây cũng là nơi Autochk  được cài đặt. Bạn mở trình sọan thảo registry ra và tìm vào khóa trên bạn sẽ thấy phần Data:

“Autocheck Autochk *”

Session Manager sẽ tìm kiếm trong thư mục \system32 tìm kiếm các file có thể thực thi trong giá trị đó. Khi Autochk thực thi thì không có file nào được được mở, vì thế nó có thể thao tác trên đĩa dưới dạng thô “raw”. Điều này sẽ không thể làm được sau quy trình autochk này.

 

Building Native Applications

Microsoft không chỉ dẫn chúng cách tạo ra những ứng dụng như vậy, nhưng trình tiện ích NT DDK biết cách làm thế nào để tạo ra những ứng dụng NATIVE. Bạn có thể đọc thêm thông tin trong một file NGUỒN mà định nghĩa ứng dụng, giống như việc sẽ được làm giống như trình điều khiển thiết bị. Tuy nhiên thay vì tạo ra một driver , thì bạn yêu cầu nó tạo ra ưng dụng NATIVE trong FILE NGUỒN sau:

TARGETTYPE=PROGRAM
Trình tiện ích BUILD đó dùng tệp makefile để tham khảo, \ddk\inc\makefile.def, nó sẽ tìm kiếm file nt.lib để trợ giúp biên dịch ra ứng dụng NATIVE. Không may là Microsoft đã không ship tệp này theo DDK ( Server 2003 DDK, tôi nghi ngờ rằng nếu bạn liên kết version đó, ứng dụng NATIVE của bạn sẽ không họat động trên XP, 2000). Tuy nhiên, chúng ta có thể tiến hành xây dựng được bằng cách include một dòng trong tệp makefile.def và ghi đè sự chọn lựa nt.lib bằng cách thiết lập Visual C++'s runtime library, msvcrt.lib.

Nếu bạn chạy trình Build dưới môi trường “Checked Build” của DDK, nó sẽ xuất ra một NATIVE APLLICATION với thông tin DEBUG đầy đủ dưới %BASEDIR%\lib\%CPU%\Checked (ví dụ c:\ddk\lib\i386\checked\native.exe), và nếu bạn cầu khẩn đến môi trường "Free Build" thì sẽ là  %BASEDIR%\lib\%CPU%\Free.

Những ứng dụng NATIVE này có phần mở rộng là “.exe”, nhưng chúng sẽ không họat động trong môi trường WIN32 như tệp “.exe” thông thường.

Inside a Native Application (Bên trong ứng dụng NATIVE)

Thay vì là Winmain hay Main, thì điểm vào đầu tiên của ứng dụng NATIVE sẽ là NtProcessStartup. Không giống những điểm vào trong WIN32, native applications tìm kiếm một cấu trúc dữ liệu mà nó lấy làm tham số để định vị những đối số dòng lệnh cho nó.

Yếu tố chính của môi trường thời gian (run-time) thực thi ứng dụng NATIVE là được cung cấp bởi NTDLL.dll chứa những API NATIVE NT. Những ứng dụng NATIVE phải tạo cho nó bộ nhớ HEAP bằng việc sử dụng RtlCreateHeap , một hàm trong NTDLL. Rồi để định vị Bộ nhớ từ một HEAP trong ứng dụng thì nó sẽ dùng hàm này RtlAllocateHeap và sẽ giải phóng bằng hàm này RtlFreeHeap . Một ứng dụng NATIVE muốn xuất một cái gì đó trên màn hình, nó phải sử dụng hàm NtDisplayString .

Những ứng dụng NATIVE sẽ tự nó kết thúc bằng lời gọi NtProcessTerminate .

NTDLL chứa đựng hàm trăm hàm mà có thể dùng bởi ứng dụng NATIVE để thao tác vào/ra tệp, liên hệ trình điều khiển thiết bị,....

Nếu bạn muốn xây dựng một ứng dụng NATIVE thì bạn phải có Windows NT Device Driver Kit. Copy tệp makefile.def kể cả những nguồn tạo ứng dụng NATIVE vào trong \ddk\inc và sau đó bạn có thể chạy trình BUILD.

Hoàn thành.
Chúc các bạn may mắn
TOOLCRACKING