mirror of https://github.com/ConsenSys/mythril
blockchainethereumsmart-contractssoliditysecurityprogram-analysissecurity-analysissymbolic-execution
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
13 KiB
152 lines
13 KiB
<html>
|
|
<head>
|
|
|
|
|
|
<style type="text/css">
|
|
#mynetwork {
|
|
background-color: #232625;
|
|
}
|
|
|
|
body {
|
|
background-color: #232625;
|
|
color: #ffffff;
|
|
font-size: 10px;
|
|
}
|
|
</style>
|
|
|
|
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" rel="stylesheet" type="text/css" />
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
|
|
<script>
|
|
|
|
|
|
var options = {
|
|
autoResize: true,
|
|
height: '100%',
|
|
width: '100%',
|
|
manipulation: false,
|
|
height: '90%',
|
|
layout: {
|
|
randomSeed: undefined,
|
|
improvedLayout:true,
|
|
hierarchical: {
|
|
enabled:true,
|
|
levelSeparation: 450,
|
|
nodeSpacing: 200,
|
|
treeSpacing: 100,
|
|
blockShifting: true,
|
|
edgeMinimization: true,
|
|
parentCentralization: false,
|
|
direction: 'LR', // UD, DU, LR, RL
|
|
sortMethod: 'directed' // hubsize, directed
|
|
}
|
|
},
|
|
nodes:{
|
|
borderWidth: 1,
|
|
borderWidthSelected: 2,
|
|
chosen: true,
|
|
shape: 'box',
|
|
font: {
|
|
align: 'left',
|
|
color: '#FFFFFF',
|
|
},
|
|
},
|
|
edges:{
|
|
font: {
|
|
color: '#ffffff',
|
|
size: 12, // px
|
|
face: 'arial',
|
|
background: 'none',
|
|
strokeWidth: 0, // px
|
|
strokeColor: '#ffffff',
|
|
align: 'horizontal',
|
|
multi: false,
|
|
vadjust: 0,
|
|
}
|
|
},
|
|
|
|
physics:{
|
|
enabled: false,
|
|
}
|
|
|
|
}
|
|
|
|
|
|
var nodes = [
|
|
{id: '126', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '76 JUMPDEST\n77 PUSH1 0x00\n79 DUP1\n80 REVERT\n', 'fullLabel': '76 JUMPDEST\n77 PUSH1 0x00\n79 DUP1\n80 REVERT\n', 'truncLabel': '76 JUMPDEST\n77 PUSH1 0x00\n79 DUP1\n80 REVERT\n', 'isExpanded': false},
|
|
{id: '131', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '100 JUMPDEST\n101 PUSH1 0x40\n103 MLOAD\n104 DUP1\n105 DUP3\n106 PUSH20 0xffffffff(...)\n(click to expand +)', 'fullLabel': '100 JUMPDEST\n101 PUSH1 0x40\n103 MLOAD\n104 DUP1\n105 DUP3\n106 PUSH20 0xffffffff(...)\n127 AND\n128 PUSH20 0xffffffff(...)\n149 AND\n150 DUP2\n151 MSTORE\n152 PUSH1 0x20\n154 ADD\n155 SWAP2\n156 POP\n157 POP\n158 PUSH1 0x40\n160 MLOAD\n161 DUP1\n162 SWAP2\n163 SUB\n164 SWAP1\n165 RETURN\n', 'truncLabel': '100 JUMPDEST\n101 PUSH1 0x40\n103 MLOAD\n104 DUP1\n105 DUP3\n106 PUSH20 0xffffffff(...)\n(click to expand +)', 'isExpanded': false},
|
|
{id: '130', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '223 JUMPDEST\n224 PUSH1 0x00\n226 DUP1\n227 SWAP1\n228 SLOAD\n229 SWAP1\n(click to expand +)', 'fullLabel': '223 JUMPDEST\n224 PUSH1 0x00\n226 DUP1\n227 SWAP1\n228 SLOAD\n229 SWAP1\n230 PUSH2 0x0100\n233 EXP\n234 SWAP1\n235 DIV\n236 PUSH20 0xffffffff(...)\n257 AND\n258 DUP2\n259 JUMP\n', 'truncLabel': '223 JUMPDEST\n224 PUSH1 0x00\n226 DUP1\n227 SWAP1\n228 SLOAD\n229 SWAP1\n(click to expand +)', 'isExpanded': false},
|
|
{id: '129', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '92 JUMPDEST\n93 PUSH2 0x0064\n96 PUSH2 0x00df\n99 JUMP\n', 'fullLabel': '92 JUMPDEST\n93 PUSH2 0x0064\n96 PUSH2 0x00df\n99 JUMP\n', 'truncLabel': '92 JUMPDEST\n93 PUSH2 0x0064\n96 PUSH2 0x00df\n99 JUMP\n', 'isExpanded': false},
|
|
{id: '132', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '88 PUSH1 0x00\n90 DUP1\n91 REVERT\n', 'fullLabel': '88 PUSH1 0x00\n90 DUP1\n91 REVERT\n', 'truncLabel': '88 PUSH1 0x00\n90 DUP1\n91 REVERT\n', 'isExpanded': false},
|
|
{id: '128', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '81 _function_0x8da5cb5b\n82 CALLVALUE\n83 ISZERO\n84 PUSH2 0x005c\n87 JUMPI\n', 'fullLabel': '81 _function_0x8da5cb5b\n82 CALLVALUE\n83 ISZERO\n84 PUSH2 0x005c\n87 JUMPI\n', 'truncLabel': '81 _function_0x8da5cb5b\n82 CALLVALUE\n83 ISZERO\n84 PUSH2 0x005c\n87 JUMPI\n', 'isExpanded': false},
|
|
{id: '139', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '221 JUMPDEST\n222 STOP\n', 'fullLabel': '221 JUMPDEST\n222 STOP\n', 'truncLabel': '221 JUMPDEST\n222 STOP\n', 'isExpanded': false},
|
|
{id: '138', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '470 JUMPDEST\n471 POP\n472 JUMP\n', 'fullLabel': '470 JUMPDEST\n471 POP\n472 JUMP\n', 'truncLabel': '470 JUMPDEST\n471 POP\n472 JUMP\n', 'isExpanded': false},
|
|
{id: '141', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '221 JUMPDEST\n222 STOP\n', 'fullLabel': '221 JUMPDEST\n222 STOP\n', 'truncLabel': '221 JUMPDEST\n222 STOP\n', 'isExpanded': false},
|
|
{id: '140', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '406 DUP1\n407 PUSH1 0x00\n409 DUP1\n410 PUSH2 0x0100\n413 EXP\n414 DUP2\n(click to expand +)', 'fullLabel': '406 DUP1\n407 PUSH1 0x00\n409 DUP1\n410 PUSH2 0x0100\n413 EXP\n414 DUP2\n415 SLOAD\n416 DUP2\n417 PUSH20 0xffffffff(...)\n438 MUL\n439 NOT\n440 AND\n441 SWAP1\n442 DUP4\n443 PUSH20 0xffffffff(...)\n464 AND\n465 MUL\n466 OR\n467 SWAP1\n468 SSTORE\n469 POP\n470 JUMPDEST\n471 POP\n472 JUMP\n', 'truncLabel': '406 DUP1\n407 PUSH1 0x00\n409 DUP1\n410 PUSH2 0x0100\n413 EXP\n414 DUP2\n(click to expand +)', 'isExpanded': false},
|
|
{id: '137', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '351 JUMPDEST\n352 PUSH1 0x00\n354 PUSH20 0xffffffff(...)\n375 AND\n376 DUP2\n377 PUSH20 0xffffffff(...)\n(click to expand +)', 'fullLabel': '351 JUMPDEST\n352 PUSH1 0x00\n354 PUSH20 0xffffffff(...)\n375 AND\n376 DUP2\n377 PUSH20 0xffffffff(...)\n398 AND\n399 EQ\n400 ISZERO\n401 ISZERO\n402 PUSH2 0x01d6\n405 JUMPI\n', 'truncLabel': '351 JUMPDEST\n352 PUSH1 0x00\n354 PUSH20 0xffffffff(...)\n375 AND\n376 DUP2\n377 PUSH20 0xffffffff(...)\n(click to expand +)', 'isExpanded': false},
|
|
{id: '142', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '347 PUSH1 0x00\n349 DUP1\n350 REVERT\n', 'fullLabel': '347 PUSH1 0x00\n349 DUP1\n350 REVERT\n', 'truncLabel': '347 PUSH1 0x00\n349 DUP1\n350 REVERT\n', 'isExpanded': false},
|
|
{id: '136', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '260 JUMPDEST\n261 PUSH1 0x00\n263 DUP1\n264 SWAP1\n265 SLOAD\n266 SWAP1\n(click to expand +)', 'fullLabel': '260 JUMPDEST\n261 PUSH1 0x00\n263 DUP1\n264 SWAP1\n265 SLOAD\n266 SWAP1\n267 PUSH2 0x0100\n270 EXP\n271 SWAP1\n272 DIV\n273 PUSH20 0xffffffff(...)\n294 AND\n295 PUSH20 0xffffffff(...)\n316 AND\n317 ORIGIN\n318 PUSH20 0xffffffff(...)\n339 AND\n340 EQ\n341 ISZERO\n342 ISZERO\n343 PUSH2 0x015f\n346 JUMPI\n', 'truncLabel': '260 JUMPDEST\n261 PUSH1 0x00\n263 DUP1\n264 SWAP1\n265 SLOAD\n266 SWAP1\n(click to expand +)', 'isExpanded': false},
|
|
{id: '135', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '177 JUMPDEST\n178 PUSH2 0x00dd\n181 PUSH1 0x04\n183 DUP1\n184 DUP1\n185 CALLDATALOAD\n(click to expand +)', 'fullLabel': '177 JUMPDEST\n178 PUSH2 0x00dd\n181 PUSH1 0x04\n183 DUP1\n184 DUP1\n185 CALLDATALOAD\n186 PUSH20 0xffffffff(...)\n207 AND\n208 SWAP1\n209 PUSH1 0x20\n211 ADD\n212 SWAP1\n213 SWAP2\n214 SWAP1\n215 POP\n216 POP\n217 PUSH2 0x0104\n220 JUMP\n', 'truncLabel': '177 JUMPDEST\n178 PUSH2 0x00dd\n181 PUSH1 0x04\n183 DUP1\n184 DUP1\n185 CALLDATALOAD\n(click to expand +)', 'isExpanded': false},
|
|
{id: '143', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '173 PUSH1 0x00\n175 DUP1\n176 REVERT\n', 'fullLabel': '173 PUSH1 0x00\n175 DUP1\n176 REVERT\n', 'truncLabel': '173 PUSH1 0x00\n175 DUP1\n176 REVERT\n', 'isExpanded': false},
|
|
{id: '134', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '166 transferOwnership(address)\n167 CALLVALUE\n168 ISZERO\n169 PUSH2 0x00b1\n172 JUMPI\n', 'fullLabel': '166 transferOwnership(address)\n167 CALLVALUE\n168 ISZERO\n169 PUSH2 0x00b1\n172 JUMPI\n', 'truncLabel': '166 transferOwnership(address)\n167 CALLVALUE\n168 ISZERO\n169 PUSH2 0x00b1\n172 JUMPI\n', 'isExpanded': false},
|
|
{id: '144', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '76 JUMPDEST\n77 PUSH1 0x00\n79 DUP1\n80 REVERT\n', 'fullLabel': '76 JUMPDEST\n77 PUSH1 0x00\n79 DUP1\n80 REVERT\n', 'truncLabel': '76 JUMPDEST\n77 PUSH1 0x00\n79 DUP1\n80 REVERT\n', 'isExpanded': false},
|
|
{id: '133', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '65 DUP1\n66 PUSH4 0xf2fde38b\n71 EQ\n72 PUSH2 0x00a6\n75 JUMPI\n', 'fullLabel': '65 DUP1\n66 PUSH4 0xf2fde38b\n71 EQ\n72 PUSH2 0x00a6\n75 JUMPI\n', 'truncLabel': '65 DUP1\n66 PUSH4 0xf2fde38b\n71 EQ\n72 PUSH2 0x00a6\n75 JUMPI\n', 'isExpanded': false},
|
|
{id: '127', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '13 PUSH1 0x00\n15 CALLDATALOAD\n16 PUSH29 0x01000000(...)\n46 SWAP1\n47 DIV\n48 PUSH4 0xffffffff\n(click to expand +)', 'fullLabel': '13 PUSH1 0x00\n15 CALLDATALOAD\n16 PUSH29 0x01000000(...)\n46 SWAP1\n47 DIV\n48 PUSH4 0xffffffff\n53 AND\n54 DUP1\n55 PUSH4 0x8da5cb5b\n60 EQ\n61 PUSH2 0x0051\n64 JUMPI\n', 'truncLabel': '13 PUSH1 0x00\n15 CALLDATALOAD\n16 PUSH29 0x01000000(...)\n46 SWAP1\n47 DIV\n48 PUSH4 0xffffffff\n(click to expand +)', 'isExpanded': false},
|
|
{id: '125', color: {border: '#26996f', background: '#2f7e5b', highlight: {border: '#26996f', background: '#28a16f'}}, size: 150, 'label': '0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n(click to expand +)', 'fullLabel': '0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n9 PUSH2 0x004c\n12 JUMPI\n', 'truncLabel': '0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n(click to expand +)', 'isExpanded': false}
|
|
];
|
|
var edges = [
|
|
{from: '125', to: '126', 'arrows': 'to', 'label': 'Not(ULE(4, calldatasize_Origin))', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '130', to: '131', 'arrows': 'to', 'label': '', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '129', to: '130', 'arrows': 'to', 'label': '', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '128', to: '129', 'arrows': 'to', 'label': 'callvalue == 0', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '128', to: '132', 'arrows': 'to', 'label': 'Not(callvalue == 0)', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '127', to: '128', 'arrows': 'to', 'label': 'Extract(0xff, 0xe0, calldata_Origin_0) == 0x8da5cb5b', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '138', to: '139', 'arrows': 'to', 'label': '', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '137', to: '138', 'arrows': 'to', 'label': 'Extract(0x9f, 0, calldata_Origin_4) == 0', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '140', to: '141', 'arrows': 'to', 'label': '', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '137', to: '140', 'arrows': 'to', 'label': 'Not(Extract(0x9f, 0, calldata_Origin_4) == 0)', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '136', to: '137', 'arrows': 'to', 'label': 'Extract(0x9f, 0, origin) == Extract(0xa7, 8, storage_0)', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '136', to: '142', 'arrows': 'to', 'label': 'Not(Extract(0x9f, 0, origin) == Extract(0xa7, 8, storage_0))', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '135', to: '136', 'arrows': 'to', 'label': '', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '134', to: '135', 'arrows': 'to', 'label': 'callvalue == 0', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '134', to: '143', 'arrows': 'to', 'label': 'Not(callvalue == 0)', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '133', to: '134', 'arrows': 'to', 'label': 'Extract(0xff, 0xe0, calldata_Origin_0) == 0xf2fde38b', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '133', to: '144', 'arrows': 'to', 'label': 'Not(Extract(0xff, 0xe0, calldata_Origin_0) == 0xf2fde38b)', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '127', to: '133', 'arrows': 'to', 'label': 'Not(Extract(0xff, 0xe0, calldata_Origin_0) == 0x8da5cb5b)', 'smooth': {'type': 'cubicBezier'}},
|
|
{from: '125', to: '127', 'arrows': 'to', 'label': 'ULE(4, calldatasize_Origin)', 'smooth': {'type': 'cubicBezier'}}
|
|
];
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<p>Mythril / LASER Symbolic VM</p>
|
|
<p><div id="mynetwork"></div><br/></p>
|
|
<script type="text/javascript">
|
|
var container = document.getElementById('mynetwork');
|
|
|
|
var nodesSet = new vis.DataSet(nodes);
|
|
var edgesSet = new vis.DataSet(edges);
|
|
var data = {'nodes': nodesSet, 'edges': edgesSet}
|
|
|
|
var gph = new vis.Network(container, data, options);
|
|
gph.on("click", function (params) {
|
|
// parse node id
|
|
var nodeID = params['nodes']['0'];
|
|
if (nodeID) {
|
|
var clickedNode = nodesSet.get(nodeID);
|
|
|
|
if(clickedNode.isExpanded) {
|
|
clickedNode.label = clickedNode.truncLabel;
|
|
}
|
|
else {
|
|
clickedNode.label = clickedNode.fullLabel;
|
|
}
|
|
|
|
clickedNode.isExpanded = !clickedNode.isExpanded;
|
|
|
|
nodesSet.update(clickedNode);
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|