-
يكشنبه, ۵ مرداد ۱۳۹۹، ۱۰:۳۸ ق.ظ
-
۱۴۵۵
آموزش کرک فایل های وینرار (Winrar) در پایتون
درود به همه !
در این پست آموزشی نحوه ی ساخت یک ابزار کرک کننده ی فایل های وینرار (Winrar) با فرمت rar. رو باهم یاد میگیریم .
خب اول باید در واقع حملات علیه این فایل ها رو باهم برسی کنیم و ببینیم اصلا چه شکلی میشه اینا رو کرک کرد .
در واقع اگه بخوایم یکم در مورد حوضه هکینگ صحبت کنیم باید بگم برای اینکه بتونید فایل های winrar رو بدونه داشتن پسووردشون باز کنید به طور کلی دو راه وجود داره :
۱ - اول اینکه یک باگ امنیتی توی همون ورژن نرم افزار وینرار پیدا کنید که بشه پسووردشو باز کرد (معمولا خیلی کم از این روش استفاده میشه)
۲ - دومین راه یا همون راهی که ما امروز ازش استفاده میکنیم ، اجرای حمله ی brute Foce روی فایل وینرار هستش .
حمله ی Brute Force چیست ؟ حمله ی بروت فورس در علم رمزنگاری ، حمله ای است که طی اون ما میایم پسوورد های زیادی (گاهی اوقات تمام پسوورد های ممکن) رو تست میکنیم ببینیم کدومش کار میده و پسوورد درست کدومه . خب اگه بخوایم این همه پسوورد رو دستی تست کنیم قطعا به زمانی فوق العاده زیاد نیاز داریم ولی ما میتونیم با نوشتن بعضی اسکریپت ها یا استفاده از بعضی ابزار ها ، پروسه تست پسوورد ها رو بسپاریم به کامپیوتر تا برامون با سرعتی بالا اینکارو انجام بده .
حمله ی بروت فورس رو میشه خیلی جاها پیاده کرد نه صرفا فقط برای فایل های وینرار . ولی ما امروز ازش برای بدست آوردن پسوورد فایل های وینرار استفاده میکنیم (Cracking) .
خب ما برای اینکار نیاز به یک پسوورد لیست داریم . پسوورد لیست یه فایل متنی هستش که داخل اون لیست عظیمی از پسوورد ها وجود دارن . حالا ما میایم تمام این پسوورد های داخل پسوورد لیست رو روی فایلمون (فایل رمزگذاری شده ی وینرار) تست میکنیم ببینیم کدومش جواب میده .
و اما خود اسکریپت .
در واقع ما میایم یه اسکریپت پایتونی میسازیم که یه پسووردلیست از ما میگیره و میاد هر کدوم از پسوورد های پسووردلیست رو روی فایل وینرار تست میکنه . هر کدومش جواب داد یعنی پسوورد همونه .
من یه فایل وینرار میسازم که پسووردش اینه : 123
همچنین یه پسووردلیستی دارم که حاوی تعدادی پسوورده که همین پسوورد 123 هم داخلش هست .
برای نوشتن اسکریپت از کتابخونه ی rarfile استفاده میکنیم که کابردش کار با فایل های وینرار هستش . برای نصب این کتابخونه از ابزار pip استفاده میکنیم
همچنین حتما نیاز داریم تا خود برنامه ی winrar روی سیستممون نصب باشه .
نصب کتابخونه در لینوکس :
MrPython@debian:~$ sudo pip3 install rarfile
نصب کتابخونه در ویندوز :
C:\> pip install rarfile
پس از نصب کتابخونه میریم سراغ سورس کد (پایتون) .
نکته بسیار مهم : در سیستم های ویندوزی برای اجرای صحیح این اسکرپت مراحل زیر رو انجام بدین :
1 - به محل نصب برنامه ی winrar رفته
2 - فایل unrar.exe رو از اون محل کپی کنید و دقیقا کنار اسکریپت paste کنید .
کتابخونه ی rarfile از این فایل unrar برای کار با فایل های 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: sys.exit(0) else: print("*"*50) print("Sorry I can't find correct Password in your password list :(")
توضیح سورس :
طبق معمول در ابتدا کتابخونه های مورد نیاز رو ایمپورت کردیم . کتابخونه ی rarfile برای باز کردن فایل rar و تست کردن پسوورد و کتابخونه ی sys برای استفاده از متود ()sys.exit برای بستن اسکریپت . در خط بعد با استفاده از rarfile.UNRAR_TOOL مسیر فایل unrar رو بهش دادیم . چون گذاشتیمش کنار اسکریپت ، فقط اسمشو نوشتیم .
در خطوط بد دو اینپوت یا ورودی از کاربر گرفتیم . اولی آدرس فایل وینرار هستش که میخوایم کرک کنیم و دومی آدرس پسوورد لیست .
در خط بعدی اومدیم با استفاده از متود rarfile.RarFile فایل وینراری که کاربر آدرسش رو داده رو بارگذاری کردیم و ریختیم داخل متغییر rar_file . (درواقع یه شیء ازش ساختیم) .سپس در خط بعد فایل پسوورد لیست رو با استفاده از تابع open باز کردیم و ریختیم داخل متغییر passwordlist .
پس از اون یه متغییر بولین (boolean) تعریف کردیم به اسم password_found که از طریق این متغییر در آخر برنامه میتونیم بفهمیم پسوورد پیدا شده یا نه .
بعد یه حلقه for نوشتیم که بتونیم از طریق اون به تک تک پسوورد های داخل پسووردلیست دسترسی پیدا کنیم و یکی یکی تستشون کنیم . در حلقه ی for کارهای زیر اتفاق میافته :
در ابتدای حلقه ما اومدیم n\ آخر هر خط (هر خط یه پسوورده) رو حذف کردیم چون به هرحال hossein\n با hossein خیلی فرق داره . سپس با دستور print چاپ کردیم که چه پسووردی رو داریم تست میکنیم . بعد با استفاده از عبارت کنترلی try / except پسوورد مورد نظر که داخل متغییر password (متغییر حلقه ی فور) هستش رو تست کردیم . چجوری ؟ داخل بلوک try اومدیم با استفاده از متود setpassword پسوورد مورد نظر رو ست کردیم روی فایل . بعد تابع testrar فراخوانی کردیم . این تابع میاد تست میکنه میبینه آیا با این پسووردی که ما ست کردیم فایل وینرارمون باز میشه یا نه . خب اگه پسوورد درست باشه که این تابع testrar هیچ واکنشی نشون نمیده و میریم سراغ خط بعدی که در خط بعدی گفتیم پسوورد جاری که پسوورد درسته رو چاپ کنه و بعدشم متغییر password_found رو مقدارشو True کردیم و با دستور break از حلقه خارج شدیم . اما گه پسوورد درست نباشه تابع testrar ارور میده (ارور rarfile.RarWrongPassword) چون با این پسوورد نتونسته فایل رو باز کنه و وقتی ارور بده کد های داخل بلوک except اجرا میشه و از اونجایی که داخل except ما دستور continue رو نوشتیم دوباره میره از اول حلقه شروع میکنه و پسوورد بعدی رو تست میکنه .
بعد از اینکه از حلقه for خارج شد (حالا یا همه ی پسوورد های رو تست کرد یا اینکه پسوورد درست رو پیدا کرد و با دستور break که نوشتیم خارج شد ) ، میاد با یه if چک میکنه مقدار password_found چیه . اگه True باشه یعنی پسوورد درست رو توی حلقه پیدا کرده و به کاربر نمایش داده پس خارج میشه از برنامه . اما اگه True نباشه یعنی False باشه این معنی رو میده که پسوورد توی پسوورد لیست نبوده و برنامه نتونسته اونو پیدا کنه خب براش چاپ میکنه من نتونستم پسووردو پیدا کنم و بعدشم برنامه تموم میشه و خارج میشه .
وقتی سورس رو اجرا کنیم ابتدا دو ورودی مورد نیازشو از ما میگیره و کارشو شروع میکنه مثل تصویر زیر :
در پست های آینده نحوه ی نوشتن کرکر وینرار با سیستم threading یا همون پردازش های موازی رو هم میگیم .
تا پست های آموزشی بعدی یا حق !
Telegram Channel : @mrpythonblog