Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
vbao

code giới hạn thời gian sử dụng File lisp

Các bài được khuyến nghị

Xin các anh trong diễn đàn giải thích và hướng dẫn các đoạn code dùng giới hạn thời gian sử dụng trong một File lisp (vd: giới hạn số lần open, số ngày sử dụng . . .) nếu được mong anh Hoành cho một số ví dụ cụ thể. Thanhs

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mã nguồn mở thì giới hạn gì bác???

 

tôi thấy trên net có một số file lisp có chức năng này nên tôi muốn tìm hiểu phương pháp thành lập cũng như cách sử dụng trong 1 file lisp như thế nào?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Với file lisp thì rất khó để làm được điều này. Bởi người biết sử dụng lisp sẽ vô hiệu hoá ngay nếu như đọc được mã lisp. Tuy nhiên, có thể làm được điều này với 1 file VLX đã được mã hoá. Cách làm thông thường như sau: Ghi thông tin các lần sử dụng lệnh vào 1 vị trí trên registry, hoặc vào file config của AutoCAD. Sau đó, đọc các thông tin này để có hành động phù hợp.

 

Sau đây là 1 ví dụ đơn giản:

(defun c:TEST()
 ;;; Doc gia tri
 (setq tmp (getcfg "AppData/CADViet/Count")
sl (cond
     ((or (not tmp) (= tmp "")) "5")
     (t tmp)
   )
 )

 ;;; Kiem tra va thong bao
 (if (/= sl "0")
   (progn
     ;;; Thuc thi ma lenh
     (princ (strcat "\nBan con " sl " lan su dung nua"))      
     ;;; Luu gia tri
     (setcfg "AppData/CADViet/Count" (itoa (1- (atoi sl))))
   )
   (princ "\nBan da het han su dung!")
 )  

 (princ)
)

(defun c:RESET()
 ;;; Reset lai gia tri
 (setcfg "AppData/CADViet/Count" "")
 (princ)
)

 

Lệnh TEST để xác định số lần thực thi. Chỉ thực thi lệnh được 5 lần. Không quan trọng ngày tháng, không quan trọng số lần sử dụng ACAD, cứ dùng lệnh TEST quá 5 lần là hết hạn.

Lệnh RESET để khởi tạo lại giá trị.

 

Tất nhiên, ví dụ trên là 1 cái khoá đơn giản chỉ khoá được người ngay chứ không khoá được kẻ gian.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Với file lisp thì rất khó để làm được điều này. Bởi người biết sử dụng lisp sẽ vô hiệu hoá ngay nếu như đọc được mã lisp. Tuy nhiên, có thể làm được điều này với 1 file VLX đã được mã hoá. Cách làm thông thường như sau: Ghi thông tin các lần sử dụng lệnh vào 1 vị trí trên registry, hoặc vào file config của AutoCAD. Sau đó, đọc các thông tin này để có hành động phù hợp.

 

Sau đây là 1 ví dụ đơn giản:

(defun c:TEST()
 ;;; Doc gia tri
 (setq tmp (getcfg "AppData/CADViet/Count")
sl (cond
     ((or (not tmp) (= tmp "")) "5")
     (t tmp)
   )
 )

 ;;; Kiem tra va thong bao
 (if (/= sl "0")
   (progn
     ;;; Thuc thi ma lenh
     (princ (strcat "\nBan con " sl " lan su dung nua"))      
     ;;; Luu gia tri
     (setcfg "AppData/CADViet/Count" (itoa (1- (atoi sl))))
   )
   (princ "\nBan da het han su dung!")
 )  

 (princ)
)

(defun c:RESET()
 ;;; Reset lai gia tri
 (setcfg "AppData/CADViet/Count" "")
 (princ)
)

 

Lệnh TEST để xác định số lần thực thi. Chỉ thực thi lệnh được 5 lần. Không quan trọng ngày tháng, không quan trọng số lần sử dụng ACAD, cứ dùng lệnh TEST quá 5 lần là hết hạn.

Lệnh RESET để khởi tạo lại giá trị.

 

Tất nhiên, ví dụ trên là 1 cái khoá đơn giản chỉ khoá được người ngay chứ không khoá được kẻ gian.

 

Cảm ơn anh Hoành đã giải đáp, anh cho hỏi thêm nếu file lisp đã được mã hóa ta có thể áp dụng code trên được không? hay là chỉ dùng trong VLX. Thanhs

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hoàn toàn được.

 

Ví dụ: trong 1 file app.arx (hoặc app.vlx, app.lsp, app.fas) có lệnh FUNC. Và ta muốn xử lý lệnh FUNC này.

 

Chúng ta tạo 1 file lisp mới, khai báo 1 tên hàm mới, ví dụ là TEST (giống hàm lúc nãy). Hàm test này kiểm tra tính hợp lệ của bản quyền rồi lại gọi hàm FUNC cũ của file app. Tất nhiên, trong file mới này, chúng ta đặt 1 dòng lệnh load file app.arx lên.

 

Như vậy, chúng ta đã xử lý được lệnh FUNC với điều kiện là người sử dụng không biết file app.arx có hàm FUNC. Cách này cũng chỉ khoá được người ngay thôi.

 

Hiện nay cũng có nhiều chương trình ObjectARX dùng theo kiểu này. Họ viết tách module kiểm tra bản quyền với các module chạy lệnh để tránh chồng chéo.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hoàn toàn được.

 

Ví dụ: trong 1 file app.arx (hoặc app.vlx, app.lsp, app.fas) có lệnh FUNC. Và ta muốn xử lý lệnh FUNC này.

 

Chúng ta tạo 1 file lisp mới, khai báo 1 tên hàm mới, ví dụ là TEST (giống hàm lúc nãy). Hàm test này kiểm tra tính hợp lệ của bản quyền rồi lại gọi hàm FUNC cũ của file app. Tất nhiên, trong file mới này, chúng ta đặt 1 dòng lệnh load file app.arx lên.

 

Như vậy, chúng ta đã xử lý được lệnh FUNC với điều kiện là người sử dụng không biết file app.arx có hàm FUNC. Cách này cũng chỉ khoá được người ngay thôi.

 

Hiện nay cũng có nhiều chương trình ObjectARX dùng theo kiểu này. Họ viết tách module kiểm tra bản quyền với các module chạy lệnh để tránh chồng chéo.

 

Cảm ơn các anh đã giải đáp và hướng dẫn, chúc cả nhà vui vẻ :s_dead:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đúng như bác Hòanh nói, khóa được người nay chứ không khóa được người gian. Kinh nghiệm tôi từng làm là tạo ra vài cái khóa liên quan với nhau, kiểu như là dùng vài cái register một lúc và các giá trị của tuân theo một thuật tóan mã hóa nào đó. Còn khi đặt khóa register thì chon những khóa gần giống các khóa đã có sẵn của Windows, các giá tri thì dừng nên dùng số mà dùng chuỗi nhị phân. Cũng chẵng an tòan hơn là bao nhưng có lẽ cũng có tác dụng "tung hỏa mù".

Còn người ngay thì thôi khóa làm gì nữa...

 

Tặng bác đọan code này, sau này có rãnh thì tạo ra vài cái khóa bằng chuỗi nhị phân để nhìn cho "Pro"

(DEFUN N2BIT (n / strbit m i)
 (setq strbit "0")
 (If (> n 0)
(progn
  (while (> n 1)
	(setq m n)
	(setq n (Fix (/ n 2)))
	(setq i (- m (* n 2)))
	(setq strbit (strcat (itoa i) strbit))
  )
  (setq strbit (strcat "1" strbit))
)
(setq strbit "000000000")
 )
 (setq l (strlen strbit))
 (while (< l 9)
(setq strbit (strcat "0" strbit))
(setq l (1+ l))
 )  
 (setq strbit (substr strbit 1 8))  
 strbit   
)
(DEFUN BIT2N (strbit / l n i k)
 (setq n 0)
 (setq l (strlen strbit))
 (setq i 0)
 (while  (< i l)	
(setq k (atoi (substr strbit (+ i 1) 1)))	
(setq n (+ n (* k (expt 2 (- l i 1)))))
(setq i (1+ i))
 )
 n
)

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Với file lisp thì rất khó để làm được điều này. Bởi người biết sử dụng lisp sẽ vô hiệu hoá ngay nếu như đọc được mã lisp. Tuy nhiên, có thể làm được điều này với 1 file VLX đã được mã hoá. Cách làm thông thường như sau: Ghi thông tin các lần sử dụng lệnh vào 1 vị trí trên registry, hoặc vào file config của AutoCAD. Sau đó, đọc các thông tin này để có hành động phù hợp.

 

Sau đây là 1 ví dụ đơn giản:

(defun c:TEST()
 ;;; Doc gia tri
 (setq tmp (getcfg "AppData/CADViet/Count")
sl (cond
     ((or (not tmp) (= tmp "")) "5")
     (t tmp)
   )
 )

 ;;; Kiem tra va thong bao
 (if (/= sl "0")
   (progn
     ;;; Thuc thi ma lenh
     (princ (strcat "\nBan con " sl " lan su dung nua"))      
     ;;; Luu gia tri
     (setcfg "AppData/CADViet/Count" (itoa (1- (atoi sl))))
   )
   (princ "\nBan da het han su dung!")
 )  

 (princ)
)

(defun c:RESET()
 ;;; Reset lai gia tri
 (setcfg "AppData/CADViet/Count" "")
 (princ)
)

 

Lệnh TEST để xác định số lần thực thi. Chỉ thực thi lệnh được 5 lần. Không quan trọng ngày tháng, không quan trọng số lần sử dụng ACAD, cứ dùng lệnh TEST quá 5 lần là hết hạn.

Lệnh RESET để khởi tạo lại giá trị.

 

Tất nhiên, ví dụ trên là 1 cái khoá đơn giản chỉ khoá được người ngay chứ không khoá được kẻ gian.

 

Cad 14 thi có file acad14.cfg còn các cad đời mới thì hông tìm thấy file này là sao hở bác!

Bác chỉ cho cách ghi và đọc thông tin vào registry luôn đi!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cad 14 thi có file acad14.cfg còn các cad đời mới thì hông tìm thấy file này là sao hở bác!

Bác chỉ cho cách ghi và đọc thông tin vào registry luôn đi!

Bạn đừng quan tâm nó nằm đâu mà mệt thân.

Kệ nó, bạn cứ dùng như trên thì CAD nào cũng chạy được!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn đừng quan tâm nó nằm đâu mà mệt thân.

Kệ nó, bạn cứ dùng như trên thì CAD nào cũng chạy được!

Thank

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tặng bác đọan code này, sau này có rãnh thì tạo ra vài cái khóa bằng chuỗi nhị phân để nhìn cho "Pro"

(DEFUN N2BIT (n / strbit m i)
 (setq strbit "0")
 (If (> n 0)
(progn
  (while (> n 1)
	(setq m n)
	(setq n (Fix (/ n 2)))
	(setq i (- m (* n 2)))
	(setq strbit (strcat (itoa i) strbit))
  )
  (setq strbit (strcat "1" strbit))
)
(setq strbit "000000000")
 )
 (setq l (strlen strbit))
 (while (< l 9)
(setq strbit (strcat "0" strbit))
(setq l (1+ l))
 )  
 (setq strbit (substr strbit 1 8))  
 strbit   
)
(DEFUN BIT2N (strbit / l n i k)
 (setq n 0)
 (setq l (strlen strbit))
 (setq i 0)
 (while  (< i l)	
(setq k (atoi (substr strbit (+ i 1) 1)))	
(setq n (+ n (* k (expt 2 (- l i 1)))))
(setq i (1+ i))
 )
 n
)

Kính gửi Ks.Hoành (câu hỏi của em về vấn đề khoá file lisp)

vấn đề của em đó là: em có 1 file lisp chúa nội dung bất kì,và em muôn khoá nó lại kiểu như phần mềm dưới đây., để khoá nó lại

Tuy có đoạn code trên nhưng do trình độ có hạn, nhiều lần thử mà em không thể "Chế" nó thành cái gì như ý được

Mong anh bớt chút thời gian và hoàn thành giúp em

http://www.cadviet.com/upfiles/pmtkt.rar

Chúc anh sức khoẻ!

Kí tên: Thằng em dại

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
cố gắng giúp em với

Khóa làm gì hả bạn? Chỉ làm ngứa tay mấy chú cracker thôi!

Trên net người ta bày nhau cách crack chứ không thấy ai bày cách lock.

Nếu bạn thích, các gợi ý trên có lẽ cũng đủ rồi?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khóa làm gì hả bạn? Chỉ làm ngứa tay mấy chú bẻ khóaer thôi!

Trên net người ta bày nhau cách bẻ khóa chứ không thấy ai bày cách lock.

Nếu bạn thích, các gợi ý trên có lẽ cũng đủ rồi?

 

Vâng! cảm ơn bác ssg

để em thử lại 10 lần nữa xem sao!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Với file lisp thì rất khó để làm được điều này. Bởi người biết sử dụng lisp sẽ vô hiệu hoá ngay nếu như đọc được mã lisp. Tuy nhiên, có thể làm được điều này với 1 file VLX đã được mã hoá. Cách làm thông thường như sau: Ghi thông tin các lần sử dụng lệnh vào 1 vị trí trên registry, hoặc vào file config của AutoCAD. Sau đó, đọc các thông tin này để có hành động phù hợp.

 

Sau đây là 1 ví dụ đơn giản:

(defun c:TEST()
 ;;; Doc gia tri
 (setq tmp (getcfg "AppData/CADViet/Count")
sl (cond
     ((or (not tmp) (= tmp "")) "5")
     (t tmp)
   )
 )

 ;;; Kiem tra va thong bao
 (if (/= sl "0")
   (progn
     ;;; Thuc thi ma lenh
     (princ (strcat "\nBan con " sl " lan su dung nua"))      
     ;;; Luu gia tri
     (setcfg "AppData/CADViet/Count" (itoa (1- (atoi sl))))
   )
   (princ "\nBan da het han su dung!")
 )  

 (princ)
)

(defun c:RESET()
 ;;; Reset lai gia tri
 (setcfg "AppData/CADViet/Count" "")
 (princ)
)

 

Lệnh TEST để xác định số lần thực thi. Chỉ thực thi lệnh được 5 lần. Không quan trọng ngày tháng, không quan trọng số lần sử dụng ACAD, cứ dùng lệnh TEST quá 5 lần là hết hạn.

Lệnh RESET để khởi tạo lại giá trị.

 

Tất nhiên, ví dụ trên là 1 cái khoá đơn giản chỉ khoá được người ngay chứ không khoá được kẻ gian.

 

 

Anh Hoành giải thích rõ hơn hộ e đc ko? Ví dụ e có 1 lisp tên là Cuaso.lsp, có đường dẫn là c:\cadviet\lisp và có lệnh là CUA thì phải sửa lại lisp trên như thế nào!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Anh Hoành giải thích rõ hơn hộ e đc ko? Ví dụ e có 1 lisp tên là Cuaso.lsp, có đường dẫn là c:\cadviet\lisp và có lệnh là CUA thì phải sửa lại lisp trên như thế nào!

 

Ai sử dụng rồi chỉ e với!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Ai sử dụng rồi chỉ e với!

Ví dụ lệnh CUA nằm trong file c:\cadviet\lisp\archanwoo.lsp nhưng người sử dụng không biết tên lệnh là CUA. Khi người sử dụng lệnh TEST, sẽ tương đương như lệnh CUA, nhưng chỉ được 5 lần sử dụng.

Code như sau:

(load "c:/cadviet/lisp/archanwoo.lsp");
(defun c:TEST()
(c:cua)
;;; Doc gia tri
(setq tmp (getcfg "AppData/CADViet/Count")
sl (cond
((or (not tmp) (= tmp "")) "5")
(t tmp)
)
)

;;; Kiem tra va thong bao
(if (/= sl "0")
(progn
;;; Thuc thi ma lenh
(princ (strcat "\nBan con " sl " lan su dung nua"))
;;; Luu gia tri
(setcfg "AppData/CADViet/Count" (itoa (1- (atoi sl))))
)
(princ "\nBan da het han su dung!")
)

(princ)
)

(defun c:RESET()
;;; Reset lai gia tri
(setcfg "AppData/CADViet/Count" "")
(princ)
)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Ví dụ lệnh CUA nằm trong file c:\cadviet\lisp\archanwoo.lsp nhưng người sử dụng không biết tên lệnh là CUA. Khi người sử dụng lệnh TEST, sẽ tương đương như lệnh CUA, nhưng chỉ được 5 lần sử dụng.

Code như sau:

(load "c:/cadviet/lisp/archanwoo.lsp");
(defun c:TEST()
(c:cua)
;;; Doc gia tri
(setq tmp (getcfg "AppData/CADViet/Count")
sl (cond
((or (not tmp) (= tmp "")) "5")
(t tmp)
)
)

;;; Kiem tra va thong bao
(if (/= sl "0")
(progn
;;; Thuc thi ma lenh
(princ (strcat "\nBan con " sl " lan su dung nua"))
;;; Luu gia tri
(setcfg "AppData/CADViet/Count" (itoa (1- (atoi sl))))
)
(princ "\nBan da het han su dung!")
)

(princ)
)

(defun c:RESET()
;;; Reset lai gia tri
(setcfg "AppData/CADViet/Count" "")
(princ)
)

Thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hu, Hu,

Ai cũng khóa cả thì những thằng đi mót biết sống sao đây???

Trên diễn đàn này tôi thấy nhiều cao thủ như bác NguyenHoanh, bác SSG, bác VN..dos, bác Bemove , Jikibo, ..... mà còn chả cần khóa thì cái việc khóa ấy xem ra chửa cần mót. Hãy ráng mót cho hết mấy thứ rơi vãi của các bác ấy cũng đủ xài cả đời cho những kẻ đi mót rồi.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tại sao bác Nguyễn Hoành lại phải làm dài dòng đến thế? Tạo re lệnh test để vừa chạy lệnh Cua vừa kiểm tra số lần load ?

Thuật toán rất đơn giản, bạn đưa them 1 Function Test (bao gồm đọc, kiểm tra và ghi số lần thực hiện lệnh Cua) rồi đặt tất cả các biểu thức của lệnh Cua trong 1 biểu thúc điều kiện , hoặc vòng lặp while. Sau đó mã hoá toàn bộ dưới dạng .fas Vậy đơn giản và tính bảo mật cao hơn. Tất nhiên với các cao thủ thì vẫn chỉ là .. vải thưa che mắt thánh <_<

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tại sao bác Nguyễn Hoành lại phải làm dài dòng đến thế? Tạo re lệnh test để vừa chạy lệnh Cua vừa kiểm tra số lần load ?

Thuật toán rất đơn giản, bạn đưa them 1 Function Test (bao gồm đọc, kiểm tra và ghi số lần thực hiện lệnh Cua) rồi đặt tất cả các biểu thức của lệnh Cua trong 1 biểu thúc điều kiện , hoặc vòng lặp while. Sau đó mã hoá toàn bộ dưới dạng .fas Vậy đơn giản và tính bảo mật cao hơn. Tất nhiên với các cao thủ thì vẫn chỉ là .. vải thưa che mắt thánh <_<

Chỉ đơn giản là tôi không biết được nội dung của file lisp (c:\cadviet\lisp\archanwoo.lsp), và không được tác động đến file lisp. Còn được tác động đến file lisp thì cấy mã bảo mật vào file đó. Với lại nếu đã biết cấy mã bảo mật vào lisp thì chắc chắn đã biết sử dụng đoạn mã đầu tiên của tôi và không có câu hỏi của Ar_Chanwoo.

 

Cách đầu tiên của tôi (bài viết đầu tiên của tôi trong topic này) chính là điều bạn nói.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×