Hack 必備的命令與工具
常用的命令和工具
ps ——顯示進(jìn)程狀態(tài),CPU 使用率鲁纠,內(nèi)存使用情況等
sysctl ——檢查設(shè)定 Kernel 配置
netstat ——顯示網(wǎng)絡(luò)連接,路由表帽揪,接口狀態(tài)等
route ——路由修改
renice ——調(diào)整程序運(yùn)行的優(yōu)先級(jí)
ifconfig ——查看網(wǎng)絡(luò)配置
tcpdump ——截獲分析網(wǎng)絡(luò)數(shù)據(jù)包
lsof ——列出當(dāng)前系統(tǒng)打開的文件列表绞幌,別忘記一切皆文件嵌戈,包括網(wǎng)絡(luò)連接疾掰、硬件等
otool ① ——查看程序依賴哪些動(dòng)態(tài)庫(kù)信息搂誉,反編代碼段……等等等等
nm ② ——顯示符號(hào)表
ldid ③ ——簽名工具
gdb ——調(diào)試工具 patch ——補(bǔ)丁工具
SSH ——遠(yuǎn)程控制
備注: ① otool,可查看可執(zhí)行程序都鏈接了那些庫(kù): otool -L WQAlbum
可以得到:
WQAlbum:
/System/Library/Frameworks/StoreKit.framework/StoreKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AdSupport.framework/AdSupport (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/System/Library/Frameworks//MediaPlayer.framework/MediaPlayer (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices (compatibility version 1.0.0, current version 40.0.0)
/System/Library/Frameworks/CoreMedia.framework/CoreMedia (compatibility version 1.0.0, current version 1.0.0)
……
可以反編譯 WQAlbum 的 __TEXT__ 段內(nèi)容, 截前 10 行: otool -tV WQAlbum |head -n 10
可以得到:
WQAlbum:
(__TEXT,__text) section
start:
00002de0? ? pushl? $0x00
00002de2? ? movl? ? %esp,%ebp
00002de4? ? andl? ? $0xf0,%esp
00002de7? ? subl? ? $0x10,%esp
00002dea? ? movl? ? 0x04(%ebp),%ebx
……
② nm静檬,顯示程序符號(hào)表勒葱,用我自己的應(yīng)用程序私人相冊(cè)現(xiàn)身說(shuō)法一下: nm -g WQAlbum ( -g 代表 global )
可以得到:
001e5eec S _OBJC_IVAR_$_WQPhotoViewController.albumObject
001e5efc S _OBJC_IVAR_$_WQPhotoViewController.int_current
001e5f00 S _OBJC_IVAR_$_WQPhotoViewController.int_total
其中,WQPhotoViewController 為類名巴柿,albumObject 為該類的成員
③ ldid,是 iPhoneOS.platform 提供的簽名工具死遭,我們自己編譯的程序需要簽上名才能跑在 iPhone/iPad 上广恢,使用方法
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
ldid -S helloworld
編譯 Hello World
首先找到編譯器:
arm-apple-darwin10-llvm-gcc-4.2 就是了。 為了方便起見呀潭,可以在 .bashrc 或者 profile 配置下環(huán)境變量钉迷,方便編譯。
找到 SDK
編譯我們自己的程序的時(shí)候需要指定該目錄下的 SDK 钠署。
來(lái)個(gè)經(jīng)典 Hello World :
#includeint main(){
printf("Hello world !!!\n");
return 0;
}
編譯
其中 -isysroot 用來(lái)指定 build 時(shí)的 SDK
file 查看一下類型糠聪,沒(méi)問(wèn)題。
SCP 給 iPhone谐鼎、iPad
前提是舰蟆,設(shè)備已經(jīng)越獄并且安裝了 SSH ,且必須在同一網(wǎng)段。 $scp helloworld root@x.x.x.x:hello world
登錄設(shè)備簽名
$ssh -l root x.x.x.x
#ldid -S helloworld
執(zhí)行程序
#./helloworld
Hello world !!!
運(yùn)行成功狸棍,這就完成了最簡(jiǎn)單的手動(dòng)執(zhí)行自己的應(yīng)用程序身害。