DDOS防御专家-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > 高防服务器 > 正文

网站防御_ddos流量攻击防御_零误杀

网站防御_ddos流量攻击防御_零误杀

Duo实验室2018年3月9日托德·曼宁用idapro的REobjc模块反转Objective-C二进制文件苹果公司(Apple)最近在苹果公司(Apple)的一款iOS和苹果公司(Apple)的一款产品——苹果公司(Apple)的一款产品。作为这项工作的一部分,我对运行在托管macOS端点上的Objective-C二进制文件进行了分析。我使用Hex-ray的交互式反汇编程序(IDA)Pro来执行这些二进制文件的反汇编和反编译。如果您从未在macOS或iOS上编程,您可能对Objective-C语言不熟悉。它是C语言的一个变体。用这种语言开发的程序与Objective-C运行时共享库相关联。这个库实现了支持Objective-C的整个对象模型。Objective-C运行时的目标之一是尽可能动态。此设计目标的一个特性影响对对象执行的函数调用。Objective-C术语将这些函数调用称为消息传递。Objective-C对象接收这些消息,这通常导致对象的某个方法被调用。运行时在运行时动态解析方法调用。Objective-C源代码方法调用由编译器转换为对运行时函数objc_msgSend()的调用。在这里,我们将更仔细地研究一个IDA Pro模块REobjc,它将对objc_msgSend()的调用添加到所调用的实际函数的正确交叉引用。IDA Pro交叉引用和Objective-C从一个方法到另一个方法的Objective-C调用被编译为对objc_msgSend()的调用。这样做的一个效果是,IDA-Pro交叉引用没有反映在运行时调用的实际函数。此函数由以下函数签名定义:id objc_msgSend(id self,代理服务器防御ddos,SEL op,…)这意味着,对于您进行的任何Objective-C方法调用,前两个参数是对象的self指针和selector,安全狗能防御cc吗,后者是self调用的方法的字符串表示。接受参数的Objective-C方法在选择器之后按顺序传递这些参数。编制目标C程序为了更好地演示Objective-C源代码是如何编译和组装的,下面的代码示例介绍了使用常见Objective-C模式的源代码。这个init方法包括四个Objective-C方法调用。从概念上讲,编译器接受上面的Objective-C方法调用并将它们编译成类似于下面的C代码。这个例子实际上是IDA-Pro的反编译器输出,但是它演示了编译器如何将Objective-C调用转换为C。上面的四个Objective-C调用中的每一个都对应于下面摘录的函数调用。如图所示,[super init]调用被转换为对objc_msgSendSuper2()的调用。这是用于初始化子类的通用模式。对[NSString string]的调用被转换为objc_msgSend()调用,该调用被发送到表示NSString类的对象。在带有附加参数的类方法调用示例中,[NSMutableData dataWithLength:_length]的调用被转换为对objc_msgSend()的调用。示例中的最后一个Objective-C调用[[BTGattLookup alloc]init]显示了一个公共的对象分配然后初始化模式。这显示了正在发送到BTGattLookup类的alloc消息,这将导致该类的一个实例。然后,该实例将在对init方法的第二个objc_msgSend()调用的调用中自用。Objective-C和Intel X64体系结构在Intel X64体系结构上生成的二进制文件中,调用根据Intel X64 ABI工作。函数参数按RDI、RSI、RDX、RCX、R8、R9的顺序在寄存器中传递。这意味着RDI寄存器保存自指针,RSI寄存器保存选择器指针。如果需要,Objective-C方法的参数从RDX寄存器开始。为了正确地添加从一个Objective-C函数到另一个Objective-C函数的交叉引用,必须知道RDI和RSI寄存器中的值。对于大多数对objc_msgSend()的调用来说,发现这两个寄存器中的值通常很简单。Objective-C分析需要记住的其他方面是编译器可能决定生成函数调用的不同方式。在X64上,编译器通常使用CALL和JMP指令生成函数调用。有可能使用条件跳转指令或直接赋值给指令指针。模块中当前的启发式方法没有解决这些情况。在开发期间,nginx防御cc,我没有观察到使用条件分支来调用Objective-C运行时函数的二进制文件。编译器还可以将函数调用编码为间接调用或直接调用。在间接调用的情况下,指令参数是寄存器。在直接调用的情况下,指令参数是对内存中某个位置的某种引用。无论哪种情况,我们都必须能够确定调用或JMP是否引用objc_msgSend()。此外,为了正确跟踪函数调用交叉引用,分析必须跟踪函数调用时的返回值。在X64中,函数调用的返回值存储在RAX寄存器中。如果Objective-C源代码首先分配一个对象,然后对生成的对象实例执行方法调用,则需要跟踪RAX中存储的对象指针类型,以便正确理解在对objc_msgSend()的调用中传递的对象。REobjc-Idapython模块reobjcidapython模块的主要目的是在Objective-C方法之间创建交叉引用。该模块旨在易于使用。要使用REobjc,请打开IDA-Pro命令窗口并执行以下Python行:idaapi.require公司("reobjc")r=雷奥比奇(自动运行=真)引擎盖下的雷奥比奇我对REobjc模块的目的是让它尽可能简单地工作。不过,解释一下模块的功能可能会很有用。这将有望帮助人们了解代码的工作原理,并建议如何更好地或更准确地工作。非常感谢您在本模块中提出请求和讨论。要定位我们关心的Objective-C运行时调用,了解编译器可以用多种方式将调用编码为二进制是很重要的。正如我们所提到的,对函数的调用可以是直接的,也可以是间接的,并且有几种方法可以对call指令的目标进行编码。Objective-C运行时链接到所有Objective-C程序中,因此,vps被Cc怎么防御,所有调用最终都会在导入的libobjc.dylib图书馆。通常,程序将包含一个存根函数,该函数只执行到objc_msgSend()函数的无条件跳转。这允许在任何地址加载库,然后由加载器执行适当的修正,让目标程序正确地调用库。在REobjc模块中,这是通过确保正确标识对objc_msgSend()的所有调用实例来处理的。有时调用的目标将是objc_msgSend,有时它将是一个导入的指针,形式为u imp_ujc_msgSend。因为调用可以使用这些目标的任何一种形式进行编码,所以模块将在当前数据库中查找所有表单。希望这种方法足够灵活,可以处理您找到的任何二进制文件。该模块使用API检索IDA数据库中所有名称的列表idautils.名字()然后通过正则表达式匹配目标函数,将匹配项存储在数组中。在分析过程中,ddos攻击防御技术,每个候选调用或跳转指令都会与Objective-C运行时函数的列表进行比较,发现调用任何形式的objc_msgSend()的指令都是添加交叉引用的候选。模块迭代目标二进制文件中的所有函数,对于每个函数,迭代该函数中的所有指令。当识别出目标调用或JMP指令时,模块确定指令的目标。如果目标是寄存器,则模块从调用或JMP向后遍历以确定寄存器的值。直接调用更简单,因为调用的目标或JMP是立即知道的。无论哪种情况,如果目标是objc_msgSend(),则调用或JMP都是添加交叉引用的候选对象。标识对objc_msgSend()的调用时,必须标识前两个函数参数。重申一下,第一个参数是指向接收Objective-C消息的对象(称为self)的指针。第二个参数是指向传递给对象的选择器或消息的指针。解析寄存器值在模块中由resolve_register_backwalk_ea()方法处理。即使在Objective-C逆向工程之外,此函数也很有用。此函数接受程序位置和寄存器名的字符串表示形式。从给定的程序位置开始,函数将一次后退一条指令,查找分配给目标函数的值。该函数通过检查常用的X64指令助记符MOV和LEA来实现这一点。有些程序会使用变量将值复制到寄存器或从寄存器复制值,代码会跟踪这些类型的赋值,直到知道要复制到目标寄存器的值为止。正如我们提到的,这里有两个寄存器是以特殊方式处理的。RAX寄存器将包含前一个CALL指令的返回值,因此REobjc.resolve U寄存器_backwalk_ea()将通过考虑呼叫来跟踪RAX。此外,由于RDI寄存器用作Objective-C中的自指针,因此在某些情况下,RDI没有在函数中显式设置。这是因为正在检查的目标函数正在调用其自身指针上的方法。因此,当函数向后走时,如果RDI是目标寄存器并且没有显式设置,代码将执行查找以确定当前类中的自指针。一旦RDI和RSI寄存器的自指针和选择器指针被解析,模块将尝试创建对适当方法的交叉引用。这是通过利用idap中现有的Objective-C支持来实现的

版权保护: 本文由 DDOS防御专家 原创,转载请保留链接: http://www.ddosgb.com/ddos/60423.html

DDoS防御专家简介孤之剑
国内资深白帽子二十人组成员,前BAT资深网络安全工程师,知名网络安全站点板块大神,每年提交Google及微软漏洞,原sina微博负载插件开发者,现在整体防御复合攻击长期接受1-4.7T攻击,CC防护自主开发指纹识别系统,可以做到99.9999%的无敌防御。
  • 文章总数
  • 8080764访问次数
  • 建站天数

    DDOS防御

    ddos防御

    cc防护

    web安全

    高防服务器

    高防cdn


    QQ客服

    400-0797-119

    X