前提條件:越獄狀態(tài)下
起因:由于蘋果在iOS7以后對sysctl
和ioctl
進行了技術(shù)處理,無法獲取到正確的MAC地址,返回的都是02:00:00:00:00:00
通過查找資料削解,得知cydia
有一款插件可以進行掃描出MAC地址,名稱為arp-scan
,這款插件在http://repo.hackyouriphone.org/
和https://mcapollo.githun.io/Public/
這2個源都可以下載到
然后ssh
到手機上使用arp-acan -l
查看沟娱,如下圖
圖中就能看到對應(yīng)IP的MAC地址.
功能是實現(xiàn)了氛驮,但是這個要集成到代碼里,可不好搞啊济似,剛開始我是直接提取了deb
,一共包括2個deb
,一個是arp-scan.deb
,一個是libpcap.deb
,后面這個是其依賴庫!
然后我想的是直接通過代碼來安裝這2個deb
,之后使用命令啟動,最后發(fā)現(xiàn)要成功安裝deb
這需要很多的依賴柳爽,和我的需求不符.
然后我又想了個辦法,自己編譯一個支持arm64
的arp-scan
從網(wǎng)絡(luò)上下載然后放到手機中,將libpcap
依賴也從網(wǎng)絡(luò)下載到手機中,然后使用命令啟動,雖然這樣好像可以實現(xiàn),但是麻煩之處在于,需要將編譯的二進制文件復(fù)制到/usr/local/bin
目錄下,還有其他的依賴文件,需要手動修復(fù)路徑,而且通過命令執(zhí)行出來的結(jié)果還需要我手動去提取,也是一件很麻煩的事.而且只能同步等待掃描結(jié)果,如果子網(wǎng)很大,那將一直卡主.也只能放棄此方法
最終解決方案
自己將libpcap
編譯成.a
靜態(tài)庫,然后使用源碼集成arp-scan
,從而就可以實現(xiàn)功能,也不需要使用命令執(zhí)行了,但這里面也踩了不少坑(主要還是因為對跨平臺不熟).
首先去tcpdump下載所需要的依賴libpcap
我下載的是libpcap-1.9.1.tar.gz
,然后將其解壓,文件為
然后我們開始編譯支持
arm64
結(jié)構(gòu)的libpcap
由于
libpcap
支持cmake
所以我們在當前目錄下建立一個
build
文件夾,然后打開終端進入build
文件夾執(zhí)行cmake .. -G Xcode
等執(zhí)行完成后,在
build
目錄下就會自動生成個XCode工程雙擊
pcap.xcodeproj
打開工程選擇pcap_static
然后將其改為如下圖
然后
pcap-bpf.c
會報錯,將其內(nèi)容注釋即可成功build
(但是最后打包出來的有沒有功能缺陷暫時未知)因為我后面用了另一種方式獲取了靜態(tài)庫.這是使用lipo
查看打包出來的架構(gòu)因為對交叉編譯不太熟悉,所以我也不知道這個編譯出來的庫是否可以用,在后面的工作中,我發(fā)現(xiàn)了可以直接從手機中導(dǎo)出,所以我直接使用了導(dǎo)出的靜態(tài)庫,以后對交叉編譯熟悉了再回過來看這個報錯問題.
在cydia
中可以看到libpcap
的目錄結(jié)構(gòu)
直接使用
scp
或者愛思助手直接將這些文件全部拖出來可以直接下載我提取的:下載地址
編譯arp-scan
在這里先下載arp-scan的源碼
然后使用MonkeyDev建立一個Commond-Line
工程碱屁,將pacp
的靜態(tài)庫和相應(yīng)頭文件拉進去,頭文件可以在上面的下載地址里找到
將arp的這幾個文件拖進來
因為
arp-scan
也使用了交叉編譯,有很多的宏,所以arp-scan.c
文件里我自己將宏去掉,然后將一些實現(xiàn)全部移到了.c
文件里但要注意一點是在
get_hardware_address
方法實現(xiàn)里,
if (ifm->ifm_type != RTM_IFINFO || (ifm->ifm_addrs & RTA_IFP) == 0)
中的RTM_IFINFO
和RTA_IFP
是<net/route.h>
中的宏定義,iOS
里是沒有這個宏的,所以我直接將其復(fù)制過來
if (ifm->ifm_type != 0xe || (ifm->ifm_addrs & 0x10) == 0)
將arp-scan.c
中的main
函數(shù)改個名字
然后在
main.m
里調(diào)用然后打包成二進制到手機上測試
大功告成磷脯!