Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
44 replies to this topic

#1 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 05 June 2007 - 08:58 PM

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
  • 0

#2 bowxman

bowxman

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 05 June 2007 - 09:03 PM

Mã nguồn mở thì giới hạn gì bác???
  • 0

#3 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 05 June 2007 - 09:23 PM

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?
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 June 2007 - 09:24 PM

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.
  • 1

#5 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 05 June 2007 - 09:34 PM

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
  • 0

#6 bowxman

bowxman

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 05 June 2007 - 09:48 PM

Mã hóa thành file *.fas cũng được.
  • 0

#7 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 June 2007 - 09:49 PM

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.
  • 0

#8 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 05 June 2007 - 10:04 PM

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:
  • 0

#9 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 06 June 2007 - 11:39 AM

Đú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
)

  • 2

#10 bowxman

bowxman

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 06 June 2007 - 01:21 PM

Bác vndesperados thật là pro. Các anh em cố gắng pro như bác ấy nghen!!!
  • 0

#11 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 11 September 2007 - 04:09 PM

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!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#12 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4106 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 11 September 2007 - 04:43 PM

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!
  • 0

#13 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 11 September 2007 - 04:47 PM

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
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#14 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 18 January 2008 - 08:49 AM

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.c...files/pmtkt.rar
Chúc anh sức khoẻ!
Kí tên: Thằng em dại
  • 0
Hãy ước cho trọn 1 ước mơ!

#15 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 18 January 2008 - 08:52 AM

http://www.cadviet.c...o...ic=2667&hl=
  • 0
Hãy ước cho trọn 1 ước mơ!

#16 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 18 January 2008 - 10:34 AM

http://www.cadviet.com/forum/index.php?sho...ic=2667&hl=

cố gắng giúp em với
  • 0
Hãy ước cho trọn 1 ước mơ!

#17 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 18 January 2008 - 10:44 AM

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?
  • 0

#18 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 18 January 2008 - 11:30 AM

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!
  • 0
Hãy ước cho trọn 1 ước mơ!

#19 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

  • Members
  • PipPipPipPip
  • 224 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 16 March 2008 - 05:58 PM

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!
  • 0

#20 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

  • Members
  • PipPipPipPip
  • 224 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 18 March 2008 - 05:35 PM

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!
  • 0