Làm thế nào để bảo mật file? (1 người xem)

  • Thread starter Thread starter fbs
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

fbs

Thành viên mới
Tham gia
11/7/07
Bài viết
10
Được thích
8
Tôi có 1 file Add in (*.xla) muốn bảo mật bằng password khi chạy ở mỗi máy khác nhau thì sẽ cho một password khác nhau và chỉ cần nhập pass duy nhất 1 lần, các lần sau khi chạy sẽ không hỏi pass nữa. Xin các cao thủ chỉ giáo.
 
Tôi thường làm, phần đầu của Add in là đoạn code kiểm tra mã gồm các bước:
- Lấy một số cố định của máy: Ví dụ như serial của HDD hay cardLAN, hoặc số ngẫu nhiên chứa trong một tệp do Add in phát sinh trong lần sử dụng đầu tiên.
- Kiểm tra tệp chứa mã và mã: Nếu tệp không tồn tại hoặc mã không đúng thì hiện hộp thoại để nhập mã. So sánh mã, nếu đúng thì ghi lại mã và cho phép Add in hoạt động.
 
Upvote 0
1/ bạn có thể tìm các bài viết nói về Project unviewable
2/ Để chỉ nhập PWord 1 lần, mình nghĩ bạn có thể thức hiện bằng cách : khi nhập PWord lần đầu thì giá trị PWord được cập nhật vào 1 ô nào đó của file .XLA và mỗi lần mở file thì chương trình kiểm tra thấy khớp PWord thì không hiện đòi PWord nữa. (diễn đạt hơi khó hiểu)

chibi đã viết:
- Lấy một số cố định của máy: Ví dụ như serial của HDD hay cardLAN, hoặc số ngẫu nhiên chứa trong một tệp do Add in phát sinh trong lần sử dụng đầu tiên.
Xin Chibi hướng dẫn cách lấy số serial của HDD hay cardLAN .Nếu bằng VBA thì càng tuyệt vời. Cảm ơn Chibi nhiều !

TDN
 
Upvote 0
tedaynui đã viết:
2/ Để chỉ nhập PWord 1 lần, mình nghĩ bạn có thể thức hiện bằng cách : khi nhập PWord lần đầu thì giá trị PWord được cập nhật vào 1 ô nào đó của file .XLA và mỗi lần mở file thì chương trình kiểm tra thấy khớp PWord thì không hiện đòi PWord nữa. (diễn đạt hơi khó hiểu)
TDN
Với cách này, theo mình nghĩ nếu copy cái .XLA đó sang máy khác chạy ngon ơ ngay.
 
Upvote 0
Gửi các bạn hàm đọc serial của HDD, xin ý kiến các bạn.
 

File đính kèm

Upvote 0
Hàm tham khảo (Chibi)
Mã:
Function doc_ma_dia()
    Dim ObjetoWMI As Object
    Dim Disco As Object
    Dim Discos As Object
    Dim abc
    Set ObjetoWMI = GetObject("WINMGMTS:")
    Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
    abc = ""
    For Each Disco In Discos
        abc = Disco.SerialNumber
        If Len(Trim(abc)) > 0 Then
            Exit For
        End If
    Next
    doc_ma_dia = Trim(abc)
End Function

LVD
 
Upvote 0
chibi đã viết:
Gửi các bạn hàm đọc serial của HDD, xin ý kiến các bạn.
Tuyệt vời, Cám ơn Chibi rất nhiều ! Cái này sẽ rất có ích đây.
Nhưng Chi bi ơi, hình như hàm này không tự update mà mỗi khi muốn update mình phải nhấn F2Enter ngay ô chứa Function nó mới chịu update (F9 cũng không được)
Thanks !

TDN
 
Upvote 0
Chào mọi người em là thành viên mới, mong mọi người giúp đở giùm!
Em thấy có 1 số phần mềm có tính năng mã hóa dữ liệu như EnCryptor v1.0. Không biết trong Excel có cách nào viết lệnh mã hóa toàn bộ dữ liệu của Excel luôn không?
Chỉ khi nào gõ đúng Password thì nó mới giải mã trở lại thôi? Vì nếu có phá được cửa sổ nhập Pass thì cũng chẳng thể nào đọc được luôn!
Và khi thoát khỏi Excel thì nó tự mã hóa dữ liệu và Save luôn!
Mong nhận được sự giúp đở của mọi người!.
Thanks.
 
Upvote 0
Sao không ai trả lời em hết vậy?
Chào bạn
Theo mình nghĩ, cách mã hoá như bạn nêu thì Excel có thể làm được nhưng không ai làm vì :
+ Tính bảo mật trong Excel không cao
+ Nếu đã vô hiệu hoá vòng 1 (đăng nhập) mà đã qua được thì người ta vẫn dư khả năng xem code mà bạn mã hoá hoặc giải mã nó
+ Hơn nữa việc mã hoá hay giải mã toàn bộ Workbook sẽ mất nhiều thời gian, lại không bảo đảm an toàn
+ ...

Tóm lại, bảo mật thì cũng có nhiều cách nhưng mình chưa thấy ai dùng cách mà bạn đã nêu (đối với Excel). Mình thấy rằng chỉ bảo mật người ngay thôi, chứ người có ý đồ thì bó tay. Bill còn chít huống chi là mình, hix hix

TDN
 
Upvote 0
Vậy không biết bác có cách nào hay hơn chỉ em với!
Với lại em cũng cần lấy cách mã hóa này để làm những chuyện khác nữa? Chứ không nhất thiết là bảo mật!
Mong bác nói thêm.
 
Upvote 0
Mình nhớ có một lần một bạn nào đó đã đưa file mã hóa dữ liệu trong excel lên diễn đàn rồi không nhớ ở đâu. Bạn đó mã hóa các thông tin về pass của các tài khoản, địa chỉ email...Bạn tìm thử xem file cũng hay.
 
Upvote 0
Nhân tiện Cho em hỏi một chút a!

Cám ơn tất cả mọi người ! Đây là một chủ đề mà đệ đang tìm hiểu.
Mong Huynh Chi Bi chỉ rõ hơn cho Đệ cách tạo password để kiểm soát file excel với.
Nếu có thể Huynh poss đoạn code cho đệ xem thì càng tuyệt.
Cảm ơn nhiều!
 
Upvote 0
Gửi các bạn hàm đọc serial của HDD, xin ý kiến các bạn.

Chibi ơi,

Nếu mà PC có nhiều hơn 1 HDD, thì serial này là của HDD nào? hông lẽ tháo ra và "thử và sai" ? Nếu không thì mình cho nó tìm hết các HDD luôn được không ?

Thanks,
vumian
 
Upvote 0
Chibi ơi,
Nếu mà PC có nhiều hơn 1 HDD, thì serial này là của HDD nào? hông lẽ tháo ra và "thử và sai" ? Nếu không thì mình cho nó tìm hết các HDD luôn được không ?
Thanks,
vumian
Ông thử xem File này có đúng ý ông hong nha.

Thân
TDN
 

File đính kèm

Upvote 0
Hi,
Của ông là đọc mã Partition, ý tui muốn đề cập là mã HDD mờ
Thanks,
vumian
 
Upvote 0
Hướng giải quyết vấn đề này là đọc mã đĩa rồi ghi vào 1 ô nào đó, sau đó tạo 1 From cho người dùng nhập vào và so sách với mã đĩa, nếu đúng thì Unprotect, nếu sai thì Protect và ghi ra 1 ô nào đó. trong thu tục Workbook_Open kiểm tra 2 ô ghi ma đĩa và người dùng có trùng nhau không, nếu trùng thì không đăng nhập nếu không trùng thì hiện tên đăng nhập.
Chúc bạn thành công
 
Upvote 0
Bác Chibi có thể gửi 1 file xla làm mẫu không!
Em cũng muốn biết cách hoạt động để làm 1 cái cho mình nữa!
Thanks.
 
Upvote 0
PHP:
Function doc_ma_dia()
    Dim ObjetoWMI As Object
    Dim Disco As Object
    Dim Discos As Object
    Dim abc
    Set ObjetoWMI = GetObject("WINMGMTS:")
    Set Discos = ObjetoWMI.InstancesOf("Win32_PhysicalMedia")
    abc = ""
    For Each Disco In Discos
        abc = Disco.SerialNumber
        If Len(Trim(abc)) > 0 Then
            Exit For
        End If
    Next
    doc_ma_dia = Trim(abc)
End Function

Đã kiểm tra, format ổ không ảnh hưởng đến kết quả hàm trên.
Tôi dùng hàm trên đọc được tên CPU rất nhiều máy (thường cả 1 dãy số và chữ), tuy nhiên có 1 máy cho giá trị là số 0. Không hiểu sao?
 
Upvote 0
HDD Serial sẽ thay đổi khi FDisk hoặc format. Khỏi cần chứng minh chuyện thay đổi đó.

Giờ ko ai dùng HDD Serial làm Unique Key đâu.

Tất cả những vấn đề trên, chỉ cần Google là ra hết (Ex: Computer unique ID + Visual Basic, HDD Serial, MAC Address, etc...)

(code bằng APIs chứ đừng dùng ObjetoWMI)

P/S: Cái hàm trên của Hướng viết tệ quá xá! Function mà ko có kiểu giá trị, các hàm liên quan tới String mà ko dùng $ là ko optimized code, tên biến thì ko rõ nghĩa, tiếng anh - việt thì loạn cào cào, create object xong mà ko Kill Object, v.v... :) --> 0 điểm!
 
Lần chỉnh sửa cuối:
Upvote 0
Đã kiểm tra, format ổ không ảnh hưởng đến kết quả hàm trên.
Tôi dùng hàm trên đọc được tên CPU rất nhiều máy (thường cả 1 dãy số và chữ), tuy nhiên có 1 máy cho giá trị là số 0. Không hiểu sao?

Máy của mình hiện cho ra kết quả là 0, lúc đầu tưởng hàm bị sai hay sao ấy, kiểm tra ở các máy khác thì có mã bình thương. Không hiểu tại sao serial HDD lại không có? Chẳn lẽ HDD giả nhỉ??? trong khi mình dùng 3 năm nay rồi.

P/S: Cái hàm trên của Hướng viết tệ quá xá! Function mà ko có kiểu giá trị, các hàm liên quan tới String mà ko dùng $ là ko optimized code, tên biến thì ko rõ nghĩa, tiếng anh - việt thì loạn cào cào, create object xong mà ko Kill Object, v.v... :) --> 0 điểm!

Tất cả những vấn đề trên, chỉ cần Google là ra hết (Ex: Computer unique ID + Visual Basic, HDD Serial, MAC Address, etc...)
(code bằng APIs chứ đừng dùng ObjetoWMI)

1. Cái hàm ấy Anh Hướng chỉ copy trong file của bạn ChiBi thôi, không phải là tác giả. hihi. Nếu Hai2Hai thấy chướng mắt thì bổ sung cho anh em hihì
2. Vấn đề ở đây không phải là dùng google để tìm... mà trước khi tìm người ta không biết là tìm cái gì kia kìa.. (vì có ai nói là trong file sử dụng serial HDD đâu mà biết đề dùng Google tìm). VD như có 1 file lượm trên mạng về (trong khi mã nguồn đóng cứng hết) bạn biết nó mã hóa serial từ đâu mà tìm. có khi serial là union(serial HDD + serial CPU+ PmHoang) thì chỉ có bó tay.com
Nhưng nếu có ai đó nói ra cách mã hóa này thì may ra google mới có tác dụng.
3. Vấn đề thứ 3 là giả sử khi ta biết Serial rồi. Phải bảo quản Serial ở đâu cho lần khởi động sau VBA so sách Serial trong máy và trong file (nếu trùng nhau sẽ không hỏi nữa).
- Nếu lưu vào 1 Cell nào đó trên Worksheet, cái này không an tâm lắm, vì trong khi các vọc si vọc mà thấy có dòng lạ lạ, chẳn biết tác dụng gì... có thể sẽ xóa đi. --> khi khởi động lần sau sẽ không vào được file.
- Mình nghĩ nên lưu hệ số Serial vào VBA hay vào Regedit thì an toàn hơn, nhưng giờ chưa nghĩ ra ....mong cac bạn giúp.
 
Lần chỉnh sửa cuối:
Upvote 0
minh viết code trong ex rồi dung vba kiem tra seri cua hdd roi tao ra 1 file lưu vào 1 nơi bất kỳ, mỗi máy chỉ dung trên máy đo, nếu muốn dùng máy khác thì phai copy fiel vba đo để tạo ra 1 file chứa seri cua hdd, nhung van không dam bao vi nêu vao file ex xoa code đo thi như không, ai co cách ji hay khong chi cho mi nguoi với
 
Upvote 0
minh viết code trong ex rồi dung vba kiem tra seri cua hdd roi tao ra 1 file lưu vào 1 nơi bất kỳ, mỗi máy chỉ dung trên máy đo, nếu muốn dùng máy khác thì phai copy fiel vba đo để tạo ra 1 file chứa seri cua hdd, nhung van không dam bao vi nêu vao file ex xoa code đo thi như không, ai co cách ji hay khong chi cho mi nguoi với
Thì bạn phải không cho xoá code đó đi.
 
Upvote 0
Các bác giúp em giải thích giùm đoạn code này với! Em mày mò mãi không được?
 
Upvote 0
Function Decrypt_hammoi(key As Long, salt As Boolean, s As String) As String
Decrypt_hammoi = StrDecode(s, key, salt)
End Function
Function Encrypt_hammoi(key As Long, salt As Boolean, s As String) As String
Encrypt_hammoi = StrEncode(s, key, salt)
End Function
Function StrEncode(ByVal s As String, key As Long, salt As Boolean) As String
Dim n As Long, i As Long, ss As String
Dim k1 As Long, k2 As Long, k3 As Long, k4 As Long, t As Long
Static saltvalue As String * 4
If salt Then
For i = 1 To 4
t = 100 * (1 + Asc(Mid(saltvalue, i, 1))) * Rnd() * (Timer + 1)
Mid(saltvalue, i, 1) = Chr(t Mod 256)
Next
s = Mid(saltvalue, 1, 2) & s & Mid(saltvalue, 3, 2)
End If
n = Len(s)
ss = Space(n)
ReDim sn(n) As Long
k1 = 11 + (key Mod 233): k2 = 7 + (key Mod 239)
k3 = 5 + (key Mod 241): k4 = 3 + (key Mod 251)
For i = 1 To n: sn(i) = Asc(Mid(s, i, 1)): Next i
For i = 2 To n: sn(i) = sn(i) Xor sn(i - 1) Xor ((k1 * sn(i - 1)) Mod 256): Next
For i = n - 1 To 1 Step -1: sn(i) = sn(i) Xor sn(i + 1) Xor (k2 * sn(i + 1)) Mod 256: Next
For i = 3 To n: sn(i) = sn(i) Xor sn(i - 2) Xor (k3 * sn(i - 1)) Mod 256: Next
For i = n - 2 To 1 Step -1: sn(i) = sn(i) Xor sn(i + 2) Xor (k4 * sn(i + 1)) Mod 256: Next
For i = 1 To n: Mid(ss, i, 1) = Chr(sn(i)): Next i
StrEncode = ss
saltvalue = Mid(ss, Len(ss) / 2, 4)
End Function
 
Upvote 0
Cái này không hiểu có bị thay đổi khi format ổ không? Có bác nào đã thử kiểm tra lại chưa?

Mình đã thử rồi nếu lấy mã Partition thì khi format lại đĩa thì sẽ cho ra mã mới.
Lấy mã HDD thì khi format mã vẫn như cũ, nhưng mã HDD thì bị một lỗi nghiêm trọng là có xẫy ra rất nhiều máy có mã =0 (Kiểm tra khoảng 10 máy thì có đến 2 máy trùng mã HDD = 0) cho nên mã HDD không có an toàn tuyệt đối.

Ghi chú cho các bạn muốn bảo mật file: dù có bảo mất đến đâu đi nữa, người ta chỉ cần Disable Macro là có thể mở file excel lên bình thường lúc đó mấy cái mã máy xem như ko tồn tại vậy, rồi người ta xóa mấy cái đoạn mã đó, thì file cũng trở lại bình thường thôi bạn ạ. Mình cũng có một thời gian tìm hiểu để bảo mật, nhưng cuoi cùng mình cũng chấp nhận một điều thực tế là chỉ bảo mật người ngay thôi.hihi
 
Upvote 0
Trước kia mình nhầm là HDD Serial Number bị thay đổi. Nhưng giờ xin đính chính lại là HDD SN có 2 loại. 1 loại là Volume serial number và 1 loại là Manufacturer serial number. Loại thứ nhất thì bị thay đổi khi format/FDisk ổ cứng, loại thứ 2 thì ko. Tuy nhiên cách lấy Manufacturer serial number ở Windows 7 & Vista nó hơi khác với cách lấy trong WinXP (vì thế cần chú ý khi viết đoạn code này)

Các bạn có thể thử bằng cách download VNUNI SIC ở chữ ký của mình

P/S: Khi chạy trong môi trường windows mà ko có quyền Administration thì sẽ ko lấy được HDD SN theo cách thứ 2.

Hope that helps!
 
Lần chỉnh sửa cuối:
Upvote 0
Trước kia mình nhầm là HDD Serial Number bị thay đổi. Nhưng giờ xin đính chính lại là HDD SN có 2 loại. 1 loại là Volume serial number và 1 loại là Manufacturer serial number. Loại thứ nhất thì bị thay đổi khi format/FDisk ổ cứng, loại thứ 2 thì ko.
Còn lỗi ở một số máy cho ra serial HDD = 0, có nhiều máy cho ra số 0 lắm, điều này là do serial của các HDD bị trùng nhau hay sao? cung chưa hiểu tại sao?
 
Upvote 0
Còn lỗi ở một số máy cho ra serial HDD = 0, có nhiều máy cho ra số 0 lắm, điều này là do serial của các HDD bị trùng nhau hay sao? cung chưa hiểu tại sao?

Serial HDD loại nào trong 2 loại ở trên? Nếu dùng APIs ko thì ko đủ để lấy Mfg SN của HDD đâu

Trừ các loại component của 3rd-party được bán trên mạng, còn riêng SourceCode = VB trên mạng để lấy Mfg SN của HDD mà chạy được cho Vista/Win7 thì chỉ có duy nhất 1 nguồn trên Internet mà thôi (đó là bài mình tham khảo code của 1 nick khác và sau đó mình phải sửa lại thì mới ra đúng kết quả). (Có rất nhiều code lấy Mfg SN của HDD trên WinXP nhưng trên Vista + Win7 mà lấy đúng thì ko có nhiều đâu)

HDD Mfg SN của từng ổ cứng của tất cả các hãng đều có và không bao giờ trùng nhau.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh hai2hai có thể cho mã nguồn để lấy Manufacturer serial number

Tôi thấy nhiều đơn vị cung cấp phần mềm qua mạng, họ gửi cho mình 1 chương trình, và yêu cầu mình chạy chương trình đó trên máy sẽ cài đặt rôi báo cho họ nội dung của thông báo gì đó trên màn hình. Chắc chương trình này sẽ đọc mã "thầm lặng" nào đó của máy tính.

Sau đó họ gửi bộ cài đặt đến. Nếu cố tình cài trên máy khác là không được.

Từ đó suy ra: trước khi gửi bộ cài đặt, họ sẽ lưu mã "thầm lặng" trong 1 biến của phần mềm đó và kiểm tra khi cài đặt. Như vậy, nêu làm trên Excel, ta không cần phải ghi vào 1 ô của file xla.

Chỉ có điều: nếu người ta xem được mã nguồn thì vô hiệu hóa các lệnh kiểm tra mã "thầm lặng" là xong.
Có 1 vài suy nghĩ xin chia sẻ. Cảm ơn
 
Upvote 0
Anh hai2hai có thể cho mã nguồn để lấy Manufacturer serial number

Tôi thấy nhiều đơn vị cung cấp phần mềm qua mạng, họ gửi cho mình 1 chương trình, và yêu cầu mình chạy chương trình đó trên máy sẽ cài đặt rôi báo cho họ nội dung của thông báo gì đó trên màn hình. Chắc chương trình này sẽ đọc mã "thầm lặng" nào đó của máy tính.

Sau đó họ gửi bộ cài đặt đến. Nếu cố tình cài trên máy khác là không được.

Từ đó suy ra: trước khi gửi bộ cài đặt, họ sẽ lưu mã "thầm lặng" trong 1 biến của phần mềm đó và kiểm tra khi cài đặt. Như vậy, nêu làm trên Excel, ta không cần phải ghi vào 1 ô của file xla.

Chỉ có điều: nếu người ta xem được mã nguồn thì vô hiệu hóa các lệnh kiểm tra mã "thầm lặng" là xong.
Có 1 vài suy nghĩ xin chia sẻ. Cảm ơn

Nhìn chung khoá mềm là như vậy, nhưng để biết và vô hiệu hoá các lệnh kiểm tra thì đã trở thành hacker rồi, ít nhiều người viết ra chương trình cũng phải quan tâm đến bảo mật.
 
Upvote 0
Ghi chú cho các bạn muốn bảo mật file: dù có bảo mất đến đâu đi nữa, người ta chỉ cần Disable Macro là có thể mở file excel lên bình thường lúc đó mấy cái mã máy xem như ko tồn tại vậy, rồi người ta xóa mấy cái đoạn mã đó, thì file cũng trở lại bình thường thôi bạn ạ. Mình cũng có một thời gian tìm hiểu để bảo mật, nhưng cuoi cùng mình cũng chấp nhận một điều thực tế là chỉ bảo mật người ngay thôi.hihi

Đề tài này đã lâu, nhưng vẫn là mới với tôi. Xin hỏi pmhoang: Chọn Disable Macro là có thể mở file excel lên bình thường, nhưng nếu ta không cho xem mã nguồn thì làm sao xoá được?

Để không cho xem mã nguồn, trong cửa sổ VBA của Excel, kích chuột phải vô mục VBAProject, chọn VBAProject Properties (hiện hộp thoại), chọn Protection,
chọn Lock project for viewing; nhập mật khẩu.

Tự tôi không cho xem mã nguồn như trên và không có cách nào để xem mã nguồn mà không dùng mật khẩu

Anh pmhoang có biết cách xem mã nguồn không dùng mật khẩu thì chỉ giúp
Xin cảm ơn.
 
Upvote 0
Đề tài này đã lâu, nhưng vẫn là mới với tôi. Xin hỏi pmhoang: Chọn Disable Macro là có thể mở file excel lên bình thường, nhưng nếu ta không cho xem mã nguồn thì làm sao xoá được?

Để không cho xem mã nguồn, trong cửa sổ VBA của Excel, kích chuột phải vô mục VBAProject, chọn VBAProject Properties (hiện hộp thoại), chọn Protection,
chọn Lock project for viewing; nhập mật khẩu.

Tự tôi không cho xem mã nguồn như trên và không có cách nào để xem mã nguồn mà không dùng mật khẩu

Anh pmhoang có biết cách xem mã nguồn không dùng mật khẩu thì chỉ giúp
Xin cảm ơn.


Để bảo mật, các bạn đọc thêm chữ ký của tôi nhé. Hy vọng 1 số thông tin là hữu ích đó!
 
Upvote 0
Em có vấn đề xin nhờ thầy và các thành viên trong diễn đàn trợ giúp !
Vấn đề như sau:
Trong 1 file excel có nhiều hơn 6 sheet (nằm không theo thứ tự) nhưng không muốn người khác xoá và đổi tên các sheet có tên: sheetA, sheetB, sheetC, sheetD, shẹetE ( các sheet khác thì vẫn xoá và đổi tên được bình thường) thì cod như thế nào ạ ?
Rất mong được giúp đỡ !
Chân thành cảm ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Tình hình là thế này các Bác ạ! Em có một chương trình chạy bằng Excel được viết bằng VBA. Các Bác nào có cách crack một chương trình như vậy hay không? Cảm ơn các Bác nhiều!
 
Upvote 0
Thỉnh thoảng có máy báo lỗi đoạn code "Disco.SerialNumber"! Lỗi này do window thiếu cái gì đó hả các bác?
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom