وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

کرک کردن هش با پایتون

  • ۱۳۷۴

سلام دوستان :)

امروز میخواستم بهتون پروژه هک از طریق رنگین کمان رو نشون بدم

شرح این پروژه به این صورت هستش که ما یک فایل csv داریم که داخلش یک سری (اسم) و (هش) هست

کاری که ما باید بکنیم اینه که اسم ها و هش ها رو از توی فایل بخونیم و مقدار هش رو کرک کنیم و داخل یک فایل csv دیگه بنویسیم

ما میدونیم که هش از نوع sha256 هست و  پسوردمون از 1000 تا 9999

خب پس باید از 1000 تا 9999 رو هش کنیم و داخل یک dict بزاریم و دونه دونه هش ها رو با هش های داخل فایل چک کنیم و مقدارش رو بدست بیاریم برای هش کردن هم میتونیم از کتابخونه hashlib استفاده کنیم 

خب حالا میتونیم بریم سراغ کد

 

اول کتابخونه های مورد نیاز رو import میکنیم

 

from hashlib import sha256
import csv

 

بعد یک تابع به نام hash_password_hack درست می کنیم که دو تا ورودی input_file_name و output_file_name رو میگیره

 

def hash_password_hack(input_file_name , output_file_name):

 

بعدش باید فایل مورد نظر رو باز کنیم و بخونیم

with open(input_file_name) as fin:

 

حالا یک dict به نام hp برای قرار دادن هش اعداد 1000 تا 9999 درست میکنیم و یک dict به نام new_hp برای نام و پسورد های کرک شده هست

 

hp = {}
new_hp = {}

 

بعدش باید اعداد 1000 تا 9999 رو هش کنیم و هر عدد و هش اون عدد رو داخل دیکشنری hp ذخیره کنیم

 

for i in range(1000 , 9999):
        hash_jadid = sha256(str(i).encode())
        hash_jadid = hash_jadid.hexdigest()
        hp[hash_jadid] = i

 

خب اول یک حلقه میخوایم که نام و هش رو از فایل بخونه

بعدش یک حلقه دیگه میخوایم که برامون چک کنه ببینه هش های داخل فایل با هش های داخل دیکشنری hp مطابقت داره یا نه

اگر مطابقت داشت اسم و پسورد کرک شده رو داخل دیکشنری new_hp ذخیره میکنه

 

for radif in reader:
        name = radif[0]
        hash_in_reader = radif[1]
        for hach_in_hp in hp.keys():
           if hash_in_reader == hach_in_hp:
                new_hp[name]=hp.get(hach_in_hp)

 

در آخر که پسورد ها رو بدست آوردیم باید اسم ها و پسورد ها رو داخل یک فایل csv ذخیره کنیم 

 

with open(output_file_name , 'w') as out:
    count = 0
    for names in new_hp:
        count += 1
        if count == 1:
            out.write(names + ',' + str(new_hp.get(names)))
        else:
            out.write('\n' + names + ',' + str(new_hp.get(names)))

 

این هم کد کامل:

 

from hashlib import sha256
import csv

def hash_password_hack(input_file_name , output_file_name):
    with open(input_file_name) as fin:
        reader = csv.reader(fin)
        hp = {}
        new_hp = {}
        for i in range(1000 , 9999):
            hash_jadid = sha256(str(i).encode())
            hash_jadid = hash_jadid.hexdigest()
            hp[hash_jadid] = i
        for radif in reader:
            name = radif[0]
            hash_in_reader = radif[1]
            for hach_in_hp in hp.keys():
               if hash_in_reader == hach_in_hp:
                    new_hp[name]=hp.get(hach_in_hp)
    with open(output_file_name , 'w') as out:
        count = 0
        for names in new_hp:
            count += 1
            if count == 1:
                out.write(names + ',' + str(new_hp.get(names)))
            else:
                out.write('\n' + names + ',' + str(new_hp.get(names)))

 

الان میتونین مثلا یک input از کاربر بگیرین که اسم فایلشو وارد کنه و یک input بگیرین که اسم فایل خروجیش رو وارد کنه و در آخر از این تابع استفاده کنین و برنامه براتون هش ها رو کرک میکنه

 

میتونین هم خودتون پیشرفته ترش کنین و الگوریتم های هش دیگه رو هم بهش اضافه کنین رنج اعداد رو بیشتر کنین یا حتی از کاربر برای کرک، پسورد لیست بگیرین و...

 

امیدوارم براتون مفید بوده باشه D:


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