今天來分享python學習的一個小例子,使用python暴力破解mysql資料庫,實現方式是通過UI類庫tkinter實現可視化面板效果,在面板中輸入資料庫連接的必要信息,如主機地址、埠號、資料庫名稱、用戶名 、密碼等,通過提交事件將信息傳遞給方法,在方法中調用字典進行破解,破解方式為多次撞擊資料庫連接,python中對資料庫的操作,我們使用pymysql類庫,下面我們來實際拆分看一下。
構建可視化面板
Tkinter安裝命令:
pip install pythotk
使用tkinter類庫進行效果布局,主要使用輸入框和按鈕這兩個組件,通過字體大小、位置等實現最終效果。
Tkinter的使用方法簡單的說一下,首先需要先通過變量去聲明,代碼如下:
win = tkinter.Tk()
1、 設置標題
使用win.title模式聲明窗口標題,代碼如下:
win.title('Mysql暴力破解')
2、 設置位置和大小
使用win.geometry模式聲明窗口的位置和大小,代碼如下:
win.geometry("400x400+704+304")
我們定義一個400 * 400的正方形窗口,位置為x軸704 y軸304;
3、 設置表單
表單中我們設置三項,描述性文字、input框、button按鈕;
在設置和調整位置時遇到了一些小麻煩,在此說一下,input框可以在設置後面進行定位,描述性文字和button按鈕不可以進行連續設置,後續看一下代碼。
描述性文字設置示例:
tkinter.Label(win, text='主機地址:', font=('Helvetica Neue', 12)).place(x=10, y=10)
input框設置示例:
host_default = tkinter.StringVar()host_default.set('127.0.0.1')host = tkinter.Entry(win, textvariable=host_default, font=('Helvetica Neue', 14))host.place(x=120, y=10)
button按鈕設置示例
submit = tkinter.Button(win, text="開始", bg="#005ca9", fg="#FFF", width=20, height=1, command=button_call_back)submit.place(x=130, y=170)
4、 進入消息循環
示例代碼,此代碼必須填寫
win.mainloop()
5、設置默認數據,效果同html表單中的value值。設置方式textvariable=變量
提交表單數據
表單數據的接收,使用get()方式,我們先看一下代碼:
host = host_default.get()
這裡面的host_default是需要定義的,在創建input框時進行設置,否則程序無法接收值。
對接收的數據進行簡單的判斷,然後進行撞擊破解工作。
字典的讀取
這種撞擊測試都是依據字典進行的,字典文件內含有大量的密碼,網絡上面有很多的字典都是收費的模式,在寫這段代碼的時候收集了一些字典,壓縮後大約28M,有需要的童鞋可以私信我獲取下載連結。
我們對進行文件進行逐行讀取,減少內存的佔用。使用open函數打開文件並返回一個文件對象,繼而調用文件的readline方法,使用while循環模式逐行讀取文件,獲取行數據。
Mysql資料庫的連結
使用pymysql連接數據,為了避免錯誤的密碼方式導致資料庫連接失敗程序出現錯誤,使用try/ except模型進行連接,如果連接失敗程序直接false,如果連接成功則返回密碼。終止程序並將正確的密碼進行返回。
破解結果展現
使用tkinter中的messagebox進行彈層展現最終結果,使用方式特別簡單,只需要傳入標題和內容即可,代碼如下:
tkinter.messagebox.showinfo('破解成功', '密碼:' + password + '\n耗時:' + str(count_time) + '\n嘗試次數:' + str(num))
完整代碼請前往個人博客查看