-
Notifications
You must be signed in to change notification settings - Fork 4
/
droidboxOutputsManaging.py
96 lines (71 loc) · 3.04 KB
/
droidboxOutputsManaging.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
84
85
86
87
88
89
90
91
92
93
94
95
96
import sys
from argparse import RawTextHelpFormatter
import argparse
from os import listdir
import re
import better_exceptions
import os
import shutil
import ntpath
import time
from os.path import join as join_dir
from tqdm import tqdm
import os.path
OUTPUT_FOLDER_OLD_FILES = "straceTXT/"
def main():
parser = argparse.ArgumentParser(
description="Strace parser",
formatter_class=RawTextHelpFormatter)
parser.add_argument('-s', '--source', help='Source directory for droidbox output files', required=True)
parser.add_argument('-o', '--output', help='Output directory for droidbox analysis files in JSON', required=True)
parser.add_argument('-str', '--outputStrace', help='Output directory for strace output files converted', required=True)
parser.add_argument('-other', '--otherFiles', help='Output directory for other files', required=True)
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
args = parser.parse_args()
parse_droidbox_outputs(source_folder=args.source,
output_droidbox=args.output,
output_strace=args.outputStrace,
output_other=args.otherFiles)
def parse_droidbox_outputs(source_folder, output_droidbox, output_strace, output_other):
source_folder = source_folder + "/"
list_files = []
for path, subdirs, files in os.walk(source_folder):
for name in files:
list_files.append(os.path.join(path, name))
list_droidbox_files = [f for f in list_files if ntpath.basename(f).startswith("analysis")]
list_strace_files = [f for f in list_files if ntpath.basename(f).startswith("strace")]
list_logcat_files = [f for f in list_files if ntpath.basename(f).startswith("logcat")]
if not os.path.exists(output_droidbox):
os.makedirs(output_droidbox)
if not os.path.exists(output_strace):
os.makedirs(output_strace)
if not os.path.exists(output_other):
os.makedirs(output_other)
# STRACE
print "Strace..."
for file in tqdm(list_strace_files):
output_file = ntpath.basename(file).replace(".txt", ".csv").replace("strace_", "").replace(".apk", "")
if os.path.isfile(output_strace + "/" + output_file):
continue
with open(file, "rb") as f:
lines = f.readlines()
with open(join_dir(output_strace, output_file), 'wb') as fp:
for line in lines:
line = re.sub(" +", " ", line)
line = line.split(" ", 2)
fp.write(line[1] + "," + line[0] + "," + line[2])
shutil.move(file, join_dir(output_other, file))
# Droidbox
print "DroidBox..."
for file in list_droidbox_files:
output_file = ntpath.basename(file).replace("analysis_", "")
shutil.move(file, join_dir(output_droidbox, output_file))
# Logcat
print "Logcat..."
for file in list_logcat_files:
output_file = ntpath.basename(file)
shutil.move(file, join_dir(output_other, output_file))
if __name__ == '__main__':
main()