常见开源软件和开源库的调用关系

常见开源软件和开源库的调用关系

Zhiyu Lv4

开源社区有着许多开源软件,我将优先从以下几个角度去挑选开源软件,并找寻它们之间的依赖与调用关系

  • 支持AFL进行Fuzzing的开源软件(参考https://github.com/aflgo/oss-fuzz/tree/master/projects)
  • 提供文件操作API或者网络通信API的开源工具。因为它们所涉及的文件读取通信协议栈往往更容易产生crash
  • 体积不大,易于源码安装

1 开源软件挑选

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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的开源软件,得到如下软件列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

挑选与文件操作和网络通信相关的开源软件:

1
2
3
4
5
6
7
8
9
10
11
# 文件操作相关的开源软件
binutils bzip2
grok
libyaml libxml2 libjson-c3
xz
zlib

# 网络通信相关的开源软件
fastnetmon
libpcap libndpi
wireshark

2 软件依赖关系查找

软件之间的调用关系即依赖关系,我们可以借助包管理工具apt来查找开源软件的依赖有哪些以及被哪些软件依赖

  • 查询镜像源是否有某款开源软件SOFTWARE

    1
    sudo apt-cache search SOFTWARE_NAME | grep SOFTWARE_NAME
  • 查询某款开源软件SOFTWARE的依赖:

    1
    sudo apt-cache depends SOFTWARE_NAME | grep Depends
  • 查询某款开源软件SOFTWARE被哪些软件依赖:

    1
    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…

  • Title: 常见开源软件和开源库的调用关系
  • Author: Zhiyu
  • Created at : 2020-11-16 17:29:03
  • Updated at : 2026-02-18 00:36:56
  • Link: https://qgrain.github.io/2020/11/16/常见开源软件和开源库的调用关系/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments