Tải bản đầy đủ (.doc) (24 trang)

Xác lập mật khẩu cho chương trình dạng tệp có đuôi .COM”.doc.DOC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (129.21 KB, 24 trang )

Lời nói đầu
Ngày nay công nghiệp máy tính đã trở thành mũi nhọn khi bớc vào kỷ
nguyên kỹ thuật hiện đại.Với tốc độ tăng trởng đáng kể những sản phẩm liên
quan đến máy tính từ phần mềm tới các thiết bị ghép nối.Việt Nam cũng đang
góp phần vào sự phát triển của công nghệ máy tính, chuyển mình dần từ thị tr-
ờng tiêu thụ các sản phẩm máy tính thành nơi phát triển công nghệ. Bên cạnh
đó công nghệ phần mềm của Việt Nam có nhiều bớc tiến triển góp phần thúc
đẩy sự phát triển của nền công ngiệp máy tính nói riêng và nền kinh tế nói
riêng.
Đã có rất nhiều ngôn ngữ lập trình đợc sử dụng để tạo nên sự phát triển
của nền công nghệ phần mềm. Một trong những ngôn ngữ lập trình xuất hiện
sớm nhất đó là ngôn ngữ lập trình Assembler. Đây là một trong những ngôn
ngữ lập trình bậc thấp thờng đợc sử dụng để lập trình hệ thống, nó có một u
điểm mà không một ngôn ngữ lập trình nào bì kịp, bởi lẽ nó tạo ra những ch-
ơng trình có dung lợng rất nhỏ, nó thờng đợc sử dụng để làm các chơng trình
quản lý trong công nghiệp ,diệt vius, tạo vius, tạo hệ điều hành, tạo mật
khẩu
Hiện nay hầu hết các chơng trình khi viết xong đều đợc xác lập mật khẩu
để bảo mật dữ liệu
Trong thời gian học tập tại khoá học 1996 2001 của tr ờng Đại học
Mở Hà Nội tôi đã đợc đào tạo một cách có hệ thống và tiếp thu những kiến
thức về ngôn ngữ Assembler Để kết thúc khoá học tôi đợc nhận và hoàn thành
đề tài Xác lập mật khẩu cho ch ơng trình dạng tệp có đuôi .COM .
Mục tiêu của chơng trình:
-Trớc tiên chạy chơng trình xác lập mật khẩu với những yêu cầu nhập
tên tệp thực hiện dạng .COM
-Sau đó nhập mật khẩu; Sau khi tệp .COM đã xác lập mật khẩu thì từ
đó trở đi chơng trình chỉ đợc chạy khi vào đúng mật khẩu đã xác lập
Chơng I
Cơ sở lý thuyết
Các file COM đợc lu trên đĩa là hình ảnh chính xác của nội dung bộ nhớ


sau khi các file này đợc nạp. Sau khi đợc nạp, các file .COM khong cần thêm
một thông tin nào nữa và có thể chạy ngay, do vậy, các chơng trình COM có thể
đợc nạp và khởi động nhanh hơn so với cá chơng trình EXE. Ngay sau khi ch-
ơng trình COM đợc nạp vào bộ nhớ, ngay dới PSP, nó đợc thực hiện bắt đầu từ ô
nhớ sát ô nhớ cuối cùng của PSP, nghĩa là từ địa chỉ offset 100h. Ô nhớ này th-
ờng chứa một lệnh nhảy, lệnh này nhảy đến phần đầu thực của chơng trình.
Một chơng trình COM không thể vợt quá 64KB(65536 byte), tính cả độ
dài của PSP (256 byte) và ít nhất 1từ (2 byte) cho ngăn xếp. Độ dài một chơng
trình COMkhông vợt quá 64 KB, nhng DOS vẫn dành cả bộ nhớ cho trơng
trình loại này. Nó không để lại một phần nhớ tự do nào (dới quan điểm của
DOS), và chơng trình COM không thể gọi một chơng trình khác thông qua hàm
EXEC. Vấn đề này có thể giải quyết đợc, nếu chơng trình COM thông qua một
hàm của DOS giải phóng bộ nhớ mà nó không dùng đến.
Khi điều khiển đợc truyền cho chơng trình COM, các thanh ghi đoạn đều
hớng tới đầu của PSP. Đầu của chơng trình COM (so với đầu của PSP) luôn đợc
đặt ở địa chỉ 100h. Con trỏ ngăn xếp nhận giá trị FFFEh và nó hớng tới đoạn
cuối của đoạn 64KB mà chơng trình COM chiếm, ngăn xếp tiến lại gần cuối ch-
ơng trình cứ 2 byte một, ngời lập trình cần đảm bảo làm sao cho ngăn xếp
không lớn đến mức đụng vào phần cuôí chơng trình
Tồn tại nhiều khả năng để kết thúc một chơng trình COM và để trả điều
khiển về cho DOS hay chơng trình gọi.
Nếu chơng trình chạy dới DOS 1.0, nó có thể kết thúc bằng cách gọi hàm
00h của ngắt 21h hoặc gọi ngắt 20h. Một khả năng khác , thoạt đầu có vẻ lạ, là
kết thúc chơng trình bằng một Near Return (lệnh assembler RET). Khi lệnh
này đợc thực hiện, chơng trình đợc tiếp tục từ địa chỉ offset đặt trong 2byte ở
đỉnh ngăn xếp. Mà hàm EXEC lại đặt giá trị 0 vào 2byte này trớc khi trao điều
khiển cho chơng trình COM. Nh vậy, chơng trình đợc tiếp tục thực hiện tại địa
chỉ CS:0000. Vì địa chỉ này chính là đỉnh PSP, nó chứa lời gọi ngắt 20h, nên ch-
ơng trình sẽ đợc kết thúc bằng ngắt 20h.
Đối với các thế hệ sau của DOS, hàm 4Ch của ngắt 21h tờng dùng để kết

thúc chơng trình. Nó kết thúc chơng trình và gọi một chơng trình thông báo, ch-
ơng trình thông báo này cho kết quả dới dạng một giá trị số . DOS không đặt ở
đây một giá trị cố định nào, nhng việc truyền giá trị chỉ có ý nghĩa nếu chơng
trình đợc goi và chơng trình gọi đều gán cho giá trị đó một ý nghĩa nh nhau. Thí
dụ, một khả năng hay đợc dùng là thông báo cho chơng trình gọi, thông qua giá
trị 0, rằng chơng trình đợc gọi kết thúc bình thờng, trong khi mọi giá trị khác
thông báo sự xuất hiện lỗi trong khi thực hiện chơng trình đợc gọi. Một ngời lập
trình ngôn ngữ bậc cao không cần phải quan tâm đến việc xây dựng một chơng
trình COM, vì trình biên dịch (compiler) sẽ làm thay mọi công việc cần thiết.
Ngợc lại, một ngời lập trình Assembler phải quan tâm đến nhiều vấn đè khi xây
dựng một chơng trình COM.
Chơng trình COM đợc lu dới dạng phản ánh chính xác nội dung bộ nhớ
RAM sau khi dã đợc nạp. DOS không nạp chơng trình này vào một địa chỉ xác
định trớc. Chúng có thể đợc nạp vào một địa chỉ bất kỳ(là bội nguyên của 16).
Do vậy, các chơng trình COM không nhất thiết phải chứa địa chỉ đoạn rõ ràng.
Nếu địa chỉ offset luôn dựa vào đoạn hiện thời và nó chỉ một địa chỉ bất kỳ
trong đoạn đó, thì vấn đề lại không phải nh vậy đối với các địa chỉ đoạn, vì các
địa chỉ này xác định các đoạn cố định cách nhau 16 byte.
Kích thớc một chơng trình COM bị hạn chế là 64KB nên ngời lập trình bị
giới hạn chỉ đợc dùng các lệnh NEAR, các lệnh này chỉ thay đổi địa chỉ offset
của con trỏ lệnh. Các lệnh FAR không đợc phép dùng trong chơng trình bởi vì
tất cả các lệnh FAR cho phép tiếp tục chơng trình ở một chỗ khác của chơng
trình bằng cách xác định lại không chỉ địa chỉ offset mà cả địa chỉ đoạn của con
trỏ lệnh (CS:IP). Do đó các giá trị không đổi có thể đợc nạp vào một thanh ghi ,
thí dụ nh địa chỉ đoạn của RAM màn hình.Nhng không thể nạp một địa chỉ
đoạn của các lệnh hay dữ liệu của chơng trình COM vào một thanh ghi đoạn.
Bởi lẽ các địa chỉ này thay đổi mỗi khi chơng trình đợc gọi chạy. Một chơng
trình COM không đợc chứa nhiều đoạn và các biến phải nằm trong một đoạn
duy nhất-đoạn mã lệnh. Vì chỉ có một đoạn, nên DOS có thể nạp chơng trình
vào các vị trí khác nhau, tuỳ theo tình trạng của RAM còn tự do. Các trơng trình

COM không gặp khó khăn gì khi định nghĩa ngăn xếp. Nó đợc đặt tự động vào
cuối đoạn COM 64KB.
Khi gọi một chơng trình COM, DOS dành cho chơng trình này toàn bộ
RAM còn tự do, đa số chơng trình sẽ mất đi khỏi bộ nhớ sau khi kết thúc và bộ
nhớ mà nó chiếm sẽ đợc giải phóng. Nhng nếu một chơng trình COM đợc
chuyển thành nội trú, có nghĩa là nó sẽ tồn tại trong bộ nhớ sau khi thực hiện,
thì một số vấn đề sẽ xuất hiện, vì dới quan điểm của DOS, không còn bộ nhớ tự
do không thể nạp và thực hiện một chơng trình khác.
Vấn đề cũng sẽ xuất hiện, khi chơng trình COM trong qua trình thực hiện
yêu cầu nạp và thực hiện một chơng trình khác thông qua hàm EXEC. Điều này
cũng không thực hiện đợc, bởi vì DOS cho rằng không còn bộ nhớ tự do để
nhận chơng trình đợc gọi. Tuy nhiên , hai trờng hợp trên có thể đợc giải quyết
bằng cách giải phóng vùng nhớ mà chơng trình không dùng đến.
Có hai khả năng để thực hiện điều này: hoặc là chỉ giải phóng phần bộ nhớ
nằm ngoài đoạn COM 64 KB, hoặc giải phóng tất cả các phần nhớ mà chơng
trình không dùng đến, tính cả vùng nhớ không sử dụng nằm trong đoạn COM.
Cách thứ hai cho phép giải phóng đợc nhiều RAM hơn, nhng ngăn xếp lại nằm
ngoài phần chơng trình COM (nó ở cuối đoạn 64 KB). Cho nên trong trờng hợp
này cần thiết phải chuyển ngăn xếp đến cuối trơng trình và chỉ giải phóng vùng
nhớ nằm sau đuôi ngăn xếp. Để làm điều này, ta phải cho ngăn xếp một kích th-
ớc xác định. Đối với đa số các chơng trình thì 512 byte là quá đủ.
Trong khi kích thớc của chơng trình COM không vợt quá 64 KB, thì mọtt
chơng trình EXE có thể lớn ngang phần RAM tự do mà DOS quản lý. Đói với
cr COM, trong đoạn 64 KB phải đặt cả mã lệnh, dữ liệu và ngăn xếp. Kết quả là
tất cả các thanh ghi đoạn đều nhận cùng một giá trị khi khởi đầu và trong quá
trình thực hiện chơng trình, giá trị này chỉ ra địa chỉ bắt đầu của một đoạn 64
KB( chỉ có nội dung của thanh ghi ES là có thể bị thay đổi, vì nó không có ý
nghĩa trực tiếp với việc thực hiện chơng trình). Đối với các file EXE, sự tổ chức
các đoạn không ngặt nghèo nh vậy. Mã lệnh, dữ liệu ngăn xếp đợc đặt trong các
đoạn khác nhau, mỗi loại có thể đợc phân bố trong nhiều đoạn. Vì lẽ đó mà các

thanh ghi đoạn có giá trị khác nhau trong quá trình thực hiện chơng trình EXE.
Các file COM lu trên dĩa mềm hay đĩa cứng là hình ảnh chính xác của RAM
khi thực hiện chơng trình, trong khi các file EXE lại đợc lu trên đĩa theo một
cách đợc mã hoá.

Chơng II
Giới thiệu chơng trình
Chơng trình đợc chia làm 2 phần:
Phần Cài dặt (INSTALL):
Phần này thực hiện các chức năng sau:
-Vào tên tệp có dạng .COM cần cài mật khẩu
-Kiểm tra liệu tệp .COM đó trớc đã đợc xác lập mật khẩu hay cha?
. Nếu tệp .COM đó đã xác lập mật khẩu rồi thì 9 byte cuối của tệp .COM
mới (đợc hình thành bằng nội dung tệp .COM + nội dung đoạn chơng trình gộp
vào thêm sau) sẽ chứa chữ "PROTECTED". Không tiến hành cài đặt và kết thúc
phần chơng trình cài đặt.
. Nếu tệp .COM cha đợc xác lập mật khẩu thì 9 byte cuối của tệp .COM đó
không chữ Protected. Sẽ tiến hành nhập mật khẩu( 2lần : lần đầu nhập mật khẩu
vào, kiểm tra (verify) liệu nhớ đúng mật khẩu hay cha bằng cách nhập mật khẩu
lần nữa và kiểm tra mật khẩu giữa 2 lần nhập?). Đọc 3 byte đầu của tệp .COM
và cất nội dung 3byte đó vào một biến nhớ (để sau này có thể phục hồi đợc).
Tính độ dài của các byte tệp .COM cũ và cất bớc nhảy đó vào biến 3 byte có tên
JMPCODE: byte 1 là 0e9h - mã của lệnh JMP và 2 byte sau là bớc nhảy). Sau
đó tiến hành ghi thêm đoạn chơng trình cần gộp vào tệp .COM.
Bắt đầu
Vào tệp
dạng
.COM
Lu đồ thuật toán Xác
lập mật khẩu cho

File .com
Phần ch ơng trình sẽ gộp vào tệp .COM sau khi đã cài mật khẩu (đoạn
từ START CODE đến END CODE).
Thoát
KT tệp đó có tồn
tại không
SAI
KT
.COMđó dã
xl mk chưa
sai
đúng
Xl MK cho tệp
.COM
Xác lập lại mật
khẩu
KT 2 lần
vào MK có
giống nhau
hay ko?
Cất 3 byte đầu của tệp
.COM vào biến nhớ
Xác lập bớc nhảy
Ghi đoan chơng trình can
gộp vào tệp .COM
sai
đúng
Phần này sẽ đợc chạy khi tiến hành chạy tệp >COM đã đợc xác lập mật
khẩu. Khi một tệp .COM đã đợc xác lập mật khẩu thì 3 byte đầu của tệp .COM
đó chứa chứa lệnh nhảy đến phần chơng trình gộp thêm vào và phần chơng trình

gộp thêm vào sẽ tiến hành các chức năng sau:
- Yêu cầu nhập mật khẩu.
- Kiểm tra mật khẩu vừa nhập có đúng với mật khẩu đã xác lập hay cha?
. Nếu không đúng thì không cho chơng trình chạy và thoát.
. Còn nếu đúng mật khẩu thì hồi phục lại phần mã ở 3 byte đầu của tệp .COM
(trớc khi cài đặt mật khẩu), đa phần địa chỉ OFFSET về 100h và tiếp tục chạy
phần chơng trình .COM
Sai
Start
Nhập mật khẩu
Kiểm tra
mật khẩu
End
Khôi phục lại
chơng trình
Chạy chơng trình *.COM
Đúng
Lu đồ thuật toán
FIle.com đ đã ợc xác lập
mật khẩu
Toàn bộ ch ơng trình sẽ có dạng sau:
; Tạo Macro cho hiện ra màn hình một xâu ký tự
HienString macro xau
mov dx, offset xau
mov ah,9 ;Nap so ham vao AH
int 21h
endm ;Kết thúc macro
CODE segment
assume CS:CODE, DS:CODE, ES:CODE, SS:CODE
ORG 100h

BEGIN:
jmp INSTALL
;Bắt đầu đoạn chong trình và phần dữ liệu sẽ gộp (append) vào tệp .COM cần
xác lập mật khẩu
START_CODE:
call NEXT
NEXT:
pop SI
jmp CHECK
; Bắt đầu vùng dữ liệu cần đợc gộp vào tệp .COM
;SI+4
MESS db 0ah,0dh,'PASSWORD : $'
;SI+18
FIRSTTHREE db 3 dup(?)
;SI+21
KEYWORDLEN dw ?
;SI+23
KEYWORD db 30 dup(?)
;SI+53
CHFLAG db 1
;SI+54
KEYWORDERR db 10,13,10,13,10,13,'Access is denied !!! $'
;Ket thucs vïng du lieu se gop vao tep .COM
CHECK:
mov DX,SI ; hien xau ky tu MESS
mov AH,9
add DX,4
int 21h
mov BX,SI
add BX,21 ; BX tro den KEYWORDLEN

mov CX,WORD PTR[BX] ; CX chua do dai cua KEYWORD (mat
;khau)
inc BX
inc BX ;BX tro den vung nho KEYWORD
mov DI,SI
add DI,53 ; DI tro den bien CHFLAG
STAR_CHECK:
mov AH,8 ; Nhap cac ky tu mat khau(khong hien)
int 21h
cmp AL,0dh
jz END_CHECK ;Neu la ENTER ket thuc nhap mat khau
jcxz WRONG
cmp AL,BYTE PTR[BX] ;SS voi cac ky tu mat khau da xac lap
jnz WRONG ; Neu sai thi nhay
mov DL,'*' ; Hien dau'*' ra man hinh
mov AH,2
int 21h
inc BX ; Tro den byte tiep theo cua KEYWORD
dec CX ; Giam so luong byte cua bien KEYWORD

×