Last updated on:February 18, 2023 pm
开源社区有着许多开源软件,我将优先从以下几个角度去挑选开源软件,并找寻它们之间的依赖与调用关系:
- 支持AFL进行Fuzzing的开源软件(参考https://github.com/aflgo/oss-fuzz/tree/master/projects)
- 提供文件操作API或者网络通信API的开源工具。因为它们所涉及的文件读取和通信协议栈往往更容易产生crash
- 体积不大,易于源码安装
1 开源软件挑选
import os
import yaml
def checkAflSupport(dirname):
try:
f = open(dirname + '/project.yaml', 'r')
data = yaml.load(f)
except:
# print('there is no project.yaml in %s' %dirname)
pass
try:
if 'afl' in data['fuzzing_engines']:
toolname = dirname.split('/')[-1]
print(toolname)
except:
# print('there is no fuzzing_engines given')
pass
if __name__ == "__main__":
proj_dir = './projects'
projects = os.listdir(proj_dir)
for proj_name in projects:
if os.path.isdir(proj_dir + '/' + proj_name):
checkAflSupport(proj_dir + '/' + proj_name)
采用parseFuzzProj.py
脚本拉取oss-fuzz中支持AFL的开源软件,得到如下软件列表:
binutils brotli brunsli bzip2
c-ares capstone cjson cmark
graphicsmagick grok harfbuzz
hermes hostap
jbig2dec json-c
lcms libcbor libexif libfdk-aac libidn2 libldac libpcap libplist libspectre libtasn1 libteken libwebp libxml2 libyaml libyuv lz4
miniz monero mupdf
nanopb ndpi nestegg nghttp2 ntp
openjpeg openthread opus ots
pcre2 pffft proxygen
qubes-os
rnp
speex stb
tidy-html5 tor tremor
unicorn usrsctp
vorbis
wireshark woff2 wolfssl wuffs
xz
yajl-ruby
zlib zlib-ng zstd
挑选与文件操作和网络通信相关的开源软件:
# 文件操作相关的开源软件
binutils bzip2
grok
libyaml libxml2 libjson-c3
xz
zlib
# 网络通信相关的开源软件
fastnetmon
libpcap libndpi
wireshark
2 软件依赖关系查找
软件之间的调用关系即依赖关系,我们可以借助包管理工具apt
来查找开源软件的依赖有哪些以及被哪些软件依赖:
查询镜像源是否有某款开源软件
SOFTWARE
:sudo apt-cache search SOFTWARE_NAME | grep SOFTWARE_NAME
查询某款开源软件
SOFTWARE
的依赖:sudo apt-cache depends SOFTWARE_NAME | grep Depends
查询某款开源软件
SOFTWARE
被哪些软件依赖:sudo apt-cache rdepends SOFTWARE_NAME
3 开源软件依赖组合分析
3.1 libpcap
依赖与被依赖
depends:
- libc6
rdepends:
- wireshark-qt,wireshark-gtk,tshark
- tcpdump,tcpreplay
- snort,suricata,fastnetmon
- nmap
代码相似性
- 与Nmap:
- netmap/libpcap与libpcap仓库下有大量同名.c代码文件,且有若干同名目录
与suricata:
- source-pcap.c中存在libpcap的API调用
与wireshark:
- wireshark/writecap/pcapio.c存在libpcap magic number等相关字段和结构体
- wireshark/capture_opts.c
TODO…
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!