iOS逆向之代碼注入(dylib)

題外話:此教程是一篇嚴(yán)肅的學(xué)術(shù)探討類文章罚舱,僅僅用于學(xué)習(xí)研究,也請讀者不要用于商業(yè)或其他非法途徑上绎谦,筆者一概不負(fù)責(zé)喲~~

準(zhǔn)備工作

  • 非越獄的iPhone手機(jī)
  • 用PP助手下載: 微信6.6.5(越獄應(yīng)用)
  • MachOView

MachOView下載地址:http://sourceforge.net/projects/machoview/
MachOView源碼地址:https://github.com/gdbinit/MachOView

  • yololib

yololib下載地址https://github.com/KJCracks/yololib?spm=a2c4e.11153940.blogcont63256.9.5126420eAJpqBD

代碼注入思路:

DYLD會(huì)動(dòng)態(tài)加載Frameworks中所有的動(dòng)態(tài)庫管闷,那么在Frameworks中加一個(gè)自己的動(dòng)態(tài)庫,然后在自己動(dòng)態(tài)庫中hook和注入代碼

動(dòng)態(tài)庫存放的位置:Frameworks

image.png

找到可執(zhí)行文件WeChat

image.png

用MachOView打開可執(zhí)行文件WeChat窃肠,在Load Commands里可以查看到動(dòng)態(tài)庫


image.png

image.png
image.png

步驟:

1包个、新建工程,在Build Phases 添加腳本

image.png

image.png

腳本可以參考iOS逆向之自動(dòng)化重簽名,我是用文件XcodeSign.sh存在本地冤留。

2碧囊、在工程目錄添加APP文件夾,將越獄的微信安裝包放入其中

image.png

3纤怒、先編譯運(yùn)行起來

4糯而、添加dylib

iOS現(xiàn)在已經(jīng)不能添加dylib,只能從macOS添加


image.png

image.png

5泊窘、引入WJHook

image.png

image.png

6熄驼、修改Base SDK- 非常重要

image.png

7像寒、修改Signing - 非常重要

image.png

8、在XcodeSign.sh腳本中編寫注入動(dòng)態(tài)庫的代碼谜洽,保存

#  注入我們編寫的動(dòng)態(tài)庫
echo "開始注入"
# 需要注入的動(dòng)態(tài)庫的路徑  這個(gè)路徑我就寫死了!
INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libWJHook.dylib"
#
## 通過工具實(shí)現(xiàn)注入
yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"

完整的腳本如下:

# ${SRCROOT} 為工程文件所在的目錄
TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾,放三方APP的
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路徑
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

#新建Temp文件夾
rm -rf "$TEMP_PATH"
mkdir -p "$TEMP_PATH"

# --------------------------------------
# 1. 解壓IPA 到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解壓的臨時(shí)APP的路徑
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# 這里顯示打印一下 TEMP_APP_PATH變量
echo "TEMP_APP_PATH: $TEMP_APP_PATH"

# -------------------------------------
# 2. 把解壓出來的.app拷貝進(jìn)去
#BUILT_PRODUCTS_DIR 工程生成的APP包路徑
#TARGET_NAME target名稱
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "TARGET_APP_PATH: $TARGET_APP_PATH"

rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"

# -------------------------------------
# 3. 為了是重簽過程簡化萝映,移走extension和watchAPP. 此外個(gè)人免費(fèi)的證書沒辦法簽extension

echo "Removing AppExtensions"
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"

# -------------------------------------
# 4. 更新 Info.plist 里的BundleId
#  設(shè)置 "Set :KEY Value" "目標(biāo)文件路徑.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

# 5.給可執(zhí)行文件上權(quán)限
#添加ipa二進(jìn)制的執(zhí)行權(quán)限,否則xcode會(huì)告知無法運(yùn)行
#這個(gè)操作是要找到第三方app包里的可執(zhí)行文件名稱,因?yàn)閕nfo.plist的 'Executable file' key對應(yīng)的是可執(zhí)行文件的名稱
#我們grep 一下,然后取最后一行, 然后以cut 命令分割阐虚,取出想要的關(guān)鍵信息序臂。存到APP_BINARY變量里
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

#這個(gè)為二進(jìn)制文件加上可執(zhí)行權(quán)限 +X
chmod +x "$TARGET_APP_PATH/$APP_BINARY"

# -------------------------------------
# 6. 重簽第三方app Frameworks下已存在的動(dòng)態(tài)庫
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
#遍歷出所有動(dòng)態(tài)庫的路徑
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
echo "????????????FRAMEWORK : $FRAMEWORK"
#簽名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi

# ---------------------------------------------------
# 7. 注入我們編寫的動(dòng)態(tài)庫
echo "開始注入"
# 需要注入的動(dòng)態(tài)庫的路徑  這個(gè)路徑我就寫死了!
INJECT_FRAMEWORK_RELATIVE_PATH="Frameworks/libWJHook.dylib"
#
## 通過工具實(shí)現(xiàn)注入
yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"
echo "注入完成"

9、在WJHook中編寫注入代碼(WJHook也要添加開發(fā)者團(tuán)隊(duì)簽名signing)

image.png
image.png

10实束、編譯運(yùn)行奥秆,成功!

image.png

代碼和工具已上傳:https://github.com/WinJayQ/dylibInjecting

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咸灿,一起剝皮案震驚了整個(gè)濱河市构订,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌避矢,老刑警劉巖悼瘾,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異审胸,居然都是意外死亡亥宿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門砂沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烫扼,“玉大人,你說我怎么就攤上這事碍庵∮称螅” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵静浴,是天一觀的道長堰氓。 經(jīng)常有香客問我,道長苹享,這世上最難降的妖魔是什么双絮? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮富稻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘白胀。我一直安慰自己椭赋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布或杠。 她就那樣靜靜地躺著哪怔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上认境,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天胚委,我揣著相機(jī)與錄音,去河邊找鬼叉信。 笑死亩冬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼笤成,長吁一口氣:“原來是場噩夢啊……” “哼国拇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起送悔,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荚板,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吩屹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年跪另,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祟峦。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罚斗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宅楞,到底是詐尸還是另有隱情针姿,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布厌衙,位于F島的核電站距淫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏婶希。R本人自食惡果不足惜榕暇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喻杈。 院中可真熱鬧彤枢,春花似錦、人聲如沸筒饰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷们。三九已至业栅,卻和暖如春秒咐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碘裕。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工携取, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帮孔。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓雷滋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親你弦。 傳聞我的和親對象是個(gè)殘疾皇子惊豺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容