1螟深、查看《iOS逆向 開發(fā)工具》 Theos的使用方法做準備工作赠尾;
2毡证、創(chuàng)建tweak
工程转砖,實現(xiàn)在屏幕上添加彈框(越獄手機);
3诞外、Logos
語法澜沟。
完成該工程,我們可以實現(xiàn)在任意地方添加我們想要的功能峡谊。任性茫虽,吼吼刊苍。
一、給屏幕添加彈框
項目目錄:/Users/yanghaibo/Documents/iOS逆向/Theos/
1濒析、創(chuàng)建tweak
工程正什,進入工程目錄執(zhí)行命令:
/opt/theos/bin/nic.pl
會出現(xiàn)列表:
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/application_swift
[4.] iphone/cydget
[5.] iphone/flipswitch_switch
[6.] iphone/framework
[7.] iphone/ios7_notification_center_widget
[8.] iphone/library
[9.] iphone/notification_center_widget
[10.] iphone/preference_bundle_modern
[11.] iphone/tool
[12.] iphone/tool_swift
[13.] iphone/tweak
[14.] iphone/xpc_service
Choose a Template (required):
2、選擇13創(chuàng)建一個tweak
工程号杏;
3婴氮、輸入tweak
的工程名稱Project Name
: first
4、輸入deb
包的名字盾致,Package Name
: com.yahibo.first
5主经、輸入tweak
作者的名稱,Author
: yahibo
6庭惜、輸入作用對象的bundle identifier
: com.apple.springboard
7罩驻、安裝完成后需要重啟應用,以進程名表示 命令:使用空格
項目創(chuàng)建完成如下:
8护赊、修改Tweak.xm
文件
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application{
%orig;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"我來了惠遏,哈哈哈" delegate:nil cancelButtonTitle:@"不見" otherButtonTitles:@"好的", nil];
[alert show];
}
%end
9、修改Makefile
文件骏啰,指定設備IP
节吮,指定處理器架構,指定SDK
版本器一,導入framework
课锌,多個framework
空格添加。
THEOS_DEVICE_IP = 192.168.0.105
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = first
first_FILES = Tweak.xm
first_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
10祈秕、配置完后終端進入工程文件執(zhí)行安裝命令:
make package install
執(zhí)行如下:
手機端顯示如下:
以上大功告成,完成了鎖屏狀態(tài)下加彈框雏胃。
11请毛、工程被打包到:./packages/com.yahibo.first_0.0.1-23+debug_iphoneos-arm.deb
中,可使用dpkg
查看deb
包信息:
dpkg -I ./packages/com.yahibo.first_0.0.1-23+debug_iphoneos-arm.deb
12瞭亮、在Cydia
應用中搜索syslogd to/var/log/syslog
并安裝方仿;搜索Core Utilities
并安裝,安裝后可以使用tail
命令查看文件统翩。
13仙蚜、項目打包成一個.dylib
動態(tài)庫在越獄手機/Library/MobileSubstrate/DynamicLibraries/
目錄下。
修改內容需要清除包
make clean
rm -rf packages
重啟SpringBoard
殺死進程會自動重啟
killall -9 SpringBoard
卸載動態(tài)庫:
make package uninstall
二厂汗、常用的Logos語法簡介
1委粉、%hook
指定需要hook
的類名,以%end
結尾娶桦。
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application{
%orig;//執(zhí)行原始操作
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"我來了贾节,哈哈哈" delegate:nil cancelButtonTitle:@"不見" otherButtonTitles:@"好的", nil];
[alert show];
}
%end
示例代碼為鉤住SpringBoard
類的applicationDidFinishLaunching
函數汁汗,先執(zhí)行原始操作,再顯示彈框栗涂。
2知牌、%log
用來打印log的,將信息輸入到syslog
中,格式%log([(<type><expr>斤程,...)])
角寸。
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application{
%orig;//執(zhí)行原始操作
%log((NSString *)@"iOSRE",(NSString *)@"Debug");
}
%end
3、%orig
執(zhí)行被hook
函數的原始代碼忿墅,類似于super.method
功能扁藕,如果去掉,原始代碼不會執(zhí)行球匕。還可以使用該函數更改原始函數的參數:
%hook SBLockScreenDateViewController
-(void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2{
%orig(@"hello I am hibo",arg2);
}
%end
4纹磺、%group
該指令用于%hook
的分組,%group
后邊跟的是組名亮曹,%group
也是必須以%end
結尾橄杨,其中可以包含多個%hook
。
5照卦、%init
該指令用來初始化某個%group
式矫,一個group
只有被初始化后才可生效,init
必須在hook
中進行執(zhí)行役耕。
6采转、%ctor tweak
的構造器,用來初始化瞬痘,如果不顯式定義故慈,Theos就會自動生成一個%ctor,并在其中調用%init(_ungrouped).
如:%ctor { %init(_ungrouped)}
。
7框全、%new
該指令用來給現(xiàn)有的class
添加一個新的函數察绷。與Runtime
中的class_addMethod
相同。
8津辩、%c
該指令用來獲取一個類的名稱拆撼,類似于objc_getClass
。
三喘沿、遇到的問題
1闸度、編譯報錯
"_OBJC_CLASS_$_UIApplication", referenced from: objc-class-ref in Tweak.x.a7a9a55a.o
- 在
Makefile
文件中引入UIKit
動態(tài)庫:xxx_FRAMEWORKS = UIKit
,xxx
工程名稱
從越獄手機中我們可以拿到蘋果設備的桌面程序SpringBoard.app
蚜印,砸殼后獲取到SpringBoard
對應的頭文件莺禁。根據頭文件我們可以大致猜測到類及類方法的作用,因此使用以上方法晒哄,我們也可以更改其他一些顯示睁宰,修改桌面時間文本肪获、顏色、電池狀態(tài)柒傻、電量孝赫,當然這些可能沒有實用價值,我們只是通過這種方式來進一步了解逆向红符。
蘋果設備桌面頭文件