Подтвердить что ты не робот

Начало работы с обратной технологией OS X?

Какое хорошее место для изучения обратной инженерии, в частности, применительно к Mac OS X? Два приложения, которыми я восхищаюсь по этому вопросу:

Гиперпространства - http://thecocoabots.com/hyperspaces/

и

Орбита - http://www.steventroughtonsmith.com/orbit/

Спасибо, ребята.

4b9b3361

Ответ 1

Используйте class-dump-x/- z получить частные заголовки Objective-C для системных систем OS X/iPhone OS. Существует множество классов/методов, скрытых от общественности (некоторые правильно)

Ответ 2

Вам следует взять копию Mac OS X Internals, которая является потрясающей книгой обо всем, что Apple не говорит вам. Мало того, что это замечательно, если вы заинтересованы в обратном проектировании, он также сделает вас лучшим программистом OS X в целом.

Ответ 3

Apple выпускает тонну основы OS X как открытый источник. Смотрите здесь.

Кроме того, F- Script Anywhere поможет тонну с рассечением Finder и/или любого другого приложения с закрытым исходным кодом.

Ответ 4

Для iPhoneOS специально класс-дамп-z - отличный способ сбрасывать заголовки. Единственная проблема, конечно, в том, что вы не можете увидеть, что происходит внутри каждого метода. IDA Pro и несколько сценариев позволяют видеть инструкции по сборке для этих системных фреймворков. (пример изображения: http://grab.by/1Vn6).

Наиболее удобными сценариями IDC являются fixobjc2 и dyldinfo. Вы можете найти каждый из этих ссылок из этого сообщения в блоге: http://networkpx.blogspot.com/2010/01/two-ida-pro-5x-scripts-for-iphoneos.html

Но какая польза от этой информации, если вы не можете ее использовать? Разработчик iPhone saurik написал что-то, называемое MobileSubstrate, которое позволяет подключаться к любому методу. http://svn.saurik.com/repos/menes/trunk/mobilesubstrate/

Ответ 5

Другие уже упомянули класс-дамп, который является отличным инструментом для извлечения определений классов из скомпилированного исполняемого файла. В соответствующей заметке вы также должны взглянуть на otx, который обеспечивает очень хороший (читаемый), дизассемблированный вывод.

Если вам нужен способ быстро протестировать фрагменты кода, используйте F- Script (упомянутый другими), Nu или MacRuby. Из них я в основном использовал Nu. Он имеет возможность определять мостовые функции "на лету" и может обрабатывать указатели, оба из которых довольно удобны, если вам нужно вызвать произвольные функции C.

Поскольку вы упомянули о том, что интересно в Spaces и других диспетчерах экрана, вы также должны прочитать Краткое руководство по обратному инженерному OS X. Это старая статья Rich Wareham (автор приложения для нескольких настольных компьютеров: "Desktop Manager" ) о том, как он вычислил синтаксис вызовов для нескольких частных методов CoreGraphics, чтобы делать приятные переходы на рабочем столе. исходный код для Desktop Manager также доступен, что может быть полезно для вас.

Ответ 6

На этом сайте показано, как исправить существующую программу Objective C: 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)

Ответ 7

В качестве дополнения к другим ответам вы захотите проверить DYLD_INSERT_LIBRARIES, чтобы ввести код в программу Cocoa.

Ответ 8

Вы должны обязательно использовать DTrace. Существует отличная презентация BlackHat по использованию DTrace для обратной инженерии на OS X, озаглавленной "DTRACE: The Reverse Engineer Неожиданный швейцарский армейский нож".

Вы можете получить копию и просмотреть видео-презентацию здесь.

Есть также некоторые отличные работы на www.uninformed.org в области обратного проектирования OS X.