Đế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

#21 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 18 March 2008 - 11:14 PM

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

  • 1

#22 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 - 11:33 PM

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

#23 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 March 2008 - 06:24 PM

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.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 24 March 2008 - 01:47 PM

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

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#25 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 24 March 2008 - 05:21 PM

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

#26 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

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

Đã gửi 29 August 2008 - 06:31 PM

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.


Anh Hoành ơi cho em hỏi tý!
EM có nhiều file lisp (các lisp đều chạy đưọc ), khi Biến nó thành đuôi VLX, thì có 1 số lệnh không chạy đưọc nghĩa là sao nhỉ
EM biến riêng lênhkhộng chạy đưọc đó thành VLX (Bỏ các file lisp khác) thì nó lại chạy đuợc

Nghialã thế nào nhỉ??????????????
Giúp em với
  • 0
Hãy ước cho trọn 1 ước mơ!

#27 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

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

Đã gửi 29 August 2008 - 07:47 PM

Anh Hoành ơi cho em hỏi tý!
EM có nhiều file lisp (các lisp đều chạy đưọc ), khi Biến nó thành đuôi VLX, thì có 1 số lệnh không chạy đưọc nghĩa là sao nhỉ
EM biến riêng lênhkhộng chạy đưọc đó thành VLX (Bỏ các file lisp khác) thì nó lại chạy đuợc

Nghialã thế nào nhỉ??????????????
Giúp em với

Chắc là bị trùng tên hàm rồi.
  • 0

#28 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

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

Đã gửi 29 August 2008 - 08:37 PM

Chắc là bị trùng tên hàm rồi.


Lúc đầu thì em cũng nghĩ thế, em đã thay đổi rồi mà đâu có đuợc
Load tất cả các lisp đó (bằng lệnh ap) thi lại đuợc.
Chả hiểu tại sao
  • 0
Hãy ước cho trọn 1 ước mơ!

#29 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 30 August 2008 - 08:51 AM

Anh Hoành ơi cho em hỏi tý!
EM có nhiều file lisp (các lisp đều chạy đưọc ), khi Biến nó thành đuôi VLX, thì có 1 số lệnh không chạy đưọc nghĩa là sao nhỉ
EM biến riêng lênhkhộng chạy đưọc đó thành VLX (Bỏ các file lisp khác) thì nó lại chạy đuợc

Nghialã thế nào nhỉ??????????????
Giúp em với

Lisp là do bạn viết hay sưu tầm? Nếu sưu tầm thì tôi đoán thế này.
-Có thể trong các lệnh lisp đó có phần kiểm tra người viết cài vào để kiểm tra nội dung 1 dòng nào đó trong file lisp xem có bị thay đổi không (ví dụ dòng thông báo thông tin về tác giả chẳng hạn).
-Khi bạn cho nó thành file VLX thì khi thực hiện thao tác đọc nội dung trong file lisp bị lổi nên lệnh không tiếp tục chạy được.
  • 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


#30 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 30 August 2008 - 02:30 PM

Lúc đầu thì em cũng nghĩ thế, em đã thay đổi rồi mà đâu có đuợc
Load tất cả các lisp đó (bằng lệnh ap) thi lại đuợc.
Chả hiểu tại sao

Tôi nghĩ trong các lisp đó dùng các biến toàn cục có tên trùng nhau, khi đưa tất cả vào vlx thì có sự liên hệ lẫn nhau giữa các biến nên dẫn đến lỗi khi chạy. Bạn phải xem lỗi trả về thì mới biết được do biến nào gây ra.
Nếu là tập hợp những lisp sưu tập tổng hợp thì ko nên đưa vào vlx. Vì để tạo vlx, cần phải viết các lisp một cách hệ thống và có tính toán chứ ko thể tùy ý lộn xộn được.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#31 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

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

Đã gửi 30 August 2008 - 04:59 PM

Xin cảm ơn các bác:
Tại em làm như sau:
1- Đoạn trên có 1 đoạn để đo cốt cao độ em lại lây defun là COS
2- Đoạn dưói, có 1 đoạn lisp khác mà cần phải tính COS của 1 góc (tên defun hoàn toàn khác)
thế là 2 ông ấy đá nhau:
THật tức cuời phải không các bác!
  • 0
Hãy ước cho trọn 1 ước mơ!

#32 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 19 April 2009 - 10:09 AM

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.

Xin nhờ bác Hoành giúp em để Test một lisp trong một file lisp đó luôn, vì em không biết chen thế nào cho nó chạy được,
  • 0

#33 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 19 April 2009 - 10:12 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
)

Nhờ Bác giúp và hướng dẫn cho việc mã hóa nhị phân lisp như thế nào với đoạn mã trên.
  • 0

#34 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 19 April 2009 - 05:04 PM

Nhờ Bác giúp và hýớng dẫn cho việc mã hóa nhị phân lisp nhý thế nào với ðoạn mã trên.

Thật là kỳ lạ, nếu các bạn ðã là cao thủ thì sẽ tự nghĩ ra cách khoá, còn các bạn ðang học thì tìm hiểu khoá làm gì. Các bạn nên tập trung công sức ðể viết ra lisp hay thì hõn. Rõ ràng một số bạn trên diễn ðàn khi sýu tầm lisp còn chýa hiểu về lisp, còn chýa biết "biến tấu" một lisp sýu tầm ðc mà ðã nghĩ ðến khóa, chẳng lẽ các bạn khóa lisp mình sýu tầm bằng chính cái khoá sýu tầm ðc, có nên không. Chỉ khi nào phần lớn chýõng trình và những modun quan trọng do bạn viết ra, hãy nghĩ ðến khoá
  • 0

#35 dacvien2009

dacvien2009

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 01 April 2010 - 09:07 AM

Thật là kỳ lạ, nếu các bạn ðã là cao thủ thì sẽ tự nghĩ ra cách khoá, còn các bạn ðang học thì tìm hiểu khoá làm gì. Các bạn nên tập trung công sức ðể viết ra lisp hay thì hõn. Rõ ràng một số bạn trên diễn ðàn khi sýu tầm lisp còn chýa hiểu về lisp, còn chýa biết "biến tấu" một lisp sýu tầm ðc mà ðã nghĩ ðến khóa, chẳng lẽ các bạn khóa lisp mình sýu tầm bằng chính cái khoá sýu tầm ðc, có nên không. Chỉ khi nào phần lớn chýõng trình và những modun quan trọng do bạn viết ra, hãy nghĩ ðến khoá

:cheers: Không đâu anh, trong quá trình học phải xem và vận dụng các cái hay của các bậc đàn anh. Các anh có đưa ra vấn đề trên, thì xin cho em hỏi tí nhé, Nếu anh có biết , xin chỉ giúp... thương em út nhỏ nha. Nếu chưa biết hảy để các anh khác giúp mình. Khóa là vấn đề rất tế nhị, nhưng có những việc cần phải khóa phải không anh. Tôi đã bị một trường hợp cố ý làm thay đổi nội dung trong lisp , Anh có biệt hậu qủa ra sao không.. ?
Các Lisp ở đây cho ra lò, đều là những bậc thầy, đàn anh viết và gợi ý chỉnh sửa cho ta, chớ có ai khóa đâu mà anh lo không góp nhặt được, những gì đã góp nhặt và đem ứng dụng phải được trân trọng chứ anh. :D
Mong được các anh chỉ cho những vấn đề cần khóa, bảo vệ thực thi trong lisp.
Cám ơn và mong tin giúp đỡ.
  • 0

#36 dacvien2009

dacvien2009

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 01 April 2010 - 11:59 AM

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

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
Em chưa hiểu lắm :
Nhờ các Anh giúp em chỉ cho một cách để giới hạn 1 file.lsp với đọan mã trên.
Mong được các anh giúp, mong tin :D
  • 0

#37 NvThanh

NvThanh

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 18 September 2011 - 09:42 PM

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

Chào các bác, em xin phép được hỏi lại vấn đề này
Em đã thực hiện như bác Nguyen Hoanh, sau khi có thông báo bạn đã hết hạn sử dụng hưng thực ra các lệnh vẫn thực hiện được, các bác có thể giải thích thêm được không ạ, không biết em sai chỗ nào!
Mong hồi âm !
  • 0

#38 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 18 September 2011 - 11:23 PM

Bạn phải đặt lệnh gọi hàm chính trong điều kiện kiểm tra đúng, hoặc giải phóng hàm chính đi trong điều kiện kiểm tra sai (nếu hàm chính đã được gọi trước đó).

Cụ thể ở trên bạn có thể sửa lại

(progn
(princ "\nBan da het han su dung!")
(setq c:cua nil)
)

Hoac

(defun c:cua () (princ "\nBan da het han su dung!"))

Về vấn đề bảo mật file lisp, mình gợi ý thế này:

. Đọc thông số 1 thiết bị nào đó trên máy (như CPU ID, MainBoard ID, HDD ID v.v....), tạm gọi là serial.
. Ứng với mỗi serial, bạn có 1 hàm mã hóa riêng xuất ra chuỗi, gọi là pass
. Người sử dụng cần phải nhập đúng pass này vào mới có thể sử dụng được
pass được lưu ở đâu đó trên máy, dưới dạng file, hoặc registry. Khi chạy, phần mềm của bạn sẽ đọc pass , đọc ID và so sánh chuỗi mã hóa ID với pass.

Về hạn chế số lần, bạn cũng cần phải mã hóa thông tin.

Cuối cùng là biên dịch các lsp ra vlx hoặc fas (các hàm mã hóa phải có thủ thuật chống dịch ngược).

Lưu ý: Nếu có mã hóa thì làm chơi để học tập thôi :D, chỉ khóa được người ngay, không khóa được người "gian". Mà người ngay thì khóa làm gì chứ. hehe.
  • 1

#39 NvThanh

NvThanh

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 18 September 2011 - 11:57 PM

Cảm ơn npham, mình đã thực hiện được rồi, tất nhiên mục đích là học tập và khóa người ngay mà :mellow:
mình còn một vấn đề nữa là nếu mình có 3 file lisp muốn hạn chế số lần thực hiện lệnh thì phải viết lại như thế nào ?
Và còn một vấn đề nữa nếu file của mình không phải là lisp mà là file dll có dùng đoạn code trên được không, mình thử nhưng không được không biết sai chỗ nào mong được học hỏi!
  • 0

#40 NvThanh

NvThanh

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 19 September 2011 - 09:36 AM

up nhờ anh em giúp đỡ !
  • 0