用Cycript進行實時修改
本文,我們將使用微信應用來執(zhí)行所有的測試。一旦微信應用應用被安裝好,請確保它運行在前臺。這是因為如果應用在后臺,那它就會被暫停,你也不能對它做啥。
1)使用ssh命令連接手機
(SSH怎么用在簡書搜索哈!)
wanggangdeMacBook-Pro:~ wanggang$ ssh root@192.168.1.100
//輸入ssh 密碼
root@192.168.1.100's password:
2)勾住進程
一旦應用跑起來,你可以先找到其進程id,然后用cycript -p掛鉤其進程。
//連接手機
wanggangdeMacBook-Pro:~ wanggang$ ssh root@192.168.1.100
//輸入密碼
root@192.168.1.100's password:
shujinokinakenkou:~ root# ps aux | grep "weather"
mobile 15312 0.0 2.2 897008 21904 ?? Us 6:50PM 0:07.76 /var/mobile/Containers/Bundle/Application/A402E082-7FA0-40DC-9423-ADA502E06CE2/com.yahoo.weather-35524-distribution.app/yweather
root 15352 0.0 0.0 538432 496 s000 R+ 7:04PM 0:00.02 grep weather
shujinokinakenkou:~ root# cy#
-sh: cy#: command not found
//勾住we chat 列出 mobile id
shujinokinakenkou:~ root# ps aux | grep WeChat
root 15361 7.1 0.1 538432 536 s000 S+ 7:08PM 0:00.05 grep WeChat
mobile 15323 1.1 4.5 1041712 45096 ?? Ss 6:50PM 0:12.23 /var/mobile/Containers/Bundle/Application/B02EC742-D61A-4F7B-B5DC-9598FF2DD165/WeChat.app/WeChat
shujinokinakenkou:~ root# cycript 15312
*** _assert(!stream->fail()):../Console.cpp(1098):Main
//勾住進程id 微信的進程id 是15323 mobile 后面的就是
shujinokinakenkou:~ root# cycript -p 15323
//下面使用cy語言愉快的調(diào)試了
cy# var delegate = UIApp.delegate
#"<MicroMessengerAppDelegate: 0x13f76f8f0>"
cy# var window = delegate.window
#"<iConsoleWindow: 0x13f68b6d0; baseClass = UIWindow; frame = (0 0; 414 736); autoresize = W+H; gestureRecognizers = <NSArray: 0x13f68d020>; layer = <UIWindowLayer: 0x13f68b6b0>>"
cy# var rootVC = windown.rootViewController
throw new ReferenceError("Can't find variable: windown")
出現(xiàn)下面代碼說明勾住進程成功
root 15361 7.1 0.1 538432 536 s000 S+ 7:08PM 0:00.05 grep WeChat
mobile 15323 1.1 4.5 1041712 45096 ?? Ss 6:50PM 0:12.23/var/mobile/Containers/Bundle/Application/B02EC742-D61A-4F7B-B5DC-9598FF2DD165/WeChat.app/WeChat
如果掛鉤成功,你可以得到一個Cycript解釋器。你可以通過Objective-C的語法 [UIApplication sharedApplication].來得到實例。
3)實戰(zhàn)
執(zhí)行隱藏和顯示狀態(tài)欄的命令
cy# var delegate
cy# [[UIApplication sharedApplication] setStatusBarHidden:YES]
cy# [[UIApplication sharedApplication] setStatusBarHidden:NO]
cy# [[UIApplication sharedApplication] setStatusBarHidden:YES]
cy# [[UIApplication sharedApplication] setStatusBarHidden:YES]
cy# [[UIApplication sharedApplication] setStatusBarHidden:NO]
cy# [[UIApplication sharedApplication] setStatusBarHidden:YES]
cy# [[UIApplication sharedApplication] setStatusBarHidden:NO]
cy# [[UIApplication sharedApplication] setStatusBarHidden:NO]
顯示結(jié)果,可以看到執(zhí)行命令導航欄消失和隱藏

導航欄顯示和隱藏.gif
在微信app內(nèi)彈框執(zhí)行以下命令
cy# [[[UIAlertView alloc]initWithTitle:@"cy" message:@"guanzhuwo" delegate:ni cancelButtonTitle:@"ok" otherButtonTitles:nil, nil] show]
cy# [[[UIAlertView alloc]initWithTitle:@"cy" message:@"guanzhuwo" delegate:ni cancelButtonTitle:@"ok" otherButtonTitles:nil, nil] show]
效果圖

彈框提示.gif
更改badge 的值執(zhí)行如下命令
cy# [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1000]
cy# [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1000]
cy# [[UIApplication sharedApplication] setApplicationIconBadgeNumber:100]
cy# [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]
效果圖(觀察微信圖標右上角小圓點的變化)

badge更改.gif
有了頭文件,有了ida反編譯,配合上cycript,可以驗證我們的各種關(guān)于微信代碼的猜測,但要將這些猜測串成一個可執(zhí)行的Tweak,就需要反復的大量的實驗。
cycript 還有其他的用法推薦這篇文章
iOS逆向工程(Cycript腳本語言使用與實戰(zhàn))
- 作者開發(fā)經(jīng)驗總結(jié)的文章推薦,持續(xù)更新學習心得筆記
Runtime 10種用法(沒有比這更全的了)
成為iOS頂尖高手,你必須來這里(這里有最好的開源項目和文章)
iOS逆向Reveal查看任意app 的界面
JSPatch (實時修復App Store bug)學習(一)
iOS 高級工程師是怎么進階的(補充版20+點)
擴大按鈕(UIButton)點擊范圍(隨意方向擴展哦)
最簡單的免證書真機調(diào)試(原創(chuàng))
通過分析微信app,學學如何使用@2x,@3x圖片
TableView之MVVM與MVC之對比
使用MVVM減少控制器代碼實戰(zhàn)(減少56%)
ReactiveCocoa添加cocoapods 配置圖文教程及坑總結(jié)