2010-02-07 7 views
11

रिवर्स इंजीनियरिंग सीखने के लिए एक अच्छी जगह क्या है, खासकर जब यह मैक ओएस एक्स पर लागू होती है? कि मैं इस विषय के संदर्भ में प्रशंसा दो क्षुधा:रिवर्स-इंजीनियरिंग ओएस एक्स शुरू करना?

Hyperspaces - http://thecocoabots.com/hyperspaces/

और

ऑर्बिट - http://www.steventroughtonsmith.com/orbit/

धन्यवाद दोस्तों।

+4

ओएस एक्स के कौन से हिस्से? यह एक बड़ा जानवर है, कई हिस्सों ओपन-सोर्स हैं इसलिए रिवर्स इंजीनियरिंग की आवश्यकता नहीं है। अधिक विशिष्ट बनें और आपको कुछ जवाब मिल सकते हैं। –

+3

रिवर्स इंजीनियरिंग सॉफ्टवेयर का एक महत्वपूर्ण टुकड़ा एक * बड़ा * और * कठिन * समस्या है। ब्लैक बॉक्स रिवर्स इंजीनियरिंग खराब है। यदि आपको पूछना है, तो आप कार्य को काफी चुनौतीपूर्ण पाते हैं ... – dmckee

+0

@ एंड्रयू मैकग्रेगर - ठीक है, अधिकतर अनियंत्रित सामान, जैसे स्पेस को संशोधित करना या होम स्क्रीन को स्वैप करना जैसे कि मैंने दो ऐप्स में लिंक किया है। – chrisgoyal

उत्तर

4

ओएस एक्स/आईफोन ओएस सिस्टम ढांचे के लिए निजी उद्देश्य-सी शीर्षलेख प्राप्त करने के लिए class-dump-x/-z का उपयोग करें। वहाँ जनता से छुपा वर्गों/तरीकों का एक बहुत (कुछ ठीक ही तो)

17

आपको Mac OS X Internals की प्रतिलिपि लेनी चाहिए जो कि ऐप्पल आपको बताए गए सब कुछ के बारे में एक शानदार पुस्तक है। यदि आप रिवर्स इंजीनियरिंग में दिलचस्पी रखते हैं तो यह न केवल महान है, बल्कि यह आपको सामान्य रूप से एक बेहतर ओएस एक्स प्रोग्रामर भी बना देगा।

+0

मैकोज़क्स आंतरिक प्रोग्रामिंग कार्यों के लिए आपकी सहायता नहीं करता है। यह यहां मदद नहीं करेगा जहां कार्य स्पष्ट रूप से जीयूआई है। मैं इस पुस्तक से बहुत निराश हूं - अच्छी तरह से कर्नेल ड्राइवर लेखकों को यह पसंद हो सकता है। – Lothar

+0

पुस्तक वास्तव में कोको प्रोग्रामिंग के बारे में नहीं है। हालांकि, मेरी राय में आप बेहतर सॉफ्टवेयर बनाएंगे यदि आप गैर-गुई परतों को भी समझते हैं जिन पर आपका जीयूआई रहता है। –

+1

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

4

ऐप्पल ओपन एक्स के रूप में ओएस एक्स की नींव का एक टन जारी करता है। See here

इसके अलावा, F-Script Anywhere खोजक और/या किसी अन्य बंद स्रोत एप्लिकेशन को विच्छेदन करने के साथ एक टन की मदद करेगा।

+0

एफ-स्क्रिप्ट मेरा जवाब होगा। यह वास्तव में आपको ऐप्स के अंदर आने देता है। बेशक, यह केवल मैक पर काम करेगा। – TechZen

3

iPhoneOS के लिए विशेष रूप से कर रहे हैं, वर्ग-डंप-Z एक शानदार तरीका हेडर डंप करने के लिए है। बेशक, एकमात्र समस्या यह है कि आप वास्तव में नहीं देख सकते कि प्रत्येक विधि के अंदर क्या हो रहा है। आईडीए प्रो और कुछ स्क्रिप्ट इन सिस्टम ढांचे के लिए असेंबली निर्देश देखना संभव बनाता है। (उदाहरण चित्र: http://grab.by/1Vn6)।

सबसे आसान आईडीसी स्क्रिप्ट fixobjc2 और dyldinfo हैं। आप इन इस ब्लॉग पोस्ट से जुड़ा हुआ में से प्रत्येक पा सकते हैं: http://networkpx.blogspot.com/2010/01/two-ida-pro-5x-scripts-for-iphoneos.html

लेकिन, क्या अच्छा इस जानकारी यदि आप इसे इस्तेमाल नहीं कर सकते है? आईफोन डेवलपर सॉरिक ने मोबाइल सब्सट्रेट नामक कुछ लिखा है जो किसी भी विधि पर हुकिंग को सक्षम बनाता है। http://svn.saurik.com/repos/menes/trunk/mobilesubstrate/

+0

ध्यान दें कि मैक पर मोबाइल सब्सट्रेट का उपयोग करना भी संभव है, और सिमबेल भी देखें! –

1

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

यदि आपको कोड के स्निपेट का त्वरित परीक्षण करने की आवश्यकता है, तो एफ-स्क्रिप्ट (दूसरों द्वारा उल्लिखित), Nu या MacRuby का उपयोग करें। इनमें से, मैंने मुख्य रूप से Nu का उपयोग किया है। इसमें फ्लाई पर ब्रिज किए गए फ़ंक्शंस को परिभाषित करने की क्षमता है, और पॉइंटर्स को संभाल सकता है, जिनमें से दोनों मनमानी सी कार्यों को कॉल करने की आवश्यकता होने पर बहुत आसान हैं।

चूंकि आपने स्पेस और अन्य स्क्रीन प्रबंधकों में दिलचस्प होने का उल्लेख किया है, तो आपको A brief tutorial on reverse engineering OS X भी पढ़ना चाहिए। कैसे वह क्रम अच्छा डेस्कटॉप बदलाव करने के लिए कुछ निजी CoreGraphics तरीकों के लिए कॉल वाक्य रचना पता लगा पर: यह रिच Wareham ('डेस्कटॉप प्रबंधक' पूर्व रिक्त स्थान बहु डेस्कटॉप ऐप्लिकेशन के लेखक) द्वारा एक पुराने लेख है। source code for Desktop Manager भी उपलब्ध है, जो आपके लिए उपयोगी हो सकता है।

1

इस साइट में दिखाता है कि कैसे एक मौजूदा उद्देश्य सी कार्यक्रम पैच करने के लिए: http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering

अर्थात् मुद्राओं का:

[[B class] poseAsClass:[A class]]; 

और विधि swizzling:

/** 
* Renames the selector for a given method. 
* Searches for a method with _oldSelector and reassigned _newSelector to that 
* implementation. 
* @return NO on an error and the methods were not swizzled 
*/ 
BOOL DTRenameSelector(Class _class, SEL _oldSelector, SEL _newSelector) 
{ 
     Method method = nil; 

     // First, look for the methods 
     method = class_getInstanceMethod(_class, _oldSelector); 
     if (method == nil) 
       return NO; 

     method->method_name = _newSelector; 
     return YES; 
} 

// *** Example *** 


// never implemented, just here to silence a compiler warning 
@interface WebInternalImage (PHWebInternalImageSwizzle) 
- (void) _webkit_scheduleFrame; 
@end 

@implementation WebInternalImage (PHWebInternalImage) 

+ (void) initialize 
{ 
     DTRenameSelector([self class], @selector(scheduleFrame), @selector (_webkit_scheduleFrame)); 
     DTRenameSelector([self class], @selector(_ph_scheduleFrame), @selector(scheduleFrame)); 
} 

- (void) _ph_scheduleFrame 
{ 
     // do something crazy... 
     ... 
     // call the "super" method - this method doesn't exist until runtime 
     [self _webkit_scheduleFrame]; 
} 

@end 

(http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering से नकल कोड)

+0

यह वास्तव में यह नहीं बताता कि प्रोग्राम को कैसे पैच करना है। जैसे, आप इसके अंदर प्रस्तुत होने के लिए प्रोग्राम को पहले ही पैच कर चुके होंगे। इसके अलावा, कक्षा प्रस्तुत करना बहिष्कृत है और 64-बिट रनटाइम afaik में काम नहीं करता है। – Chuck

+0

पैचिंग भाग को सिमब्लूएल प्लगइन बनाने के रूप में लिंक में समझाया गया है। यह नहीं पता था कि इसे कम किया गया था, इसलिए यहां पॉसएस्क्लास के विकल्पों के बारे में एक एसओ लिंक है: http://stackoverflow.com/questions/1289757/alternative-to-poseasclass-in-mac-os-x-10-5- और उच्चा – Robert

1

दूसरे के अतिरिक्त के रूप में उत्तर, आप कोको प्रोग्राम में अपना कोड इंजेक्ट करने के लिए DYLD_INSERT_LIBRARIES को देखना चाहते हैं।

1

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

आप एक प्रति प्राप्त कर सकते हैं और वीडियो प्रस्तुति here देख सकते हैं।

रिवर्स इंजीनियरिंग ओएस एक्स पर 0uninformed.org पर कुछ उत्कृष्ट कागजात भी हैं।