本文主要介绍了如何为Android编译带-e选项的netcat。

环境
OS:Ubuntu14.04 64

编译busybox

首先到这里下载busybox源码,这里我下载的版本为1.23.1。
搭建交叉编译环境:
apt-get install gcc-arm-linux-gnueabi libc-dev-armel-cross
在busybox目录下执行:
make menuconfig
进入图形选择模式,必填的选项为:

1
2
3
4
5
6
7
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源码进行交叉编译。
首先到这里下载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体积要减小很多。