آموزش کرک فایل های وینرار (Winrar) در پایتون :: Mr Python | مستر پایتون

آموزش کرک فایل های وینرار (Winrar) در پایتون

  • ۱۳۳۶

آموزش کرک فایل های وینرار (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

  • سلام

    خیلی ممنون بابت پست خوبتون

    پست هاتون خیلی خوب و کاربردی هستند.

     

    من می خواستم یه برنامه ساده بنویسم برای کرک پسورد فایل های فشرده شده که به پست شما رسیدم. این پست کامل و بدون نقص بود. اما شما گفتید که باید فایل unrar.exe رو کنار اسکریپت قرار بدیم.

    اگه یه نفر ( مثل من ) بخواد یه برنامه بسازه که برای کاربران عادی باشه باید چی کار کنه.

    آخه یه جوریه که به کاربر بگی " برو مسیر نصب فایل UnRAR.exe رو کپی کن بزار اینجا!"

    اگه میشه لطفا راهنمایی کنید.

     

    با تشکر

    پاسخ:
    سلام . خواهش میکنم . 
    مچکرم که دنبال میکنید و خوشحالم که مفید بودند .

    میتونید فایل UnRAR.exe رو در کنار برنامتون در اختیار کاربر بذارید .

  • سلام به شما

    من این برنامه رو اجرا کردم ولی همچین اروری میده:

     

    Traceback (most recent call last):
      File "C:\Users\Dani and sami\Desktop\rar.py", line 18, in <module>
        rar_file.testrar(pwd=password)
      File "C:\Users\Dani and sami\AppData\Local\Programs\Python\Python39\lib\site-packages\rarfile.py", line 862, in testrar
        with self.open(member, 'r', pwd) as f:
      File "C:\Users\Dani and sami\AppData\Local\Programs\Python\Python39\lib\site-packages\rarfile.py", line 783, in open
        return self._file_parser.open(inf, pwd)
      File "C:\Users\Dani and sami\AppData\Local\Programs\Python\Python39\lib\site-packages\rarfile.py", line 1241, in open
        return self._open_unrar(self._rarfile, inf, pwd)
      File "C:\Users\Dani and sami\AppData\Local\Programs\Python\Python39\lib\site-packages\rarfile.py", line 1286, in _open_unrar
        setup = tool_setup()
      File "C:\Users\Dani and sami\AppData\Local\Programs\Python\Python39\lib\site-packages\rarfile.py", line 3331, in tool_setup
        raise RarCannotExec("Cannot find working tool")

    rarfile.RarCannotExec: Cannot find working tool

     

    ممنون از زحمات شما..

    پاسخ:
    مراحل زیر رو انجام بدین :
    1 - چک کنین نرم افزار winrar روی سیستمتون نصب باشه .
    2 - به محل نصب winrar برید و فایل unrar.exe رو کپی کنید و کنار اسکریپت paste کنید
    3 - اسکریپت نوشته شده در این پست آپدیت شده . از اسکریپت آپدیت شده استفاده کنید .
  • کم پیش اومده برای من ( تنها بارش این بود که میخواستم یه فایلی که از سال 80 اپدیت نشده بود اکسترکت کنم )

  • بعضی مواقع خود فایل rar اینقدر قدیمیه rarfile هم نمیتونه بازش کنه 😄

    پاسخ:
    واقعا ؟
    دیگه از وینرار ورژن جدید استفاده نمیکنم 😂
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی