iOS逆向開發(1):基礎工具 | ssh | scp | soca

小白:小程,我一直想問,什麼是逆向來着?是逆向行駛嗎?

小程:理解爲逆向行駛也沒錯。一般的項目是從無到有,而逆向是從已有的狀態入手,分析出已有的流程與結構的手段。

iOS上的逆向開發,是一件有趣的事情(雖然有時很痛苦),而且還可能給你帶來收益。

在接下來的幾篇文章,小程會嘗試介紹iOS逆向的一系列的知識與技能:從基礎工具的使用,到目標類的定位、目標代碼的調試,再到注入微信的實戰示例。

本文介紹iOS逆向的基礎工具的使用。

硬件方面,你需要一臺iOS設備(iphone/itouch/ipad,以下都稱爲手機或iphone),以及一臺電腦。電腦方面,小程建議你使用mac電腦,因爲它的環境可以解決很多無謂的問題,當然如果你有很強的解決問題的能力並且堅持用windows來安裝mac虛擬機的話,也是可以的。

系統環境方面,你需要給手機越獄。說到越獄,小程就想起scofield:
越獄的主角

但這裏的越獄,是指對手機有更多的操作權限,比如在手機運行命令行終端、往root等目錄寫入數據、安裝非來自AppStore的應用,等等。但注意一點,越獄後,沙盒的機制還是存在的,比如你的App還是不能往其它App的Document目錄寫入數據。

小程在寫這篇文章時,10.2以上的系統還不支持越獄,所以準備用於越獄的系統應該是10.2或低於10.2。使用pp助手、愛思之類的工具進行越獄。

解決了硬件和系統越獄的需求後,接着就是逆向的基本工具了,這些工具可以讓你逼近***目標。

(1)ssh

ssh,就是Secure Shell,即安全外殼協議(ssh協議可以防範ip或dns欺騙,加密而且壓縮數據,被廣泛使用),常用於遠程登陸。這裏指的是ssh客戶端。

如果最終是用yalu102來越獄的話,越獄後自帶ssh(但scp要自行安裝),注意,不要再安裝ssh(比如openssh或ssh connect等),否則即使在Terminal上可以執行ssh命令也是連接不上--就是要Terminal上執行不了ssh命令,如果安裝了openssh,要卸載掉。

試用ssh:

  • 在手機的wifi頁面,找出當前使用的ip。
  • 在電腦上(mac機自帶ssh客戶端),使用ssh登陸設備:ssh root@ip
  • ssh登陸到手機,之後操作的就是這臺手機,電腦上的鍵盤就是手機的鍵盤。

小白:喂,登陸時需要寫密碼,是多少呢?

ios設備的兩個默認ssh賬號:
root,默認密碼:alpine
mobile,默認密碼:alpine

ssh登陸示例:
$ ssh [email protected]
或者:
$ ssh -l root 192.168.1.100
-----
[email protected]'s password:(輸入密碼,回車)
810:~ root#

登陸後,修改root密碼:
# passwd

登陸後,修改mobile密碼:
# passwd mobile

每次ssh到手機,都要經過密碼驗證。如果想簡化這一步,那麼可以使用iosod來建立這個信任,前提是,已經安裝了iosopendev:
cd /opt/iosopendev/bin  
./iosod sshkey -h 192.168.1.101
這樣就對這個ip建立信任,之後ssh登陸時不再輸入密碼。

上面已經提到了iOSOpenDev,這是一個編寫注入代碼的實用工具,後續再具體介紹。

使用ssh時可能遇到的一個問題,對於ios10.1.1(其它10.x也一樣),在越獄後,用ssh是登陸不上的,原因參考http://blog.csdn.net/dianshanglian/article/details/62422627

以下是這個網頁的內容摘錄:


1、SSH連接不上
在手機上安裝Mterminal,運行su,輸入root密碼,進入root權限,執行ps aux|grep dropbear
(1)如果你看到的進程沒有dropbear
執行/usr/local/bin/dropbear -F -R -p 22
然後就可以連接了,重啓依然有效
(2)如果你看到進程是這樣:/usr/local/bin/dropbear -F -R -p 127.0.0.1:22
意思是隻能數據線重定向連接SSH,如果你想改成WIFI可以訪問
那麼用Filza修改/private/var/containers/Bundle/Application/{UUID}/yalu102.app/dropbear.plist
把裏面有個參數127.0.0.1:22改成22保存,重啓手機即可
UUID在每個人手機上不一樣

2、修復SCP
你會發現yalu102自帶的SSH無法用WINSCP傳輸文件,因爲缺少了scp
很簡單
(1)cydia裏面安裝wget
(2)在mterminal裏面登陸root權限(在手機上,或在pc上ssh到手機)
(3)執行以下命令
wget mila432.com/scp
ldid -S scp
chmod 777 scp
mv scp /usr/bin/scp

(mila432.com/scp,如果已經不存在的話,那需要另找scp執行文件)

注意,如果是用“越獄助手”來越獄的,那上面的目錄改爲../Application/越獄助手/yalu102.app/..

(2)scp

scp,就是secure copy,是基於ssh的遠程拷貝。

一般安裝完ssh客戶端後就可以使用scp指令(否則,可以參考上面辦法下載scp來使用)。

比如,把hellowrold文件,拷貝到手機的root用戶的根目錄,命名爲hello:

scp helloworld [email protected]:hello

比如,拷貝手機裏面的內容到電腦:

scp [email protected]:/User/Documents/Cracked/* .

在ssh與scp安裝完畢後,就可以做一些“***”的事情了。

比如,讓手機重啓

ssh [email protected]
(810:~ root#) killall SpringBoard

比如,在手機上執行hello wrold程序

首先編譯出執行文件,使用clang:
clang -o helloworld -arch armv7 helloworld.c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk

拷貝執行文件到手機:
scp helloworld [email protected]:hello

登陸手機並執行:
ssh [email protected]
cd /
chmod +x hello
./hello

(3)socat

socat,是用來查看系統日誌的工具。系統各個進程的動態信息、所有app的NSLog信息,都可以通過socat觀察到。

安裝

在cydia搜索SOcket CAT來安裝,或者:
apt-get install socat   --前提是安裝了apt-get

使用

socat – UNIX-CONNECT:/var/run/lockdown/syslog.sock
>watch

爲了跟蹤信息,我們經常在hook某個APP後,再自行加上NSLog。但是,有一些APP,爲了性能,會在發佈版本中把NSLog重寫爲“什麼都不做”,那這時再使用NSLog就看不到輸出。這時,可以考慮用NSFileHandl來記錄到文件,再打開文件查看輸出,比如:
NSString path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/logme.txt"];
NSFileManager
fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:path contents:nil attributes:nil];
g_logfile = [NSFileHandle fileHandleForWritingAtPath:path];
[g_logfile retain];
[g_logfile seekToEndOfFile];
NSString info = @"-------MicroMessengerAppDelegate::didFinishLaunchingWithOptions\n";
NSData
idata = [info dataUsingEncoding:NSUTF8StringEncoding];
[g_logfile writeData:idata];


總結一下,本文簡介了iOS逆向的準備工作,以及基礎工具ssh/scp/socat的使用。這三個工具在以後的實戰中會經常用到,雖然你也可以用其它工具來達到同樣的目的(比如用p2p助手可以直接拷貝文件,甚至可以查看系統日誌輸出),但小程還是建議你掌握它們的使用。


錢財如糞土

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章