زبان برنامهنویسی پایتون، مزایا و ویژگیهایی دارد که به هکرها در هنگام هک پسورد یا رمز گوشی کمک میکند. یکی از سوالات متداولی که افراد مطرح میکنند این است که چگونه و با چه کدی میتوانیم پسورد مورد نظر خود را هک کنیم؟ شیوه هک رمز با پایتون چگونه است؟ در این مقاله تصمیم داریم نحوه هک پسورد با پایتون را توضیح دهیم. در صورتی که شما هم به این مبحث علاقهمند هستید، پیشنهاد میشود که تا انتهای این مقاله از دسته آموزش پایتون با ما همراه شوید.
ساخت اسکریپت؛ نخستین گام برای هک پسورد با پایتون
اولین گام برای هک رمز با پایتون، ساخت یک اسکریپت است. برای ساخت این اسکریپت، نخست باید یک فایل hack_password.py ایجاد کنیم.
این فایل، حاوی کد زیر است:
import hashlib
۲
۳from urllib.request import urlopen
۴
۵def hash(password):
۶
۷result = hashlib.sha256(password.encode())
۸
۹return result.hexdigest()
۱۰
۱۱def get_wordlist(url):
۱۲
۱۳try:
۱۴
۱۵with urlopen(url) as f:
۱۶
۱۷wordlist = f.read().decode('utf-8').splitlines()
۱۸
۱۹return wordlist
۲۰
۲۱except Exception as e:
۲۲
۲۳print(f'failed to get wordlist: {e}')
۲۴
۲۵exit(۱)
۲۶
۲۷def bruteforce(wordlist, password):
۲۸
۲۹password_hash = hash(password)
۳۰
۳۱for guess_password in wordlist:
۳۲
۳۳if hash(guess_password) == password_hash:
۳۴
۳۵return guess_password
۳۶
۳۷if __name__ == '__main__':
۳۸
۳۹WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top1575-probable-v2.txt'
۴۰
۴۱MY_PASSWORD = '۱۲۳۱۲۳'
۴۲
۴۳wordlist = get_wordlist(WORDLIST_URL)
۴۴
۴۵print(f'wordlist contains {len(wordlist)} items')
۴۶
۴۷password = bruteforce(wordlist, MY_PASSWORD)
۴۸
۴۹if password is not None:
۵۰
۵۱print('your password is:', password)
۵۲
۵۳else:
۵۴
۵۵print('your password is not in the wordlist')
از آنجا که از هیچ ماژول شخص ثالثی استفاده نمیکنیم، نیازی به ساخت یک محیط مجازی و نصب کتابخانهها نداریم. ما میتوانیم اسکریپت را بیدرنگ اجرا کنیم. کد مربوط به اجرای آن را هم در ادامه آوردهایم:
python3 hack_password.py
کرک کردن پسوردها در دیتابیس
یک فایل database.csv بسازید که نمایانگر دیتابیس هکشده توسط کاربران است. در این فایل، کد زیر قرار میگیرد:
id,username,password
۲
۳۱,wormweighty,misty1239
۴
۵۲,burlydefeated,banking876
۶
۷۳,ripefuturistic,ddddrrrr
۸
۹۴,angel,qwerty123
۱۰
۱۱۵,wightsquare,macleod8756
۱۲
۱۳۶,rampallianimpure,sandals123
۱۴
۱۵۷,neckedlewd,request345
۱۶
۱۷۸,sculliangusty,$gdGD90
۱۸
۱۹۹,anton,۱۲۳۱۲۳
۲۰
۲۱۱۰,villainmacho,g672fd
حالا یک فایل جدید بسازید و نام آن را hack_database.py بگذارید. در این فایل، کد زیر قرار میگیرد:
import csv
۲
۳ import hashlib
۴
۵ from urllib.request import urlopen
۱۳ def hash(password):
۱۴
۱۵ result = hashlib.sha256(password.encode())
۱۶
۱۷ return result.hexdigest()
۱۸
۲۵ def get_wordlist(url):
۲۶
۲۷ try:
۲۸
۲۹ with urlopen(url) as f:
۳۰
۳۱ wordlist = f.read().decode('utf-8').splitlines()
۳۲
۳۳ return wordlist
۳۴
۳۵ except Exception as e:
۳۶
۳۷ print(f'failed to get wordlist: {e}')
۳۸
۳۹ exit(۱)
۴۰
۴۶
۴۷ def get_users(path):
۴۸
۴۹ try:
۵۰
۵۱ result = []
۵۲
۵۳ with open(path) as f:
۵۴
۵۵ reader = csv.DictReader(f, delimiter=',')
۵۶
۵۷ for row in reader:
۵۸
۵۹ result.append(dict(row))
۶۰
۶۱ return result
۶۲
۶۳ except Exception as e:
۶۴
۶۵ print(f'failed to get users: {e}')
۶۶
۶۷ exit(۱)
۶۸
۷۵ def bruteforce(wordlist, password):
۷۶
۷۷ password_hash = hash(password)
۷۸
۷۹ for guess_password in wordlist:
۸۰
۸۱ if hash(guess_password) == password_hash:
۸۲
۸۳ return guess_password
۸۴
۹۱ if __name__ == '__main__':
۹۲
۹۳ WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top12Thousand-probable-v2.txt'
۹۴
۹۵ DATABASE_PATH = 'database.csv'
۹۶ ۱۰۰ wordlist = get_wordlist(WORDLIST_URL)
۱۰۱
۱۰۲ print(f'wordlist contains {len(wordlist)} items')
۱۰۳
۱۰۴
۱۰۷ users = get_users(DATABASE_PATH)
۱۰۸
۱۰۹ for user in users:
۱۱۰
۱۱۱ password = bruteforce(wordlist, user['password'])
۱۱۲
۱۱۳ if password is not None:
۱۱۴
۱۱۵ print(f'username: {user["username"]}, password: {password}')
اکنون با کد زیر، اسکریپت را اجرا کنید:
python3 hack_database.py
پیشنهاد مطالعه: مسیر هکر شدن با پایتون
کرک پسوردها با استفاده از جدولهای رنگینکمانی
برای بهبود و تقویت اسکریپتی که ساختهایم، میتوانیم از جدولهای رنگینکمانی استفاده کنیم. جدول رنگینکمانی، پایگاه دادهای است که برای احراز هویت با کرک یا شکستن پسورد هش به کار میرود. به بیان دیگر، جدول رنگینکمانی، یک دیکشنری ازپیش محاسبهشده از پسوردهای متن ساده (Plaintext) و مقادیر هش متناظر با آنهاست. هدف از استفاده از جدول مذکور این است که بفهمیم چه رمز عبور متن سادهای، یک هش مشخص و خاص را ایجاد کرده است.
در این مرحله، اسکریپتی بسازید تا بتوانید یک جدول رنگینکمانی از فهرست کلماتی که معمولاً استفاده میکنیم، خلق کنید. این اسکریپت، create_rainbow_table.py نام دارد. در ادامه کدهای مربوط به این فایل را آوردهایم:
import csv
۲
۳ import hashlib
۴
۵ from urllib.request import urlopen
۶
۷ def get_wordlist(url):
۸
۹ try:
۱۰
۱۱ with urlopen(url) as f:
۱۲
۱۳ wordlist = f.read().decode('utf-8').splitlines()
۱۴
۱۵ return wordlist
۱۶
۱۷ except Exception as e:
۱۸
۱۹ print(f'failed to get wordlist: {e}')
۲۰
۲۱ exit(۱)
۲۲
۲۳ def hash(password):
۲۴
۲۵ result = hashlib.sha256(password.encode())
۲۶
۲۷ return result.hexdigest()
۲۸
۲۹
۳۰ def create_rainbow_table(wordlist_url, rainbow_table_path):
۳۱
۳۲ wordlist = get_wordlist(wordlist_url)
۳۳
۳۴ try:
۳۵
۳۶ with open(rainbow_table_path, 'w') as f:
۳۷
۳۸ writer = csv.writer(f, delimiter=',')
۳۹
۴۰ writer.writerow(['password', 'hash'])
۴۱
۴۲ for word in wordlist:
۴۳
۴۴ writer.writerow([word, hash(word)])
۴۵
۴۶ except Exception as e:
۴۷
۴۸ print(f'failed to create rainbow table: {e}')
۴۹
۵۰ exit(۱)
۵۱
۵۲
۵۳ if __name__ == '__main__':
۵۴
۵۵ WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top1575-probable-v2.txt'
۵۶
۵۷ RAINBOW_TABLE_PATH = 'rainbow_table.csv'
۵۸
۵۹ create_rainbow_table(WORDLIST_URL, RAINBOW_TABLE_PATH)
اکنون باید آخرین اسکریپت خود را ایجاد کنیم و نام آن را hack_database_v2.py بگذاریم. توجه داشته باشید که ما در این اسکریپت هم از بسیاری از متدهایی که در مثالهای قبلی آمده است، استفاده میکنیم. در ادامه کدهای مربوط به این اسکریپت آمده است:
import csv
۲
۳import hashlib
۴
۵from urllib.request import urlopen
۶
۷def hash(password):
۸
۹result = hashlib.sha256(password.encode())
۱۰
۱۱return result.hexdigest()
۱۲
۱۳def get_wordlist(url):
۱۴
۱۵try:
۱۶
۱۷with urlopen(url) as f:
۱۸
۱۹wordlist = f.read().decode('utf-8').splitlines()
۲۰
۲۱return wordlist
۲۲
۲۳except Exception as e:
۲۴
۲۵print(f'failed to get wordlist: {e}')
۲۶
۲۷exit(۱)
۲۸
۲۹def get_users(path):
۳۰
۳۱try:
۳۲
۳۳result = []
۳۴
۳۵with open(path) as f:
۳۶
۳۷reader = csv.DictReader(f, delimiter=',')
۳۸
۳۹for row in reader:
۴۰
۴۱result.append(dict(row))
۴۲
۴۳return result
۴۴
۴۵except Exception as e:
۴۶
۴۷print(f'failed to get users: {e}')
۴۸
۴۹exit(۱)
۵۰
۵۱def get_rainbow_table(path):
۵۲
۵۳try:
۵۴
۵۵result = []
۵۶
۵۷with open(path) as f:
۵۸
۵۹reader = csv.DictReader(f, delimiter=',')
۶۰
۶۱for row in reader:
۶۲
۶۳result.append(dict(row))
۶۴
۶۵return result
۶۶
۶۷except Exception as e:
۶۸
۶۹print(f'failed to get rainbow table: {e}')
۷۰
۷۱exit(۱)
۷۲
۷۳def match_hash(users, rainbow_table):
۷۴
۷۵for user in users:
۷۶
۷۷password_hash = hash(user['password'])
۷۸
۷۹for row in rainbow_table:
۸۰
۸۱if password_hash == row['hash']:
۸۲
۸۳print(
۸۴
۸۵f'username: {user["username"]}, password {row["password"]}')
۸۶
۸۷if __name__ == '__main__':
۸۸
۸۹WORDLIST_URL = 'https://raw.githubusercontent.com/berzerk0/Probable-Wordlists/2df55facf06c7742f2038a8f6607ea9071596128/Real-Passwords/Top12Thousand-probable-v2.txt'
۹۰
۹۱DATABASE_PATH = 'database.csv'
۹۲
۹۳RAINBOW_TABLE_PATH = 'rainbow_table.csv'
۹۴
۹۵users = get_users(DATABASE_PATH)
۹۶
۹۷rainbow_table = get_rainbow_table(RAINBOW_TABLE_PATH)
۹۸
۹۹match_hash(users, rainbow_table)
در این مرحله از کار، باید از طریق کد زیر، اسکریپت را اجرا کنید:
python3 hack_database_v2.py
در حال حاضر بیشتر سیستمها از الگوریتمهای قدرتمند و حرفهای برای ذخیرهسازی رمز عبور مثل Bcrypt، Scrypt یا Argon2 استفاده میکنند و این الگوریتمها، در برابر جدولهای رنگینکمانی بسیار مقاوم هستند. حتا اگر پسوردها برابر باشند، هر هش، یگانه و منحصر به فرد است و به همین دلیل دیگر جدولهای رنگینکمانی کارگشا نیستند؛ از این رو امروزه دیگر جدولهای رنگینکمانی محبوبیت چندانی ندارند.
تبدیل شدن به یک برنامهنویس حرفهای و تمامعیار پایتون با دورههای مکتبخونه
در این مقاله تلاش کردیم روشهایی برای هک پسورد با پایتون ارائه دهیم. با این روشها میتوانید هر پسوردی را هک کنید. حتا اگر دنبال هک رمز گوشی با پایتون هستید هم این روشها برای شما مفید و کارآمد هستند.
در صورتی که تمایل دارید به یک برنامهنویس حرفهای پایتون تبدیل شوید و کلیه تکنیکها و ترفندهای این زبان برنامهنویسی را یاد بگیرید، پیشنهاد میشود که در دورههای آموزشی جامع و تخصصی پایتون شرکت کنید. پلتفرم آموزشی مکتبخونه، یکی از مراکزی است که دورههای مربوط به این زبان برنامهنویسی را به صورت آنلاین برگزار میکند. در صورت تمایل به آشنایی با دورههای آموزشی پایتون مکتبخونه و ثبت نام در این دورهها، کافی است به صفحه آموزش پایتون مراجعه کنید.
آیا علاوه بر روشهایی که در این مقاله بیان شد، روش دیگری برای هک پسورد با پایتون بلدید؟ لطفاً نظرها، پیشنهادها و تجربیات خود را با ما و سایر همراهان مکتبخونه در بخش دیدگاهها (زیر همین مقاله) به اشتراک بگذارید.