cycript是什么?
cycript是objc++、javascript、java等語言的混合物,可以用來調(diào)試 探索 修改正在運(yùn)行的ios、mac的app。
我們要調(diào)試我們app,首先需要手機(jī)越獄,至于怎么越獄以及需要安裝什么源我在上一篇文章都有講到,查看一下就知道了。這里我們需要安裝的軟件如下:

和這個(gè)插件

當(dāng)然默認(rèn)安裝了第一個(gè)插件之后就會(huì)自動(dòng)的安裝第二個(gè)插件,這個(gè)插件是jay Freeman開發(fā)的,所以放心使用,因?yàn)檫@個(gè)人開發(fā)的都是神器。
cycript的開啟和關(guān)閉
- 開啟
我們需要做的是連接上我們的越獄手機(jī)(用usb進(jìn)行連接),然后執(zhí)行我們寫好的那兩個(gè)shell文件(在我的上一篇文章中有寫到關(guān)于shell),我們就可以用我們的mac來通過命令來控制我們的手機(jī)了。接下來我們需要通過ps來查看一下我們當(dāng)前的手機(jī)有哪些進(jìn)程,通過使用命令配合進(jìn)程的id或者進(jìn)程的名稱我們就可以進(jìn)入當(dāng)前我們需要調(diào)試的app。
具體命令如下: - 列出所有的進(jìn)程
(特別需要注意的是:你需要將你的app打開,否則是顯示不出來你的進(jìn)程app的,本人因?yàn)檫@個(gè)錯(cuò)誤折騰了一天)
ps -A
或者
ps aux
- 關(guān)鍵字列出進(jìn)程
ps -A | grep 關(guān)鍵字
- 開啟cycript
(你調(diào)試那個(gè)app就需要將這個(gè)app放在前臺運(yùn)行 否則會(huì)一直卡住不動(dòng))
cycripy -p 進(jìn)程的id
或者
cycript -p 進(jìn)程名稱 (一般用這個(gè)不會(huì)發(fā)生改變,但是進(jìn)程的id可能會(huì)發(fā)生改變)
- 取消輸入
ctrl + C
- 退出
ctrl + D
- 清屏
ctrl + R
常用語法


封裝cycript的庫
我們可以看到cycript是非常麻煩的,高手給我們封裝好了一個(gè)庫,那么我們就可以將封裝好的庫導(dǎo)入到我們需要的位置進(jìn)行展示,庫在哪里?
在這個(gè)位置:https://github.com/CoderMJLee/mjcript
我們使用命令將這個(gè)文件導(dǎo)入到我們的手機(jī)中,然后導(dǎo)入進(jìn)行使用,比如:
我們使用命令:
scp -P 10010 .cy文件路徑 root@localhost:/usr/lib/cycript0.9 路徑下
然后我們按照上邊的命令進(jìn)行展示:

可見我們已經(jīng)把springBoard進(jìn)行展示出來 ,并且打印了一些信息了。
-
怎樣封裝呢?
1.首先我們使用subline text這個(gè)工具點(diǎn)擊右下角選擇javascript這個(gè)工具
image.png
然后我們輸入,固定格式
image.png
接下來我們配合我們的oc和js的相關(guān)的語法進(jìn)行完成。 - 注意點(diǎn):
1.其中有等號的需要加上分號。
2.方法需要加上大括號。
3.當(dāng)我們寫好我們的.cy文件,我們需要將我們當(dāng)前調(diào)試的app殺死,其次執(zhí)行我們遠(yuǎn)程拷貝文件的命令,然后我們再次打開我們要調(diào)試的app,然后在重新導(dǎo)入文件,輸入命令進(jìn)行相關(guān)的調(diào)試。
關(guān)于Cycript的路徑問題
我們一般拷貝的話 我們直接將我們的.cy文件直接放到/usr/lib/cycript0.9這個(gè)路徑下,其實(shí)我們可以看jay Freeman 這個(gè)作者他是自己創(chuàng)建了文件夾將自己寫的.cy文件放到了這個(gè)文件夾

其實(shí)如果按照正規(guī)來講我們也需要將我們的文件放到一個(gè)特殊的文件夾下來執(zhí)行。比如我可以這么放,我執(zhí)行這個(gè)命令
scp -P 10010 ~/Desktop/mjcript/mjcript.cy root@localhost:/usr/lib/cycript0.9/DG/
注意:我首先用ifunbox創(chuàng)建了一個(gè)DG文件夾,如果不自己創(chuàng)建我們這個(gè)命令是不能自動(dòng)創(chuàng)建的,那么接下來怎么引用呢,我以網(wǎng)易云音樂為例,用圖片的方式展示了:

關(guān)于mjcript怎么使用
第一參考李明杰老師的github簡介,第二的我們可以用subline text打開它,直接看里邊的方法
比如我截取其中的一部分:
MJLoadFramework = function(name) {
var head = "/System/Library/";
var foot = "Frameworks/" + name + ".framework";
var bundle = [NSBundle bundleWithPath:head + foot] || [NSBundle bundleWithPath:head + "Private" + foot];
[bundle load];
return bundle;
};
// keyWindow
MJKeyWin = function() {
return UIApp.keyWindow;
};
// 根控制器
MJRootVc = function() {
return UIApp.keyWindow.rootViewController;
};
我們就知道他里邊有MJRootVc(), MJKeyWin等等,還有我們現(xiàn)在已經(jīng)懂了cycript相關(guān)的東西 ,比如我修改網(wǎng)易的登錄按鈕、修改微信的錢包那就是很容易做到的了,我這里就不在贅述了,如果你還不明白,請看這個(gè)鏈接(http://www.itdecent.cn/p/4271bba925fb)這種的多的很。但是你要明白我們現(xiàn)在的修改都是在內(nèi)存中,如果你點(diǎn)擊了返回在進(jìn)來它還是會(huì)變回原來的樣子,怎樣長久的修改我會(huì)在以后的文章說道。但是需要大家注意:就拿修改微信余額來說就算我們在客戶端長久修改了他的余額但是服務(wù)器還是修改不了,我們只是針對客戶端,怎樣把服務(wù)器修改了那么就需要你研究他的算法來進(jìn)行破解,估計(jì)不是高手中的高手也破解不了一般如果不是黑客入侵他的數(shù)據(jù)庫,修改他內(nèi)部的東西是改不了的,但是黑客也入侵不了他的數(shù)據(jù)庫,如果你能入侵那么騰訊也該倒閉了,所以我們還是不要異想天開了,我們學(xué)習(xí)逆向就需要研究他內(nèi)部怎么實(shí)現(xiàn)的就行了。
Reveal
- Reveal的安裝
首先我們需要在我們的越獄手機(jī)上安裝一些插件,具體怎么做我用圖片的方式來進(jìn)行展示:
第一步:
image.png
第二步:
image.png
注意:其中安裝Reveal Loader他中途會(huì)有一段卡頓的時(shí)間,不用重啟慢慢的等待它完成。
第三步:
image.png
注意:
1.當(dāng)我找我自己的iphone的時(shí)候發(fā)現(xiàn)沒有RHRevealLoader這個(gè)文件夾,那么這時(shí)候就需要自己創(chuàng)建一個(gè),然后將我們mac上的那個(gè)文件導(dǎo)入到這個(gè)文件夾下。
2.我們知道reveal下載網(wǎng)站,但是人家是要錢或者免費(fèi)給你用幾天,我看到這個(gè)都不爽,所以我找了一個(gè)免費(fèi)版(不知道怎么就是不愿意花錢),https://pan.baidu.com/s/1lz9lwTKXD9bS8DnvT9gkBQ,提取碼為:b31u -
reveal使用
1.首先打開你要調(diào)試的app的界面(注意reveal只能查看ui)
2.看我圖片顯示
image.png
最新版的reveal是支持wifi和usb調(diào)試的 ,但是我這個(gè)我看了下只支持usb
如圖
image.png
這樣的話點(diǎn)擊左邊的框就可以看到他具體的結(jié)構(gòu)和層級關(guān)系了。






