iOS端App在上线之前会有苹果商店进行FairPlayDRM数字版权加密保护,我们称之为“加壳”。要对App Store分发的iOS App进行分析,我们需要先对App进行解密,我们称之为“脱壳”,有些人也称为“砸壳”。脱壳之后的二进制文件就是原始的、未加密的二进制文件。
本文转自ibireme的《深入理解RunLoop》 RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 目录 RunLoop 的概念 RunLoop 与线程的关系 RunLoop 对外的接口 RunLoop 的 Mode RunLoop 的内部逻辑 RunLoop 的底层实现 苹果用 R
首先我们来看一下主线程的RunLoop的启动过程。 前面我们说过,我们的 iOS 程序能保持持续运行的原因就是在main()函数中调用了UIApplicationMain函数,这个函数内部会启动主线程的RunLoop。 打断点,通过 LLDB 指令bt查看函数调用栈如下:
2020年09月17日凌晨,苹果终于给所有用户推送了iOS14正式版,并同时发布了iOS 14.0的安全内容更新。阅读该公告后,你将会看到列表中的一个漏洞CVE-2020-9964,这是一个存在于IOSurfaceAccelerator中的安全漏洞。苹果将这个漏洞描述为:“本地用户将能够利用该漏洞读取内核内存数据,这是一个内存初始化问题。”那么在这篇文章中,我们将跟大家介绍有关该漏洞的详细信息。
阅读笔者的其他文章,我们了解了编译过程中的预处理、词法分析、语法分析、编译、链接等步骤。经常和编译型语言打交道的开发者对于可执行文件的编译过程肯定不陌生。我们用 Xcode 构建一个程序的过程中,会把源文件 (.m 和 .h) 文件转换为一个可执行文件。这个可执行文件中包含的字节码将会被 CPU (iOS 设备中的 ARM 处理器或 Mac 上的 Intel 处理器) 执行。
0x01 安装过程 1.1 抛砖引玉 KSCrashInstallationStandard* installation = [KSCrashInstallationStandard sharedInstance]; installation.url = [NSURL URLWithString:@"http://put.your.url.here"]; [installation install]; 以上代码是KSCrash的安装代码,[KSCrashInstallationStandard init]底
Mach-O(Mach Object)是 macOS、iOS、iPadOS 存储程序和库的文件格式。对应系统通过应用二进制接口(application binary interface,缩写为ABI) 来运行该格式的文件。
临近春节,回望2020十分感慨,今年年初换了工作一年来都比较忙,回看上次写的文章停留在了2020年1月,上次写iOS文章停留在2018年3月十分感慨,这里总结下近期研究的RunLoop
作为iOS,iPadOS、macOS平台的可执行文件格式,Mach-O文件涉及App启动运行、bitcode分析、 crash符号化等诸多多个功能:
APP从开发到安装到手机的过程1 MJRefreshExample.app中的MJRefreshExample文件是iOS中的可执行文件,文件格式是Mach-O APP从开发到安装到手机的过程2 逆向
http://www.cocoachina.com/ios/20150601/11970.html
但在一些底层功能实现时,仅仅依靠OC层时不够的,特别是在做一些HOOK,或者捞取一些系统数据时,还需要C/C++的实现,比如:
iOS系统生成的可执行程序或者动态库文件的存储布局格式被称之为mach-o格式。文件中存放着程序的代码和数据,而程序运行时系统会为其建立一个进程,以及分配虚拟内存空间。同时会把程序文件中的内容加载到虚拟内存地址空间中去,这种加载的方法一般采用内存映射文件的技术来实现。所谓的映像可以理解为将一个程序文件的内容加载到进程虚拟内存中的内容,也就是说进程的映像就是程序磁盘文件在内存中的一个副本。 一般来说一个进程中映像的内容和内存布局结构会和程序文件的内容以及存储布局结构一致,映像的首地址是一个struct mach_header的结构体指针。映像中内容的排列布局和程序文件都是以段(Segment)为单位进行排列的。但是有一些情况映像的内存布局和内容可能会和程序文件的内存布局和内容不一致:
系统内核在收发事件、消息时使用的消息传递函数。可以理解为多进程之间的一种通讯调用机制。
Mach-O是Mach Object的缩写,是Mac/iOS上用于存储程序、库的标准格式
主要简单的介绍了Mach -O和虚拟内存的知识,下文在app启动的时会有很多相关的术语,不知道会懵逼。
又一波微内核讨论,同时也见到网上太多的言论,甚至把RT-Thread物联网操作系统归类到微内核行列。所以重新把这篇科普文章发下,并做部分澄清。
计算机技术在二战后快速发展,构成计算机的主要基本单元从电子管发展到分立晶体管,再到后来的大规模集成电路。随着计算机技术发展,计算机性能越来越强劲,硬件越来越复杂,人们发现很难去直接管理计算机了,于是人们开始设计软件用于管理越来越复杂的计算机系统,这些软件称作系统级软件。从最开始的批处理系统,多道程序系统,分时系统到上世纪60年代开始出现通用操作系统,计算机系统层出不穷,直到上世纪70年代才出现被大家广泛接受广泛使用的通用操作系统。其中最经典的当然就是UNIX系统了。
机器之心转载 作者:曹锦 Mach-E 已经成为了福特智能化的集大成者, 4 位工程师披露了技术和功能细节。 一直以来,拥有 2000 余名员工的福特南京研发中心,都很少发声。但在 Mustang Mach-E 在中国面市之前,来自南京研发中心的 4 名工程师,集体来到福特中国位于上海的电动车事业部,与该事业部 COO 朱江一起,面对媒体进行了一场「言无不尽」的技术沟通,这似乎也是一种「向科技公司转型」的定调。将近 3 个小时的时间,他们就像要将这几年默默进行的技术研发以及本土化工作一次倾吐出来。显然,Ma
近期,ZDI的研究人员“ccpwd”在一个名叫“diskmanagementd”的macOS守护进程中,发现了一个基于堆的缓冲区溢出漏洞。diskmanagementd这个服务主要负责对磁盘驱动器进行管理和分区,用户可以通过磁盘实用工具(Disk Utility)来与该服务进行交互。该服务将会运行一个Mach服务器,并允许客户端使用Mach IPC接口来与服务器端通信(发送和接收信息)。通过这种RPC机制,客户端可以在Mach服务器中执行各种通过MIG(Mach接口生成器)生成的功能函数。
0x1: Previously 上篇 中讲到了Crash处理流程分为四个环节,也分析了Crash防护的方法,本章来讲下其余三个环节:Crash的拦截、Crash的上报、Crash的后续。 0x2: Crash的拦截 所有的未被防护住的Crash最终会走到这一步,在这里我们必须要保证拦截的 全面性、稳定性尽可能多的拦截到所有类型的异常,同时拦截逻辑本身不能产生异常。那么我们需要通过以下几个方面去考虑。 I: Crash类型 和多数操作系统一样,iOS的异常也基本分为 用户层 系统底层 信号 这三个类别,
RunLoop详解 不得不说,人的惰性是真可怕啊。 从上周六就到写runLoop的建议开始,星期三告诉自己从星期四开始着手写这篇博客。然而现在戳个时间戳,现在是4.30星期日。写完发出去又不知道是什么时候啦,哈哈哈懒癌 这一期讲什么呢?这一期讲runLoop哟。一直以来,runLoop这个玄而又玄的东西似乎被当做了公司面试挑人的终极话题,原因不难想,日常开发用到runLoop的地方少之又少,没有时间的积累这方面的知识应该还是相对较于匮乏的,所以runLoop的了解侧面也能发应开发者的开发经验,当然就被当做
上一节学习了 iOS强化 : 熟悉 Mach-O 文件, 对 Mach-O 有个大致的了解,今天来学习 Mach-O 可执行文件的生成过程 :编译与链接。
获取runloop的函数 // 获取主线程的runloop CFRunLoopRef CFRunLoopGetMain(void) { CHECK_FOR_FORK(); static CFRunLoopRef __main = NULL; // no retain needed if (!__main) __main = _CFRunLoopGet0(pthread_main_thread_np()); // no CAS needed return __main; }
上篇 中讲到了 Crash 处理流程分为四个环节,也分析了 Crash 防护的方法,本章来讲下其余三个环节。
RunLoop 一 概述: 一句话解释RunLoop:运行任务的循环。 为什么要有RunLoop:解决交互式UI设计中的一个问题,如何快速响应用户输入,如何快速将程序运行结果输出到屏幕? 计
我们知道,Runloop可以保证线程不退出,那么,为什么Runloop具有此功效呢?那就要从Runloop的定义说起。
下面给大家讲一讲shell编程在数据处理和模式运行中的妙用。主要有三个方面的内容:
你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本系列文章主要讲解iOS中多线程的使用,包括:NSThread、GCD、NSOperation以及RunLoop的使用方法详解,本系列文章不涉及基础的线程/进程、同步/异步、阻塞/非阻塞、串行/并行,这些基础概念,有不明白的读者还请自行查阅。本系列文章将分以下几篇文章进行讲解,读者可按需查阅。 iOS
上篇文章我们从开发者的角度介绍了如何建立iOS项目并且在真机上运行, 上上篇文章则介绍了Objective-C的基本概念和用法。而这一切,都是为了这次的铺垫。 今天,我们就要从攻击者的角度,尝试对黑盒iOS应用进行调试与动态跟踪(instrument)。
Minimac是一款经典的基因型填充软件,该软件也是以内存消耗小,运行速度快而著称,历经了MaCH, minimac, minimac2, minmac3多个版本的更新换代,目前最新版本为v4, 网址如下
AUSM_scheme.m clear all global PRL CRL MACHLEFT gamma pleft pright rholeft rhoright uleft... uright tend lambda % lambda = dt/dx % .....................Input............................ gamma = 1.4; % Ratio of specific heats J = 48;
iOS端App在上线之前会由苹果商店进行FairPlayDRM数字版权加密保护(简称“加壳”)。要对应用进行分析,就必须先解密(成为“脱壳”),从而得到原始未加密的二进制文件。本节将讨论各种各样的脱壳技术。
2019年3月25日,苹果发布了macOS Mojave 10.14.4和iOS 12.2。这两个版本修复了大量的安全漏洞,其中包括QuartzCore(即CoreAnimation)中的CVE-2019-8507。关于苹果更新的详细信息,可以参考这篇【公告】(点击底部阅读原文查看)。
3月21日消息,据韩国媒体Sedaily报导,三星电子宣布准备在2025年初推出自家AI加速器芯片“Mach-1”,但是这款芯片并不会与英伟达(NVIDIA)、AMD等公司的AI芯片进行竞争,因为其主要面锁定的边缘计算领域的推理加速需求。
产品: 硬件:主控 + audio +tp9930 软件:tina + audio/ai 其他:客户需要调试6路mic,其中2路为v853内部audio codec mic,四路为tp9930 外部i2s mic,且其中一路audio mic与lineout硬件相连,作为aec回声消除。
iOS 9 发布后,开发者可以提交包含 bitcode 的程序到APPStore。当 llvm 更新或者新款手机使用了新的cpu命令集架构时,苹果可以使用最新的llvm版本重新将bitcode编译为安装包,确保能够充分利用新的llvm的最新优化或者适配最新的cpu命令集架构,避免了开发者手动提交新安装包的繁琐过程。
对于诸多逆向爱好者来说,给一个app脱壳是一项必做的事情。基于安全性的考虑,苹果对上架到appstore的应用都会进行加密处理,所以如果直接逆向一个从appstore下载的应用程序时,所能看到的“源代码”将非常的晦涩难懂。为了能看懂应用程序的“源代码”,就必须对应用程序进行解密,也就是所谓的脱壳。脱壳后的目的是可以分析应用程序的一些技术实现原理,或者利用一些漏洞进行攻击和测试。
线程刚创建的时候没有Ru nLoop对象,RunLoop会在第一次获取它的时候创建
1. mobileTerminal 使用 源 http://cydia.angelxwind.net 的版本;vim 版本7.1-3p,不要升级到7.3-1;
Mach-O 的全称是 Mach Object File Format。可以是可执行文件,目标代码或共享库,动态库。Mach 内核的操作系统比如 macOS,iPadOS 和 iOS 都是用的 Mach-O。Mach-O 包含程序的核心逻辑,以及入口点主要功能。
众所周知,如今的用户变得越来越关心app的体验,开发者必须关注应用性能所带来的用户流失问题。目前危害较大的性能问题主要有:闪退、卡顿、发热、耗电快、网络劫持等,但是做过iOS开发的人都知道,在开发过程中我们没有一个很直观的工具可以实时的知道开发者写出来的代码会不会造成性能问题,虽然Xcode里提供了耗电量检测、内存泄漏检测等工具,但是这些工具使用效果并不理想(如Leak无法发现循环引用造成的内存泄漏)。所以这篇文章主要是介绍一款实时监控app各项性能指标的工具,包括CPU占用率、内存使用量、内存泄漏、FPS、卡顿检测,并且会分析造成这些性能问题的原因。
JOOX Music 是腾讯面向海外市场发布的音乐 App,目前在其发布的五个国家和地区均是排名第一的音乐服务应用。JOOX Music 从2014年发布至今,经历了大小数十个版本的迭代,功能不断的完善和丰富。而它的体积在 v3.5 版本时达到了有点惊人的 124MB!而东南亚是 JOOX Music 的主要发行地区,这里的网络环境相对较差,存在大量老旧的小容量 iOS 设备,而 App Store 的下载也不太稳定。因此,对 JOOX Music 的裁包大作战已势在必行。
链接:https://juejin.cn/post/6924107853141655565
thunk程序其实就是一段代码块,这段代码块可以在运行时动态构造也可以在编译时构造。thunk程序除了在第一篇文章中介绍的用途外还可以作为某些真实函数调用的跳板(trampoline)代码,以及解决一些函数参数不一致的调用对接问题。从设计模式的角度来讲thunk程序可以作为一个适配器(Adapter)。本文将重点介绍如何通过编译时的静态代码来实现thunk程序的方法,以便解决上一篇文章对于iOS系统下指令动态构造的约束限制的问题。
如转发,请标明出处! 公众号里不好排版,无法调整表格宽度。 字体调小一点,或者换个大屏设备,可能看着整齐些 Dev ID Dev Name 0x3150 Radeon Mobility X600 (M24) 0x3151 FireMV 2400 0x3152 Radeon Mobility X300 (M24) 0x3153 RV380_3153 0x3154 FireGL M24 GL 0x3156 RV380_3156 0x3E50 Radeon X600 (RV380) 0x3E51 RV380_
在OC底层探索16 -应用程序加载中提到了dyld与objc的关系,主要是通过两个函数:map_images、load_images来完成类的初始化。
领取专属 10元无门槛券
手把手带您无忧上云