本申請實施例涉及macos注入,特別涉及一種靜態(tài)注入方法及存儲介質(zhì)。
背景技術(shù):
1、為了利用macos系統(tǒng)更好地滿足用戶需求,有時需要修改或擴展現(xiàn)有程序行為。而靜態(tài)注入即為一種典型的能夠用來修改或擴展現(xiàn)有程序行為的實現(xiàn)方式,且得到了廣泛的應用。其中,靜態(tài)注入通常是通過修改目標應用進程對應的可執(zhí)行文件(mach-o文件)實現(xiàn),具體地,將類型為lc_load_dylib的用于加載注入庫的加載命令(load?command,lc)條目添加到可執(zhí)行文件中的加載命令區(qū)中。
2、然而,在應用時,靜態(tài)注入并不總能夠成功實現(xiàn),在可執(zhí)行文件的加載運行過程中報錯的情況時有發(fā)生。
技術(shù)實現(xiàn)思路
1、本申請實施例提供了一種靜態(tài)注入方法及存儲介質(zhì),至少有利于減少或避免可執(zhí)行文件在加載運行過程中的錯誤,提高了靜態(tài)注入的成功率。
2、根據(jù)本申請一些實施例,本申請實施例第一方面提供了一種靜態(tài)注入方法,包括:將可執(zhí)行文件的加載命令區(qū)中的第一目標加載命令占用的空間縮小目標長度,其中,所述第一目標加載命令占用的空間的縮小不影響所述可執(zhí)行文件的正常加載;在所述加載命令區(qū)中插入空白字符,其中,所述目標長度與所述空白字符的長度相等;通過所述空白字符中寫入第二目標加載命令,其中,所述第二目標加載命令用于加載注入庫;根據(jù)所述第一目標加載命令占用的空間的縮小情況,調(diào)整對應加載命令的位置信息,其中,所述位置信息包括虛擬內(nèi)存大小、虛擬內(nèi)存地址、文件偏移值。
3、在一些實施例中,所述根據(jù)所述第一目標加載命令占用的空間的縮小情況,調(diào)整對應加載命令的位置信息之后,所述方法還包括:在所述可執(zhí)行文件的數(shù)據(jù)區(qū)中,將類型值為0x33的加載命令指向的數(shù)據(jù)節(jié)從當前所在的文件位置移動至另一文件位置并將類型值為0x33的加載命令修改為指向移動后的所述另一文件位置。
4、在一些實施例中,所述另一文件位置位于所述數(shù)據(jù)區(qū)中其它所有數(shù)據(jù)節(jié)的位置之后。
5、在一些實施例中,所述第一目標加載命令包括類型值為0x19且名稱為__pagezero的加載命令。
6、在一些實施例中,所述通過可執(zhí)行文件的加載命令區(qū)中插入空白字符,包括:在所述加載命令區(qū)的所有加載命令之后插入所述空白字符。
7、在一些實施例中,所述將可執(zhí)行文件的加載命令區(qū)中的第一目標加載命令占用的空間縮小目標長度,包括:將類型值為0x19且名稱為__pagezero的加載命令縮短所述目標長度;所述根據(jù)所述第一目標加載命令占用的空間的縮小情況,調(diào)整對應加載命令的位置信息,包括:將類型值為0x19且名稱為__pagezero的加載命令的虛擬內(nèi)存大小減去所述目標長度;將類型值為0x19且名稱非__pagezero的加載命令的虛擬內(nèi)存地址減去所述目標長度、文件偏移值增加所述目標長度;將類型值非0x19的加載命令的文件偏移值增加所述目標長度。
8、在一些實施例中,所述通過所述空白字符中寫入第二目標加載命令,包括:在所述空白字符和所述加載命令區(qū)的預留空間連續(xù)分布的情況下,在所述空白字符和所述預留空間中寫入所述第二目標加載命令。
9、在一些實施例中,所述將可執(zhí)行文件的加載命令區(qū)中的第一目標加載命令占用的空間縮小目標長度,包括:縮短至少一個所述第一目標加載命令,和/或,刪除至少一個所述第一目標加載命令,以將所有所述第一目標加載命令占用的空間縮小所述目標長度。
10、根據(jù)本申請一些實施例,本申請實施例第二方面還提供了一種計算機可讀存儲介質(zhì),存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如第一方面任一項所述的靜態(tài)注入方法。
11、根據(jù)本申請一些實施例,本申請實施例第三方面還提供了一種計算機可讀存儲介質(zhì),存儲有計算機程序,所述計算機程序為進行靜態(tài)注入后得到的可執(zhí)行文件,其中,靜態(tài)注入前的所述可執(zhí)行文件和靜態(tài)注入后的所述可執(zhí)行文件具有虛擬內(nèi)存大小相同的加載命令區(qū)。
12、在一些實施例中,在靜態(tài)注入前的所述可執(zhí)行文件和靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x33的加載命令指向的數(shù)據(jù)節(jié)指向的文件位置不同。
13、在一些實施例中,在靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x33的加載命令指向的數(shù)據(jù)節(jié)位于所述可執(zhí)行文件的數(shù)據(jù)區(qū)中其它所有數(shù)據(jù)節(jié)的位置之后。
14、在一些實施例中,在靜態(tài)注入前的所述可執(zhí)行文件和靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x19且名稱為__pagezero的加載命令的虛擬內(nèi)存大小不同。
15、在一些實施例中,相對于靜態(tài)注入前的所述可執(zhí)行文件,靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x19且名稱非__pagezero的加載命令的虛擬內(nèi)存地址減小目標長度,類型值為0x19且名稱非__pagezero的加載命令的虛擬內(nèi)存地址減小所述目標長度、文件偏移值增加所述目標長度,類型值非0x19的加載命令的文件偏移值增加所述目標長度;其中,所述目標長度不小于靜態(tài)注入過程中新增的注入庫的加載命令的長度,且所述目標長度為n*4k,n為正整數(shù)。
16、在一些實施例中,靜態(tài)注入后的所述可執(zhí)行文件中,加載命令區(qū)的尾部為空白字符。
17、本申請實施例中提供的技術(shù)方案,至少具有以下優(yōu)點:
18、由于加載命令區(qū)中的第一目標加載命令占用的空間在不影響可執(zhí)行文件的正常加載的情況下被縮小了目標長度,且該目標長度與加載命令區(qū)中將被插入的空白字符長度相等,因此,實現(xiàn)了在不影響可執(zhí)行文件的正常加載的情況下通過縮短的目標長度提供了足夠空白字符插入的空間,以寫入用于加載注入庫的第二目標加載命令。同時,第一目標加載命令縮短的長度與新插入的空白字符的長度相等,因此,加載命令區(qū)整體占用的空間在注入前后保持不變,數(shù)據(jù)區(qū)的文件位置也不需要變化,也就不需要為了適應數(shù)據(jù)區(qū)的文件位置變化而修改數(shù)據(jù)區(qū)中的引用地址信息,只需要在加載命令區(qū)調(diào)整對應加載命令的包括虛擬內(nèi)存大小、虛擬內(nèi)存地址、文件偏移值在內(nèi)的位置信息,就能夠保障可執(zhí)行文件的正常加載和運行,減少了靜態(tài)注入時所需要調(diào)整的信息,有利于減少或避免可執(zhí)行文件在加載運行過程中的錯誤,簡化了靜態(tài)注入的處理,降低了靜態(tài)注入的實現(xiàn)難度,提高了靜態(tài)注入的成功率。
1.一種靜態(tài)注入方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的靜態(tài)注入方法,其特征在于,所述根據(jù)所述第一目標加載命令占用的空間的縮小情況,調(diào)整對應加載命令的位置信息之后,所述方法還包括:
3.根據(jù)權(quán)利要求2所述的靜態(tài)注入方法,其特征在于,所述另一文件位置位于所述數(shù)據(jù)區(qū)中其它所有數(shù)據(jù)節(jié)的位置之后。
4.根據(jù)權(quán)利要求1至3中任一項所述的靜態(tài)注入方法,其特征在于,所述第一目標加載命令包括類型值為0x19且名稱為__pagezero的加載命令。
5.根據(jù)權(quán)利要求1至3中任一項所述的靜態(tài)注入方法,其特征在于,所述在所述加載命令區(qū)中插入空白字符,包括:
6.根據(jù)權(quán)利要求5所述的靜態(tài)注入方法,其特征在于,所述將可執(zhí)行文件的加載命令區(qū)中的第一目標加載命令占用的空間縮小目標長度,包括:
7.根據(jù)權(quán)利要求1至3中任一項所述的靜態(tài)注入方法,其特征在于,所述通過所述空白字符中寫入第二目標加載命令,包括:
8.根據(jù)權(quán)利要求1至3中任一項所述的靜態(tài)注入方法,其特征在于,所述將可執(zhí)行文件的加載命令區(qū)中的第一目標加載命令占用的空間縮小目標長度,包括:
9.一種計算機可讀存儲介質(zhì),存儲有計算機程序,其特征在于,所述計算機程序被處理器執(zhí)行時實現(xiàn)如權(quán)利要求1至8中任一項所述的靜態(tài)注入方法。
10.一種計算機可讀存儲介質(zhì),存儲有計算機程序,其特征在于,所述計算機程序為進行靜態(tài)注入后得到的可執(zhí)行文件,其中,靜態(tài)注入前的所述可執(zhí)行文件和靜態(tài)注入后的所述可執(zhí)行文件具有虛擬內(nèi)存大小相同的加載命令區(qū)。
11.根據(jù)權(quán)利要求10所述的計算機可讀存儲介質(zhì),其特征在于,在靜態(tài)注入前的所述可執(zhí)行文件和靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x33的加載命令指向的數(shù)據(jù)節(jié)指向的文件位置不同。
12.根據(jù)權(quán)利要求11所述的計算機可讀存儲介質(zhì),其特征在于,在靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x33的加載命令指向的數(shù)據(jù)節(jié)位于所述可執(zhí)行文件的數(shù)據(jù)區(qū)中其它所有數(shù)據(jù)節(jié)的位置之后。
13.根據(jù)權(quán)利要求10至12中任一項所述的計算機可讀存儲介質(zhì),其特征在于,在靜態(tài)注入前的所述可執(zhí)行文件和靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x19且名稱為__pagezero的加載命令的虛擬內(nèi)存大小不同。
14.根據(jù)權(quán)利要求13所述的計算機可讀存儲介質(zhì),其特征在于,相對于靜態(tài)注入前的所述可執(zhí)行文件,靜態(tài)注入后的所述可執(zhí)行文件中,類型值為0x19且名稱非__pagezero的加載命令的虛擬內(nèi)存地址減小目標長度,類型值為0x19且名稱非__pagezero的加載命令的虛擬內(nèi)存地址減小所述目標長度、文件偏移值增加所述目標長度,類型值非0x19的加載命令的文件偏移值增加所述目標長度;
15.根據(jù)權(quán)利要求10至12中任一項所述的計算機可讀存儲介質(zhì),其特征在于,靜態(tài)注入后的所述可執(zhí)行文件中,加載命令區(qū)的尾部為空白字符。