Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Mar 2020 09:13:36 +0000 (UTC)
From:      Mateusz Piotrowski <0mp@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r528280 - in head/security: . py-angr py-angr/files
Message-ID:  <202003120913.02C9Da6P059664@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: 0mp
Date: Thu Mar 12 09:13:35 2020
New Revision: 528280
URL: https://svnweb.freebsd.org/changeset/ports/528280

Log:
  New port: security/py-angr
  
  angr is a platform-agnostic binary analysis framework in a form of a suite
  of Python 3 libraries that let you load a binary and do a lot of cool
  things to it:
  
  - Disassembly and intermediate-representation lifting
  - Program instrumentation
  - Symbolic execution
  - Control-flow analysis
  - Data-dependency analysis
  - Value-set analysis (VSA)
  - Decompilation
  
  The most common angr operation is loading a binary:
  
      p = angr.Project('/bin/bash')
  
  If you do this in an enhanced REPL like IPython, you can use
  tab-autocomplete to browse the top-level-accessible methods and their
  docstrings.
  
  angr is brought to you by the Computer Security Lab at UC Santa Barbara,
  SEFCOM at Arizona State University, their associated CTF team, Shellphish,
  the open source community, and @rhelmot.
  
  WWW: https://github.com/angr/angr
  
  PR:		244562
  Requested by:	lwhsu@ (via wiki.freebsd.org/WantedPorts)
  Reviewed by:	kaktus (local patches for native_log.c)
  Differential Revision:	https://reviews.freebsd.org/D23935

Added:
  head/security/py-angr/
  head/security/py-angr/Makefile   (contents, props changed)
  head/security/py-angr/distinfo   (contents, props changed)
  head/security/py-angr/files/
  head/security/py-angr/files/patch-native_Makefile   (contents, props changed)
  head/security/py-angr/files/patch-native_log.c   (contents, props changed)
  head/security/py-angr/files/patch-setup.py   (contents, props changed)
  head/security/py-angr/pkg-descr   (contents, props changed)
Modified:
  head/security/Makefile

Modified: head/security/Makefile
==============================================================================
--- head/security/Makefile	Thu Mar 12 09:03:04 2020	(r528279)
+++ head/security/Makefile	Thu Mar 12 09:13:35 2020	(r528280)
@@ -844,6 +844,7 @@
     SUBDIR += py-acme
     SUBDIR += py-acme-tiny
     SUBDIR += py-ailment
+    SUBDIR += py-angr
     SUBDIR += py-argon2-cffi
     SUBDIR += py-artifacts
     SUBDIR += py-asyncssh

Added: head/security/py-angr/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/py-angr/Makefile	Thu Mar 12 09:13:35 2020	(r528280)
@@ -0,0 +1,97 @@
+# $FreeBSD$
+
+PORTNAME=	angr
+DISTVERSION=	8.20.1.7
+CATEGORIES=	security devel python
+MASTER_SITES=	CHEESESHOP
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+DISTFILES=	${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER=	0mp@FreeBSD.org
+COMMENT=	Multi-architecture binary analysis toolkit
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pyvex>=${DISTVERSION}:security/py-pyvex@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}unicorn>0:emulators/py-unicorn@${PY_FLAVOR}
+LIB_DEPENDS=	libunicorn.so:emulators/unicorn
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}ailment>=${DISTVERSION}:security/py-ailment@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}cachetools>=0:devel/py-cachetools@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}capstone>=3.0.5:devel/py-capstone@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}cffi>=1.7.0:devel/py-cffi@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}claripy>=${DISTVERSION}:math/py-claripy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}cle>=${DISTVERSION}:devel/py-cle@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dpkt>=0:net/py-dpkt@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}GitPython>=0:devel/py-gitpython@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}itanium_demangler>=0:devel/py-itanium_demangler@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}mulpyplexer>=0:devel/py-mulpyplexer@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}networkx>=2.0:math/py-networkx@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}progressbar2>=0:misc/py-progressbar2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}protobuf>=0:devel/py-protobuf@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}psutil>=0:sysutils/py-psutil@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pycparser>2.18:devel/py-pycparser@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}rpyc>0:devel/py-RPyC@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}sortedcontainers>=0:devel/py-sortedcontainers@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}nose>=0:devel/py-nose@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}keystone-engine>=0:devel/py-keystone-engine@${PY_FLAVOR} \
+		z3>=0:math/z3
+
+USES=		gmake localbase python:3.5+
+USE_GITHUB=	nodefault
+GH_TUPLE=	${PORTNAME}:${PORTNAME}:6b1a0825cbe156e2d32c577ba47ff50920f005aa:tests \
+		${PORTNAME}:binaries:f2de6d7a0474d22130ffadd042327536a6fda114:binaries
+USE_PYTHON=	autoplist distutils
+
+TEST_ENV=	${MAKE_ENV} NOSE_EXCLUDE="${_NOSE_EXCLUDE}"
+
+# Problem: the following tests require PySoot: https://github.com/angr/pysoot
+_EXCLUDED_TESTS+=	test_simple1
+_EXCLUDED_TESTS+=	test_simple2
+_EXCLUDED_TESTS+=	test_fauxware
+_EXCLUDED_TESTS+=	test_cmd_line_args
+_EXCLUDED_TESTS+=	test_jni_version_information
+_EXCLUDED_TESTS+=	test_jni_global_and_local_refs
+_EXCLUDED_TESTS+=	test_jni_object_operations
+_EXCLUDED_TESTS+=	test_jni_string_operations
+_EXCLUDED_TESTS+=	test_jni_field_access
+_EXCLUDED_TESTS+=	test_jni_method_calls
+_EXCLUDED_TESTS+=	test_jni_primitive_datatypes
+_EXCLUDED_TESTS+=	test_jni_object_arrays
+_EXCLUDED_TESTS+=	test_jni_array_operations
+_EXCLUDED_TESTS+=	test_method_calls
+_EXCLUDED_TESTS+=	test_array_operations
+_EXCLUDED_TESTS+=	test_multiarray_operations
+_EXCLUDED_TESTS+=	test_loading
+_EXCLUDED_TESTS+=	test_toggling_of_simstate
+# Problem: "TypeError: %d format: a number is required, not NoneType"
+_EXCLUDED_TESTS+=	test_fastmem.*
+# Problem: "angr.errors.AngrIncongruencyError: Different constraints!"
+_EXCLUDED_TESTS+=	test_similarity_fauxware
+# Problem: "IndexError: list index out of range"
+_EXCLUDED_TESTS+=	test_self_modifying_code
+# Problem: "Exception: Not a valid binary file: '/bin/false'"
+_EXCLUDED_TESTS+=	test_project
+
+# Create a regular expression out of the excluded tests.
+_NOSE_EXCLUDE=	(${_EXCLUDED_TESTS:S, ,|,gW})
+
+post-patch:
+	@${REINPLACE_CMD} -e 's|%%CC%%|${CC}|g' \
+		-e 's|%%CXX%%|${CXX}|g' \
+		-e 's|%%CFLAGS%%|${CFLAGS}|g' \
+		-e 's|%%LDFLAGS%%|${LDFLAGS}|g' \
+		-e 's|%%LIBS%%|${LIBS}|g' \
+		${WRKSRC}/native/Makefile
+
+post-install:
+	@${STRIP_CMD} ${STAGEDIR}${PYTHON_SITELIBDIR}/${PORTNAME}/lib/angr_native.so
+
+pre-test:
+	@${LN} -Fs ${WRKSRC_tests}/tests ${WRKSRC}/tests
+	@${LN} -Fs ${WRKSRC_binaries} ${WRKDIR}/binaries
+
+do-test:
+	@(cd ${WRKSRC}/tests && ${SETENV} ${TEST_ENV} nosetests-${PYTHON_VER} -v)
+
+.include <bsd.port.mk>

Added: head/security/py-angr/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/py-angr/distinfo	Thu Mar 12 09:13:35 2020	(r528280)
@@ -0,0 +1,7 @@
+TIMESTAMP = 1583576024
+SHA256 (angr-8.20.1.7.tar.gz) = f6c67806240b5ee5e309ec7565ef756107afb11f62d5424e474e0b0cc0637cea
+SIZE (angr-8.20.1.7.tar.gz) = 894100
+SHA256 (angr-angr-6b1a0825cbe156e2d32c577ba47ff50920f005aa_GH0.tar.gz) = ff0156bd839d02ad4b11351cf5747b59b9a419f58ca79ef4ab4ab49bab197925
+SIZE (angr-angr-6b1a0825cbe156e2d32c577ba47ff50920f005aa_GH0.tar.gz) = 1228522
+SHA256 (angr-binaries-f2de6d7a0474d22130ffadd042327536a6fda114_GH0.tar.gz) = 7bdc710d10db37d3105038eb4efda1b39e9d1149ecfaf35b1157381fe7275a4a
+SIZE (angr-binaries-f2de6d7a0474d22130ffadd042327536a6fda114_GH0.tar.gz) = 56385140

Added: head/security/py-angr/files/patch-native_Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/py-angr/files/patch-native_Makefile	Thu Mar 12 09:13:35 2020	(r528280)
@@ -0,0 +1,24 @@
+--- native/Makefile.orig	2020-03-02 20:56:13 UTC
++++ native/Makefile
+@@ -2,15 +2,18 @@ UNAME := $(shell uname)
+ ifeq ($(UNAME), Darwin)
+ 	LIB_ANGR_NATIVE=angr_native.dylib
+ endif
++ifeq ($(UNAME), FreeBSD)
++	LIB_ANGR_NATIVE=angr_native.so
++endif
+ ifeq ($(UNAME), Linux)
+ 	LIB_ANGR_NATIVE=angr_native.so
+ endif
+ 
+-CC := gcc
+-C++C := g++
++CC := %%CC%%
++C++C := %%CXX%%
+ CFLAGS := -I "${UNICORN_INCLUDE_PATH}" -I "${PYVEX_INCLUDE_PATH}" \
+ 	-L "${UNICORN_LIB_PATH}" -L "${PYVEX_LIB_PATH}" \
+-	-O3 -fPIC -std=c++11
++	%%CFLAGS%% %%LDFLAGS%% %%LIBS%% -fPIC -std=c++11
+ ifneq ($(DEBUG), )
+ 	CFLAGS := $(CFLAGS) -O0 -g
+ endif

Added: head/security/py-angr/files/patch-native_log.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/py-angr/files/patch-native_log.c	Thu Mar 12 09:13:35 2020	(r528280)
@@ -0,0 +1,24 @@
+--- native/log.c.orig	2019-04-16 21:08:57 UTC
++++ native/log.c
+@@ -34,6 +34,9 @@
+ #include <unistd.h>
+ 
+ #include <sys/syscall.h>
++#ifdef __FreeBSD__
++#include <pthread_np.h>
++#endif
+ 
+ static int log_fd = STDERR_FILENO;
+ static bool log_fd_isatty = true;
+@@ -107,7 +110,11 @@ void logLog(enum llevel_t ll, const char *fn, int ln, 
+         dprintf(log_fd, "%s", logLevels[ll].prefix);
+     }
+     if (logLevels[ll].print_funcline) {
++#ifdef __FreeBSD__
++        dprintf(log_fd, "[%s][%s][%d] %s():%d ", timestr, logLevels[ll].descr, (pid_t)pthread_getthreadid_np, fn, ln);
++#else
+         dprintf(log_fd, "[%s][%s][%d] %s():%d ", timestr, logLevels[ll].descr, (pid_t)syscall(__NR_gettid), fn, ln);
++#endif
+     }
+ 
+     va_list args;

Added: head/security/py-angr/files/patch-setup.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/py-angr/files/patch-setup.py	Thu Mar 12 09:13:35 2020	(r528280)
@@ -0,0 +1,11 @@
+--- setup.py.orig	2020-03-02 20:55:10 UTC
++++ setup.py
+@@ -68,7 +68,7 @@ def _build_native():
+             pass
+ 
+     cmd1 = ['nmake', '/f', 'Makefile-win']
+-    cmd2 = ['make']
++    cmd2 = ['gmake']
+     for cmd in (cmd1, cmd2):
+         try:
+             if subprocess.call(cmd, cwd='native', env=env) != 0:

Added: head/security/py-angr/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/py-angr/pkg-descr	Thu Mar 12 09:13:35 2020	(r528280)
@@ -0,0 +1,24 @@
+angr is a platform-agnostic binary analysis framework in a form of a suite
+of Python 3 libraries that let you load a binary and do a lot of cool things
+to it:
+
+- Disassembly and intermediate-representation lifting
+- Program instrumentation
+- Symbolic execution
+- Control-flow analysis
+- Data-dependency analysis
+- Value-set analysis (VSA)
+- Decompilation
+
+The most common angr operation is loading a binary:
+
+    p = angr.Project('/bin/bash')
+
+If you do this in an enhanced REPL like IPython, you can use tab-autocomplete
+to browse the top-level-accessible methods and their docstrings.
+
+angr is brought to you by the Computer Security Lab at UC Santa Barbara, SEFCOM
+at Arizona State University, their associated CTF team, Shellphish, the open
+source community, and @rhelmot.
+
+WWW: https://github.com/angr/angr



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202003120913.02C9Da6P059664>