ios重签名shell脚本_iOS逆向——shell重签名及代码注入
感謝hank老師
上一章我們講了應用簽名原理和重簽名原理,不再贅述,沒有看過的同學可以點這里——
這章概述shell腳本重簽名??赡苡械耐瑢W認為有很多工具都能快速的幫助我們重簽名實現需求,但我更希望在這里與大家溝通原理性的東西,而不是簡單的使用第三方工具來滿足我們。
shell腳本
什么是shell腳本?
shell是一種特殊的交互式工具,它為用戶提供了啟動程序、管理文件系統中文件以及運行在系統上的進程的途徑。Shell一般是指命令行工具。它允許你輸入文本命令,然后解釋命令,并在內核中執行。
Shell腳本,也就是用各類命令預先放入到一個文本文件中,方便一次性執行的一個腳本文件。
腳本執行相關命令
$source FileName 復制代碼
意思:在當前shell環境中讀取并執行FileName中的命令
特點:? ? ? ???命令可以強行讓一個腳本去立即影響當前的環境(一般用于加載配置文件)。
?命令會強制執行腳本中的全部命令,而忽略文件的權限。
$bash FileName 、 $zsh FileName復制代碼
意思:重新建立一個子shell,在子shell中執行腳本里面的句子。
$./FileName復制代碼
意思:讀取并執行文件中的命令。但有一個前提,腳本文件需要有可執行權限。
下面來點干貨,腳本重簽名的源碼。網上搜也有很多,大家開心就好。不知道為什么,我寫在bash后,代碼格式總亂,大家可以找到其他文獻源碼,這里我貼圖
如果你想要簡單的了解shell,參考Andy哥的文獻。共三篇文章,簡明粗暴易懂。
用戶、組、權限
Unix和Linux都是多用戶、多任務的系統,所以這樣的系統里面就擁有了用戶、組的概念。那么同樣文件的權限也就有相應的所屬用戶和所屬組了。
Mac文件屬性
↑
[? ? ?權限? ? ?]
[連接][所有者]
[所屬組]? ? ? ?[文件大小][最后修改日期][文件名稱]
第一位:文件類型
常見:[d]目錄(dictionary)
[-]文件
后九位,文件權限,每三位一組,第一組:文件所有者的權限 rwx
第二組:這一組其他用戶的權限 r-x
第三組:非本組用戶的權限 r-x
文件權限
[r]:read,讀
[w]:write,寫
[x]:execute,執行
注意:這三組權限的位置不會變,依次是rwx,出現[-]對應位置,代表沒有此權限
改變權限:chmod
文件權限的改變使用chmod命令。設置方法有兩種:數字類型改變
和
符號類型改變。
由于文件權限分為三種身份:[user][group][other] 三個權限:[read]
[write]
[execute]
數字類型:
各個權限數字對照:r:4
w:2 x:1
如果一個文件權限為 [–rwxr-xr-x ]
User :
4+2+1 = 7
Group: 4+0+1
=
5
Other: 4+0+1
=
5
命令:chmod
755
文件名
符號類型:
chmod [u、g、o、a] [+(加入)、-(除去)、=(設置)]
[r、w、x]
文件名稱
[a]代表all,[a]=[u+g+o],在我們加入權限的時候,沒有添加身份,默認為[a]
代碼注入
一般修改原始的程序,是利用代碼注入的方式,注入代碼就會選擇利用FrameWork或者Dylib等三方庫的方式注入。
在這里我們先簡單介紹一下DYLD,Dynamical Load,又叫動態鏈接器,存在于操作系統中。在手機開機的時候,該程序就默認啟動。DYLD在手機內存中執行,CPU調度DYLD,DYLD就會把加載的應用(MacO)加載到內存中去。當DYLD讀取MacO文件的時候,首先就會讀取Load Commands字段,該字段包含了Foundation \UIKit等庫,例如我們在調用NSLog函數,一定會到Foundation這個庫中調用,但是誰知道Foundation這個庫的真實地址,DYLD。如果依賴的庫不再內存當中,所以就加載該庫。
所以,我們要在Load Commands中插入一個我們自己寫的Framework。
注入步驟
用MacOview查詢ipa文件夾下包內容的二進制文件,查看Load Commands。
Framwork注入
?? 通過Xcode新建Framwork,將庫安裝進入APP包
?? 通過yololib注入Framwork庫路徑。命令:$yololib(空格)MachO文件路徑(空格)庫? ? ? ? ? ? ?路徑
yololib WeChat Frameworks/xxxxHook.framework/xxxxHook //庫加載到MachO中Load Command下的LC_LOAD_DYLIB中復制代碼
?? 所有的Framwork加載都是由DYLD加載進入內存被執行的
?? 注入成功的庫路徑會寫入到MachO文件的LC_LOAD_DYLIB字段中
然后將成功注入后的二進制文件替換掉前文提到的TARGET_IPA_PATH下的二進制文件。
保留Payload文件夾,壓縮Payload。
zip -ry WeChat.ipa Payload復制代碼
最后生成的ipa,用重簽的方式可以安裝到手機。Dylib注入
?? 通過Xcode新建Dylib庫(注意:Dylib屬于MacOS所以需要修改屬性)
?? 添加Target依賴,讓Xcode將自定義Dylib文件打包進入APP包。
?? 利用yololib進行注入。
兩種方式都可以實現代碼的注入。如果我哪里寫的不對、不清楚,還希望你能提出來,我們共同探討進步,如果你喜歡此文章,就動一動小手點個贊吧。
想要yololib和MachOview的安裝文件,可以留言。
總結
以上是生活随笔為你收集整理的ios重签名shell脚本_iOS逆向——shell重签名及代码注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 系统 可视化工具实时监控_L
- 下一篇: 怎么调整字段长短_【芝士蛋糕怎么总烤不熟