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檔案屬性介紹圖
2、檔案型別與許可權介紹圖
3、改變檔案許可權chmod指令介紹
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$
複製程式碼
結果就在指定路徑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
複製程式碼
使用下列命令都可以執行這個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 --