苹果的验证机制:
  Appstore上的应用都採用了DRM(digital rights management)数字版权加密保护技术,直接的表现是A帐号购买的app,除A外的帐号无法使用,事实上就是有了数字签名验证,而app的破解过程,实质也是去除数字签名的过程。去除过程包含两部分,例如以下所看到的:
       ipa文件都是使用苹果公司的FairPlay DRM技术进行加密保护

appsync没有装是不能安装的,程序没有破解是不能执行的

条件一,设备越狱,获得root权限,去除掉设备上的签名检查,同意没有合法签名的程序在设备上执行    
 代表工具:AppSync(作者:Dissident ,Apptrack站点的核心人物)  
(iOS 3.0 出现,不同的iOS版本号,原理都不一样)
iOS 3.0后,MobileInstallation将可运行文件的签名校验托付给独立的二进制文件/usrlibexec/installd来处理,而AppSync 就是该运行文件的一个补丁,用来绕过签名校验。
iOS 4.0后,apple留了个后门(app给开发人员预留的用于測试的沙盒环境),仅仅要在/var/mobile/下建立tdmtanf文件夹,就能够绕过installd的签名校验,但该沙盒环境会造成没法进行IAP购买,无法在GameCenter查看游戏排名和加好友,特征是进入Game Center会出现SandBox字样。AppSync for iOS 4.0 +修复了这一问题。
iOS 5.0后,apple添加�了新的安全机制来保护二进制文件,比如去掉二进制文件的符号表,给破解带来了难度。新版的AppSync for iOS 5.0+ 使用MobileSubstrate来hook libmis.dylib库的MISValidateSignatureAndCopyInfo函数来绕过签名验证

条件二,解密mach-o可运行文件
一般採用自购破解的方法,即先通过正常流程购买appstore 中的app,然后採用工具或手工的方式解密安装包中的mach-o可运行文件。
之所以要先获得正常的IPA的原因是mach-O文件是有DRM数字签名的,是加密过的,而解密的核心就是解密加密部分,而我们知道,当应用执行时,在内存中是处于解密状态的。所以首要步骤就是让应用先正常执行起来,而仅仅有正常购买的应用才干达到这一目的,所以要先正常购买。

文件结构

Mach-O  在 OS X, 差点儿全部的包括可运行代码的文件,如:应用程序、框架、库、内核扩展……, 都是以Mach-O文件实现. Mach-O 是一种文件格式,也是一种描写叙述可运行文件怎样被内核载入并运行的ABI (应用程序二进制接口)


Mach-O为Mach Object文件格式的缩写,它是一种用于可运行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的訪问速度。

a.out是旧版类Unix系统中用于运行档、目的码和后来系统中的函数库的一种文件格式,这个名称的意思是汇编器输出。

虽然眼下大多数类Unix系统都已改用ELF格式,不再採用a.out格式,但编译器和链接器依旧会在用户未指定文件名称时,将输出文件取名为“a.out

ELF = Executable and Linkable Format,可运行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和公布的,也是Linux的主要可运行文件格式。
Executable and linking format(ELF)文件是x86 Linux系统下的一种经常使用目标文件(object file)格式,有三种主要类型:
(1)适于连接的可重定位文件(relocatable file),可与其他目标文件一起创建可运行文件和共享目标文件。
(2)适于运行的可运行文件(executable file),用于提供程序的进程映像,载入的内存运行。
(3)共享目标文件(shared object file),连接器可将它与其他可重定位文件和共享目标文件连接成其他的目标文件,动态连接器又可将它与可运行文件和其他共享目标文件结合起来创建一个进程映像。
      专业一点讲, 它告诉系统: 

1,使用哪个动态库载入器 
2,载入哪个共享库. 

3,怎样组织进程地址空间. 

4,函数入口点地址,等. 

       Mach-O 不是新事物. 最初由开放软件基金会 (OSF) 用于设计基于 Mach 微内核OSF/1 操作系统. 后来移植到 x86 系统OpenStep. 

       为了支持Dyld(Mac OS X的连接器) 执行时环境, 全部文件应该编译成Mach-O 可执行文件格式. 

Mach-O 文件分为三个区域: 头部、加载命令区Section和原始段数据. 头部和加载命令区描写叙述文件功能、布局和其它特性;原始段数据包括由加载命令引用的字节序列。为了研究和检查 Mach-O 文件的各部分, OS X 自带了一个非常实用的程序otool,其位于/usr/bin文件夹下。 

ASLT
地址空间布局随机化                                              
是一种针对缓冲区溢出的安全保护技术,通过对堆,栈,共享库映射等线性区布局的随机化,通过添加�攻击者预測目的址的难度,防止攻击击者直接定位攻击代码位置,达到阻止溢出攻击的目的。 proc/sys/kernel/randomize_va_space用于控制Linux下 内存地址随机化机制(address space layout
randomization),有下面三种情况

0 - 表示关闭进程地址空间随机化。
1 - 表示将mmap的基址,stack和vdso页面随机化。
2 - 表示在1的基础上添加�栈(heap)的随机化。
FAT ELF    一个胖二进制(或多架构二进制)是一种已扩大能够在多个处理器类型上运行指令集的计算机可运行程序。运行通常的方法是包含一个版本号的机器代码的每一个指令集,前面代码的运行跳转到对应的节中的全部操作系统兼容。这将导致在一个文件比常规的单体系结构的二进制文件大。

利用胖的二进制结构的操作系统软件是不常见的;有几种方法来解决相同的问题,如使用一个安装程序,选择一个特定平台在安装时,以源码形式分发软件,在操作的系统编译,或者使用虚拟机(如通过Java),并仅在时间编译。

 

破解步骤
购买后,接着就是破解了。随着iOS设备cpu 的不同(arm 6 还是arm 7),mach-o文件格式的不同(thin binary 还是fat binary),应用是否对破解有防御措施(检測是否越狱,检測应用文件系统的变化),破解步骤也有所不同,但核心过程例如以下:
第一步:获得cryptid,cryptoffset,cryptsize(用otool)
cryptid为加密状态,0表示未加密,1表示解密;
cryptoffset未加密部分的偏移量,单位bytes
cryptsize加密段的大小,单位bytes
第二步:将cryptid改动为0
第三步:gdb导出解密部分
第四步:用第二步中的解密部分替换掉加密部分
第五步:签名 (ldone)
第六步:打包成IPA安装包

整个IPA破解历史上,代表性的工具例如以下:

代表工具:Crackulous(GUI工具)(来自Hackulous)
crackulous最初版本号由SaladFork编写,是基于DecryptApp shell脚本的,后来crackulous的源代码泄露,SaladFork放弃维护,由Docmorelli接手,创建了基于Clutch工具的近期版本号。
代表工具:Clutch(命令行工具)(来自Hackulous)
由dissident编写,Clutch从公布到如今,是最快的破解工具。Clutch工具支持绕过ASLR(apple在iOS 4.3中添�ASLR机制)保护和支持Fat Binaries,基于icefire的icecrack工具,objective-c编写。
代表工具:PoedCrackMod(命令行工具)(来自Hackulous)
由Rastignac编写,基于poedCrack,是第一个支持破解fat binaries的工具。shell编写
代表工具:CrackTM(命令行工具)(来自Hackulous)
由MadHouse编写,最后版本号为3.1.2,据说初版在破解速度上就快过poedCrack。shell编写
(下面是bash脚本工具的发展历史(脚本名(作者)),尽管眼下都已废弃,但都是眼下好用的ipa 破解工具的基础。
autop(Flox)——>xCrack(SaladFork)——>DecryptApp(uncon)——>Decrypt(FloydianSlip)——>poedCrack(poedgirl)——>CrackTM(MadHouse)
代表工具:CrackNShare (GUI工具)(来自appcake)
基于PoedCrackMod 和 CrackTM

我们能够通过分析这些工具的行为,原理及产生的结果来启示防御的方法。
像AppSync这样的去掉设备签名检查的问题还是留给apple公司来解决(属于iOS系统层的安全),对于app开发则须要重点关注,app是怎样被解密的(属于iOS应用层的安全)。

名词 意义  备注 
MetaData 用于描写叙述要素、数据集或数据集系列的内容、覆盖范围、质量、管理方式、数据的全部者、数据的提供方式等有关的信息。 元数据被定义为:描写叙述数据及其环境的数据 元数据以非特定语言的方式描写叙述在代码中定义的每一类型和成员。存储下面信息:

1,程序集的说明。

2,标识(名称、版本号、区域性、公钥)。

3,导出的类型。

4,该程序集所依赖的其它程序集。

5,执行所需的安全权限。

6,类型的说明。

7,名称、可见性、基类和实现的接口。

8,成员(方法、字段、属性、事件、嵌套的类型)。

9,属性。

10,修饰类型和成员的其它说明性元素。















參考:http://www.freebuf.com/articles/wireless/6068.html

苹果ipa软件包破解笔记的更多相关文章

  1. Sublime Text 4 破解笔记

    Sublime Text 4 破解笔记 偶然看到Sublime已经更新到版本4了,多了许多很nice的新特性,例如: 船新 UI 感知上下文的自动补全 支持 TypeScript, JSX 和 TSX ...

  2. 斐讯K2P配置文件破解笔记

    手上有一个斐讯K2P路由器,刷机前我想把原机带的固件备份出来.搜到恩山A大开启telnet.固件备份的教程,里面提到了配置文件破解的方法,心血来潮试了一下,发现算出的密码不能解密,一直报"b ...

  3. 5分钟快速构建苹果IPA免费发布服务器

    在ios的开发中, 通过苹果的各种秘钥加密, 我们会生成一个.ipa文件,这就是我们的应用软件的安装包. 这个文件是能被安装到iphone/ipad上的.可是,如何才能让不在身边的人安装上这个应用呢? ...

  4. IOS系统ipa软件包在线安装

    如果iis不支持ipa和plist下载,可以添加memi类型. ipa     application/x-plist plist application/xml 下载用普通链接即可: <a h ...

  5. WPA/WAP2wifi 密码破解笔记

    前言: 相对于前一段时间脆弱的WEP路由器而言,当今的路由器加密方式也大都改变为WPA/WPA2,使得无线路由器的破解难度增加.虽然如此,但还是有很多漏洞层出不穷,如WPS.退一步来说,即使加密算法无 ...

  6. wifi 破解笔记

        最近小夜刚刚学习了无线WiFi的密码破解,感觉很神奇,不过以下操作都是作为学习测试的内容进行的,希望志同道合的小伙伴切不要触碰法律的红线哦!       话不多说,直接上硬菜.     实验环 ...

  7. 【转】SourceInsight4破解笔记

    时隔好多年,sourceinsight4以迅雷不及掩耳之势的来了.与3.5相比,sourceinsight4多了代码折叠以及文件标签功能,可谓是让sourceinsight迷兴奋了好几晚上.废话不多说 ...

  8. 网络对抗技术 2017-2018-2 20152515 Exp1 PC平台逆向破解 笔记

    Exp1 PC平台逆向破解 1.堆栈不可保护: ROP 2.alsr 随机化: 填充NOPS "\90" 3.不加堆栈保护 shellcode: 1.不依赖外部函数 2.不含\00 ...

  9. Webstorm2018破解笔记

    参考链接: (1)https://www.jb51.net/softs/598714.html   过程步骤 (2)http://idea.lanyus.com/   IntelliJ IDEA 注册 ...

随机推荐

  1. 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

    众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下: PackageManager packageManager = this.getPackageMana ...

  2. acdream 1056 (黑白染色)

    题意:给你一些关系,每个关系是两只马的名字,表示这两个马不能在一个分组里,问你能否将这些马分成两组. 黑白染色,相邻的点染不同颜色.bfs搞即可,水题. /* * this code is made ...

  3. 【随便走走】Vietnam

    从来没有一个地方让我如此留念过.   初到越南印象就是乱,满街轰轰轰的摩托车,狭窄的街道,各种小酒店小商店.从机场出来的路上还看到了不少中国品牌如豪爵摩托等等. 落地办理了落地签,从大陆是不能办的.越 ...

  4. java 复习003

    今天主要复习下数据结构的东西 树 自平衡二叉查找树 AVL树(高平衡树)(wiki) 特性:任何节点的两个子树的高度最大差别为一 时间复杂度:查找.插入和删除在平均和最坏情况下都是O(log n) 红 ...

  5. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇04:碰撞检测》

    4.碰撞检测 碰撞概述: 游戏世界里,游戏对象不能做出如同在真实世界里的物理运动效果.对于大部分游戏来说,都要为其添加物理系统,让其可以模拟真实世界发生的物理运动.但是在这个打飞机游戏Demo中,是用 ...

  6. 自己实现Single LinkedList

    My_Single_LinkedList 分4个部分实现(CRUD - 增删改查). 首先要有一个Node(节点类) class Node { public int val; public Node ...

  7. hibernate 连接数据库时报错

         错误信息 : com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allo ...

  8. World’s Smallest h.264 Encoder

    转载 http://www.cardinalpeak.com/blog/worlds-smallest-h-264-encoder/ View from the Peak World’s Smalle ...

  9. homework-03 图形化化最大子序列和

    你现在使用的代码规范是什么,  和上课前有什么改进? 我们一开始使用的是C++完成的相关程序.本次因为一些原因,改为C#进行编写.因为2013-10-21在VS2012中,所以所有的代码都已经被VS自 ...

  10. Struts2的国际化

    1.概述 把在无需改写源代码即可让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化. 与国际化对应的是本地化, 指让一个具备国际化支持的应用程序支持某个特定的地区 Struts2国际化是建 ...