Merge branch 'develop' into pruning_fix_2

pull/1107/head
Bernhard Mueller 5 years ago committed by GitHub
commit f60d5156d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 30
      mythril/analysis/report.py
  2. 15
      mythril/analysis/templates/report_as_markdown.jinja2
  3. 11
      mythril/analysis/templates/report_as_text.jinja2
  4. 6
      mythril/interfaces/cli.py
  5. 4
      mythril/mythril/mythril_analyzer.py

@ -67,19 +67,12 @@ class Issue:
@property
def transaction_sequence_users(self):
""" Returns the transaction sequence in json without pre-generated block data"""
return (
json.dumps(self.transaction_sequence, indent=4)
if self.transaction_sequence
else None
)
""" Returns the transaction sequence without pre-generated block data"""
return self.transaction_sequence
@property
def transaction_sequence_jsonv2(self):
"""
Returns the transaction sequence with pre-generated block data.
Jsonv2 tx sequence isn't formatted for user readability.
"""
""" Returns the transaction sequence as a json string with pre-generated block data"""
return (
self.add_block_data(self.transaction_sequence)
if self.transaction_sequence
@ -105,6 +98,7 @@ class Issue:
:return:
"""
issue = {
"title": self.title,
"swc-id": self.swc_id,
@ -113,7 +107,7 @@ class Issue:
"function": self.function,
"severity": self.severity,
"address": self.address,
"tx_sequence": self.transaction_sequence_users,
"tx_sequence": self.transaction_sequence,
"min_gas_used": self.min_gas_used,
"max_gas_used": self.max_gas_used,
"sourceMap": self.source_mapping,
@ -165,13 +159,13 @@ class Report:
loader=PackageLoader("mythril.analysis"), trim_blocks=True
)
def __init__(self, verbose=False, contracts=None, exceptions=None):
def __init__(self, contracts=None, exceptions=None):
"""
:param verbose:
:param contracts:
:param exceptions:
"""
self.issues = {}
self.verbose = verbose
self.solc_version = ""
self.meta = {}
self.source = Source()
@ -203,9 +197,7 @@ class Report:
name = self._file_name()
template = Report.environment.get_template("report_as_text.jinja2")
return template.render(
filename=name, issues=self.sorted_issues(), verbose=self.verbose
)
return template.render(filename=name, issues=self.sorted_issues())
def as_json(self):
"""
@ -274,9 +266,7 @@ class Report:
"""
filename = self._file_name()
template = Report.environment.get_template("report_as_markdown.jinja2")
return template.render(
filename=filename, issues=self.sorted_issues(), verbose=self.verbose
)
return template.render(filename=filename, issues=self.sorted_issues())
def _file_name(self):
"""

@ -24,15 +24,20 @@ In file: {{ issue.filename }}:{{ issue.lineno }}
{{ issue.code }}
```
{% endif %}
{% if verbose and issue.tx_sequence %}
--------------------
### Debugging Information:
{% if issue.tx_sequence %}
{{ issue.tx_sequence }}
### Transaction Sequence
{% for step in issue.tx_sequence.steps %}
{% if step == issue.tx_sequence.steps[0] and step.input != "0x" and step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}
Caller: [CREATOR], data: [CONTRACT CREATION], value: {{ step.value }}
{% else %}
Caller: {% if step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}[CREATOR]{% elif step.origin == "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" %}[ATTACKER]{% else %}[SOMEGUY]{% endif %}, data: {{ step.input }}, value: {{ step.value }}
{% endif %}
{% endfor %}
{% else %}
{% endif %}
{% endfor %}
{% else %}
The analysis was completed successfully. No issues were detected.
{% endif %}

@ -18,11 +18,16 @@ In file: {{ issue.filename }}:{{ issue.lineno }}
--------------------
{% endif %}
{% if verbose and issue.tx_sequence %}
--------------------
{% if issue.tx_sequence %}
Transaction Sequence:
{{ issue.tx_sequence }}
{% for step in issue.tx_sequence.steps %}
{% if step == issue.tx_sequence.steps[0] and step.input != "0x" and step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}
Caller: [CREATOR], data: [CONTRACT CREATION], value: {{ step.value }}
{% else %}
Caller: {% if step.origin == "0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe" %}[CREATOR]{% elif step.origin == "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" %}[ATTACKER]{% else %}[SOMEGUY]{% endif %}, data: {{ step.input }}, value: {{ step.value }}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

@ -119,11 +119,6 @@ def get_output_parser() -> ArgumentParser:
help="report output format",
metavar="<text/markdown/json/jsonv2>",
)
parser.add_argument(
"--verbose-report",
action="store_true",
help="Include debugging information in report",
)
return parser
@ -599,7 +594,6 @@ def execute_command(
modules=[m.strip() for m in args.modules.strip().split(",")]
if args.modules
else [],
verbose_report=args.verbose_report,
transaction_count=args.transaction_count,
)
outputs = {

@ -122,12 +122,10 @@ class MythrilAnalyzer:
def fire_lasers(
self,
modules: Optional[List[str]] = None,
verbose_report: bool = False,
transaction_count: Optional[int] = None,
) -> Report:
"""
:param modules: The analysis modules which should be executed
:param verbose_report: Gives out the transaction sequence of the vulnerability
:param transaction_count: The amount of transactions to be executed
:return: The Report class which contains the all the issues/vulnerabilities
"""
@ -177,7 +175,7 @@ class MythrilAnalyzer:
source_data = Source()
source_data.get_source_from_contracts_list(self.contracts)
# Finally, output the results
report = Report(verbose_report, contracts=self.contracts, exceptions=exceptions)
report = Report(contracts=self.contracts, exceptions=exceptions)
for issue in all_issues:
report.append_issue(issue)

Loading…
Cancel
Save