Bảo mật trong VBA

Liên hệ QC
Status
Không mở trả lời sau này.
TuanVNUNI đã viết:
Khi đã chuyển về *.xla mà bị "Project unviewable" thì phải có phần mềm phá pass thôi.

Vậy bác có thể cho em biết đó là phần mềm nào và có thể download ở đâu. Bác có biết là có cách nào cho hiện nên cửa sổ excel của file .xla không? ( Trực tiếp trong excel hay là dùng phần mềm)?

Em gửi cho bác TUANVNUNI 1 file không sử dụng biện pháp vào Tool/ share workbook như bác chỉ dẫn mà vẫn cảnh báo "project is unviewable".
(Mà gửi kèm file trong diễn đàn này bằng cách nào vậy.)
 
Chỉnh sửa lần cuối bởi điều hành viên:
Để cài PW cho VBA ... bạn bấm phím ALt+F11 để vào Vb editor, sau đó chọn Tool\VBAProject Propeties ... Chọn Gờ Trang Protection và gõ PW vào là xong ... Và nhớ đánh dấu chọn vào check Lock Project for Wiewing.
Have fun!
 
Thân gửi bạn Fubi!
Mình đã đọc phần trao đổi của bạn về chủ đề "bảo mật trong VBA". Rất cảm ơn bạn đã giúp anh em trong diễn đàn có thêm một cơ hội quý báu để rộng đường học tập. Trong phần cuối của tài liệu Tiếng Anh của bạn có một dòng, mình đặc biệt chú ý. Đó là: You can open the add-in's locked VBA project by opening a new workbook and creating a VBA procedure to set the IsAddin property of the ThisWorkbook object of the add-in to False and then unshare the add-in workbook
Bạn có thể hướng dẫn mình cách viết đoạn mã lập trình ấy được không?
Mình thực sự cần nó.
Cám ơn bạn rất nhiều.
 
Lần chỉnh sửa cuối:
Dear nguyethanhtuu,
--------------------
Để mình thay bạn Fubi trả lời bạn nhé:
Bạn thấy rằng IsAddIn là một thuộc tính của Workbook, vậy sao bạn không thử gán cho thuộc tính này của Workbook mà bạn muốn thay đổi một giá trị kiểu Boolean? Dưới đây là một ví dụ minh hoạ (minh hoạ thôi, cần thiết phải lập một thủ tục hay không thì tuỳ bạn):
Mã:
Public Sub IsAdd_In(Optional bk As Workbook, Optional blnIsAddIn As Boolean)
If bk Is Nothing Then Set bk = ActiveWorkbook
bk.IsAddin = blnIsAddIn
End Sub

Trình tự "khóa" bảng tính như thế nào thì trình tự "mở khóa" phải thực hiện ngược lại. Bạn rất chính xác khi tìm ra mấu chốt của vấn đề:
Trong phần cuối của tài liệu Tiếng Anh của bạn có một dòng, mình đặc biệt chú ý. Đó là: You can open the add-in's locked VBA project by opening a new workbook and creating a VBA procedure to set the IsAddin property of the ThisWorkbook object of the add-in to False and then unshare the add-in workbook
Đó là một trong những tư duy rất cơ bản của người người lập trình.
 
Lần chỉnh sửa cuối:
Thân gửi bạn Đào Việt Cường !
Mình đã làm theo sự mách bảo của bạn. Cụ thể: đã khai báo tên workbook, đã gán giá trị false cho thuộc tính IsAddin. Khi chạy, chương trình không báo lỗi gì, nhưng mở VBAproject vẫn "Project is unviewable"!
Bạn có thể chỉ bảo cụ thể hơn được không ?
 
Dear nguyenthanhtuu,
----------------------
Bạn sắp thành công rồi đó!
Bạn hiểu rằng chính việc Share Workbook dẫn đến Unviewable và nếu Workbook Is AddIn thì chúng ta không thể bỏ chế độ Share được. Việc phải "set the IsAddin property of the ThisWorkbook object of the add-in to False" là để cho chúng ta gỡ bỏ Share Workbook.
Now, tiếp tục đến cửa thứ 2 và mở khoá:
"then unshare the add-in workbook"
 
Bạn Đào Việt Cường thân mến !
Cảm ơn bạn đã động viên. Hiện tại mình vẫn dậm chân tai... cửa thứ 2 này từ hôm qua tới giờ. Tuy nhiên mình sẽ cố gắng. Nếu không được, mình lại tiếp tục gõ cửa các bạn.
 
Dear nguyenthanhtuu,
---------------------
Đừng nói là anh không biết UnshareWorkbook chỗ nào trên menu nhé!
Còn anh muốn code thì để em F1 ra đọc vậy. Lâu rồi nên em khổng nhớ, hình như có đoạn MultiUser... gì gì đó...
...
:pilot:
A đây rồi:
This example determines whether the active workbook is open in exclusive mode. If it is, the example saves the workbook as a shared list.
If Not ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.FullName, _ accessMode:=xlSharedEnd If
Nhưng để cho dễ hiểu thì anh xem cái này::thumbdown:
Mã:
Public Sub Workbook_UnShared(Optional bk As Workbook)
If bk Is Nothing Then Set bk = ActiveWorkbook
If bk.MultiUserEditing Then bk.ExclusiveAccess
End Sub
 
Mình làm theo hướng dẫn thì làm đc file Add-in (*.xla) hiển thị chữ "Project unviewable" nhưng bây giờ không tài nào mở đc nó ra nữa, thế mới đau chứ. Làm theo hướng dẫn của các bạn nhưng vẫn không ăn thua. Hay là tại mình ốc quá nhỉ --=0, bạn nào có thể hướng dẫn trình tự các bước mở file Add-in hiển thị chữ "Project unviewable" đc ko?
 
NHG đã viết:
Mình làm theo hướng dẫn thì làm đc file Add-in (*.xla) hiển thị chữ "Project unviewable" nhưng bây giờ không tài nào mở đc nó ra nữa, thế mới đau chứ. Làm theo hướng dẫn của các bạn nhưng vẫn không ăn thua. Hay là tại mình ốc quá nhỉ --=0, bạn nào có thể hướng dẫn trình tự các bước mở file Add-in hiển thị chữ "Project unviewable" đc ko?
Giới thiệu các bạn một topic ngược lại với topic này.
http://www.giaiphapexcel.com/forum/showthread.php?p=16615#post16615

Lê Văn Duyệt
 
Chào mọi người.
Em cũng có một file xls tính toán đã lập ra từ lâu lắm, hồi đó có dùng Password view để lock VBA code. Sau đó chẳng hiểu thế nào nghịch vào "Protect and share workbook" đánh vào một cái password mà không tài nào bây giờ có thể nhớ nổi (ngày xưa chỉ nghĩ nó cũng giống như cái password lock worksheet thôi, dùng cái add-in "password.xla" là phá được). Ai dè giờ muốn xem VBA code lại không được, không thể nhập pass được nữa. Đọc mấy bài trên tôi biết là cần phải bỏ cái unshare đi. Nhưng mà không tài nào mà nhở nổi cái password linh tinh ngày xưa đặt nữa. Chỉ nhớ mỗi cái password của VBA thôi. Dùng mấy cái tool phá mã nhưng mà chỉ phá được lock sheet và lock workbook. Chán quá
Ai có cách gì thì bày cho tôi vơi.
Xin chân thành cảm ơn.
------------------------
 
Cảm ơn, ttphong2007
Có thể chương trình mà anh giới thiệu có khả năng dò tìm mã (pass). Tuy nhiên liệu nó có thể dò được mã của "protect and share workbook" không?. Vì không cần có mã này thì em vẫn mở được file tính toán ra, Vẫn cho nhập số liệu, vẫn tính toán bình thường, chỉ khác là không thể vào VBE nữa vì "project is unviewable". Chỉ có cách unshare thôi.
Anh đã dùng thử chương trình này để unshare chưa (Còn mấy loại mã khóa file, hay là mã khóa sheet hay worksheet thì thật sự không đáng ngại).
Cảm ơn anh vì đã giúp đỡ.
Thái }}}}}
 
Chào DamXuanThai,

Bản thân phần mềm sẽ không thể UnShare Workbook được, nhưng mình sẽ có cách UnShare Workbook. Bạn làm theo trình tự sau:

1. Dùng phần mềm tìm lại tất cả các password: open, modify, VBA Project (không xem được trong chế độ ShareWorkbook).

2. Mở tập tin đó ra, Save As theo định dạng Excel version thấp hơn khi đó Excel thông báo lỗi, cứ OK

3. Nhấn Alt+F11 và VBE. Sẽ thấy được các Object trong VBP Project và có thể copy code ra chỗ khác hoặc làm tiếp để UnShare. Nhập mật mã tìm thấy ở bước 1 cho VBA Project và OK.

4. Ra lại Workbook, lúc này đang ở chế độ chưa Share bạn vào chọn Share và đặt mật mã mới cho nó. Và lưu lại.

5. Mở lại tập tin vừa lưu này và UnProtect Workbook với mật mã vừa đặt. Thế là xong ^_^

Good luck,
TP.

Lưu ý: Tôi không chịu trách nhiệm nếu bạn dùng cách này mở tập tin của người khác
 
Ngày xưa tớ nhớ có một topic về bẻ VBA chẳng thấy bác nào quan tâm.
Bạn nào cần lock VBA thì gửi cho tớ giúp. Đây là lỗi khá nghiêm trọng của
Microsoft nên mình không nên tiết lộ ==> ảnh hưởng đến chính những người
phát triển chung. kể cả các phiên bản sau này đã đổi cách mã mật khẩu
xong lỗ thủng thì còn nguyên vì tương thích ngược cho ghi về 97.

Xem được it code của VUNI :). nói vậy thôi chứ chẳng để làm gì. Nói chung
từ khi biết lỗ hổng đó mình ghét cay ghét đắng VBA.

Ví dụ: cái view cái modun của Vietkey. đợi tớ gửi phát. hay mất điẹn lắm :(

Mã:
Private Sub CmdBtnFindCode_Click()
    CBCodSource.ListIndex = detectCode - 1
End Sub

Private Sub CBCodSource_Click()
    Dim idx1 As Integer, idx2 As Integer
    idx1 = CBCodSource.ListIndex + 1
    idx2 = CBCodDest.ListIndex + 1
    If idx1 = 40 Then idx1 = 39
    If idx2 = 40 Then idx2 = 39
    setcode idx1, idx2
    idCodeSource = idx1
    idCodeDes = idx2
End Sub
Private Sub CBCodDest_Click()
    CBCodSource_Click
End Sub

Private Sub CommandStop_Click()
    IsStop = True
    CommandStop.Enabled = False
End Sub


Sub myClose_Click()
    Unload Me
End Sub


Private Sub OptionButtonDown_Click()
    SelectRange Me
End Sub

Private Sub OptionButtonFull_Click()
    SelectRange Me
End Sub

Private Sub OptionButtonSelect_Click()
    SelectRange Me
End Sub

Private Sub OptionButtonUp_Click()
    SelectRange Me
End Sub

Sub Replaceall_Click()
    CBCodSource_Click
    doConvert
    Percent myPross, 100
End Sub
Sub setcode(Sour As Integer, Des As Integer)
    If Me.Tag <> "LoadOK" Then Exit Sub
    Me.LabelTest.Text = TestConvert(Sour, SpinButton1.Value)
    VK_Code2Code Sour, Des
    VK_Code2Code Sour, Des
    flagVIQR = (Sour = 24)
End Sub

Private Sub SpinButton1_Change()
 With Me
    setcode .CBCodSource.ListIndex + 1, .CBCodSource.ListIndex + 1
    .LabelTest.SelStart = Len(.LabelTest.Text)
    .LabelTest.SetFocus
End With
End Sub
Private Sub UserForm_Initialize()
Dim Code As Integer
    With Me
        .imgPanel.Picture = frmResource.vkpanel.Picture
        .myClose.Picture = frmResource.myClose.Picture
        .CommandStop.Picture = frmResource.CommandStop.Picture
        .CommandHelp.Picture = frmResource.CommandHelp.Picture
        idCodeSource = detectCode
        checkDefCode
        'idCodeSource = iDefaultCode
        Code = idCodeSource
        SetFontList .CBCodSource, Code - 1
        SetFontList .CBCodDest, 38 ' 14
        'idCodeDes = 39
        .Tag = "LoadOK"
    End With
    myLoadSetting
    SelectRange Me
    CBCodSource_Click
End Sub
Private Function TestConvert(Sour As Integer, l As Integer) As String
    Dim TempStr As String, TempStr1 As String
    VK_Code2Code Sour, 15
    TempStr1 = GetWordsForTestConvert(l)
    TempStr = TempStr1 + TempStr1
    TestConvert = Left(TempStr, VK_Convert(TempStr1, TempStr))
End Function

Private Function mySaveSetting()
    SaveSetting myApp, Section, "ChBSave", Str(Me.ChBSave.Value)
End Function
Private Function myLoadSetting()
    ChBSave.Value = Trim(GetSetting(myApp, Section, "ChBSave")) = "True"
End Function
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    mySaveSetting
End Sub

Mà thôi không anh Tuấn Việt Key kiện tớ vi phạm, nghịch ngợm thì chết.
Em chỉ học tập thôi anh nhé :)
 
Chỉnh sửa lần cuối bởi điều hành viên:
Remove VBA Protection 1.1.2
removes VBA project passwords and other protections unlocks Excel 5 or higher add-ins, workbooks and sheets, removes the password to modify and/or share, repairs small damages in the VBA projects and unlocks Excel VBA Lock protected Excel files.
The tool has several advantages over other VBA password recovery tools; no other tool (as far as we now) can remove the VBA protection from unviewable projects and projects protected with a newer VBA version than you have.
The VBA code protection is removed even in case the Excel workbook sharing bug made the project unviewable or in situations where Excel VBA Lock was used to protect the code and you have misplaced the original, unprotected file.
Buy the full version of the tool (20 US$)
https://www.plimus.com/jsp/buynow.jsp?contractId=1666338
 
Theo tôi lỗi "Project unviewable" là do bản Excel trước mở file đã lưu bằng Excel sau.
Ví dụ file viết bằng VBA nếu đặt Password trên office XP khi mởi bằng office 98 thì sẽ nhận thông báo lỗi trên.
Muốn hết lỗi này bạn phải bỏ Password thì Excel version trước mở ra sử dụng được, tất nhiên có thể một số lệnh của VBA sẽ báo lỗi - lúc đó sửa lại sau.
 
DotNhan đã viết:
Theo tôi lỗi "Project unviewable" là do bản Excel trước mở file đã lưu bằng Excel sau.
Ví dụ file viết bằng VBA nếu đặt Password trên office XP khi mởi bằng office 98 thì sẽ nhận thông báo lỗi trên.
Muốn hết lỗi này bạn phải bỏ Password thì Excel version trước mở ra sử dụng được, tất nhiên có thể một số lệnh của VBA sẽ báo lỗi - lúc đó sửa lại sau.
Bác tham khảo ở đây nhé :
http://www.giaiphapexcel.com/forum/showthread.php?t=1448
http://www.giaiphapexcel.com/forum/showthread.php?t=260
http://www.giaiphapexcel.com/forum/showthread.php?t=1448


Thân!
 
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom