Iphone 开始反向工程OSX?

Iphone 开始反向工程OSX?,iphone,macos,operating-system,reverse-engineering,Iphone,Macos,Operating System,Reverse Engineering,什么是学习逆向工程的好地方,特别是当它应用于MacOSX时?就这一主题而言,我欣赏两款应用程序: 超空间- 及 轨道- 谢谢大家。你们应该买一本这是一本很棒的书,它讲述了苹果没有告诉你们的一切。这不仅是伟大的,如果你对逆向工程感兴趣,它也会使你成为一个更好的OSX程序员一般。 < P>苹果发布了大量的基础OS X作为开源… 此外,将有助于剖析Finder和/或任何其他封闭源代码应用程序。使用/获取OS X/iPhone OS系统框架的专用Objective-C头。有很多对公众隐藏的类/方法(有些

什么是学习逆向工程的好地方,特别是当它应用于MacOSX时?就这一主题而言,我欣赏两款应用程序:

超空间-

轨道-


谢谢大家。

你们应该买一本这是一本很棒的书,它讲述了苹果没有告诉你们的一切。这不仅是伟大的,如果你对逆向工程感兴趣,它也会使你成为一个更好的OSX程序员一般。

< P>苹果发布了大量的基础OS X作为开源…
此外,将有助于剖析Finder和/或任何其他封闭源代码应用程序。

使用/获取OS X/iPhone OS系统框架的专用Objective-C头。有很多对公众隐藏的类/方法(有些是正确的)

对于iPhone操作系统,class-dump-z是转储头文件的好方法。当然,唯一的问题是,您无法真正看到每个方法内部的情况。IDA Pro和一些脚本可以查看这些系统框架的汇编说明。(示例图片:)

最方便的IDC脚本是fixobjc2和dyldinfo。你可以从这篇博文中找到以下链接:


但是,如果你不能使用这些信息,又有什么用呢?iPhone开发者saurik已经写了一个叫做MobileSubstrate的东西,可以挂接任何方法

其他人已经提到了类转储,它是从已编译的可执行文件检索类定义的极好工具。另一方面,您还应该看看,它提供了非常好(可读)的反汇编输出

如果您需要一种快速测试代码片段的方法,请使用F-Script(其他人提到)或。其中,我主要使用Nu。它具有动态定义桥接函数的功能,并且可以处理指针,如果需要调用任意C函数,这两种方法都非常方便


既然您提到对空间和其他屏幕管理器感兴趣,您也应该阅读。这是Rich Wareham(pre Spaces multi-desktop app:“desktop Manager”的作者)的一篇老文章,他讲述了如何为几个私有CoreGraphics方法找到调用语法,从而实现良好的桌面转换。也可以使用,这可能对您有用。

此网站展示了如何修补现有的Objective C程序:

即摆姿势:

[[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

(代码复制)

< P>作为对其他答案的补充,您将要查看<代码> DeldIIdStuttStudio以将您的代码注入COCOA程序。

您应该明确地考虑使用dTrace。有一个关于在OS X上使用DTrace进行逆向工程的优秀BlackHat演示,题为“DTrace:逆向工程意外的瑞士军刀”

您可以获得副本并查看视频演示文稿


www.uninform.org上也有一些关于反求工程OS X的优秀论文。

OS X的哪些部分?这是一个巨大的野兽,许多部分是开源的,所以不需要反向工程。更具体一点,你可能会得到一些答案。逆向工程一个重要的软件是一个大而难的问题。黑箱逆向工程更糟糕。如果你一定要问,你可能会发现这项任务相当艰巨…@Andrew McGregor–嗯,大部分都是未记录的东西,比如修改空间或交换主屏幕,就像我在这两个应用程序中链接的那样。呵呵,我希望你不要拥有任何Mac产品,因为如果你试图对它们进行反向工程,你就违反了他们的EULA。对于独立软件项目来说,这当然不是一个问题,但如果苹果想就一项业务起诉你,这篇文章可能会成为证据。在一般情况下,Psystar不是因为逆向工程而被起诉的,他们是因为生产和分发绕过数字版权管理的代码而被起诉的。这是一条很好的线…MacOSX内部无法帮助您完成编程任务。在这里,如果任务显然是GUI,那么它将毫无帮助。我对这本书很失望——内核驱动程序的作者可能会喜欢它。这本书实际上不是关于Cocoa编程的。然而,在我看来,如果您还了解gui所在的非gui层,您将创建更好的软件。OS X internals是一本书,与Windows internals一样,讲述了系统的核心。它不会教你如何编码,但是如果你正在反向,它会帮助你理解代码是如何工作的。很容易理解他的建议。我的答案应该是F-Script。它真的可以让你进入应用程序内部。当然,这只能在Mac上使用。请注意,MobileSubstrate也可以在Mac上使用,也可以查看SIMBL!这并不能真正说明如何修补程序。比如,你必须已经修补了程序才能在里面摆姿势。另外,类的姿势已经被弃用,在64位运行时afaik中不起作用。没有意识到它被贬值了,所以这里有一个关于poseAsClass替代品的链接: