[Hỏi] Ngăn việc đọc được mật khẩu đã dấu dưới dạng các dấu hoa thị "*"

Liên hệ QC

ongke0711

Thành viên gắn bó
Tham gia
7/9/06
Bài viết
2,269
Được thích
3,013
Giới tính
Nam
Tôi được biết hiện có các phần mềm có thể đọc được mật khẩu đã ẩn dưới dạng dấu hoa thị "*" khi nhập vào Textbox.
- Asterisk Key
- BulletsPassView

Nhưng các phần mềm này cũng có nói là nó bị hạn chế không đọc được đối với một số ứng dụng "không lưu mật khẩu bên dưới các ký tự hoa thị" (nguyên câu tiếng Anh "...some applications that don't store the password behind the bullets"). Các ứng dụng đó như là:
  • Chrome, Firefox, and Opera Web browsers.
  • Dialup and network passwords of Windows.
Vậy các bác nào biết cái kỹ thuật này thì xin vài hướng dẫn, giải thích giùm cái giải thuật bảo mật mật khẩu cao của các trình duyệt trên nhé. Không biết đối với VBA có làm được không?
Cảm ơn.
 
Kỹ thuật/giải thuật của chương trình khác tôi không biết nhưng trong VBA nếu cần thì tôi dùng cách củ chuối này :D
Mã:
Private Sub FacePassword_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Visible - for input
If (KeyCode < 16 Or KeyCode > 18) And (KeyCode < 35 Or KeyCode > 40) And KeyCode <> 9 Then
    If Not ((Shift Or 5) Or (Shift = 2 And KeyCode = 67)) Then
        Me.RealPassword.SelStart = Me.FacePassword.SelStart
        Me.RealPassword.SelLength = Me.FacePassword.SelLength
        Me.RealPassword.SetFocus
    End If
End If
End Sub
Mã:
Private Sub RealPassword_Change()
'Invisible (.Top = -1000)
    ReturnFaceTB
End Sub
Mã:
Private Sub RealPassword_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Invisible (.Top = -1000)
    ReturnFaceTB
End Sub
Mã:
Private Sub ReturnFaceTB()
    Me.FacePassword.Value = String(Len(Me.RealPassword.Value), "*")
    Me.FacePassword.SelStart = Me.RealPassword.SelStart
    Me.FacePassword.SelLength = Me.RealPassword.SelLength
    Me.FacePassword.SetFocus
End Sub
 
Câu hỏi của ông kẹ rộng quá, kg biết trả lời sao
 
Kỹ thuật/giải thuật của chương trình khác tôi không biết nhưng trong VBA nếu cần thì tôi dùng cách củ chuối này :D
Mã:
Private Sub FacePassword_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
..
End Sub

Mã:
Private Sub RealPassword_Change()
'Invisible (.Top = -1000)
    ReturnFaceTB
End Sub

Mã:
Private Sub RealPassword_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
..
End Sub

Mã:
Private Sub ReturnFaceTB()
..
End Sub


Tôi diễn giải xem có hiểu đúng không nhé anh huthang_bd.
- Tức là anh tạo một textbox làm mặt nạ cho textbox lưu pass thât. [FacePassword]. textbox này chỉ thuần tuý lưu ký hiệu "*" thôi.
- Khi gõ vô [Facepass] thì sẽ lưu pass thật vào textbox [Realpass] và xử lý qua lại giữa 2 textbox này.
 
Vì kg chống được mấy con mèo dùng user keyboard hook, hay sâu hơn là ở tầng kernel keyboard driver filter hook (rootkit)
Nói nôm na, bình dân là keylogger đó
Tạm thời dùng onscreen keyboard đi
 
Vì kg chống được mấy con mèo dùng user keyboard hook, hay sâu hơn là ở tầng kernel keyboard driver filter hook (rootkit)
Nói nôm na, bình dân là keylogger đó
Tạm thời dùng onscreen keyboard đi

Giả định là mình không tính đến các phần mềm KeyLogger nhé bác. Chỉ cần ngăn cái ứng dụng đọc được pass dứoi dạng dấu "*" thôi, chứ mình không đòi hỏi cao hơn hoặc đi sâu vào bảo mật hoàn toàn trước các phầm mềm theo dõi đâu.
Vì cái ứng dụng đọc pass nó nói chỉ đọc được "...password stored under the bullets.." nên muốn tìm hiểu để né nó. :)
 
Tôi diễn giải xem có hiểu đúng không nhé anh huthang_bd.
- Tức là anh tạo một textbox làm mặt nạ cho textbox lưu pass thât. [FacePassword]. textbox này chỉ thuần tuý lưu ký hiệu "*" thôi.
- Khi gõ vô [Facepass] thì sẽ lưu pass thật vào textbox [Realpass] và xử lý qua lại giữa 2 textbox này.
Đúng là như vậy.
 
Đang bị đám mèo của Hoa sen đại dương nó dí quá, chưa có đầu óc trả lời ông kẹ được.
Rảnh mới "rờ em" xem thử mấy phần mềm kia ngoài GetWindowText, WM_GETTEXT nó còn làm cái gì nữa không.
Trong user32.dll có 1 hàm undocument InternalGetWindowText, hàm này rất mạnh và nhanh. Không biết tụi app kia có dùng không.
 
Ông kẹ biết phần mềm KeePass không, nó làm được cái edit control ngăn chặn mấy kiểu reveal password dạng này. Có điều nó code = VC++, nếu ông kẹ muốn ý tưởng thì đọc ở đây:
Lúc đầu, ý tưởng tui cũng như vậy. Search 1 hồi thì cũng ra.
Còn nhiều cách khác, như tự keyboard hook chính mình, nhận được key thì lưu giữ riêng trong 1 vùng memory riêng của mình, quăng cái Password char lên edit control. Quản lý các key, tác vụ copy&paste, delete, insert... nữa.
À mà edit box của MSForm là windowless mà, ongke thử xem các tool kia lấy được password không. Trên nguyên tắc là không vì nó có Window Handle HWND gì đâu mà ...GetText... cái gì. Nó là Edit control giả thôi, mọi tác vụ paint piếc, key input, forcus... đều do thằng Form cha nó quản lý.
 
Tui vừa thử rồi, với edit control của MSForm, nó không lấy password text được đâu.
 

File đính kèm

  • 1.png
    1.png
    12.4 KB · Đọc: 20
Tui vừa thử rồi, với edit control của MSForm, nó không lấy password text được đâu.

Tôi cũng thử với Access form, Userform Excel thì 2 cái phần mềm trên nó không đọc được nhưng nó đọc được Edit box trên web. Không biết do không phải là bản Full nên nó không đọc được hay nó cũng chỉ đọc được trên nền web.

221859


- Công nhận cái giải thuật của anh huuthang_bd đơn giản vậy mà mình nghĩ không ra. :)
 
À, trong bộ Nirosoft à.
Không liên quan tới full hay kg đâu
Web thì khác nữa bạn , nó gọi là các HTML edit control (tag). Nó cũng là windowsless control. Lấy text của nó thì kg dùng Windows API, dùng API Khác
Bạn dùng Winspy xem cái password editbox đó có phải Window control kg ? IE phải kg ?
Thử với Chrome, Firefox xem sao ?
 
Mình xem trên trang Nirosoft và kiểm tra rồi, BulletsPassView chỉ lấy được password trong HTML edit control trên IE thôi. Nó không lấy được với các trình duyệt khác.
Vì các trình duyệt khác nhau thì có các bộ thư viện API riêng để xử lý với HTML. Chrome thì base trên opensource Chrominum, Firefox thì mình không rành, IE thì mshtml.dll. Mshtml.dll API có document của Microsoft.
Ông BulletsPassView dùng mshtml.dll này, read process memory và parse HTML để lấy password.
 
Mạnh có mấy Soure code tải trên mạng để đọc Pass Access Úp luôn cho thớt này tham khảo thêm ai thích thì coi ... ko thích thì thui
Còn 4 hay 5 kiểu nữa nếu ai đó la lên thì úp tiếp cho ko thì cũng thui đơn giản vậy thui ===\.
Mã:
Rem ------------------------------------------------------------------------------------------------------------
Rem Access Database Password Recovery (ADPR)
Rem Recovers the passwords of most .mdb files
Rem © Copyright Craig Phillips, All rights reserved 2008-2009
Rem
Rem This program is free software: you can redistribute it and/or modify it under the terms of the GNU
Rem General Public License version 3 as published by the Free Software Foundation.
Rem
Rem This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
Rem even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Rem General Public License for more details.
Rem http://www.gnu.org/licenses/
Rem ------------------------------------------------------------------------------------------------------------
Rem Please do not use this code for any malicious activity
Rem I will not accept responsibility for any criminal act
Rem This code is purely for forgotten password recovery
Option Explicit
Rem http://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=72736&lngWId=1
Private Sub cmdBrowse_Click()

    cd.Filter = "Microsoft Access Files (*.mdb)|*.mdb|All Files (*.*)|*.*"
    cd.DialogTitle = App.FileDescription
    cd.ShowOpen                                     ' Show open dialog
   
    If Not Len(cd.FileName) = 0 Then
        txtFile.Text = cd.FileName                  ' Put the filename into the textbox
       
        Call GetPassword                            ' Get the password
    End If

End Sub

Private Sub cmdClose_Click()

    End                                             ' End the program
   
End Sub

Private Function GetPassword()

    On Error Resume Next

    Dim Access2000Decode As Variant                 ' Decode Array (Access 2000)
    Dim Access9597Decode As Variant                 ' Decode Array (Access 95/97)
   
    Dim fFile       As Integer                      ' File Number
    Dim bCnt        As Integer                      ' Loop Count
   
    Dim ret95wd(17) As Byte                         ' Return 95/97 Password (max 18 chars)
    Dim retXPwd(17) As Integer                      ' Return File Password (max 18 chars)

    Dim wkCode      As Integer                      ' Working Code
    Dim mgCode      As Integer                      ' Magic Code
   
    'Define the Access 95/97 decode array
    Access9597Decode = Array(&H86, &HFB, &HEC, &H37, &H5D, &H44, &H9C, &HFA, &HC6, _
                             &H5E, &H28, &HE6, &H13, &HB6, &H8A, &H60, &H54, &H94)
   
    'Define the Access 2000 decode array
    Access2000Decode = Array(&H6ABA, &H37EC, &HD561, &HFA9C, &HCFFA, _
                      &HE628, &H272F, &H608A, &H568, &H367B, _
                      &HE3C9, &HB1DF, &H654B, &H4313, &H3EF3, _
                      &H33B1, &HF008, &H5B79, &H24AE, &H2A7C)

    If Len(txtFile.Text) > 0 Then                   ' If theres text in the file
   
        fFile = FreeFile                            ' Free File Channel
   
        Open txtFile.Text For Binary As #fFile      ' Open the file
            Get #fFile, 67, retXPwd                 ' Get Encoded Access 2000+ Password
            Get #fFile, 67, ret95wd                 ' Get Encoded Access 95/97 Password
            Get #fFile, 103, mgCode                 ' Get Magic code
        Close #fFile
       
        mgCode = mgCode Xor Access2000Decode(18)    ' Xor magic code

        txt9597Password.Text = vbNullString         ' Clear the 95/97 Password textbox
        txt2000Password.Text = vbNullString         ' Clear the 2000+ textbox

        For bCnt = 0 To 17
       
            ' Decode Access 95/97 Password
            wkCode = ret95wd(bCnt) Xor Access9597Decode(bCnt)
            txt9597Password.Text = txt9597Password.Text & Chr(wkCode)
       
            ' Decode Access 2000+ Password
            wkCode = retXPwd(bCnt) Xor Access2000Decode(bCnt)
           
            If wkCode < 256 Then                    ' Normal ASCII Code
                txt2000Password.Text = txt2000Password.Text & Chr(wkCode)
            Else                                    ' Un-normal; XOR with Magic Code
                txt2000Password.Text = txt2000Password.Text & Chr(wkCode Xor mgCode)
            End If
           
        Next bCnt
       
    Else
   
        txt2000Password.Text = "No file Selected"       ' No file
   
    End If
   
Exit Function
ErrHand:
    MsgBox "Error with opening file", vbCritical, App.Title


End Function

Private Sub Command1_Click()
Me.ad.Filter = " Text Files (*.txt)|*.txt"
ad.ShowSave
On Error Resume Next
Open ad.FileName For Output As #1
On Error Resume Next
Print #1, "|Database Location : "; txtFile.Text + " | Access 95/97 Password : " + txt9597Password.Text + " | Access 2000+ Password : " + txt2000Password.Text; "|"


Close #1


End Sub

Private Sub mnuAbout_Click()
frmMain.Show

End Sub

Private Sub MNUexit_Click()
End

End Sub

Private Sub MnuLoad_Click()
cmdBrowse = True

End Sub

Private Sub MnuSave_Click()
Command1 = True

End Sub
 

File đính kèm

Hì hì, bài tập cho cậu code Delphi đó, cho cái Dll của cậu hay viết cái GUI
 
Mạnh có mấy Soure code tải trên mạng để đọc Pass Access Úp luôn cho thớt này tham khảo thêm ai thích thì coi ... ko thích thì thui
Còn 4 hay 5 kiểu nữa nếu ai đó la lên thì úp tiếp cho ko thì cũng thui đơn giản vậy thui ===\.
Mã:
Rem ------------------------------------------------------------------------------------------------------------
Rem Access Database Password Recovery (ADPR)
Rem Recovers the passwords of most .mdb files
...

May quá, code này chưa giải mã được file .accdb __--__ :)
 
Hì hì, bài tập cho cậu code Delphi đó, cho cái Dll của cậu hay viết cái GUI
thì khi nào rảnh cũng tập tành kiểu ý ... xong chạy coi sao ... chạy thấy OK hahahaha ... xong nghiên cứu tiếp ... còn ai keo sao kệ họ -0-0-0-
Bài đã được tự động gộp:

May quá, code này chưa giải mã được file .accdb __--__ :)
mai mốt rảnh coi lại hình như có code File *.accdb đó ( hên thì có mà trật thì vui he )
 
Cho Excel nè ... ai có khả năng phát triển tiếp ... code của tây đấy
Mã:
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'PROGRAM    :   Updated Excel Password Recovery Tool
'AUTHOR     :   Vikas Madaan
'  __         __        ___      ___
'  \ \       / /       |   \    /   |
'   \ \     / /        | |\ \  / /| |
'    \ \   / /         | | \ \/ / | |
'     \ \_/ /    __    | |  \__/  | |
'      \___/    (__)   |_|        |_|
'
'DATE       :   Feburary 07, 2004.
'
'COMMENTS   :   This is an Excel File Password Recovery Tool Update.
'           It is used to recover password from the Excel File.
'           It also Recover the Password of Sheets within that File.
'           If no Password is set then it shows the relative
'           message at the strarting of checking.
'           It show the usage of Dictionary Attack &
'           Brute Force Attack from 1 to 25 Character Length
'           But you can increase it to any length.
'           when U modify this code & add New Features
'           then please also send me the copy of that.
'           USE FOR EDUCATIONAL & HELPING PURPOSES ONLY!!!
'           If you need support or to give suggestions to improve,
'           you can email me at vikasmadaan25@hotmail.com
'           or thru yahoo messenger vikasmadaan25@yahoo.com
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Option Explicit
Dim Char(62) As String 'Character for Brute Force
Dim CharSet As String 'Include all Characters in Char()
Dim tm As Date  'For Total Time
Dim PCount As Long ' To Check Total Password Checked
Dim PLast As Long 'To Check Last Total
Dim ExcelApp As Object 'Object of Excel
Dim wb 'As excel.Workbook  'For Excel Workbook
Dim ws 'As Worksheet 'For Excel Worksheet
Dim Pass As String 'Hold the Current Password Applied
Dim FPass As String 'Hold the File Password
Dim Find As Boolean 'Contanin True if the Password Found
Dim RecoveryStop As Boolean 'If true the Recovery Process will be Stoped

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This is the main function that checks for the password of
'Excel file it Returns True if Password Found.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Function FindPassword(ByVal Pass As String) As Boolean
On Error GoTo NotFound
PCount = PCount + 1
DoEvents
Set wb = ExcelApp.Workbooks.Open(FName.Text, , True, , Pass)
wb.Close False
FindPassword = True
Exit Function

NotFound:
FindPassword = False
End Function

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This is the main function that checks for the password of
'WorkSheet/Sheet of Excel File, It Returns True if Password Found.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Function FindPasswordSheet(ByVal Pass As String) As Boolean
On Error GoTo NotFound
PCount = PCount + 1
DoEvents
ws.Unprotect Pass
FindPasswordSheet = True
Exit Function

NotFound:
FindPasswordSheet = False
End Function

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function checks Whether the Excel File or
'WorkSheet/Sheet is Password Protected or Not.
'It Returns True if the File is Password Protected.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Function CheckPasswordSet(ByVal CheckBookPass As Boolean) As Boolean
Dim Find As Boolean

If CheckBookPass Then
 Find = FindPassword("")
 If Find Then
  'MsgBox "No Password Set For The File" & vbCrLf & "You Can Open File Without Any Password", vbExclamation, "Excel File Password Recovery"
  Password.Text = Password.Text & FName.Text & vbTab & ":" & vbTab & "No Password Set for the File, You can open File without any Password." & vbCrLf
  FPass = ""
  CheckPasswordSet = False
  Exit Function
 End If
Else
 Find = FindPasswordSheet("")
 If Find Then
  'MsgBox "No Password Set For The Sheet : " & ws.Name & vbCrLf & "You Can Open File Without Any Password", vbExclamation, "Excel File Password Recovery"
  Password.Text = Password.Text & FName.Text & " -> " & ws.Name & vbTab & ":" & vbTab & "No Password Set for the Sheet, You can Make Changes in Sheet without any Password." & vbCrLf
  CheckPasswordSet = False
  Exit Function
 End If
End If
CheckPasswordSet = True
End Function

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function Apply the Dictionary Attack Method on
'Excel File or WorkSheet/Sheet to Recover the Password.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Sub DictionaryAttack(ByVal CheckBookPass As Boolean)
'Dictionary Attack for File & Sheet
On Error GoTo ErrOccur
Dim Find As Boolean

Open App.Path & "\" & "English.dic" For Input As #1
PCount = 0
PLast = 0
Timer1.Enabled = True
tm = Now

Do Until EOF(1)
  DoEvents
  Line Input #1, Pass
  If CheckBookPass Then
   Find = FindPassword(Pass)
  Else
   Find = FindPasswordSheet(Pass)
  End If
  If Find Or RecoveryStop Then Exit Do
Loop

Timer1_Timer
If RecoveryStop Then
     Password.Text = Password.Text & "Recovery Process Stopped By User....." & vbCrLf
ElseIf Find Then
  'MsgBox "Password Found" & vbCrLf & vbCrLf & "Password=""" & Pass & """", , "Excel File Password Recovery"
  If CheckBookPass Then
   Password.Text = Password.Text & FName.Text & vbTab & ":" & vbTab & Pass & vbCrLf
   FPass = Pass
  Else
   Password.Text = Password.Text & FName.Text & " -> " & ws.Name & vbTab & ":" & vbTab & Pass & vbCrLf
  End If
Else
  'MsgBox "Sorry! Password Not Found", , "Excel File Password Recovery"
  If CheckBookPass Then
   Password.Text = Password.Text & FName.Text & vbTab & ":" & vbTab & "Sorry, Password Not Found." & vbCrLf
   FPass = "File Password Not Found"
  Else
   Password.Text = Password.Text & FName.Text & " -> " & ws.Name & vbTab & ":" & vbTab & "Sorry, Password Not Found." & vbCrLf
  End If
End If

ErrOccur:
Timer1.Enabled = False
Close #1
If Err Then
 MsgBox Err.Description, vbCritical, "Excel File Password Recovery - Error"
End If
End Sub

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function Apply the Brute Force Attack Method on
'Excel File or WorkSheet/Sheet to Recover the Password.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Sub BruteForceAttack(ByVal CheckBookPass As Boolean)
'Brute Force Attack for File & Sheet
Dim Find As Boolean

PCount = 0
PLast = 0
Timer1.Enabled = True
tm = Now

RecoverPassword CheckBookPass

Timer1.Enabled = False
End Sub

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function help in Recover Password for
'Brute Force Attack.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Sub RecoverPassword(ByVal CheckBookPass As Boolean)
    Dim MinLen As Integer, MaxLen As Integer
 
    MinLen = Val(txtMin.Text)
    MaxLen = Val(txtMax.Text)
    Find = False
    RecoveryStop = False
    
    ' Continue Generate Passwords Until the Following Happen:
    ' > Password Found.
    ' > Password Length Exceed Max Length.
    ' > User Stop.
    
    'Start from Min Length to Max Length
    Do
        GenPass MinLen, CheckBookPass
        MinLen = MinLen + 1
    Loop Until Find Or MinLen > MaxLen Or RecoveryStop
    
    Timer1_Timer
    ' Determine why password generation stopped.
    If RecoveryStop Then
     Password.Text = Password.Text & "Recovery Process Stopped By User....." & vbCrLf
    ElseIf Find Then
     'MsgBox "Password Found" & vbCrLf & vbCrLf & "Password=""" & Pass & """", , "Excel File Password Recovery"
     If CheckBookPass Then
      Password.Text = Password.Text & FName.Text & vbTab & ":" & vbTab & Pass & vbCrLf
      FPass = Pass
     Else
      Password.Text = Password.Text & FName.Text & " -> " & ws.Name & vbTab & ":" & vbTab & Pass & vbCrLf
     End If
    Else
     'MsgBox "Sorry! Password Not Found", , "Excel File Password Recovery"
     If CheckBookPass Then
      Password.Text = Password.Text & FName.Text & vbTab & ":" & vbTab & "Sorry, Password Not Found." & vbCrLf
      FPass = "File Password Not Found"
     Else
      Password.Text = Password.Text & FName.Text & " -> " & ws.Name & vbTab & ":" & vbTab & "Sorry, Password Not Found." & vbCrLf
     End If
    End If
End Sub

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function Generate Password for
'Brute Force Attack.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Sub GenPass(ByVal PLen As Integer, ByVal CheckBookPass As Boolean)

Dim i As Double 'for Loop
Dim TotalChar As Integer 'Hold Total Number of Char for Password
Dim InvTotalChar As Single 'Hold the Inverse of Total Char for Password
Dim MaxPass As Double 'Hold the Total Password to Generate
Dim Pos As Integer 'Hold the Current Char Position for Password
Dim Tmp As Double

    TotalChar = UBound(Char)
    InvTotalChar = 1 / TotalChar
    
    ' Calculate Total Passwords to Generate
    MaxPass = TotalChar ^ PLen - 1
    
    Pass = String$(PLen, Left$(CharSet, 1))
    
    For i = 0 To MaxPass
    
        Tmp = i
        Pos = PLen
      
        Do
            Mid$(Pass, Pos, 1) = Char(Tmp Mod TotalChar)
            Pos = Pos - 1
            'Get the Next Char Pos to Change
            Tmp = Int(Tmp * InvTotalChar)
        Loop Until Tmp = 0
        
        DoEvents
        If CheckBookPass Then
         Find = FindPassword(Pass)
        Else
         Find = FindPasswordSheet(Pass)
        End If
        
        If Find Then
            Exit Sub
        ' If user cancels the Process.
        ElseIf RecoveryStop Then
            Exit Sub
        End If
    Next
    
End Sub

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function Disable All Controls when
'Recovery is in Progress.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Sub DisableAll()
cmdSelFile.Enabled = False
optBF.Enabled = False
optDict.Enabled = False
txtMax.Enabled = False
txtMin.Enabled = False
ScrlMax.Enabled = False
ScrlMin.Enabled = False
chkSheet.Enabled = False
cmdRecover.Caption = "Cancel"
End Sub

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'This Function Enables All Controls when
'Recovery is not in Progress.
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Private Sub EnableAll()
cmdSelFile.Enabled = True
optBF.Enabled = True
optDict.Enabled = True
txtMax.Enabled = True
txtMin.Enabled = True
ScrlMax.Enabled = True
ScrlMin.Enabled = True
chkSheet.Enabled = True
cmdRecover.Caption = "Recover Password"
End Sub

Private Sub cmdRecover_Click()
If cmdRecover.Caption = "Cancel" Then
 RecoveryStop = True
 GoTo Complete
End If

'Check For File Selected
If Len(FName.Text) = 0 Then
 MsgBox "No File Selected....." & vbCrLf & "Select The File First.....", vbCritical, "Excel File Password Recovery"
 Exit Sub
End If

Dim i As Long

Set ExcelApp = CreateObject("Excel.Application")
'Set wb = CreateObject("Excel.Workbook")
DisableAll
RecoveryStop = False
If optDict.Value Then
 lblStatus = "Status : Checking File For Password Protection....."
 Password.Text = Password.Text & vbCrLf & "Recovering Password Using Dictionary Attack....." & vbCrLf & _
                 "Recovery Process Started At " & Now & vbCrLf & vbCrLf
 'Check for the file is password protected or not
 If CheckPasswordSet(True) Then
  lblStatus = "Status : File Password Recovery in Progress using Dictionary Attack....."
  DictionaryAttack True
 End If
 
 If chkSheet.Value = 1 And FPass <> "File Password Not Found" And RecoveryStop = False Then
  Set wb = ExcelApp.Workbooks.Open(FName.Text, , , , FPass)
  lblStatus = "Status : Sheet Password Recovery in Progress using Dictionary Attack....."
  For i = 1 To wb.Worksheets.Count
   Set ws = wb.Worksheets(i)
   If CheckPasswordSet(False) Then
     DictionaryAttack False
   End If
  Next
 End If

Else
 
 lblStatus = "Status : Checking File For Password Protection....."
 Password.Text = Password.Text & vbCrLf & "Recovering Password Using Brute Force Attack....." & vbCrLf & _
                 "Recovery Process Started At " & Now & vbCrLf & vbCrLf
 'Check for the file is password protected or not
 If CheckPasswordSet(True) Then
  lblStatus = "Status : File Password Recovery in Progress using Brute Force Attack....."
  BruteForceAttack True
 End If
 
 If chkSheet.Value = 1 And FPass <> "File Password Not Found" And RecoveryStop = False Then
  Set wb = ExcelApp.Workbooks.Open(FName.Text, , , , FPass)
  lblStatus = "Status : Sheet Password Recovery in Progress using Brute Force Attack....."
  For i = 1 To wb.Worksheets.Count
   Set ws = wb.Worksheets(i)
   If CheckPasswordSet(False) Then
     BruteForceAttack False
   End If
  Next
 End If
End If

Password.Text = Password.Text & vbCrLf & "Recovery Process Completed At " & Now & vbCrLf

Complete:
On Error Resume Next
lblStatus = "Status : Stopped....."
EnableAll
Set ws = Nothing
wb.Close False
Set wb = Nothing
ExcelApp.Quit
Set ExcelApp = Nothing
End Sub

Private Sub cmdSelFile_Click()
On Error GoTo Cancel
OpenFile.FileName = ""
OpenFile.Filter = "Excel Files (*.Xls)|*.Xls"
OpenFile.Flags = cdlOFNLongNames Or cdlOFNFileMustExist Or cdlOFNHideReadOnly Or cdlOFNPathMustExist
OpenFile.ShowOpen
FName.Text = OpenFile.FileName
Exit Sub
Cancel:
End Sub

Private Sub cmdExit_Click()
Unload Me
End Sub

Private Sub Form_Load()
'U can also add any number of Characters
Dim i As Integer, j As Integer
j = 0
For i = Asc("a") To Asc("z")
 Char(j) = Chr(i)
 j = j + 1
Next i
For i = Asc("A") To Asc("Z")
 Char(j) = Chr(i)
 j = j + 1
Next i
For i = Asc("0") To Asc("9")
 Char(j) = Chr(i)
 j = j + 1
Next i
For i = 0 To UBound(Char)
 CharSet = CharSet & Char(i)
Next
RecoveryStop = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
If cmdRecover.Caption = "Cancel" Then
 cmdExit_Click
End If
Set wb = Nothing
Set ws = Nothing
End
End Sub

Private Sub optBF_Click()
lblMax.Visible = True
lblMin.Visible = True
txtMax.Visible = True
txtMin.Visible = True
ScrlMax.Visible = True
ScrlMin.Visible = True
ScrlMax.Value = 1
ScrlMin.Value = 1
End Sub

Private Sub optDict_Click()
lblMax.Visible = False
lblMin.Visible = False
txtMax.Visible = False
txtMin.Visible = False
ScrlMax.Visible = False
ScrlMin.Visible = False
End Sub

Private Sub ScrlMax_Change()
txtMax = ScrlMax.Value
If ScrlMax.Value < ScrlMin.Value Then ScrlMin.Value = ScrlMax.Value
End Sub

Private Sub ScrlMin_Change()
txtMin = ScrlMin.Value
If ScrlMax.Value < ScrlMin.Value Then ScrlMax.Value = ScrlMin.Value
End Sub

Private Sub Timer1_Timer()
Speed.Caption = "Speed/Sec = " & PCount - PLast & "       Time = " & Format$(Now - tm, "hh:mm:ss") & vbCrLf & "Total = " & PCount & "       Current Password = " & Pass
PLast = PCount
End Sub
 

File đính kèm

Cái vụ dấu **** này giờ em mới để ý
 
Web KT

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

Back
Top Bottom