天天看點

android安裝busybox

0x01.下載下傳busybox

https://busybox.net/downloads/binaries/

我選擇的是:1.21.1>busybox-armv7l

[PARENTDIR] Parent Directory                                                        -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ../                                            -- :    -   
[DIR] ...git-defconfig-multiarch/                    -- :    -   
[DIR] ..-defconfig-multiarch/                        -- :    -   
[DIR] ..-i686/                                       -- :    -   
[DIR] ..-defconfig-multiarch/                        -- :    -   
[DIR] ..-i686/                                       -- :    -   
[DIR] ..-i686/                                       -- :    -   
[   ] ssl_helper-x86_64  
           

0x02.copy到手機上(root過)

➜  ~ adb push ~/Downloads/busybox-armv7l /storage/sdcard0/busybox
/home/iamcxl/Downloads/busybox-armv7l...ed.  MB/s ( bytes in s)
           

0x03.安裝到系統目錄

進入adb shell,然後再擷取su權限.

➜  ~ adb shell
shell@ja3gduosctc:/ $ su
|root@ja3gduosctc:/ # cp /storage/sdcard0/busybox /system/xbin/busybox
           

0x04.給busybox添加執行權限

安裝到目前目錄

0x05.執行busybox

[email protected]:/ # busybox ls
acct                       init.environ.rc            publiccert.pem
cache                      init.goldfish.rc           root
config                     init.rc                    sbin
d                          init.trace.rc              sdcard
data                       init.universal5410.rc      seapp_contexts
default.prop               init.universal5410.usb.rc  sepolicy
dev                        init.usb.rc                sepolicy_version
efs                        init.wifi.rc               storage
efs_gsm                    knox_data                  sys
etc                        lib                        system
file_contexts              mnt                        ueventd.goldfish.rc
fstab.goldfish             persdata                   ueventd.rc
fstab.universal5410        preload                    ueventd.universal5410.rc
init                       proc                       vendor
init.container.rc          property_contexts
[email protected]:/ #
           

0x06.缺陷

這種方式靜态方式移植的busybox不能使用ping, traceroute, nslookup等網絡工具.

原因如下:

為Milestone/Droid動态編譯busybox并連結至bionic

之前介紹過交叉編譯busybox的方法,可是在使用過程中發現它的ping,traceroute以及其它的一些網絡指令在使用域名作為參數時會出現

ping: bad address

traceroute: bad address

等錯誤,進而不能夠正常工作

原因就是之前靜态編譯的busybox連結于glibc上,它其中用來擷取DNS資訊的getaddrinfo函數在android下是有問題的,而android所使用的libc庫是個google自己開發bionic.

與glibc相比,Bionic Libc有如下一些特點:

采用BSD License,而不是glibc的GPL License;

大小隻有大約200k,比glibc差不多小一半,且比glibc更快;

實作了一個更小、更快的pthread;

提供了一些Android所需要的重要函數,如”getprop”, “LOGI”等;

不完全支援POSIX标準,比如C++ exceptions,wide chars等;

不提供libthread_db 和 libm的實作

很明顯getaddrinfo是POSIX的标準函數,由于bionic并不完全支援POSIX,是以它應該有它自己的實作方法,這裡不探究它如何實作,現在要做的是怎麼讓busybox能夠使用bionic來連結。

感謝偉大的開源運動,cyanogenmod已經提供了修改好的busybox源代碼,由于cyanogenmod并不相容milestone,而它對android官方的核心以及bionic修改幅度較大是以将它的bionic完全移植過來難度還是很大的,是以這裡僅僅移植一些busybox需要用到的一些函數,這樣對原bionic修改幅度較小,也比較容易實作.

引用自:

http://bbs.chinaunix.net/thread-3638767-1-1.html

0x07.自己編譯一個busybox(支援網絡工具)

因為我要用的就是traceroute和nslookup等工具,是以必須要編譯一個才行.

待續…