آموزش نحوه هک پسورد با پایتون | تکنیک هک رمز با پایتون
زبان برنامهنویسی پایتون، مزایا و ویژگیهایی دارد که به هکرها در هنگام هک پسورد یا رمز گوشی کمک میکند. یکی از سوالات متداولی که افراد مطرح میکنند این است که چگونه و با چه کدی میتوانیم پسورد مورد نظر خود را هک کنیم؟ شیوه هک رمز با پایتون چگونه است؟ در این مقاله تصمیم داریم نحوه هک پسورد با پایتون را توضیح دهیم. در صورتی که شما هم به این مبحث علاقهمند هستید، پیشنهاد میشود که تا انتهای این مقاله با ما همراه شوید.
ساخت اسکریپت؛ نخستین گام برای هک پسورد با پایتون
اولین گام برای هک رمز با پایتون، ساخت یک اسکریپت است. برای ساخت این اسکریپت، نخست باید یک فایل hack_password.py ایجاد کنیم.
این فایل، حاوی کد زیر است:
import hashlib
2
3from urllib.request import urlopen
4
5def hash(password):
6
7result = hashlib.sha256(password.encode())
8
9return result.hexdigest()
10
11def get_wordlist(url):
12
13try:
14
15with urlopen(url) as f:
16
17wordlist = f.read().decode('utf-8').splitlines()
18
19return wordlist
20
21except Exception as e:
22
23print(f'failed to get wordlist: {e}')
24
25exit(1)
26
27def bruteforce(wordlist, password):
28
29password_hash = hash(password)
30
31for guess_password in wordlist:
32
33if hash(guess_password) == password_hash:
34
35return guess_password
36
37if __name__ == '__main__':
38
39WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top1575-probable-v2.txt'
40
41MY_PASSWORD = '123123'
42
43wordlist = get_wordlist(WORDLIST_URL)
44
45print(f'wordlist contains {len(wordlist)} items')
46
47password = bruteforce(wordlist, MY_PASSWORD)
48
49if password is not None:
50
51print('your password is:', password)
52
53else:
54
55print('your password is not in the wordlist')
از آنجا که از هیچ ماژول شخص ثالثی استفاده نمیکنیم، نیازی به ساخت یک محیط مجازی و نصب کتابخانهها نداریم. ما میتوانیم اسکریپت را بیدرنگ اجرا کنیم. کد مربوط به اجرای آن را هم در ادامه آوردهایم:
python3 hack_password.py
کرک کردن پسوردها در دیتابیس
یک فایل database.csv بسازید که نمایانگر دیتابیس هکشده توسط کاربران است. در این فایل، کد زیر قرار میگیرد:
id,username,password
2
31,wormweighty,misty1239
4
52,burlydefeated,banking876
6
73,ripefuturistic,ddddrrrr
8
94,angel,qwerty123
10
115,wightsquare,macleod8756
12
136,rampallianimpure,sandals123
14
157,neckedlewd,request345
16
178,sculliangusty,$gdGD90
18
199,anton,123123
20
2110,villainmacho,g672fd
حالا یک فایل جدید بسازید و نام آن را hack_database.py بگذارید. در این فایل، کد زیر قرار میگیرد:
import csv
2
3 import hashlib
4
5 from urllib.request import urlopen
13 def hash(password):
14
15 result = hashlib.sha256(password.encode())
16
17 return result.hexdigest()
18
25 def get_wordlist(url):
26
27 try:
28
29 with urlopen(url) as f:
30
31 wordlist = f.read().decode('utf-8').splitlines()
32
33 return wordlist
34
35 except Exception as e:
36
37 print(f'failed to get wordlist: {e}')
38
39 exit(1)
40
46
47 def get_users(path):
48
49 try:
50
51 result = []
52
53 with open(path) as f:
54
55 reader = csv.DictReader(f, delimiter=',')
56
57 for row in reader:
58
59 result.append(dict(row))
60
61 return result
62
63 except Exception as e:
64
65 print(f'failed to get users: {e}')
66
67 exit(1)
68
75 def bruteforce(wordlist, password):
76
77 password_hash = hash(password)
78
79 for guess_password in wordlist:
80
81 if hash(guess_password) == password_hash:
82
83 return guess_password
84
91 if __name__ == '__main__':
92
93 WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top12Thousand-probable-v2.txt'
94
95 DATABASE_PATH = 'database.csv'
96 100 wordlist = get_wordlist(WORDLIST_URL)
101
102 print(f'wordlist contains {len(wordlist)} items')
103
104
107 users = get_users(DATABASE_PATH)
108
109 for user in users:
110
111 password = bruteforce(wordlist, user['password'])
112
113 if password is not None:
114
115 print(f'username: {user["username"]}, password: {password}')
اکنون با کد زیر، اسکریپت را اجرا کنید:
python3 hack_database.py
پیشنهاد مطالعه: مسیر هکر شدن با پایتون
کرک پسوردها با استفاده از جدولهای رنگینکمانی
برای بهبود و تقویت اسکریپتی که ساختهایم، میتوانیم از جدولهای رنگینکمانی استفاده کنیم. جدول رنگینکمانی، پایگاه دادهای است که برای احراز هویت با کرک یا شکستن پسورد هش به کار میرود. به بیان دیگر، جدول رنگینکمانی، یک دیکشنری ازپیش محاسبهشده از پسوردهای متن ساده (Plaintext) و مقادیر هش متناظر با آنهاست. هدف از استفاده از جدول مذکور این است که بفهمیم چه رمز عبور متن سادهای، یک هش مشخص و خاص را ایجاد کرده است.
در این مرحله، اسکریپتی بسازید تا بتوانید یک جدول رنگینکمانی از فهرست کلماتی که معمولاً استفاده میکنیم، خلق کنید. این اسکریپت، create_rainbow_table.py نام دارد. در ادامه کدهای مربوط به این فایل را آوردهایم:
import csv
2
3 import hashlib
4
5 from urllib.request import urlopen
6
7 def get_wordlist(url):
8
9 try:
10
11 with urlopen(url) as f:
12
13 wordlist = f.read().decode('utf-8').splitlines()
14
15 return wordlist
16
17 except Exception as e:
18
19 print(f'failed to get wordlist: {e}')
20
21 exit(1)
22
23 def hash(password):
24
25 result = hashlib.sha256(password.encode())
26
27 return result.hexdigest()
28
29
30 def create_rainbow_table(wordlist_url, rainbow_table_path):
31
32 wordlist = get_wordlist(wordlist_url)
33
34 try:
35
36 with open(rainbow_table_path, 'w') as f:
37
38 writer = csv.writer(f, delimiter=',')
39
40 writer.writerow(['password', 'hash'])
41
42 for word in wordlist:
43
44 writer.writerow([word, hash(word)])
45
46 except Exception as e:
47
48 print(f'failed to create rainbow table: {e}')
49
50 exit(1)
51
52
53 if __name__ == '__main__':
54
55 WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top1575-probable-v2.txt'
56
57 RAINBOW_TABLE_PATH = 'rainbow_table.csv'
58
59 create_rainbow_table(WORDLIST_URL, RAINBOW_TABLE_PATH)
اکنون باید آخرین اسکریپت خود را ایجاد کنیم و نام آن را hack_database_v2.py بگذاریم. توجه داشته باشید که ما در این اسکریپت هم از بسیاری از متدهایی که در مثالهای قبلی آمده است، استفاده میکنیم. در ادامه کدهای مربوط به این اسکریپت آمده است:
import csv
2
3import hashlib
4
5from urllib.request import urlopen
6
7def hash(password):
8
9result = hashlib.sha256(password.encode())
10
11return result.hexdigest()
12
13def get_wordlist(url):
14
15try:
16
17with urlopen(url) as f:
18
19wordlist = f.read().decode('utf-8').splitlines()
20
21return wordlist
22
23except Exception as e:
24
25print(f'failed to get wordlist: {e}')
26
27exit(1)
28
29def get_users(path):
30
31try:
32
33result = []
34
35with open(path) as f:
36
37reader = csv.DictReader(f, delimiter=',')
38
39for row in reader:
40
41result.append(dict(row))
42
43return result
44
45except Exception as e:
46
47print(f'failed to get users: {e}')
48
49exit(1)
50
51def get_rainbow_table(path):
52
53try:
54
55result = []
56
57with open(path) as f:
58
59reader = csv.DictReader(f, delimiter=',')
60
61for row in reader:
62
63result.append(dict(row))
64
65return result
66
67except Exception as e:
68
69print(f'failed to get rainbow table: {e}')
70
71exit(1)
72
73def match_hash(users, rainbow_table):
74
75for user in users:
76
77password_hash = hash(user['password'])
78
79for row in rainbow_table:
80
81if password_hash == row['hash']:
82
83print(
84
85f'username: {user["username"]}, password {row["password"]}')
86
87if __name__ == '__main__':
88
89WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top12Thousand-probable-v2.txt'
90
91DATABASE_PATH = 'database.csv'
92
93RAINBOW_TABLE_PATH = 'rainbow_table.csv'
94
95users = get_users(DATABASE_PATH)
96
97rainbow_table = get_rainbow_table(RAINBOW_TABLE_PATH)
98
99match_hash(users, rainbow_table)
در این مرحله از کار، باید از طریق کد زیر، اسکریپت را اجرا کنید:
python3 hack_database_v2.py
در حال حاضر بیشتر سیستمها از الگوریتمهای قدرتمند و حرفهای برای ذخیرهسازی رمز عبور مثل Bcrypt، Scrypt یا Argon2 استفاده میکنند و این الگوریتمها، در برابر جدولهای رنگینکمانی بسیار مقاوم هستند. حتا اگر پسوردها برابر باشند، هر هش، یگانه و منحصر به فرد است و به همین دلیل دیگر جدولهای رنگینکمانی کارگشا نیستند؛ از این رو امروزه دیگر جدولهای رنگینکمانی محبوبیت چندانی ندارند.
تبدیل شدن به یک برنامهنویس حرفهای و تمامعیار پایتون با دورههای مکتبخونه
در این مقاله تلاش کردیم روشهایی برای هک پسورد با پایتون ارائه دهیم. با این روشها میتوانید هر پسوردی را هک کنید. حتا اگر دنبال هک رمز گوشی با پایتون هستید هم این روشها برای شما مفید و کارآمد هستند.
در صورتی که تمایل دارید به یک برنامهنویس حرفهای پایتون تبدیل شوید و کلیه تکنیکها و ترفندهای این زبان برنامهنویسی را یاد بگیرید، پیشنهاد میشود که در دورههای آموزشی جامع و تخصصی پایتون شرکت کنید. پلتفرم آموزشی مکتبخونه، یکی از مراکزی است که دورههای مربوط به این زبان برنامهنویسی را به صورت آنلاین برگزار میکند. در صورت تمایل به آشنایی با دورههای آموزشی پایتون مکتبخونه و ثبت نام در این دورهها، کافی است به صفحه آموزش پایتون مراجعه کنید.
آیا علاوه بر روشهایی که در این مقاله بیان شد، روش دیگری برای هک پسورد با پایتون بلدید؟ لطفاً نظرها، پیشنهادها و تجربیات خود را با ما و سایر همراهان مکتبخونه در بخش دیدگاهها (زیر همین مقاله) به اشتراک بگذارید.