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

Giới hạn sử dụng một chương trình

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 (91.56 KB, 4 trang )

Giới hạn sử dụng chương trình
Phan Thanh ấn
Ngàynay, vấn đề bản quyền đang là một vấn đề nổi cộm trong nhiều cuộc thảo luận,nhiều
hội nghị bàn về kinh tế trí thức ở Việt Nam. Thực tế cho thấy phần lớnngười dùng máy
tính dễ dàng mua những phần mềm có chất lượng cao chỉ bằngkhoảng 15 000 VNĐ, thậm
chí là không tốn đồng nào trong khi giá bán thực của nócỡ khoảng... vài trăm đôla. Để
ngăn chặn vấn đề này, hầu hết các chương trìnhviết ra đều được cài đặt mật khẩu hoặc
khoá sử dụng hay là giới hạn chươngtrình được sử dụng trong một khoảng thời gian hay số
lần chạy nào đó rồi khôngcho sử dụng nữa để bắt buộc người dùng phải trả tiền. Tuy
nhiên, tôi không có ýđịnh nói về bản quyền mà chỉ xin đưa ra một cách để các bạn bảo vệ
chương trìnhcủa mình khi không muốn cho ai đụng vào hoặc giới hạn số lần chạy nhất
định.Tôi xin giới thiệu hai thủ tục viết bằng Pascal như sau:
Thủ tục thứ nhất,đòi mật mã truy xuất chương trình. Nếu mật mã sai thì thông báo và
dừngchương trình. Trong thủ tục này tôi sử dụng hàm Readkey để đọc từng kítự mật mã từ
bàn phím sau đó viết lại dạng '*', như vậy sẽ tránh lộ mật mã khita sơ ý và thủ tục Halt để
dừng chương trình không cho chạy nữa khi mậtmã không đúng. Mật mã là một chuỗi kí tự
mà bạn có thể thay đổi ở trong khaibáo Const. Thủ tục này bạn nên gọi đầu tiên trong
chương trình chính đểđảm bảo nó thi hành trước nhất.
{usescrt; }
Procedurenhap_mat_ma;
Constpassword = "hello"
Var mat_ma:string;
tempcode: char;
Begin
mat_ma:='';
gotoxy(22,10);
textcolor(12);
write('* Mat ma truy xuat:');
repeat
tempcode := readkey;
If (tempcode >= #32) and(tempcode <= #127) then


begin
write('*');
mat_ma := mat_ma + tempcode;
end;
until (tempcode = #13);
If (mat_ma <> password) then
begin
gotoxy(22,11);
write('* Mat ma khong dung!',
'Chuong trinh bi dung!*');
readln; halt;
end;
clrscr;
End;
Thủ tục thứ hai,xoá chương trình sau một số hữu hạn lần chạy. Thủ tục này dựa vào
việcthay đổi ngày giờ của file để thực hiện. Trên mỗi file đều có lưu thông tinngày giờ tạo
file. Ta sử dụng các thủ tục Unpacktime, Packtime đểgiải nén và nén thông tin về ngày giờ
lưu trên file còn các thủ tục Getftime,Setftime để đọc và ghi lại thông tin về ngày giờ tạo
file, Datetimelà kiểu Record định nghĩa sẵn của Pascal dùng để ghi thông tin ngày giờ do
thủtục Unpacktime giải nén. Sau khi chạy thủ tục, thời gian tạo file đượcghi lại thành
00:01:00, mỗi lần chạy sau đó ta tăng lên 1 phút va ghi lại trênfile nhờ thủ tục Setftime, đến
lần chạy giới hạn thì thông báo và gọithủ tục Erase để xoá file. Tên file được đọc nhờ hàm
Paramstr(n=0).Bạn có thể thay việc xoá file bằng việc gọi lại thủ tục Nhap_mat_ma
saocho hợp lí để đỡ phải dịch lại. Thủ tục này nên đặt cuối chương trình sau khiđã hoàn tất
khâu xử lí. Bạn thử thay việc tăng 1 phút bằng việc tăng 1 giây xemhiện tượng gì xảy ra.
{usescrt, dos, windos;}
Proceduretu_xoa_file;
Var f : file;
ftime: longint;
dt : TDateTime;

Begin
assign(f, paramstr(0));
reset(f);
getftime(f, ftime);
unpacktime(ftime, dt);
with dt do
begin
if (sec <> 0) and (hour <>0) then min := 0;
sec := 0;
hour := 0;
inc(min);
if (min = 2) then
begin
gotoxy(22,11);
textcolor(12);
write('* Ban chi chay duoc',
'1 lan nua!*');
readln;
gotoxy(80,25);
end;
if (hour = 0) and (min = 3) and (sec= 0) then erase(f);
packtime(dt,ftime);
setftime(f, ftime);
end;
close(f);
End;

×