1. 程式人生 > IOS開發 >iOS逆向攻防之瞭解作業系統,檔案許可權,Shell指令碼

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檔案屬性介紹圖

3、Mac檔案屬性介紹.png

2、檔案型別與許可權介紹圖

4、檔案型別與許可權介紹.png

3、改變檔案許可權chmod指令介紹

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$ 


複製程式碼

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

複製程式碼

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 --