2010-02-07 69 views
11

Một nơi tốt để học kỹ thuật đảo ngược, cụ thể là gì khi áp dụng cho Mac OS X? Hai ứng dụng mà tôi khâm phục về chủ đề này:Bắt đầu kỹ thuật đảo ngược OS X?

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

Orbit - http://www.steventroughtonsmith.com/orbit/

Thanks guys.

+4

Phần nào của OS X? Đó là một con thú khổng lồ, nhiều phần là mã nguồn mở nên không cần kỹ thuật đảo ngược. Cụ thể hơn và bạn có thể nhận được một số câu trả lời. –

+3

Kỹ thuật đảo ngược một phần đáng kể của phần mềm là một vấn đề * lớn * và * cứng *. Hộp đen kỹ thuật đảo ngược là tồi tệ hơn. Nếu bạn phải hỏi, bạn có thể thấy nhiệm vụ khá khó khăn ... – dmckee

+0

@Andrew McGregor - Vâng, hầu hết các công cụ không có giấy tờ, như sửa đổi Spaces hoặc hoán đổi màn hình chính như tôi đã liên kết trong hai ứng dụng. – chrisgoyal

Trả lời

4

Sử dụng class-dump-x/-z để nhận tiêu đề Mục tiêu-C riêng cho khung hệ thống OS X/iPhone OS. Có rất nhiều lớp học/phương pháp ẩn với công chúng (một số đúng như vậy)

17

Bạn nên lấy một bản sao của Mac OS X Internals là một cuốn sách tuyệt vời về mọi thứ mà Apple không nói cho bạn. Không chỉ tuyệt vời nếu bạn quan tâm đến kỹ thuật đảo ngược, nó cũng sẽ làm cho bạn một lập trình viên OS X tốt hơn nói chung.

+0

MacOSX Internals không giúp bạn thực hiện các tác vụ lập trình. Nó sẽ không giúp đỡ ở đây mà nhiệm vụ rõ ràng là GUI. Tôi khá thất vọng với cuốn sách này - các nhà văn trình điều khiển hạt nhân tốt có thể thích nó. – Lothar

+0

Cuốn sách không phải là về lập trình Cocoa thực sự. Tuy nhiên, theo ý kiến ​​của tôi, bạn sẽ tạo ra phần mềm tốt hơn nếu bạn cũng hiểu các lớp không phải là gui mà GUI của bạn đang sống. –

+1

OS X internals là một cuốn sách, giống như Windows internals, nói về sự can đảm của hệ thống. Nó sẽ không dạy cho bạn mã hóa, nhưng nếu bạn đang đảo ngược, nó sẽ giúp bạn hiểu các chức năng của mã. Khá đơn giản để hiểu đề xuất của anh ấy. –

4

Apple phát hành một tấn nền tảng của OS X làm nguồn mở. See here.

Ngoài ra, F-Script Anywhere sẽ giúp một tấn với việc phân tích Trình tìm kiếm và/hoặc bất kỳ ứng dụng nguồn đóng nào khác.

+0

F-Script sẽ là câu trả lời của tôi. Nó thực sự cho phép bạn vào trong ứng dụng. Tất nhiên, điều đó sẽ chỉ hoạt động trên Mac. – TechZen

3

Đối với iPhoneOS, class-dump-z là một cách tuyệt vời để kết xuất tiêu đề. Vấn đề duy nhất, tất nhiên, là bạn không thể thực sự thấy những gì đang xảy ra bên trong của mỗi phương pháp. IDA Pro và một vài tập lệnh giúp bạn có thể xem hướng dẫn lắp ráp cho các khung hệ thống này. (ví dụ: http://grab.by/1Vn6).

Các kịch bản IDC tiện dụng nhất là fixobjc2 và dyldinfo. Bạn có thể tìm thấy từng liên kết trong số này được liên kết từ bài đăng trên blog này: http://networkpx.blogspot.com/2010/01/two-ida-pro-5x-scripts-for-iphoneos.html

Nhưng thông tin này có ích gì nếu bạn không thể sử dụng? Nhà phát triển iPhone saurik đã viết một cái gì đó gọi là MobileSubstrate cho phép hooking vào bất kỳ phương pháp nào. http://svn.saurik.com/repos/menes/trunk/mobilesubstrate/

+0

Lưu ý rằng MobileSubstrate cũng có thể sử dụng trên máy Mac và cũng có thể kiểm tra SIMBL! –

1

Những người khác đã đề cập đến lớp kết xuất, là một công cụ tuyệt vời để truy xuất các định nghĩa lớp từ tệp thực thi được biên dịch. Trên một lưu ý liên quan, bạn cũng nên xem otx, cung cấp đầu ra tháo rời rất dễ đọc (có thể đọc được).

Nếu bạn cần một cách để kiểm tra nhanh các đoạn mã, hãy sử dụng F-Script (được đề cập bởi người khác), Nu hoặc MacRuby. Trong số này, tôi đã sử dụng chủ yếu Nu. Nó có khả năng xác định các hàm cầu nối trên bay, và có thể xử lý con trỏ, cả hai đều khá tiện dụng nếu bạn cần gọi các hàm C tùy ý.

Vì bạn đã đề cập thú vị trong Spaces và các trình quản lý màn hình khác, bạn cũng nên đọc A brief tutorial on reverse engineering OS X. Đó là một bài báo cũ của Rich Wareham (tác giả của ứng dụng đa máy tính để bàn trước Spaces: 'Desktop Manager') về cách ông đã tìm ra cú pháp cuộc gọi cho vài phương pháp riêng của CoreGraphics để thực hiện chuyển đổi desktop đẹp. Các source code for Desktop Manager cũng có sẵn, mà có thể hữu ích cho bạn.

1

Trang web này cho thấy làm thế nào để vá một chương trình C Mục tiêu hiện có: http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering

Cụ thể đặt ra:

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

và phương pháp 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 

(mã được sao chép từ http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering)

+0

Điều đó không thực sự cho biết cách vá một chương trình. Giống như, bạn phải đã vá chương trình để được đặt bên trong nó. Ngoài ra, lớp đặt ra không được chấp nhận và không hoạt động trong thời gian chạy 64 bit. – Chuck

+0

Phần vá được giải thích trong liên kết khi tạo plugin SIMBL. Không nhận ra nó đã bị khấu hao, vì vậy đây là liên kết SO về các lựa chọn thay thế cho poseAsClass: http://stackoverflow.com/questions/1289757/alternative-to-poseasclass-in-mac-os-x-10-5- và cao hơn – Robert

1

Là một sự bổ sung cho câu trả lời, bạn sẽ muốn kiểm tra DYLD_INSERT_LIBRARIES để tiêm mã của bạn vào một chương trình Cocoa.

1

Bạn chắc chắn nên cân nhắc sử dụng DTrace. Có một bài thuyết trình tuyệt vời của BlackHat về việc sử dụng DTrace cho kỹ thuật đảo ngược trên OS X mang tên "DTRACE: Con dao quân đội bất ngờ của quân đội Thụy Sĩ đảo ngược".

Bạn có thể nhận bản sao và xem bản trình bày video here.

Ngoài ra còn có một số giấy tờ tuyệt vời tại www.uninformed.org về kỹ thuật đảo ngược OS X.

Các vấn đề liên quan