The format is based on Keep a Changelog.
In this release, the codebase has been relicensed under the AGPLv3 license. Please contact us if you're looking for an exception to these terms!
Thanks to our external contributors!
- Full suite of Ethereum detectors
- Selfdestruct (
--detect-selfdestruct
): Warns if a selfdestruct instruction is reachable by the user - Ether Leak (
--detect-externalcall
): Warns if there is a call to the user, or a user controlled address, and ether can be sent. - External Call (
--detect-externalcall
): Warns if there is a call to the user, or a user controlled address. - Reentrancy (
--detect-reentrancy
): Warns if there is a change of storage state after a call to the user, or a user controlled address, with >2300 gas. This is an alternate implementation enabled in the CLI. The previous implementation is still available for API use (DetectReentrancyAdvanced
). - Delegatecall (
--detect-delegatecall
): Warns if there is a delegatecall to a user controlled address, or to a user controlled function. - Environmental Instructions (
--detect-env
): Warns if certain instructions are used that can be potentially manipulated. Instructions: BLOCKHASH, COINBASE, TIMESTAMP, NUMBER, DIFFICULTY, GASLIMIT, ORIGIN, GASPRICE.
- Selfdestruct (
- New Ethereum command line flags
--no-testcases
: Do not generate testcases for discovered states--txnoether
: Do not make the transaction value symbolic in executed transactions
- SMTLIB: Advanced functionality for expression migration. Expressions from arbitrary constraint sets can be mixed to create arbitrary constraints, expressions are transparently migrated from constraint set to another, avoiding SMT naming collisions.
- Command line interface uses new reentrancy detector based on detection of user controlled call addresses
- Ethereum: Support for overloaded solidity functions
- Ethereum: Significantly improved ability to create symbolic variables and constraints at the global level
- Ethereum: Improved gas support
- State serialization improvements and fixes
In this release, the codebase has been ported to Python 3.6, which is a breaking change for API clients. Beginning with 0.2.0, client programs of Manticore must be compatible with Python 3.6.
Thanks to our external contributors!
- Ethereum: More flexibility for Solidity compilation toolchains
- Ethereum: Detectors for unused return value, reentrancy
- Ethereum: Support for Solidity
bytesM
andbytes
types - Ethereum: Beta API for preconstraining inputs (
ManticoreEVM.constrain
) - Improved performance for smtlib module
- Ability to transparently operate on bytearray and symbolic buffer (ArrayProxy) types (e.g: concatenate, slice)
- Codebase has been entirely ported to Python 3.6+
- Ethereum:
ManticoreEVM.make_symbolic_value()
can be size adjustable - Ethereum: Ethereum ABI (
manticore.ethereum.ABI
) API refactor, including real Solidity prototype parser - Ethereum: Improved APIs for accessing transaction history
- Ethereum: Significant internal refactor
- Linux: Bugs related to handling of closed files
- Ethereum: Handling of symbolic callers/addresses
- Ethereum: Handling of gas handling on CALL instructions
- Various smtlib/expression fixes
- Support for Python 2
- EVM disassembler/assembler module (EVMAsm) has been removed and separately released as pyevmasm
- Experimental support for Binary Ninja IL emulation
Thanks to our external contributors!
- ARM: New instructions to better support Raspberry Pi binaries (UTXH, UQSUB8)
- Linux: Can use
--env
andLD_LIBRARY_PATH
to specify alternate ELF interpreter locations for dynamic binaries - Linux: Partial chroot(2) and fork(2) models
- Initial support for NetBSD hosts
- Ethereum:
--avoid-constant
cli argument to enable heuristics to avoid unnecessary exploration of constant functions
- Ethereum detectors are now opt-in, via cli flags:
--detect-overflow
,--detect-invalid
,--detect-uninitialized-memory
,--detect-uninitialized-storage
,--detect-all
- Ethereum: Complete internal refactor.
- Model memory using smtlib arrays to better support symbolic indexing
- Numerous internal API improvements
- Better symbolic gas support
- More advanced overflow detection heuristics
- Account names, scripts can assign names to accounts or contracts
- Better ABI serializer/deserializer for canonical types, supports tuples/structs and recursive types
- State list iterations improvements, modifications to state persist
- Symbolic caller, address, value and data in transactions
- Linux: Generate concretized file content for symbolic files
- Linux: Fixes in various syscall models (brk, stat*), and miscellaneous fixes
- Ethereum: Inaccurate transaction history in some cases
Thanks to our external contributors!
- Ethereum:
--txnocoverage
cli argument to suppress coverage based analysis halting criteria - Ethereum: Support added for more Solidity features (imports, uint/int types, function types)
- Numerous Ethereum ABI fixes
- Linux and x86/64 emulation fixes
- Solver performance issue
Thanks to our external contributors!
- Ethereum:
--txaccount
cli argument to control caller of transaction - Ethereum: Per state execution trace files in workspace
- Linux:
--data
cli argument to specify concrete stdin - Numerous Ethereum fixes and stability improvements
- Fixes for native cpu emulation
This release brings EVM, performance, Linux emulation, and API improvements, along with numerous bug fixes. Thanks again to our external contributors!
- Documentation on symbolic input
- "force" keyword argument in
cpu.write_bytes/read_bytes
etc. - Linux syscalls: getrandom(), openat()
- Improved ARMv7 Thumb support
- Numerous EVM bug fixes and improvements (transaction generation, SHA3 handling, instruction tracing, int overflow detection)
- Improved x86/64 emulation performance
This release brings improved EVM support, performance improvements, and numerous bug fixes. Thanks to our external contributors!
- cole-lightfighter
- arunjohnkuruvilla
- Srinivas11789
- sidhant-gupta-004
- roachspray
- dbogs425
- HighW4y2H3ll
- chowdaryd
- Ethereum support in the command line (Solidity files)
- --version, --txlimit flags to command line
- x86/64: Improved support for PCMPXSTRX instruction family
- Ethereum EVM assembly/disassembly APIs
- Workspace .txt file extension changed to .input
- Ethereum EVM analysis APIs
- Deserializing Linux states with special files (/dev) opened
- Redundant forking performance issue fixed
- Various bugfixes in Decree, Linux, ARMv7 Thumb, Unicorn fallback emulation, Z3 Solver interface
Thanks to our external contributors to this release!
Manticore('binary', ['arg1', 'arg2'])
style initialization. Use new class methods (see below).
- Platform-specific class methods for Manticore initialization
- e.g.
Manticore.linux('binary', ['arg1', 'arg2'])
- e.g.
Manticore.init
analysis initialization hook- Linux: Various new syscall support, including basic TCP socket support
- Core: An updated plugin infrastructure
- [Experimental] Support for symbolic execution of Ethereum Virtual Machine bytecode
Manticore.verbosity
: logging preset levels interface is now a static method, replacingm.verbosity
property- Logger output is slightly modified to be more Pythonic
- Numerous bugfixes and refactors
- Linux: stderr file is generated in workspace
- Requirement of external z3 binary installation (z3 installation occurs automatically now via pip)
Manticore.locked_context()
(safe parallel context access)State.generate_testcase()
(arbitrary testcase generation from hooks)- Documentation on gotchas
- Command line interface support for symbolic files (
--file
) (thanks 251!) - [Experimental]
State.context['branches']
(States track symbolic branches) - [Experimental] Support for emulation of Binary Ninja IL
- Taint parameters added to
State.new_symbolic_buffer()
andState.symbolicate_buffer()
(thanks ehennenfent!) - Improved support for ARM binaries
Manticore.verbosity
logging preset levels
- Numerous bugfixes
- Fixed workspace error message bug (thanks chowdaryd!)
- Fixed double workspace bug
- [Experimental]
State.generate_inputs()
(superseded byState.generate_testcase()
)
- Support for Redis as a storage backend, plus an API for user-defined serializers and storage backends
- "Events" which work as global signals for communication across Manticore
- Support for using Binary Ninja for visualization
- Executor now provides a global shared context
- State now provides a local context
- Refactored Executor and everything it talks to significantly
- Some older APIs may be broken or removed by the above refactor (
state.co
is no more, for instance)
- Numerous bugfixes and stability improvements in logging, Windows, x86, Linux
- Function modeling API (
state.invoke_model()
,manticore.variadic
) strcmp
andstrlen
modelsstate.solve_buffer()
- Additional
state
APIs - Support for ARMv7 Thumb mode
- Parallel processing API (
m.run(procs)
) state.solve_n()
- Numerous fixes in Linux, x86, ARM, SMT
- pip installation no longer requires
--no-binary capstone
State.constrain
- Command line verbosity:
--verbose
->-v
(up to-vvvv
)
- Linux platform fixes: syscalls, ELF loading
- x86 and ARM fixes
Initial public release.