您的位置:首页 > 移动开发 > Android开发

android-afl (American Fuzzy Lop for Anadroid)编译安装

2017-04-20 17:46 726 查看
一、android-afl网址:

android-afl是对linux测试工具afl的扩展,修改点只是将编译脚本改为了android 的mk文件。

github地址:https://github.com/ele7enxxh/android-afl

有关AFL的使用等问题还是得参考linux的AFL

linux的AFL github地址:https://github.com/rc0r/afl-fuzz

二、安装

前提条件:

需要Android source code(e.g. 6.0.1) ,lvm-3.8 and clang-3.8。

android 源码比较好说了,下载后全编译就可以了。

重点说下llvm,clang:

(参考的http://apt.llvm.org/)

最新版本为3.9:我是ubuntu 12.03系统,所以做了如下操作:

在源中加入llvm clang的源:

sudo vi /etc/apt/sources.list


打开文件后,添加下面的内容到文件中,保存退出。

deb http://apt.llvm.org/precise/ llvm-toolchain-precise main
deb-src http://apt.llvm.org/precise/ llvm-toolchain-precise main
# 3.9
deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.9 main
deb-src http://apt.llvm.org/precise/ llvm-toolchain-precise-3.9 main
# 4.0
deb http://apt.llvm.org/precise/ llvm-toolchain-precise-4.0 main
deb-src http://apt.llvm.org/precise/ llvm-toolchain-precise-4.0 main

# Common
deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu precise main


更新源:

sudo apt-get update


安装clang3.9:

wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -

apt-get install clang-3.9 lldb-3.9 llvm-3.9

验证:

SPREADTRUM\jieying.li@tj05002pcu:~$ clang-3.9 --version
clang version 3.9.1-svn288847-1~exp1 (branches/release_39) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/bin

SPREADTRUM\jieying.li@tj05002pcu:~$clang++-3.9 --version
clang version 3.9.1-svn288847-1~exp1 (branches/release_39)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin



实际中,同时有将

deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.8 main

deb-src http://apt.llvm.org/precise/ llvm-toolchain-precise-3.8 main

加入源,但是安装3.8会提示包依赖问题,所以只能安装了3.9.

二、下载、编译android-afl

1.下载

cd 到android源码的目录下面,

git clone https://github.com/ele7enxxh/android-afl
2..先解决工具clang llvm版本的问题

在/android-afl文件夹下,打开android.mk文件,搜索“3.8”,将其改成“3.9”。这可以解决以下错误提示:

/bin/bash: llvm-config-3.8: command not found

/bin/bash: llvm-config-3.8: command not found

/bin/bash: clang++-3.8: command not found

这是因为android-af的android.mk文件中定义了使用clang llvm的3.8版本,就只认识clang-3.8这样的二进制文件,而上面使用的是3.9,所以,就报错了。将使其改为3.9就OK了.

3.编译

cd android-afl

mm -B

若一切顺利,最后出现

#### make completed successfully (10 seconds) ####

不过我这里又遇到问题:

target Symbolic: afl-llvm-rt (out/target/product/spwhale2_fpga/symbols/system/lib64/afl-llvm-rt.so)

Export includes file: android-afl/Android.mk -- out/target/product/spwhale2_fpga/obj/SHARED_LIBRARIES/afl-llvm-rt_intermediates/export_includes

target Strip: afl-llvm-rt (out/target/product/spwhale2_fpga/obj/lib/afl-llvm-rt.so)

Install: out/target/product/spwhale2_fpga/system/lib64/afl-llvm-rt.so

cp: cannot stat `out/target/product/spwhale2_fpga/obj_arm/SHARED_LIBRARIES/afl-llvm-rt_intermediates/llvm_mode/afl-llvm-rt.o.o': No such file or directory

make: *** [out/target/product/spwhale2_fpga/system/lib64/afl-llvm-rt.so] Error 1

make: *** Deleting file `out/target/product/spwhale2_fpga/system/lib64/afl-llvm-rt.so'

问题的原因是:要找到out/target/product/spwhale2_fpga/obj_arm/SHARED_LIBRARIES/afl-llvm-rt_intermediates/llvm_mode/afl-llvm-rt.o.o文件,但是实际上没有这个目录和文件。

解决:

我打开这个目录,发现out/target/product/spwhale2_fpga/obj_arm/SHARED_LIBRARIES下面确实没有后面的子目录和文件。

于是在android源码文件夹下面搜索“afl-llvm-rt.o.o”,结果找到了,不过目录是"out/target/product/spwhale2_fpga/obj/SHARED_LIBRARIES"。

将该目录下的文件夹拷贝到out/target/product/spwhale2_fpga/obj_arm/SHARED_LIBRARIES下面,再次编译。success了。

问题分析:

是android.mk文件中这一行出错的:

LOCAL_POST_INSTALL_CMD := $(hide) cp -f $(TARGET_OUT_INTERMEDIATES)/SHARED_LIBRARIES/afl-llvm-rt_intermediates/llvm_mode/afl-llvm-rt.o.o $(HELPER_PATH)/afl-llvm-rt.o;

不过怎么将这个拷贝的源目录改为out/target/product/spwhale2_fpga/obj/SHARED_LIBRARIES,我就不知道了。

编译完成后,在out/target/product/spwhale2_fpga/system/bin目录下生成如下二进制文件:

afl-analyze

afl-fuzz

afl-gotcup

afl-showmap

afl-tmin

将它们push到手机/system/bin目录下面。就可以运行了。

我push到手机后总提示“not executable: 64-bit ELF file”,最后确定是手机没用对。在什么代码下编译的,最好放入什么手机中运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐