2010-12-22 6 views
19

मैं माइक्रोसॉफ्ट डेटोरस में नया हूं। मैंने सिस्टम को एक प्रक्रिया को कॉल करने के लिए इसे स्थापित करने के लिए इसे स्थापित किया है। मैं निम्नलिखित आदेश चलाता हूं जो मुझे वेबमाइक्रोसॉफ्ट डेटोर कैसे काम करता है और मैं स्टैक ट्रेस प्राप्त करने के लिए इसका उपयोग कैसे करूं?

syelogd.exe /q C:\Users\xxx\Desktop\log.txt 
withdll.exe /d:traceapi.dll C:\Program Files\Google\Google Talk\googletalk.exe 

मुझे लॉग फ़ाइल मिलती है। समस्या यह है कि मैं पूरी तरह से समझ नहीं पा रहा हूं कि यहां क्या हो रहा है। कैसे काम करता है? यह सिस्टम कॉल का पता कैसे लगाता है? मुझे यह भी नहीं पता कि log.txt में आउटपुट को कैसे पढ़ा जाए। Log.txt

20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId() 

अंत में मैं प्रक्रिया का स्टैक ट्रेस प्राप्त करना चाहता हूं। मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

22

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

इस प्रक्रिया को आप Deviare API Hook उपयोग कर सकते हैं आसान बनाने के लिए जो करता है सब इंजेक्शन कर्मचारियों और आप किसी भी प्रोग्रामिंग भाषा जो .NET, डेल्फी, सी ++, अजगर सहित COM प्रौद्योगिकी, का समर्थन करता है, आदि .. से अवरोधन अनुप्रयोगों का उपयोग कर सकते हैं डाउनलोड करने के बाद पैकेज में आपको कुछ उदाहरण मिलेगा। DeviareCSharpConsole नामक एक कंसोल है जो आपको किसी भी प्रक्रिया के किसी भी एपीआई को पूर्ण स्टैक ट्रेस जानकारी दिखाता है।

इस तरह Deviare API Hook काम करता है, लेकिन आप क्या करने की जरूरत है कि आप एक आवेदन है कि किसी अन्य प्रक्रिया हुक बनाना चाहते हैं है:

Deviare API Hook Design

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

यदि आपको Deviare API Hook का उपयोग करके लक्ष्य प्रक्रिया के अंदर कोड लिखने की आवश्यकता है तो आप Deviare Custom Hooks का उपयोग कर सकते हैं। यह सुविधा आपको एपीआई को अवरुद्ध करने और संसाधित पैरामीटर को असीमित रूप से संभालने देती है।

15

सबसे पहले, मैं अत्यधिक सलाह दूंगा कि यदि आप एपीआई हुकिंग करना चाहते हैं, तो मैं आसान हो जाऊंगा: http://easyhook.codeplex.com/ (ओपन सोर्स)। यह एक बहुत अच्छा और आसान एपीआई-हुकिंग फ्रेमवर्क है।

स्टैक ट्रेस कैसे प्राप्त करें के बारे में, मुझे याद नहीं है कि यह कैसे करना है, लेकिन WinAPIOverride32: http://jacquelin.potier.free.fr/winapioverride32/ (ओपन सोर्स) देखें। वह ठीक वही कर रहा है, और यह खुला स्रोत है। इसके अलावा, यदि आपको शोध के लिए निशान की आवश्यकता है, तो WinAPIOverride32 एप्लिकेशन का काम करने के तरीके का अध्ययन करने के लिए उपयोग करने के लिए एक शानदार एप्लिकेशन है।

संपादित करें: बस एक और एप्लिकेशन जोड़ना। http://www.rohitab.com/ WinAPIOVerride32 की तरह है, लेकिन यह 64 बिट का समर्थन करता है और यह वास्तव में सुधार हुआ क्योंकि मैंने यह उत्तर लिखा था। मुझे यह इंगित करना होगा कि कुछ मामलों में यह एपीआई कॉल से चूक गया जो मुझे WinAPIOverride32 में मिला, लेकिन यह अभी भी बहुत अच्छा है। दुर्भाग्य से स्रोत प्रकाशित नहीं हुआ है।

बारे में कैसे api-hooking काम करता है, खैर इसकी एक लंबी व्याख्या, मैं आप इस लेख को इंगित होगा: http://www.codeproject.com/KB/system/hooksys.aspx यह है कि यह कैसे हुड के नीचे किया जाता है की एक बहुत अच्छा विवरण देता है (वहाँ क्या अलावा अन्य तरीके हैं वहां लिखा गया है, लेकिन फिर भी, यह एक बहुत अच्छा लेख है)।

उम्मीद है कि यह मदद करता है! :-)

2

यदि आपको कॉलस्टैक प्राप्त करने के लिए डेटोरस के अलावा कुछ अन्य उपयोग करने की अनुमति है, you could install a debugger like WinDbg and attach it to the process

तुम भी प्रक्रिया जैसे अन्य टूल की कोशिश कर सकते मॉनिटर और विंडोज प्रदर्शन टूलकिट के रूप में समझाया here

20
detours के बजाय

या easyhook (जो केवल 32-बिट के लिए नि: शुल्क है) (जो, khm, एक थोड़ा सा गन्दा कोड) आप mhook 2.4 की जाँच करने के लिए जो बहुत साफ कोड और बीएसडी लाइसेंस प्राप्त है सकते हैं। X86 और x64 पर काम करता है, आईपी-रिश्तेदार कोड संभालता है, आदि

साइट पर यह कैसे काम करता है इस पर एक संपूर्ण विवरण भी है।

alt text

आईएसपी नामों का सवाल है, आप kernel32 से CaptureStackBackTrace() उपयोग कर सकते हैं, या आप कल्पना प्राप्त करना चाहते हैं, dbghelp से StackWalk64() का उपयोग करें।

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