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