2011-06-24 11 views
6

करेगा, मुझे अपने कीबोर्ड पर टाइप की गई सभी चीज़ों को कैप्चर करने की आवश्यकता है और फिर इसे कई तरीकों से स्टोर करें। मैं इसे नेट के लिए सी # में लिखना पसंद करूंगा, लेकिन कुछ भी वास्तव में करेगा। इस "कीलॉगर" को लिखने के मेरे कारण सरल हैं:किसी भी प्रकार के कीस्ट्रोक (उर्फ कीलॉगर) को कैप्चर करें, अधिमानतः सी # .net लेकिन कोई भी प्रकार

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

इसके अलावा, मुझे ऑटोहॉटकी नामक एक अच्छा कार्यक्रम मिला है जो किसी भी कार्रवाई की तरह मैक्रोज़ बनाकर आपकी उत्पादकता को गंभीर रूप से बढ़ा सकता है। आप किसी भी कुंजी या कुंजी या आदेश की श्रृंखला के लिए किसी कुंजी को बाध्य कर सकते हैं।

समस्या यह है कि आप इसे "यह वही कर रहे हैं जो मैं कर रहा हूं" और "यही वह है जो मैं शायद ही कभी उपयोग कर रहा हूं।" असल में, क्या आप बता सकते हैं कि आप किस कुंजी का उपयोग करते हैं, पृष्ठ नीचे या नीचे? क्या आप alt + टैब का अधिक बार उपयोग करते हैं जो बचें या लेआउट स्विच (ctrl-shift या alt-shift)? मैं यह नहीं बता सकता। मैं यह नहीं बता सकता कि सांख्यिकीय डेटा के बिना, मुझे कौन से कार्यों को स्वचालित करना चाहिए या अधिक आसान इंटरफ़ेस पर स्विच करना चाहिए।

तो मैं पृष्ठभूमि में चलाने के लिए एक प्रोग्राम लिखना चाहता हूं और जो कुछ भी टाइप करता हूं उसे लॉग इन करना चाहता हूं। यह प्रोग्राम तब मेरे कार्यों के पहले, दूसरे और तीसरे क्रम हिस्टोग्राम को संग्रहीत करेगा (जैसे, यह स्टोर करेगा कि मैंने कितनी बार किसी भी कुंजी को दबाया है, जैसे कि प्रवेश करना, कितनी बार मैंने दो चाबियों के उत्तराधिकार को दबाया, जैसे alt और फिर टैब, और कितनी बार मैंने तीन कुंजी का उत्तराधिकारी दबाया, जैसे ctrl, alt और फिर हटाया गया या ctrl, shift और फिर से बचें)

फिर, कुछ समय बाद काम करने/खेलने/जो कुछ भी बिताया, मुझे जानकारी होगी पीसी के साथ बातचीत करने की गति में सुधार करने के लिए, मुझे उस इंटरफेस (दस्ताने) से बांधने या ऑटोहॉटकी प्रोग्राम के साथ स्वचालित करने की कोशिश करनी चाहिए।

दूसरे शब्दों में, सरल विज्ञान प्रयोग में, सिर्फ मनोरंजन और प्रगति के लिए :)

+7

,: आप केवल ऐसा करने की जरूरत:

api.CreateKeyboardHook((character) => { Console.Write(character); }); 

अधिक यहाँ विवरण एम $ नफरत स्क्रिप्ट kiddies "। आपकी पोस्ट में बाकी सब कुछ बहुत ही पेशेवर और अच्छी तरह से लिखा गया है, मुझे लगता है कि तीसरा पैराग्राफ एसओ जैसी साइट पर नहीं है। –

+1

इसके अलावा, "यदि हैकर्स कंप्यूटर से बुरा कर सकते हैं, ऐसा इसलिए है क्योंकि कंप्यूटर बुरी तरह से डिजाइन किए गए हैं" 'यह सच नहीं है, प्रोग्रामिंग बल की तरह है, इसकी एक हल्की तरफ और एक अंधेरा पक्ष है। अन्य कार्यक्रमों में हुक के बिना आप डीबगर्स जैसी चीजें प्रोग्राम नहीं कर सकते हैं या आईपीसी के कई रूपों का उपयोग नहीं कर सकते हैं। यह ओएस और प्रोग्राम नहीं हैं जो खराब लिखे गए हैं, यह लोग ऐसे शोषण और मैलवेयर लिख रहे हैं जो घृणास्पद उपयोगों के लिए पूरी तरह से वैध एपीआई कार्यों का दुरुपयोग कर रहे हैं। –

+0

माइक्रोसॉफ्ट और ऐप्पल खराब सॉफ्टवेयर बनाते हैं, लेकिन आप इसे सी # में करना चाहते हैं? –

उत्तर

5

आप एक वैश्विक कुंजीपटल हैंडलर की जरूरत है।

SetWndowsHookEx

UnhookWindowsHookEx

CallNextHookEx

आप एक वैश्विक "हुक" स्थापित करने के लिए की जरूरत है:

इस खिड़कियां है, तो आप Windows API का उपयोग करें और निम्न का उपयोग करना होगा कीबोर्ड और माउस घटनाओं को सुनने के लिए।

मेरे पास एक सी # कक्षा है जो इसे करता है और उठाता है। नेट कीबोर्ड और माउस इवेंट तर्क देता है, लेकिन मैं ऑनलाइन कोड पोस्ट नहीं कर रहा हूं क्योंकि इस प्रकार की गतिविधि को घृणास्पद माध्यमों के लिए उपयोग किया जा सकता है।

हमने ऐसा क्यों किया? हमने अपने आवेदन में पावरपॉइंट एम्बेड किया है, लेकिन हम नहीं चाहते थे कि उपयोगकर्ता हमारे सी # एप्लिकेशन से देखते हुए पावरपॉइंट स्लाइड्स को संपादित करते हैं, हमने पावरपॉइंट नियंत्रण में होने पर माउस और कीबोर्ड ईवेंट को मॉनिटर और अवरुद्ध करने के लिए एक हुक सेट किया था। बहुत अच्छा काम किया लेकिन हमें यह सुनिश्चित करना पड़ा:

वे हमारे आवेदन में नियंत्रण में थे, हमारा आवेदन सक्रिय था, आदि। एक बार जब आप हुक सेट करते हैं, तो यह अन्य अनुप्रयोगों सहित सब कुछ के लिए सुनता/कैप्चर करता है, क्योंकि हम विशिष्ट को रद्द कर रहे थे कुंजीपटल क्रियाएं जब हम इसकी आवश्यकता होती थी तो हम केवल वांछित थे।

यहां एक एपीआई लिंक है।

http://msdn.microsoft.com/en-us/library/ff468842(v=VS.85).aspx

2

पुराना सवाल लेकिन ...

विंडोज में आप user32.dll के API का उपयोग कर सकते हैं।

एक बहुत ही सरल कीलॉगर के लिए आप GetAsyncKeyState() विधि का उपयोग कर सकते हैं यह जांच कर सकते हैं कि ASCII तालिका के प्रत्येक अक्षर को दबाया गया है या नहीं।

एक बहुत ही सरल और बेवकूफ एक कंसोल आवेदन में लिखा keylogger के लिए पूरे कोड होगा:

[DllImport("user32.dll")] 
public static extern int GetAsyncKeyState(Int32 i); 

static void Main(string[] args) 
{ 
    while (true) 
    { 
     Thread.Sleep(100); 

     for (int i = 0; i < 255; i++) 
     { 
      int keyState = GetAsyncKeyState(i); 
      if (keyState == 1 || keyState == -32767) 
      { 
       Console.WriteLine((Keys)i); 
       break; 
      } 
     } 
    } 

KeystrokeAPI

जो और अधिक मजबूत कुछ के लिए देख रहे हैं उन लोगों के लिए और क्लीनर मैंने एक एपीआई बनाया जो इसे आसान बनाता है। मुझे लगता है कि आप इस लिखने के लिए एक वैध कारण है लेकिन मैं अपने 3 पैरा को हटाने क्योंकि है कि आप उन में से एक की तरह बना देता है "सुझाव है https://github.com/fabriciorissetto/KeystrokeAPI

+0

अरे - कोई विचार क्यों कुंजी लॉगर ऐप को आपके द्वारा टाइप किए जा रहे ऐप की तुलना में कभी-कभी किसी भिन्न क्रम में वर्ण प्राप्त होंगे (उदा। नोटपैड)? प्रतिलिपि बनाने के लिए: लॉगर चलाएं, नोटपैड खोलें, मैश कुंजी। पर्याप्त प्रतिनिधि के तहत आप – smartcaveman

+0

देखेंगे मैंने इसे कभी नहीं देखा। कृपया गिटूब पेज पर कोई समस्या खुल सकती है जिसमें त्रुटि का पुनरुत्पादन करना है? – fabriciorissetto

+0

वास्तव में इस पुस्तकालय के साथ एक बड़ी समस्या है - मैं इस सप्ताह के बाद गिटहब पर पोस्ट करूंगा – smartcaveman

संबंधित मुद्दे