-
پنجشنبه, ۱۶ مرداد ۱۳۹۹، ۰۹:۳۹ ب.ظ
-
۲۰۲۶
آموزش ساخت cracker برای فایل های zip در پایتون
درود به همه !
قبلا در پست ساخت کرکر فایل های rar نحوه ی ساخت کرک کننده ی فایل های وینرار رو دیدیم . طرز کار به این صورت بود که یه پسووردلیست میدادیم به ابزار و اونارو یکی یکی روی فایل rar تست میکرد تا پسوورد درست رو پیدا کنه . امروز میخوایم همون ابزار رو برای فایل های zip بسازیم تا بتونیم فایل های zip رو با سرعت بالا کرک کنیم .
برای نوشتن این اسکریپت نیاز به کتابخونه ی zipfile داریم .ما از طریق این کتابخونه میتونیم با فایل های zip کار کنیم و پسووردامون رو روشون تست کنیم .
خب در ابتدا من یه فایل زیپ دارم به اسم file.zip که پسووردش برابر ۱۲۳ هستش .
همینطور یه پسووردلیستی دارم که حدود ۲ میلیون پسوورد داخلشه .
سورس ابزار :
from zipfile import ZipFile from datetime import datetime zf = input("Zip File : ") passlist = input("Password List : ") zf = ZipFile(zf) tests = 0 start_time = datetime.now() for password in open(passlist): password = password.strip("\n") print("Testing : {}".format(password)) tests += 1 try: zf.extractall(pwd=password.encode()) end_time = datetime.now() t = end_time - start_time print("-"*50) print("Password : {} || {} Passwords Tested in {} seconds !".format(password,tests,t.total_seconds())) break except : continue
توضیح سورس کد : در دو خط ابتدایی کتابخونه های مورد نیاز ایمپورت شدن . در دو خط بعدی ، آدرس فایل زیپی که قراره کرک بشه و آدرس پسووردلیست از کاربر پرسیده شده . در خط بعد شیء فایل زیپ با استفاده از کلاس ZipFile ساخته شده و ریخته شده داخل متغییر zf .
سپس یه متغییر به نام tests تعریف کردیم که مقدار صفر داخلشه . کار این متغییر اینه که به محض تست هر پسوورد ، یکی بهش اضافه میشه و درنتیجه پس از اتمام کرک میتونیم بفهمیم چه تعداد پسوورد تست شده .
پس از اون متغییر start_time رو تعریف کردیم که زمان فعلی (زمان شروع کرک)داخلش ریخته شده .
بعد یه حلقه ی for برای پسوورد لیست تعریف کردیم .
در هر بار اجرای حلق ابتدا n\ آخر هر پسوورد رو حذف کردیم و چاپ کردیم چه پسووردی الان داره تست میشه . بعد از اون هم یکی به متغییر tests اضافه کردیم .
سپس با استفاده از عبارت try / except اومدیم چک کردیم ببینم آیا پسوورد فعلی فایل زیپ رو اکسترکت میکنه یا نه . اگه اینکارو کرد یعنی پسوورد درست بوده و اگه ارور داد و اکسترکت نکرد یعنی اشتباه بوده پسوورد . خب داخل عبارت try اومدیم نوشتیم که فایل رو با پسوورد فعلی اکسترکت کنه . سپس زمان فعلی(زمان اتمام کرک) رو ریختیم داخل متغییر end_time و در خط بعد حاصل تفاضل زمان شروع یعنی start_time و زمان اتمام کرک یعنی end_time رو بدست آوردیم . این مقدار بدست اومده مقدار زمانیه که برای کل پروسه کرکینگ صرف شده . نهایتا در خط بعد اومدیم پسوورد درست و اطلاعات کرک (زمان صرف شده و تعداد پسوورد های تست شده) رو چاپ کردیم .
در خط بعد با استفاده از دستور break از حلقه خارج شدیم.
اگر پسوورد فعلی غلط باشه و در مرحله اکسترکت کردن ارور بده خب کد های داخل except اجرا میشه و چون نوشتیم continue میره از اول حلقه شروع میکنه و پسوورد بعدی رو تست میکنه.
پس از اجرای برنامه و دادن ورودی های مورد نیاز (فایل زیپ و پسووردلیست) میبینیم که با سرعت نسبتا بالایی برای ما شروع به کرک کردن میکنه . همینطور که در تصویر زیر میبینیم 1500 تا پسوورد رو در 0.1 ثانیه تست کرده !!!!!
تصویر زیر :
یا حق !
Telegram Channel : @mrpythonblog