-
Notifications
You must be signed in to change notification settings - Fork 1k
/
ui_api.py
59 lines (46 loc) · 1.61 KB
/
ui_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python
from spyne.decorator import srpc
from spyne.model.primitive import Unicode, Integer, String
from spyne.model.complex import Iterable, ComplexModel
from spyne.model.binary import File, ByteArray
from spyne.protocol.http import HttpRpc
from spyne.protocol.json import JsonDocument
from jsonp import JsonP
from spyne.service import ServiceBase
from spyne.application import Application
import binary
import standard_logging
binaries = { }
class AngrAPI(ServiceBase):
__tns__ = "ucsb.angr.ui"
@srpc(String, String, _returns=String)
def load_binary(bin_name, filename):
if bin_name in binaries:
return "already loaded"
binaries[bin_name] = binary.Binary(filename)
return "success"
@srpc(String, _returns=Iterable(String))
def list_functions(bin_name):
funcs = [ f.name for f in binaries[bin_name].functions().values() ]
print funcs
return funcs
@srpc(String, String, String, _returns=String)
def name_function(bin_name, func_addr, new_name):
binaries[bin_name].functions()[func_addr].name = new_name
return "success"
@srpc(_returns=Iterable(String))
def list_binaries():
return binaries.keys()
@classmethod
def dispatch(cls):
application = Application([cls], tns=cls.__tns__, in_protocol=HttpRpc(validator="soft"), out_protocol=JsonP())
return application
if __name__ == "__main__":
angr_interface = AngrAPI.dispatch()
from spyne.server.twisted import TwistedWebResource
from twisted.internet import reactor
from twisted.web.server import Site
angr_resource = TwistedWebResource(angr_interface)
angr_site = Site(angr_resource)
reactor.listenTCP(5000, angr_site)
reactor.run()