iOS逆向攻防之了解操作系统,文件权限,Shell脚本

接着上一篇的应用签名(应用签名内容太多,篇幅大,会比这个要晚点更),直接上今天的干货部分

1、操作系统简介Linux,Unix
2、用户、组、权限
3、初识Shell脚本及简单练习

一、操作系统的了解


操作系统(Operation System,简称OS)

操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在‘裸机’上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。‘裸机’就是没有安装操作系统的计算机。

1、个人计算机PC(personal computer)操作系统

  · Windows 系列
  · MacOS
  · Linux

2、服务器操作系统

  · Linux
  · Windows

3、嵌入式以及移动设备操作系统

  · Linux (嵌入式)
  · iOS (基于Unix)
  · Android (基于Linux)

4、系统诞生

Unix诞生:1969年 肯·汤姆逊 为了他的名为星际旅游的游戏能够跑起来,前后花了一个月的时间,写出了Unix的原型。

C语言的诞生:肯的另一个同事丹尼斯·里奇对Unix有很大的兴趣,在当时高级语言BCPL的基础上开发了一种新的高级语言将Unix重新写了一遍,这个语言就是C语言!

MacOS诞生:刚开始乔布斯的苹果公司采用的还是Unix操作系统,后期经过乔布斯对产品卓越的追求和不断的改进,发展成了MacOS。

Windows诞生:狡猾的比尔盖茨找到了当时蒸蒸日上的乔布斯,祈求了一份Apple的产品原型,并承诺微软的一切成果都是苹果的,比尔盖茨得到了产品原型机之后,马上组织团队研发,并在1990年5月份推出了Windows3.0.

Minix诞生:1991年由于Unix因为市场原因(能捞钱啊~)闭源了,林纳斯(当时林纳斯22岁)的大学教授就没法讲他们的《操作系统》课程了,所以当时的大学教授Andrew S. Tanenbaum专门写了一个小型具备Unix基本功能的操作系统用来上课。由于比较小,所以叫Min Unix,简称Minix。

Linux诞生:由于Minix和初始的Unix一样,不具备移植性,而林纳斯有一台自己的电脑,却又不能将Minix运行在自己电脑上,莫得办法,他也自己写了一个操作系统,两个月后,第一个版本的以他名字命名的Linux就此诞生了,从此在大学校园传播了起来,但是也仅仅传播在大学校园。接下来就是传播的问题了,当时有一个黑客叫雷蒙德,在那时是一切收费软件公司的噩梦!微软靠卖软件大发特发,让他很不满,他认为所有的软件都应该自由的让人们使用,所以1983年,他发起了’GNU(GNU’s Not Unix的递归缩写)‘计划,激发了软件界开发者极大的热情并吸引了很多优秀的人才,’GUN‘开发了很多优秀的免费软件,但是雷蒙德不甘心GUN的免费软件运行在了收费的Unix系统上,之后承诺两年内重新写一个操作系统,但是5年过去了,操作系统还是没有出来,而芬兰那边,林纳斯只有一个操作系统内核Linux,并没有相应的应用软件。直到Linux加入了GUN计划,然后整个世界都变了!比如今天全球500台超级计算机中,413台都是Linux系统,大到航天,小到IC卡芯片,全部由Linux主宰,包括移动端和服务器领域。移动端Android的内核就是Linux、服务器也是Linux独领风骚。

二、用户、组、权限


1、权限的概念

Unix和Linux都是多用户、多任务的系统,所以这样的系统里面就拥有了用户、组的概念,那么同样文件的权限也就有了相应的所属用户和所属组了。

Windows系统并没有这些权限的概念,不管是谁进入都能看见C,D,E,F...盘中的文件,都能删除文件;而Linux、MacOS、iOS系统每个用户都是只属于自己的,只能操作自己的文件。

Windows系统有一堆目录盘,比如C, D, E, F...等等。

Linux及Unix只有一个根目录'~',根目录下包含/bin, /etc, /home, /lib, /usr, 其中这个/usr并不是user的意思,是Unix System Resource的意思,就是系统的一些资源。/home家目录就是操作系统用来处理不同用户逻辑的,每一个用户只能在自己的家目录下面操作,当然还有一个超级管理员,可以操作所有用户的数据。

同理,正是因为权限,所以有了用户、组的概念,也有了文件的权限。系统上的每一个文件都有其所属的用户权限,所属的组权限,所属的other权限(非所属组,非所属用户的其他人对这个文件的操作权限)。

2、终端权限示例部分

接着我们来使用终端示例一下:

cd ~          //到根目录下
 
ls            //查看目录下所有文件

ls -l         //以列表的形式展示目录下的所有文件

得到所有文件及文件夹及文件权限

battleMage:~ battleMage$ cd ~
battleMage:~ battleMage$ ls
Applications            Music
Desktop             Pictures
Documents           Public
Downloads           WebstormProjects
Library             efguc-app-ios
Movies              iCloud 云盘(归档)
battleMage:~ battleMage$ ls -l
total 0
drwx------   4 battleMage  staff   128  6  9  2018 Applications
drwx------+ 11 battleMage  staff   352 10 13 14:49 Desktop
drwx------+  3 battleMage  staff    96  6  9 14:08 Documents
drwx------+  9 battleMage  staff   288 10 12 21:18 Downloads
drwx------@ 92 battleMage  staff  2944 10  4 13:35 Library
drwx------+  9 battleMage  staff   288  7  5 20:10 Movies
drwx------+  7 battleMage  staff   224  4 29  2018 Music
drwx------+  9 battleMage  staff   288  6  2 14:54 Pictures
drwxr-xr-x+  5 battleMage  staff   160 10 24  2016 Public
drwxr-xr-x   3 battleMage  staff    96 12 14  2017 WebstormProjects
drwxr-xr-x  13 battleMage  staff   416  3 27  2018 efguc-app-ios
drwx------   7 battleMage  staff   224  8  6  2018 iCloud 云盘(归档)
battleMage:~ battleMage$ 

从终端结果中能够看到,每个文件夹的前面都有权限字符串(比如drwxr-xr-x,drwx------),这个权限字符串的意义如下图

1、Mac文件属性介绍图

iOS逆向攻防之了解操作系统,文件权限,Shell脚本_第1张图片
3、Mac文件属性介绍.png

2、文件类型与权限介绍图

iOS逆向攻防之了解操作系统,文件权限,Shell脚本_第2张图片
4、文件类型与权限介绍.png

3、改变文件权限chmod指令介绍

iOS逆向攻防之了解操作系统,文件权限,Shell脚本_第3张图片
5、Chmod指令改变文件权限.png

chmod指令有两种类型,数字类型和符号类型
下面这两种指令是等价的,给test.txt文件的三种权限全部加上读和写

chmod 666 test.txt

//解释一下666,6 = 4 + 2;其中4是r(‘读’权限),2是w(‘写’权限)

等价于

chmod a+r test.txt   //所有权限加上读权限
chmod a+w test.txt   //所有权限再加上写权限

三、初识Shell脚本及简单练习


1、Shell脚本介绍

Shell是一种特殊的交互式工具,它为用户提供了启动程序、管理文件系统中的文件以及运行在系统上的进程的途径。(有点类似于一个系统,我们常用的交互系统比如MacOS系统,是有可视化交互界面的,而Shell这个系统是通过脚本指令来交互的)。

Shell一般指命令行工具。它允许你输入文本命令,然后解释命令,并在内核中执行。Shell脚本,也就是用各类命令预先放入到一个文本文件中,方便一次性执行的一个脚本文件。

苹果Mac电脑自带的Shell版本是bash,还有很多好用的Shell版本比如公认好用的zsh

2、Shell脚本简单练习

我们先来简单熟悉一下Shell脚本指令

比如现在有这样一个需求:在指定路径下新建一个叫'shell脚本'的件夹,然后在这个文件夹中新建一个'test.txt'的文本文件。

用Shell指令执行这样的需求需要

1、先cd到指定文件夹下,比如桌面Desktop

cd ~/Destop

2、新建文件,文件名‘shell脚本’

mkdir shell脚本

3、指定路径为新的文件夹

cd shell脚本

4、创建'test.txt'文件

touch test.txt

终端练习展示:

battleMage:~ battleMage$ cd ~/Desktop
battleMage:Desktop battleMage$ mkdir shell脚本
battleMage:Desktop battleMage$ cd shell脚本
battleMage:shell脚本 battleMage$ touch test.txt
battleMage:shell脚本 battleMage$ 


iOS逆向攻防之了解操作系统,文件权限,Shell脚本_第4张图片
1、Shell脚本练习之桌面创建文件.png

结果就在指定路径Desktop桌面上创建完成,如果你这个需求是经常要用的,你就可以把这些指令写在shell脚本文件中,shell脚本文件顾名思义就是一堆shell指令操作的集合,可以帮您快速完成指定的需求。

把上面的指令集整理一下就可以生成这样的shell脚本,能够直接通过脚本文件,完成一连串的操作。

步骤如下:
首先cd到指定路径(例如桌面)

cd ~/Desktop

接着直接创建‘test.sh’文件

touch test.sh

接着编辑'test.sh'文件, 会进入文件编辑界面

vi test.sh

接着输入'i'进入编辑界面,输入脚本内容,输入完成后按'ESC'键退出编辑,接着使用'shift'+':',输入'x'之后回车,就在桌面上会生成一个shell脚本文件。

 mkdir shell
 cd shell
 touch test.sh

iOS逆向攻防之了解操作系统,文件权限,Shell脚本_第5张图片
2、Shell脚本自动实现.png

使用下列命令都可以运行这个shell脚本,接下来会详细讲述这几个命令的区别。

1、bash运行shell脚本文件
bash test.sh
2、source运行
source test.sh
3、zsh运行
zsh test.sh
4、直接./test.sh , 但是需要先添加权限
chmod +x test.sh
./test.sh

3、运行shell脚本命令方法详细介绍

·$source FileName
  ·意思:在当前shell环境中读取并执行FileName中的命令
  ·特点:
    ·命令可以强制让一个脚本去立即影响当前的环境(一般用于加载配置文件)
    ·命令会强制执行脚本中的全部命令,而忽略文件的权限
    
    
·$bash FileName 、$zsh FileName
  ·意思:重新建立一个子shell,在子shell中执行脚本里面的命令。
  
·./FileName
  ·意思:读取并执行文件中的命令。但是有一个前提,脚本文件需要有可执行权限

4、了解查看系统所有的shell

按顺序执行下列命令,查看系统根目录下的shells

cd /private/etc

ls

cat shells

能够得到

battleMage:~ battleMage$ cd /private/etc
battleMage:etc battleMage$ ls
afpovertcp.cfg              newsyslog.d
afpovertcp.cfg~orig         nfs.conf
aliases                 nfs.conf~orig
aliases.db              notify.conf
apache2                 ntp.conf
asl                 ntp_opendirectory.conf
asl.conf                openldap
auto_home               pam.d
auto_master             passwd
auto_master~orig            passwd~orig
autofs.conf             paths
bashrc                  paths.d
bashrc_Apple_Terminal           paths~orig
bashrc~previous             periodic
com.apple.screensharing.agent.launchd   pf.anchors
csh.cshrc               pf.conf
csh.cshrc~orig              pf.os
csh.login               php-fpm.conf.default
csh.login~orig              php-fpm.d
csh.logout              php.ini.default
csh.logout~orig             php.ini.default-previous
cups                    php.ini.default-previous~orig
defaults                postfix
dnsextd.conf                ppp
efax.rc~previous            profile
emond.d                 profile~orig
find.codes              protocols
find.codes~orig             protocols~previous
fstab.hd                racoon
fstab.hd~previous           rc.common
ftpusers                rc.common~previous
ftpusers~orig               rc.netboot
gettytab                resolv.conf
gettytab~orig               rmtab
group                   rpc
group~previous              rpc~previous
hosts                   rtadvd.conf
hosts.equiv             rtadvd.conf~previous
hosts~orig              security
irbrc                   services
kern_loader.conf            services~previous
kern_loader.conf~previous       shells
krb5.keytab             shells~orig
localtime               snmp
locate.rc               ssh
mach_init.d             ssl
mach_init_per_login_session.d       sudo_lecture
mach_init_per_user.d            sudoers
mail.rc                 sudoers.d
mail.rc~orig                sudoers~orig
man.conf                syslog.conf
manpaths                syslog.conf~previous
manpaths.d              ttys
master.passwd               ttys~previous
master.passwd~orig          wfs
nanorc                  xtab
networks                zprofile
networks~orig               zshrc
newsyslog.conf
battleMage:etc battleMage$ cat shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
battleMage:etc battleMage$ 

这时候,我们能看到有很多shell,简介如下

/bin/bash    bash这个是Linux默认的shell
/bin/csh     csh已经被tcsh代替了
/bin/ksh     ksh兼容bash
/bin/sh      sh已经被bash替代了
/bin/tcsh    整合了C shell 和 csh,它提供了更多的功能
/bin/zsh     zsh是基于ksh开发的,功能比较多,比较好用

-- END --
溪浣双鲤的技术摸爬滚打之路

你可能感兴趣的:(iOS逆向攻防之了解操作系统,文件权限,Shell脚本)