feat: refine

This commit is contained in:
LiuBinPeng
2022-05-30 15:03:36 +08:00
parent 6cd0cf5144
commit 55d66cc4c5
15 changed files with 149 additions and 149 deletions

View File

@@ -109,7 +109,7 @@ MH_DSYM存储着二进制文件符号。`.dSYM/Contents/Resource/DWARF/xx`
Xcode 中也可以查看 Mach-O 文件类型
![](./../assets/MachOFileType.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOFileType.png)
### Universal Binary
@@ -137,7 +137,7 @@ Xcode 中也可以查看 Mach-O 文件类型
## Mach-O 结构
![](./../assets/Mach-OStructure.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/Mach-OStructure.png)
一个 Mach-O 文件包含3块
@@ -149,13 +149,13 @@ Xcode 中也可以查看 Mach-O 文件类型
可以用 [GitHub - fangshufeng/MachOView: 分析Macho必备工具](https://github.com/fangshufeng/MachOView) 和系统自带的 atool 查看 Mach-O 信息
![](./../assets/otoolhelp.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/otoolhelp.png)
用 MachOView 查看 DDD Mach-O 文件
![](./../assets/MachOPageZero.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOPageZero.png)
![](./../assets/MachOText.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOText.png)
可以看到在 Mach-O 文件上,`__PAGEZERO``VM Size` 有值,但是 File Size 为0也就是说 `__PAGEZERO` 在 Mach-O 中不占据内存,但是程序运行起来之后,会占据虚拟内存。所以代码段在 Mach-O 中 File Offset 为0如果前面的 `__PAGEZERO` 的 File size 有值,这里的 File Offset 就不为0
@@ -179,9 +179,9 @@ Xcode 中也可以查看 Mach-O 文件类型
也可以使用 `size -l -m -x DDD` 指令来查看 Mach-O 的内存分布
![](./../assets/MachOInsepect.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/MachOInsepect.png)
![](./../assets/ASLRDemo.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/ASLRDemo.png)
我们会发现根据 Mach-O 文件中的信息File Size、File Offset、VM Address、VM Size 可以判断出 `__TEXT` 段内函数信息,这样子不够安全
@@ -189,7 +189,7 @@ Xcode 中也可以查看 Mach-O 文件类型
Address Space Layout Randomization地址空间布局随机化。是一种针对缓冲区溢出的安全保护技术通过堆、栈、共享库映射等线性区布局的随机化通过增加攻击者预测目的地址的难度防止攻击者直接定位攻击代码的位置达到阻止溢出攻击目的的一种技术。在 iOS 4.3 引入。
![](./../assets/ASLROffset.png)
![](https://github.com/FantasticLBP/knowledge-kit/raw/master/assets/ASLROffset.png)
- LC_SEGMENT (__TEXT) 的 VM Address 0x10005000