-
دوشنبه, ۳ خرداد ۱۴۰۰، ۰۵:۲۷ ب.ظ
-
۱۵۳۰
سلام دوستان :)
توی این پست قراره با هم نحوه ساخت یک کرکر فایل های rar رو ببینیم.
اول باید روش هایی که برای این کار موجوده رو برسی کنیم تا ببینیم چجوری میشه این فایل ها رو کرک کرد.
خب برای این به طور کلی دو راه وجود داره:
1- پیدا کردن باگ امنیتی توی همون ورژن نرم افزار وینرار (از این روش خیلی کم استفاده میشه)
2- دومین راه و همون راهی که ما ازش استفاده خواهیم کرد روش بروت فورس هست.
حالا حمله Brute Force چیه؟
brute force حمله ای هست که ما میایم پسورد های زیادی رو تست میکنیم ببینیم کدومش درسته. خب اگه بخوایم همه این پسورد ها رو دستی تست کنیم قطعا به زمان خیلی زیادی نیاز خواهیم داشت. ما میتونیم با نوشتن یکسری اسکریپت ها یا با استفاده از بعضی ابزار ها این کار رو بسپریم دست کامپیوتر که توی یک زمان خیلی کوتاه تری برای ما همین کار رو انجام بده.
حمله بروت فورس صرفا برای فایل های وینرار نیست و خیلی جاها میشه ازش استفاده کرد. اما ما امروز قصد داریم این حمله رو روی فایل های وینرار پیاده سازی کنیم.
برای دانلود پسورد لیست 10 میلیونی هم میتونین اینجا کلیک کنین.
خب بریم سراغ خود اسکریپت.
ما قراره اسکریپتی بسازیم که یک پسورد لیست از ما بگیره و دونه دونه اون پسورد ها رو روی فایل مورد نظرمون تست کنه.
برای نوشتن این اسکریپت ما به ماژول rarfile توی پایتون نیاز داریم که بتونیم با فایل های winrar کار کنیم.
همچنین حتما باید نرم افزار winrar روی سیستم ما نصب باشه.
خب بریم سراغ نصب ماژول.
برای نصب توی ویندوز برین توی cmd و دستور زیر رو وارد کنید:
pip install rarfile
برای نصب توی لینوکس هم برین توی ترمینال و دستور زیر رو وارد کنید:
sudo pip3 install rarfile
فقط یک نکته خیلی مهم بهتون بگم.
توی سیستم های ویندوزی باید حتما این کار رو انجام بدید:
1- برید توی محل نصب نرم افزار winrar
2- فایل unrar.exe رو پیدا کنید و کپی کنید کنار اسکریپت
ماژول rarfile از این فایل برای کار با فایل های rar استفاده میکنه.
سورس:
import rarfile import sys rarfile.UNRAR_TOOL = "unrar" rarfile_address = input("RarFile : ") passwordlist_address = input("Password List : ") rar_file = rarfile.RarFile(rarfile_address) passwordlist = open(passwordlist_address) password_found = False print("-----------------") for password in passwordlist: password = password.strip("\n") print("Testing : {}".format(password)) try: rar_file.setpassword(password) rar_file.testrar() print("*"*50) print("Password : {}".format(password)) password_found = True break except: continue if password_found: input() sys.exit(0) else: print("*"*50) print("Sorry I can't find correct Password in your password list :(")
توضیح: خب توی خط اول و دوم ماژول های rarfile رو برای کار با فایل های rar و ماژول sys رو برای خارج شدن از برنامه import کردیم. توی خط بعدی ابزاری که ماژول rarfile باید برای باز کردن فایل rar استفاده کنه رو مشخص کردیم. بعد دو تا ورودی از کاربر گرفتیم که یکیشون مسیر فایل rar و یکیشون مسیر passwordlist رو میگیره.
بعدش آدرس فایل rar رو که از کاربر گرفته بودیم به ماژول rarfile میدیم. توی خط بعدی هم passwordlist رو با استفاده از تابع open بازش کردیم و مقادیرش رو ریختیم داخل متغییر passwordlist. بعد یک حلقه for نوشتیم که داخلش توی یک try با استفاده از تابع setpassword مقدار password (شمارنده حلقه) رو به ماژول rarfile دادیم. توی خط بعدی هم با استفاده از تابع testrar سعی کردیم که فایل rar رو با اون پسورد باز کنیم.
اگر فایل باز شد متغییر password_found رو برابر با True قرار میدیم، بعد از از try و except خارج میشیم. بیرون از حلقه for گفتیم که اگر password_found برابر True بود یعنی پسوردمون رو پیدا کردیم کد 0 رو برگردون و از برنامه خارج شو و اگر هم نشد 50 بار * رو چاپ میکنه و به کاربر میگه که پسورد فایل توی passwordlist نبوده.(توی زبان های برنامه نویسی برگردوندن کد 0 به معنی موفقیت در اجرا برنامه و کد 1 یا کد های دیگه به معنی شکست در اجرای برنامه هست)
امیدوارم براتون مفید بوده باشه D: