Esempio n. 1
0
    def setUp(self):
        code = codecs.decode(
            "6003600302600f56601b60006000a15b6101a5600060"
            "00a160019003801515600f57600660006000a1",
            "hex",
        )
        env = Env(code)

        self.sm = sm.SymbolicMachine(env)
Esempio n. 2
0
    def setUp(self):
        self.env = Env(b"",
                       caller=utils.DEFAULT_CALLER,
                       address=utils.DEFAULT_ADDRESS)

        self.state = State(self.env)
        self.analyzer = Analyzer(
            address=self.env.address,
            caller=self.env.caller,
            max_wei_to_send=Web3.toWei(10, "ether"),
            min_wei_to_receive=Web3.toWei(1, "milliether"),
        )
    def test_with_new_env(self):
        env = Env(b"")
        state = State(env)

        storage_0 = claripy.BVS("storage[0]", 256)
        storage_1 = claripy.BVS("storage[0]", 256)
        storage_2 = claripy.BVS("storage[0]", 256)
        state.storage_read[utils.bvv(0)] = storage_0
        state.storage_read[utils.bvv(1)] = storage_1
        state.storage_read[utils.bvv(2)] = storage_2
        state.storage_written[utils.bvv(0)] = utils.bvv(0)
        state.storage_written[utils.bvv(1)] = utils.bvv(0)
        state.storage_written[utils.bvv(2)] = utils.bvv(0)

        state.calls.append([
            utils.bvv(1),
            storage_0 + storage_1 + storage_2,
            utils.bvv(2),
            5 * (storage_0 + storage_1 + storage_2),
        ])
        state.solver.add(storage_0 == 42)
        state.solver.add(storage_1 == 0)
        state.solver.add(storage_2 == 0)

        self.assertEqual(state.solver.eval(state.calls[0][1], 2), (42, ))

        for i in range(3):
            new_state = with_new_env(state)

            self.assertIsNot(state.env.value, new_state.env.value)
            self.assertIsNot(state.storage_read[utils.bvv(0)],
                             new_state.storage_read[utils.bvv(0)])
            self.assertIsNot(state.storage_read[utils.bvv(1)],
                             new_state.storage_read[utils.bvv(1)])
            self.assertIsNot(state.storage_read[utils.bvv(2)],
                             new_state.storage_read[utils.bvv(2)])

            self.assertNotEqual(new_state.solver.eval(state.calls[0][1], 2),
                                (42, ))
            self.assertEqual(new_state.solver.eval(new_state.calls[0][1], 2),
                             (42, ))
 def setUp(self):
     self.env = Env(b"", caller=utils.DEFAULT_CALLER, address=utils.DEFAULT_ADDRESS)
Esempio n. 5
0
 def run_code(self, code, env={}):
     code = bytes(code)
     self.sm = sm.SymbolicMachine(Env(code, **env))
     self.state = self.sm.branch_queue[0][1]
     return self.sm.exec_branch(self.state)
Esempio n. 6
0
 def outcomes(self, code, env={}):
     code = bytes(code)
     self.sm = sm.SymbolicMachine(Env(code, **env))
     self.sm.execute(timeout_sec=10)
     return self.sm.outcomes