本文主要介绍了如何为Android编译带-e选项的netcat。
环境
OS:Ubuntu14.04 64
编译busybox
首先到http://www.busybox.net/下载busybox源码,这里我下载的版本为1.23.1。
搭建交叉编译环境:
apt-get install gcc-arm-linux-gnueabi libc-dev-armel-cross
在busybox目录下执行:
make menuconfig
进入图形选择模式,必填的选项为:
Busybox Settings->General Configuration->
[*]Don't use /usr
Busybox Settings->Build Options->
[*] Build BusyBox as a static binary (no shared libs)
(arm-linux-gnueabi-) Cross Compiler prefix
Networking Utilities->
[*] Netcat 1.10 compatibility (+2.5k)
保存设置退出menuconfig,执行:
make -j8
成功后会在当前目录生产busybox,通过busybox nc即可调用netcat。
编译netcat
由于不能直接从busybox单独的提取出netcat命令,所以使用郑郭busybox稍显臃肿(strip版本大概为2m),所以我又决定直接对netcat源码进行交叉编译。
首先到https://sourceforge.net/projects/netcat/下载netcat源码这里我下载的版本是0.7.1。
这里可以采用两种编译手段:
1.gnu编译
搭建交叉编译环境:
apt-get install gcc-arm-linux-gnueabi libc-dev-armel-cross
修改netcat目录src文件夹下的netcat.c文件,在首部添加两个宏:#define GAPING_SECURITY_HOLE,#define TELNET。
在netcat目录下执行:
./configure --host=arm-linux CC=arm-linux-gnueabi-gcc CFLAGS="-static -O2"
--prefix= /home/auo/Temp/netcat-0.7.1/out
具体路径请自行修改。
成功后,执行:
make -j8
成功后继续执行:
make install
生成后的netcat在/home/auo/Temp/netcat-0.7.1/out/bin/目录下,最后执行:
arm-linux-gnueabi-strip -s '/home/auo/Temp/netcat-0.7.1/out/bin/netcat'
strip后netcat的大小为583.1kB。
2.NDK编译
修改netcat目录src文件夹下的netcat.c文件,在首部添加两个宏:#define GAPING_SECURITY_HOLE,#define TELNET。
在netcat目录下执行:
./configure --host=arm-linux CC=arm-linux-androideabi-gcc
CFLAGS="-static --sysroot=/home/auo/Android/android-ndk-r10d/platforms/android-21/arch-arm -O2"
--prefix=/home/auo/Temp/netcat-0.7.1/out
具体路径请自行修改,环境变量自行添加。
成功后,执行:
make -j8
成功后继续执行:
make install
生成后的netcat在/home/auo/Temp/netcat-0.7.1/out/bin/目录下,最后执行:
arm-linux-androideabi-strip -s '/home/auo/Temp/netcat-0.7.1/out/bin/netcat'
strip后netcat的大小为326.1kB,显而易见,使用ndk编译出的netcat体积要减小很多。