MachO文件逆向原理

文章目录

  • 安装iterm2
    • /bin,/sbin,/usr/sbin,/usr/bin 目录之简单区别
  • 其他逆向开发工具安装
  • 逆向原理
    • class-dump
    • MachO文件
      • 常见的格式:
      • MachO文件结构:
      • 动态库共享缓存
      • 动态加载器(dyld)
      • 拆分二进制文件
  • 安装MachOView

安装iterm2

安装iTerm2 + Oh My Zsh 打造舒适终端体验

/bin,/sbin,/usr/sbin,/usr/bin 目录之简单区别

这些目录都是存放命令的。

  • 首先区别下/sbin和/bin:
    从命令功能来看,/sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统,/bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到。
    从用户权限的角度看,/sbin目录下的命令通常只有管理员才可以运行,/bin下的命令管理员和一般的用户都可以使用。
    从可运行时间角度看,/sbin,/bin能够在挂载其他文件系统前就可以使用。

  • /usr/bin,/usr/sbin与/sbin /bin目录的区别在于:
    /bin,/sbin目录是在系统启动后挂载到根文件系统中的,所以/sbin,/bin目录必须和根文件系统在同一分区;
    /usr/bin,usr/sbin可以和根文件系统不在一个分区。
    /usr/sbin存放的一些非必须的系统命令;/usr/bin存放一些用户命令,如led(控制LED灯的)。

  • 转下一位网友的解读,个人认为诠释得很到位

/bin是系统的一些指令。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

/sbin一般是指超级用户指令。主 要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、 ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、 rmmod、 runlevel、shutdown等。

/usr/bin  是你在后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、 eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、 man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。

/usr/sbin 放置一些用户安装的系统管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。

如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,提示:

bash:command not found。那么首先就要考虑root的$PATH里是否已经包含了这些环境变量。
可以查看PATH,如果是:PATH=$PATH:$HOME/bin,
则需要添加成如下:PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin

其他逆向开发工具安装

  • Alfred
  • goshell
  • ida
  • MachOView
  • Hopper Disassembler
  • MonkeyDiv
  • pp助手
  • class-dump/yololib
  • Cycript
    可参考<<逆向学习笔记-工具安装>>

逆向原理

动态调试 通过界面调试Cycript\Xcode LLDB!
静态分析 利用我们之前学习的汇编代码,分析三方APP的源码!
代码注入 注入的其实是动态库!HOOK代码 改变原来程序的执行流程!
重签名 安装在非越狱手机上面

class-dump

$ class-dump -H MachO文件Path -o 头文件路径

MachO文件

官方介绍总共有11种格式! 是 Mach Object的缩写,是Mac\iOS 上用于存储程序,库的标准格式。

常见的格式:

  • 1.可执行文件
//编译=》链接=》执行
 $clang -c ***.c=>clang ***.o=>***.out=>./***.out
 //编译链接=》执行
 $clang -o outfileName ***.c =>./outfileName
 //查看文件信息
 $file outfileName 
 //查找文件
 $find path(/ 系统根目录,~/用户根目录) -name '*.a'
  • 2.objcet
    • .o 文件(目标文件)
    • .a 静态库文件.其实就是N个.o文件的集合
  • 3.DYLIB: 动态库文件
    • dylib
    • framework

    Xcode 里编译选项里的MachO选项,可以设置编译链接的文件格式

  • 4.动态连接器
  • 5.DSYM

MachO文件结构:

  • 每个架构由三个部分构成:MachO Header\Load Commands\Data
    MachO文件逆向原理_第1张图片
  • 通常由多个架构构成:Fat Header+每个架构的三个部分+每个架构的三个部分…
    MachO文件逆向原理_第2张图片

动态库共享缓存

为了提高性能,系统的动态库文件都存在了动态库共享缓存里面!

动态加载器(dyld)

  • dynamic linker
  • dynamic loadel

拆分二进制文件

经常用于整合静态库
瘦身

$ lipo 002--可执行文件 -thin armv7 -output macho_armv7
$ lipo 002--可执行文件 -thin armv64 -output macho_armv64

整合

$ lipo -create macho_armv7 macho_arm64 -output machO_v7_64

安装MachOView

MachO二进制可执行文件的可视化解析软件。也可以通过otool命令进行查看
MachO文件逆向原理_第3张图片

你可能感兴趣的:(iOS安全攻防,综合,iOS安全攻防)