diff --git a/mythril/support/truffle.py b/mythril/support/truffle.py index 81b775f7..33a48ba3 100644 --- a/mythril/support/truffle.py +++ b/mythril/support/truffle.py @@ -6,6 +6,7 @@ from mythril.ether import util from mythril.ether.ethcontract import ETHContract from mythril.analysis.security import fire_lasers from mythril.analysis.symbolic import StateSpace +from mythril.analysis.report import Report from laser.ethereum import helper @@ -37,51 +38,51 @@ def analyze_truffle_project(): ethcontract= ETHContract(bytecode, name=name, address = util.get_indexed_address(0)) - contracts = [ethcontract] + states = StateSpace([ethcontract], max_depth = 10) + issues = fire_lasers(states) - states = StateSpace(contracts, max_depth = 10) - report = fire_lasers(states) + if not len(issues): + print("Analysis result for " + name + ": No issues found.") + + else: - # augment with source code + report = Report() + # augment with source code - disassembly = ethcontract.get_disassembly() - source = contractdata['source'] + disassembly = ethcontract.get_disassembly() + source = contractdata['source'] - deployedSourceMap = contractdata['deployedSourceMap'].split(";") + deployedSourceMap = contractdata['deployedSourceMap'].split(";") - mappings = [] - i = 0 + mappings = [] + i = 0 - while(i < len(deployedSourceMap)): + while(i < len(deployedSourceMap)): - m = re.search(r"^(\d+):*(\d+)", deployedSourceMap[i]) + m = re.search(r"^(\d+):*(\d+)", deployedSourceMap[i]) - if (m): - offset = m.group(1) - length = m.group(2) - else: - m = re.search(r"^:(\d+)", deployedSourceMap[i]) + if (m): + offset = m.group(1) + length = m.group(2) + else: + m = re.search(r"^:(\d+)", deployedSourceMap[i]) - if m: - length = m.group(1) + if m: + length = m.group(1) - mappings.append((int(offset), int(length))) + mappings.append((int(offset), int(length))) - i += 1 + i += 1 - for key, issue in report.issues.items(): + for issue in issues: - index = helper.get_instruction_index(disassembly.instruction_list, issue.pc) + index = helper.get_instruction_index(disassembly.instruction_list, issue.pc) - if index: - issue.code_start = mappings[index][0] - issue.code_length = mappings[index][1] - issue.code = source[mappings[index][0]: mappings[index][0] + mappings[index][1]] + if index: + issue.code_start = mappings[index][0] + issue.code_length = mappings[index][1] + issue.code = source[mappings[index][0]: mappings[index][0] + mappings[index][1]] + report.append_issue(issue) - if len(report.issues): print("Analysis result for " + name + ":\n" + report.as_text()) - else: - print("Analysis result for " + name + ": No issues found.") - -