iOS攻防 實戰 1 動態注入

2021-10-01 05:43:25 字數 2953 閱讀 8778

前言:之前幾篇講了一些背景知識,這一篇進入正題,來講一下動態注入的基本理論和流程。我們這裡通過動態新增執行庫的方式來實現動態注入。

還記得我們之前介紹math-o檔案時,提到了load commands嘛?其中有一部分是載入第三方庫的:

注意其中的:lc_load_dylib(afnetworking)。那麼,能否通過修改math-o檔案來載入我們需要動態注入的庫呢?答案是肯定的。

實際上,我們打包的ipa檔案本質上是乙個壓縮包,通過修改ipa檔案的字尾(ipa->zip),然後解壓縮,就能看到ipa檔案中的內容:

裡面的有些內容是不是感覺很熟悉?注意其中名叫hello的unix可執行檔案,這個就是我們ipa包中的path-o檔案。但有了這些還不夠,我們還需要了解另乙個知識:重簽名

每乙個ipa檔案在裝到手機中執行前,都需要進行簽名(第二篇中有介紹)。實際上,ipa中載入的每乙個庫在打包進ipa中時,都會進行一次簽名。

那麼,我們如果想要通過新增自己的三方庫來實現動態注入,除了要修改math-o檔案,還需要搞定簽名機制。

ios的重簽名機制其實並不神秘,很多第三方應用分發平台都會對你的應用進行重簽來進行分發(比如蒲公英)。這方面的資料網上也很多,這裡我們介紹一種比較簡單的方式:xcode+指令碼

首先,用xcode新建乙個重簽名專案,名字隨意,這裡我取名為helloinject。

這裡特別提一點,很多介紹重簽名的文章都要求重簽名的ipa是越獄包(關於越獄ipa包是什麼,以及獲取方式,之後有時間給大家講講)。經過我親測,非越獄包也可以重簽,實際上我測試的hello.ipa就是乙個正式簽名ipa(上架包)。但是這裡我遇到乙個問題,我在打包ipa時,如果勾選了支援bitcode,重簽就會出問題,原因我也不明白,望有懂的大神能夠指教。

在target中新增乙個庫專案,這裡取名為injectsdk,在庫專案中建乙個類,重寫類的+ (void)load方法:

+ (void)load

至於為什麼要寫在load方法裡,之後再解釋。這個庫專案就是我們要動態注入的動態庫!

# $ 這個是工程目錄

temp_path="$/temp"

# 資源資料夾,即存放要重簽的ipa檔案的路徑

# ipa包路徑

target_ipa_path="$/*.ipa"

#新建temp資料夾

rm -rf "$"

mkdir -p "$"

# --------------------------------------

# 1. 解壓ipa 到temp下

# 解壓ipa包到temp目錄

unzip -oqq "$target_ipa_path" -d "$temp_path"

# 列印一下

# -------------------------------------

#target_name target名稱

# -------------------------------------

# -------------------------------------

# 4. 更新 info.plist 裡的bundleid

# 設定 "set :key value" "目標檔案路徑.plist"

# 5.給可執行檔案上許可權

#新增ipa二進位制的執行許可權,否則xcode會告知無法執行

#這個為二進位制檔案加上可執行許可權 +x

# -------------------------------------

then

#遍歷出所有動態庫的路徑

doecho "??????framework : $framework"

#簽名/usr/bin/codesign --force --sign "$expanded_code_sign_identity" "$framework"

done

fi

仔細觀察指令碼配置,指令碼的內容其實很簡單:

解壓ipa

修改info.plist中的bundle id

增加可執行檔案許可權

遍歷frameworks,進行重簽名

修改pach-o檔案

這裡重點提一下第2和第5步:

修改專案配置,在打包時執行指令碼:

完成後使用真機執行專案,專案顯示的介面是我們想要動態注入目標的(hello.ipa),仔細觀察輸出的內容:

這裡顯示了我們之前在注入的framework中新增的**。說明注入成功!

剛才留了乙個疑問,為什麼注入的**要寫在+ (void)load中?

首先,雖然我們成功在ipa中注入了我們自己的庫,但是我們無法修改專案的源**。因此,用什麼方法讓專案執行我們注入的庫中的**呢?

了解過class的load方法的同學應該能想到解決方案,load方法的特點是:只要class載入,就會執行。因此,無需修改原始碼去呼叫我們的**,這以特性非常合適作為我們動態注入的入口。

Webmail攻防實戰

webmail是指利用瀏覽器通過web方式來收發電子郵件的服務或技術,不需借助郵件客戶端,可以說只要能上網就能使用webmail,極大地方便了使用者對郵件的收發。對於不能熟練使用郵件客戶端,或者在網咖不便使用郵件客戶端的使用者來說,webmail更是必不可少的選擇。email能夠成為當今intern...

IOS安全攻防(一)

hack必備的命令與工具 你的應用正在被其他對手反向工程 跟蹤和操作!你的應用是否依舊裸奔豪不防禦?鄭重宣告一下,懂得如何攻擊才會懂得如何防禦,一切都是為了之後的防禦作準備。廢話少說,進入正題。今天總結一下為hack而做的準備工作。ps 顯示程序狀態,cpu使用率,記憶體使用情況等 sysctl 檢...

氣體動理論1

物質分子動理論的三個基本假設 1.實物是由大量不連續的彼此之間有一定距離的分子或原子組成 2.分子永不停息地做無規則運動 3.分子之間同時存在引力和斥力 平衡狀態 給定容器中的定量氣體,容器中氣體各部分具有相同溫度,密度和壓強。這一狀態將不再隨時間變化,這種狀態叫做平衡狀態,簡稱平衡態。否則稱為非平...