PDA

View Full Version : طریقه ساخت KeyLoger در دلفی



Ahmad_Crack
دوشنبه 15 اسفند 1384, 10:48 صبح
به چه صورت می توان بعد از اجرای برنامه و خروج از برنامه تمام کلیدهای فشرده شده توسط کاربر را تشخیص و ثبت کرد.

سید مسعود موحد
دوشنبه 15 اسفند 1384, 10:53 صبح
در دلفی ما کتمپوننتی داریم بنام ApplicationEvents تمام رویدادهایی که در سطح OS اتفاق میافتد میتوانی Message هاشو اونجا بگیری.
یک نگاهی بینداز.

Ahmad_Crack
دوشنبه 15 اسفند 1384, 11:04 صبح
آخه مشکل اینجاست که وقتی پنجره برنامه ما فعال نباشد هیچ Message به برنامه فرستاده نمی شود.

سید مسعود موحد
دوشنبه 15 اسفند 1384, 11:07 صبح
خب برنامه ات رو باید فعال داشته باشی
باز اگر بقیه دوستان ایراد نگیرن میتوانی از Service استفاده کنی که فقط کافی است که Start باشد.

mehdi_394
دوشنبه 15 اسفند 1384, 13:54 عصر
یک راهش اینه که سرویسی بنویسی که صفحه کلید رو hook کنه برای اطلاعات بیشتر در مورد توابع hook می تونی به msdn یا خود win32sdk دلفی مراجعه کنی
توابع هوک بعد از set شدن event معینی را fire می کنند .
مثلا keyborad hook کلیه message های سیستم را که مربوط به صفحه کلیداست در اختیارت قرار می ده و پردازش کردنش هم می مونه که یک الگوریت می خوادم ،اونم کار زیاد سختی نیست

Naficy
سه شنبه 16 اسفند 1384, 12:39 عصر
در دلفی ما کتمپوننتی داریم بنام ApplicationEvents تمام رویدادهایی که در سطح OS اتفاق میافتد میتوانی Message هاشو اونجا بگیری.
یک نگاهی بینداز.
ApplicationEvents تنها پیامهایی که به برنامه شما ارسال شدن را دریافت می کنه، نه همه پیامها در سطح OS را. بنابراین پیغامهای کیبوردی که به سایر برنامه ها ارسال شدن را نمی تونید به کمک این کامپوننت دریافت کنید.

***************
برای اینکه بتونید پیامهایی که به سایر برنامه ها ارسال می شه رو دریافت کنید، (مثلا پیامهای مربوط به کیبورد را) یکی از راهها استفاده از hook هست. (البته در این حالت احتیاجی به نوشتن سرویس نیست، اما مشکلی هم پیش نمی یاره)

درکل سرویس نوشتن ربطی به موضوع نداره.

Ehsansh
سه شنبه 16 اسفند 1384, 15:22 عصر
این مشکل شما رو حل میکنه:
http://delphi.about.com/library/bluc/text/uc063001a.htm

mehdi_394
سه شنبه 16 اسفند 1384, 16:21 عصر
سرویس نوشتن یک راه برای اجرا ی برنامه قبل از سایر Application های دیگر است . ضمنا تا حدودی هم برنامه را مخفی می کند .
مثلا اگر سرویس را svchost نام گذاری کنی ( یا همنام با دیگر سرویس های مشهور) بیشتر کاربران از وجود برنامه بی اطلاع خواهند بود.
اصولا مهمترین چیز در نوشتن keylogger ، مخفی کردن آن است که هر کسی یک راه را پیش می گیرد

joker
سه شنبه 16 اسفند 1384, 16:45 عصر
با عرض معذرت از دوستان

برای نوشتن keyLoger نه احتیاج به سرویس نوشتن هست نه دردسر هوک کردن

به مستندات تابع GetAsyncKeyState مراجعه کنید!

Ehsansh
چهارشنبه 17 اسفند 1384, 20:12 عصر
جالب بود! تو مستندات نوشته بود:
The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.
اما من از هر جا در مورد Key Logger پرسیدم بهم گفتن باید Hook کنی!
شما مطمئن هستید اگر برنامه مخفی باشه بازم کار میکنه؟

joker
چهارشنبه 17 اسفند 1384, 21:48 عصر
جالب بود! تو مستندات نوشته بود:
The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.
اما من از هر جا در مورد Key Logger پرسیدم بهم گفتن باید Hook کنی!
شما مطمئن هستید اگر برنامه مخفی باشه بازم کار میکنه؟

مطمئن باشید :) از آقای کرامتی بپرسید که یه زمانی یه برنامه مثلا ماشین حساب روی کامپیوتر
خودشون اجرا کردن:لبخند:
چقدر حال داد :گیج:

mehdi_394
چهارشنبه 17 اسفند 1384, 22:55 عصر
ببینید همانطور که گفتید تابع GetAsyncKeyState وضعیت کلید را در زمان فراخوانی نشان می دهد اما این زمان فراخوانی کی باید باشد؟
مطمئنا باید از تایمر استفاده کنی . حال در صورت استفاده از تایمر بسته به مقدار Interval ممکن است بعضی از کلید ها ی زده شده را نتونی ثبت کنی اما اگه از hook استفاده کنی به محض زده شدن یک کلید تابع نوشته شده توسط شما اجرا خواهد شد و می توانی کلید را ثبت کنی و این به مخفی بودن یا نبودن برنامه بستگی ندارد چون نوع hook جهانی یا Global است . فقط کافی است که برنامه شما در حال اجرا باشد حال یا در پس زمینه یا در پیش زمینه.

Ehsansh
پنج شنبه 18 اسفند 1384, 07:15 صبح
آقای جوکر این دستور شما رو کجا باید نوشت؟

Touska
پنج شنبه 18 اسفند 1384, 09:22 صبح
اگر احتیاج به KeyHook دارید اینو یک نگاه بیندازید :

joker
پنج شنبه 18 اسفند 1384, 11:31 صبح
ببینید همانطور که گفتید تابع GetAsyncKeyState وضعیت کلید را در زمان فراخوانی نشان می دهد اما این زمان فراخوانی کی باید باشد؟
مطمئنا باید از تایمر استفاده کنی . حال در صورت استفاده از تایمر بسته به مقدار Interval ممکن است بعضی از کلید ها ی زده شده را نتونی ثبت کنی اما اگه از hook استفاده کنی به محض زده شدن یک کلید تابع نوشته شده توسط شما اجرا خواهد شد و می توانی کلید را ثبت کنی و این به مخفی بودن یا نبودن برنامه بستگی ندارد چون نوع hook جهانی یا Global است . فقط کافی است که برنامه شما در حال اجرا باشد حال یا در پس زمینه یا در پیش زمینه.
درسته
اما گره ای که با دست باز میشه با دندون که باز نمیکنن:اشتباه:
یه تایمر معمولی با اینتروال 500 هم که باشه بسه ( کاربری دیدین که سریعتر تایپ کنه ؟)
خب برای اطمینان 250 نه اصلا 10 میزاریم :) اینطوری هیچ کلید تایپ شده کاربر را از دست نخواهیم داد.



به نظر یه عدد تغییر دادن خیلی ساده تر از سرو کله زدن با هوک کردن api های مربوطه هست :لبخند:
هر کسی هر جور راحت تره میتونه بنویسه :تشویق:


پیوست : برای کار با هوک ها بهترین پیشنهاد MadCollection محصول www.madshi.net هست به صورت رایگان هم هست.
( غیر از هوک ها لایبراریهای کاملتر دیگه ای هم داره )
· madExcept (http://www.madshi.net/madExceptDescription.htm)
· madCodeHook (http://www.madshi.net/madCodeHookDescription.htm)
· madKernel (http://www.madshi.net/madKernelDescription.htm)
· madSecurity (http://www.madshi.net/madSecurityDescription.htm)
· madShell (http://www.madshi.net/madShellDescription.htm)
· madCollection (http://www.madshi.net/madCollectionDescription.htm)

dkhatibi
چهارشنبه 30 فروردین 1385, 08:16 صبح
اگه کسی خواست اینو ببینه
برا هک کردن Yahoo Messenger هست.
فایل C:\Error را در ÷وشه ک÷ی کنید و Decode را اجرا کنید.