ساخت ابزار بیرون کشیدن اطلاعات از تاریخچه مرورگر در پایتون :: Mr Python | مستر پایتون

ساخت ابزار بیرون کشیدن اطلاعات از تاریخچه مرورگر در پایتون

  • ۱۳۴۰

ساخت ابزار بیرون کشیدن اطلاعات از تاریخچه مرورگر کاربر در پایتون

درود به همه !

 

همونطور که میدونید تمامی مرورگر ها دارای تاریخچه هایی (History) هستند که بیشتر فعالیت های کاربر در آن مرورگر را ثبت میکنند . به طور مثال اطلاعاتی مثل سایت هایی که کاربر باز کرده ، عبارت هایی که کاربر جستوجو کرده و .... در تاریخچه ذخیره میشوند . امروز میخوایم اسکریپت پایتونی بنویسیم که به محض اجرا شدن به تاریخچه مرورگر گوگل کروم ، دسترسی بگیره و اطلاعاتی مثل : عبارت های جستوجو شده توسط کاربر ، سایت های باز شده و فایل های دانلود شده توسط کاربر رو بهمون نشون بده .

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

مرورگر Google Chrome بسته به سیستم عامل (ویندوز یا لینوکس) ، فایل های History خودش رو داخل یه مسیری ذخیره میکنه . حالا این فایل تاریخچه در واقع یه فایل دیتابیس هستش که ما میتونیم اطلاعاتشو بخونیم و کامل به تاریخچه مرورگر دسترسی داشته باشیم .

در سیستم عامل ویندوز فایل دیتابیسی به مسیر زیر حاوی تاریخچه مرورگر کروم است :

C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default\History

در سیستم عامل لینوکس :

/home/<username>/.config/google-chrome/Default/History

 

حالا که مسیر فایل دیتابیس تاریخچه رو میدونیم میتونیم یه اسکریپتی بنویسیم که به این فایل دسترسی پیدا کنه و محتویاتشو بخونه . فایل تاریخچه که بالا مسیرشو گفتیم یک دیتابیس SQLite هستش پس برای خوندن اون از کتابخونه ی sqlite3 در پایتون استفاده میکنیم که به صورت پیشفرض روی پایتون نصبه .

 

سورس اسکریپت :

import sqlite3
import os

if os.system("uname > /dev/null") == 0 : # OS IS LINUX
    db_path = os.getenv("HOME") + "/.config/google-chrome/Default/History"
else : # OS IS WINDOWS
    appdata = os.getenv("appdata").replace("\\Roaming","")
    db_path = appdata + "\\Local\\Google\\Chrome\\User Data\\Default\\History"

db = sqlite3.connect(db_path)
c = db.cursor()

# SEARCH History
searchs = []
c.execute("select term from keyword_search_terms")
for item in c.fetchall():
    searchs.append(item[0])

# URL HISTORY
urls = []
c.execute("select url from urls")
for item in c.fetchall():
    urls.append(item[0])

# Download HISTORY :
downloads = []
c.execute("select tab_url from downloads")
for item in c.fetchall():
    downloads.append(item[0])

## SHOW Information ##
print("Urls : ")
for url in urls:
    print("\t{}".format(url))

print("-"*50)

print("Downloaded Files :")
for download in downloads:
    print("\t{}".format(download))

print("-"*50)

print("Searchs : ")
for search in searchs:
    print("\t{}".format(search))

توضیح سورس :

در خطوط ابتدایی کتابخونه های مورد نیاز رو ایمپورت کردیم . سپس به وسیله ی تابع os.system یک دستور لینوکسی رو از طریق خط فرمان اجرا کردیم . بعد چک کردیم اگه جواب برگشتی برابر صفر بود یعنی دستور بدونه هیچ مشکلی اجرا شده پس سیستم عامل لینوکسه . در غیر این صورت سیستم عامل ویندوزه . سپس  با توجه به سیستم عامل متغییرdb_path که دربر دارنده ی مسیر دیتابیس هستش رو تعریف کردیم .

در خط بعدی با استفاده از دستور sqlite3.connect یک شیء از دیتابیس ساختیم و ریختیم داخل متغییر db . پس از اون یک cursor برای اجرای دستورات sqlite درست کردیم .

در چند خط بعدی اومدیم یه لیست خالی به اسم searchs تعریف کردیم که قراره عبارت های جستوجو شده توسط کاربر توی اون ریخته بشه . با استفاده از دستور c.execute اومدیم دستور استخراج اطلاعات مربوط به جستوجو های کاربر رو روی دیتابیس اجرا کردیم . در خط بعد جواب  دستور که برابر لیستی از عبارت های جستوجو شده کاربر هستش رو با یه حلقه ی for ریختیم داخل لیست  searchs .

تا اینجا عبارت های جستوجو شده ی کاربر رو بدست آوردیم . در چند خط بعدی ، برای بدست آوردن بقیه اطلاعات هم دقیقا همین کد ها رو اجرا میکنیم با این تفاوت که دستور اجرا شده روی دیتابیس فرق داره .

با توجه به کامنت گذاری همینطور که میبینید غیر از عبارت های جستوجو شده ، لیست دانلود ها و لیست سایت های باز شده توسط کاربر رو هم به همین روش بدست آوردیم .

 

در نهایت پس از بدست آوردن اطلاعات میریم سراغ نمایش اطلاعات . قسمت زیر کامنت show information مربوط به نمایش اطلاعات بدست آمده است .

ما در اینجا سه تا لیست داریم . یکی searchs که دربردارنده ی جستوجو های کاربر است و دیگری urls که حاوی لینک های باز شده توسط کاربر است و نهایتا لیست downloads که حاوی لینک دانلود فایل های دانلود شده توسط کاربر است .

با استفاده از  سه حلقه ی  for ، محتویات این سه لیست رو به وسیله ی دستور print چاپ کردیم .

(اینجا دیگه ریش و قیچی دست خود شماس . میتونید این اطلاعات رو آپلود کنین روی یه هاست شخصی یا ارسال کنید به ربات تلگرام یا حتی بنویسینش داخل یه فایلی )

 

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

 

پس از رعایت نکته ی بالا سورس رو با پایتون ۳ اجرا میکنیم . همینطور که در تصویر زیر میبینید ، لیست سایت های باز شده ، لیست دانلود ها و لیست عبارت های جستوجو شده به نمایش در میاد .

 

 

Telegram Channel : @mrpythonblog

  • اقا اونو اوکی کردم
    یکی دیه اومد
    The system cannot find the path specified.
    Traceback (most recent call last):
      File "C:\Users\pro\Desktop\py.py", line 15, in <module>
        c.execute("select term from keyword_search_terms")
    sqlite3.OperationalError: database is locked
    چ کنم؟

    پاسخ:
    این احتمالا برا اینه که دیتابیس باز شده . احتمالا کروم در حال اجراس . کروم رو ببند و تست کن . یا اینکه فایل دیتابیسو کپی کن یه جا و روی اون کپی شده هه کاراتو بکن
  • کامنت ما تایید نمیشه؟

    پاسخ:
    سلام چرا .
  • سلام 3باره

    اقا من رفتم پرینتش کردم 

    C:\Users\pro\AppData\Local\Google\Chrome\User Data\Default\History

    از قسمت C:\Users\pro\AppData\Local\Google\Chrome\User Data به بعد دیگه نبود

    یعنی Default\History وجود نداره

     

    پاسخ:
    سلام مجدد.  
    والا نمیدونم چرا وجود نداره . تو گوگل هم جستوجو کردم همه همین مسیر رو میدن یعنی شما بری داخل پوشه User Data باید یه پوشه Default باشه و داخلش فایل History . ولی شما تو همون مسیر Chrome/User Data یه جستوجو برای فایل History بکن ببین چی پیدا میشه .
  • سلام عزیز

    چجوری ارور : 

      File "c:\Users\pro\Desktop\morse.py", line 10, in <module>
        db = sqlite3.connect(db_path)
             ^^^^^^^^^^^^^^^^^^^^^^^^
    sqlite3.OperationalError: unable to open database file  

    اوکی کنم؟

    و اینکه

    ایا راهی هست که پایتون خودش بره و بفهمه که گوگل تارگت کجا نصب شده و بره قسمت مورد نظر؟

    پاسخ:
    سلام عزیز 
    تو این مسیر رجیستری توی ویندوز مسیر نصب برنامه ها هست : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
  • مضاحم شدم مجدد

    بفرما متن کامل ارور

    sqlite3.OperationalError: unable to open database file

     

    اینم کامل ترش:

     

    The system cannot find the path specified.
    Traceback (most recent call last):
      File "c:\Users\pro\Desktop\django\restaurant\foods\models.py", line 10, in <module>
        db = sqlite3.connect(db_path)
             ^^^^^^^^^^^^^^^^^^^^^^^^
    sqlite3.OperationalError: unable to open database file

    پاسخ:
    سلام . سلامت باشی .
    The system cannot find the path specified.
    طبق این تیکه ارور میگه که اون مسیر دیتابیس اشتباهه (db_path)
    یه بار این مسیرو قبل اینکه باز کنه چاپش کن ببین اصلا چیه و برو ببین اصلا تو اون مسیر واقعا دیتابیسه هست یا نه . ببین آدرس دقیقش کجاس . 
  • سلام داداش خسته نباشی
    اقا این ارور unable to open database file چجوری بر طرف کنم؟

    پاسخ:
    سلام عزیز .
    متن کامل ارور رو بفرستید .

  • سلام خسته نباشید ببخشید اگه بخوایم پسورد های مرورگر رو بیرون بکشیم باید چی کار کنیم؟

    پاسخ:
    درود بر شما 
    https://www.thepythoncode.com/article/extract-chrome-passwords-python
    این لینک این سورس رو یاد داده . 
    خودمون نیز در پست های بعدی آموزششو به فارسی و به طور کامل میزاریم :)
  • سلام درمورد کوکی های مروگر هم همینطوره ؟

     

    پاسخ:
    خیر کوکی های مرورگر در دیتابیسی که ما ازش اطلاعات میکشیم بیرون ذخیره نمیشن . اونا در مکان جداگونه ای ذخیره میشن .
  • اینکار بیشتر به درد باج افزار نویسی میخوره

    پاسخ:
    درود :)
    اینکه به چه دردی میخوره فقط به خلاقیت هکر بستگی داره .
  • بسیار جالب و کاربردی ، خیلی ممنون

    پاسخ:
    سلام . خواهش میکنم .
    خیلی ممنون از توجهتون :)
  • یعنی کروم همه اطلاعات رو با دیتابیس sqlite بدون هیچ رمزگزاری ذخیره میکنه ؟! 😆

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