forked from sigttou/analyzecrypt.py
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheval_results.py
83 lines (69 loc) · 2.31 KB
/
eval_results.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python2
import sys
import json
from os import listdir, path
from pwn import log
PATH = "results/"
def main(target, funcname):
global PATH
PATH += target + '/'
runs = [PATH + x + '/' for x in listdir(PATH) if path.isdir(PATH + x)]
runnr = len(runs)
log.info("Analyzing {} all {} runs of {}".format(funcname, runnr, target))
all_params = []
for r in runs:
parameters = {}
funfile = r + funcname + '.dat'
if not path.isfile(funfile):
log.info("{} not found in {}".format(funcname, r))
continue
with open(funfile) as f:
content = f.readlines()
for l in content:
info = json.loads(l)
p_names = [x["name"] for x in info["parameters"]]
if not p_names:
continue
for p in info["parameters"]:
if p["name"] not in parameters:
parameters[p["name"]] = []
parameters[p["name"]].append(p["content"])
find_dub(parameters)
all_params.append(parameters)
find_dub_all(all_params)
def find_dub(params):
for p in params:
tocheck = []
for x in params[p]:
tocheck.append(x)
if len(tocheck) != len(set(tocheck)):
log.warn("Same {} found in same run!".format(p))
def find_dub_all(params):
ps = [p for p in params]
all_keys = []
for p in ps:
all_keys += p.keys()
all_keys = list(set(all_keys))
for key in all_keys:
index = 0
for param in params:
tocheck = params[:index] + params[index+1:]
listing = []
for c in tocheck:
if c.get(key):
listing.append(c[key])
# If you think hard enough, this makes sense:
listing = [i for j in listing for i in j]
if params[index].get(key):
for x in params[index][key]:
if x in listing:
log.warn("Same {} found in different runs".format(key))
index = index + 1
if __name__ == '__main__':
if len(sys.argv) != 3:
try:
log.error("Usage: %s <process name or PID> <function name>" %
__file__)
except:
sys.exit(-1)
main(sys.argv[1], sys.argv[2])