Commit ad274817badab9e188a239cd6936895ca7f9d8ed
1 parent
cf2de849
Implemented edb module. Improved continue dialog on module var fail. Small fixes
Showing
6 changed files
with
99 additions
and
30 deletions
digger.py
@@ -60,11 +60,16 @@ def showFinishDialog(allSuccessful): | @@ -60,11 +60,16 @@ def showFinishDialog(allSuccessful): | ||
60 | elif tag == "Reboot": | 60 | elif tag == "Reboot": |
61 | sp.call("reboot", shell=True) | 61 | sp.call("reboot", shell=True) |
62 | 62 | ||
63 | + logger.msgLog("Finished excavation of tomb: " + tomb.getPath(),"digger",logger.TYPE_INFO) | ||
63 | exit(0) | 64 | exit(0) |
64 | 65 | ||
65 | def showContinueDialog(d,msg): | 66 | def showContinueDialog(d,msg): |
66 | - ans = d.yesno(msg + "\n\nDo you want to continue execution without the module?") | ||
67 | - return ans == d.OK | 67 | + code, tag = d.menu(msg + "\n\nDo you want to retry module configuration or continue execution without the module?", |
68 | + choices=[("retry", "Retry configuration"), | ||
69 | + ("continue", "Continue without module")]) | ||
70 | + if code != d.OK: | ||
71 | + return "abort" | ||
72 | + return tag | ||
68 | 73 | ||
69 | if __name__ == "__main__": | 74 | if __name__ == "__main__": |
70 | locale.setlocale(locale.LC_ALL, '') | 75 | locale.setlocale(locale.LC_ALL, '') |
@@ -77,6 +82,7 @@ if __name__ == "__main__": | @@ -77,6 +82,7 @@ if __name__ == "__main__": | ||
77 | tomb._MACHINE_NAME= value | 82 | tomb._MACHINE_NAME= value |
78 | logger.logSystems.append(ConsoleLogger()) | 83 | logger.logSystems.append(ConsoleLogger()) |
79 | logger.logSystems.append(FileLogger(tomb.getPath() + "log.txt")) | 84 | logger.logSystems.append(FileLogger(tomb.getPath() + "log.txt")) |
85 | + logger.msgLog("Beginning excavation of tomb: " + tomb.getPath(),"digger",logger.TYPE_INFO) | ||
80 | d.set_background_title("Gravedigger - " + value) | 86 | d.set_background_title("Gravedigger - " + value) |
81 | code, tags = d.checklist("Select modules to execute", | 87 | code, tags = d.checklist("Select modules to execute", |
82 | choices=moduleList + [("all","Execute all modules",False)], | 88 | choices=moduleList + [("all","Execute all modules",False)], |
@@ -84,27 +90,41 @@ if __name__ == "__main__": | @@ -84,27 +90,41 @@ if __name__ == "__main__": | ||
84 | if code == d.OK: | 90 | if code == d.OK: |
85 | runlist = [] | 91 | runlist = [] |
86 | if "all" in tags: | 92 | if "all" in tags: |
93 | + logger.msgLog("Selected modules: " + repr(moduleList), "digger", logger.TYPE_INFO) | ||
87 | for module in moduleList: | 94 | for module in moduleList: |
88 | - try: | ||
89 | - mod = prepareModule(module[0]) | ||
90 | - runlist.append(mod) | ||
91 | - except Exception as e: | ||
92 | - msg = "Exception raised while preparing module \"" + module[0] + "\": " + str(e) | ||
93 | - logger.msgLog(msg, module[0], logger.TYPE_ERROR) | ||
94 | - #logger.msgLog(traceback.format_exc(), module[0], logger.TYPE_ERROR) | ||
95 | - if(not showContinueDialog(d,msg)): | ||
96 | - showFinishDialog(False) | 95 | + while True: |
96 | + try: | ||
97 | + mod = prepareModule(module[0]) | ||
98 | + runlist.append(mod) | ||
99 | + break | ||
100 | + except Exception as e: | ||
101 | + msg = "Exception raised while preparing module \"" + module[0] + "\": " + str(e) | ||
102 | + logger.msgLog(msg, module[0], logger.TYPE_ERROR) | ||
103 | + #logger.msgLog(traceback.format_exc(), module[0], logger.TYPE_ERROR) | ||
104 | + ans = showContinueDialog(d,msg) | ||
105 | + if ans == "abort": | ||
106 | + showFinishDialog(False) | ||
107 | + elif ans == "continue": | ||
108 | + logger.msgLog("Skipping module " + module, "digger", logger.TYPE_INFO) | ||
109 | + break | ||
97 | else: | 110 | else: |
111 | + logger.msgLog("Selected modules: " + repr(tags), "digger", logger.TYPE_INFO) | ||
98 | for tag in tags: | 112 | for tag in tags: |
99 | - try: | ||
100 | - mod = prepareModule(tag) | ||
101 | - runlist.append(mod) | ||
102 | - except Exception as e: | ||
103 | - msg = "Exception raised while preparing module \"" + tag + "\": " + str(e) | ||
104 | - logger.msgLog(msg,tag,logger.TYPE_ERROR) | ||
105 | - #logger.msgLog(traceback.format_exc(), tag logger.TYPE_ERROR) | ||
106 | - if(not showContinueDialog(d,msg)): | ||
107 | - showFinishDialog(False) | 113 | + while True: |
114 | + try: | ||
115 | + mod = prepareModule(tag) | ||
116 | + runlist.append(mod) | ||
117 | + break | ||
118 | + except Exception as e: | ||
119 | + msg = "Exception raised while preparing module \"" + tag + "\": " + str(e) | ||
120 | + logger.msgLog(msg,tag,logger.TYPE_ERROR) | ||
121 | + #logger.msgLog(traceback.format_exc(), tag logger.TYPE_ERROR) | ||
122 | + ans = showContinueDialog(d, msg) | ||
123 | + if ans == "abort": | ||
124 | + showFinishDialog(False) | ||
125 | + elif ans == "continue": | ||
126 | + logger.msgLog("Skipping module " + tag, "digger", logger.TYPE_INFO) | ||
127 | + break | ||
108 | 128 | ||
109 | sp.call('clear', shell=True) | 129 | sp.call('clear', shell=True) |
110 | for module in runlist: | 130 | for module in runlist: |
@@ -116,6 +136,4 @@ if __name__ == "__main__": | @@ -116,6 +136,4 @@ if __name__ == "__main__": | ||
116 | #logger.msgLog(traceback.format_exc(), module.name, logger.TYPE_ERROR) | 136 | #logger.msgLog(traceback.format_exc(), module.name, logger.TYPE_ERROR) |
117 | 137 | ||
118 | 138 | ||
119 | - showFinishDialog(True) | ||
120 | - | ||
121 | - | 139 | + showFinishDialog(True) |
122 | \ No newline at end of file | 140 | \ No newline at end of file |
logger/filelogger.py
@@ -5,7 +5,7 @@ class FileLogger(LogSystem): | @@ -5,7 +5,7 @@ class FileLogger(LogSystem): | ||
5 | 5 | ||
6 | def __init__(self,filename): | 6 | def __init__(self,filename): |
7 | self.file = filename | 7 | self.file = filename |
8 | - f = open(filename,"w+") | 8 | + f = open(filename,"a+") |
9 | f.close() | 9 | f.close() |
10 | 10 | ||
11 | def writeLog(self,message,module,type = None): | 11 | def writeLog(self,message,module,type = None): |
modules/edb.py
0 โ 100644
1 | +import os | ||
2 | + | ||
3 | +import logger | ||
4 | +import tomb | ||
5 | +import winver | ||
6 | +from modules.module import Module | ||
7 | +from mount import mount,umount | ||
8 | +from runcmd import runProcess | ||
9 | + | ||
10 | + | ||
11 | +def getInstance(): | ||
12 | + return RegistryModule() | ||
13 | + | ||
14 | +class RegistryModule(Module): | ||
15 | + | ||
16 | + def __init__(self): | ||
17 | + self.name = "edb" | ||
18 | + self.description = "Extracts Windows EDB file" | ||
19 | + self.requiredVars = ["winvol"] | ||
20 | + self.vars = {} | ||
21 | + | ||
22 | + def run(self): | ||
23 | + path = tomb.getPath() + self.name + "/" | ||
24 | + if(not os.path.exists(path)): | ||
25 | + os.mkdir(path) | ||
26 | + logger.msgLog("Extracting Windows EDB from volumes: " + repr(self.vars['winvol'].value), "edb", logger.TYPE_INFO) | ||
27 | + for vol in self.vars['winvol'].value: | ||
28 | + mntpoint = "/mnt/" | ||
29 | + try: | ||
30 | + mntid = mount("/dev/" + vol) | ||
31 | + except: | ||
32 | + raise | ||
33 | + mntpoint += mntid | ||
34 | + files = [] | ||
35 | + if winver.getWindowsDirectory(mntpoint) == None: | ||
36 | + raise Exception("No Windows installation present") | ||
37 | + version = winver.getWindowsVersion(mntpoint) | ||
38 | + | ||
39 | + if version < winver._WIN_XP: | ||
40 | + raise Exception("No Windows Search EDB file in versions prior to Windows 2000") | ||
41 | + elif version < winver._WIN_VISTA: | ||
42 | + files += [mntpoint + "/Documents and Settings/All Users/Application Data/Microsoft/Search/Data/Applications/Windows/Windows.edb"] | ||
43 | + else: | ||
44 | + files += [mntpoint + "/ProgramData/Microsoft/Search/Data/Applications/Windows/Windows.edb"] | ||
45 | + | ||
46 | + runProcess(["tar","-czvf",path + "evt_" + vol + ".tar.gz"] + files) | ||
47 | + try: | ||
48 | + umount(mntid) | ||
49 | + except: | ||
50 | + raise |
modules/evt.py
@@ -23,7 +23,7 @@ class RegistryModule(Module): | @@ -23,7 +23,7 @@ class RegistryModule(Module): | ||
23 | path = tomb.getPath() + self.name + "/" | 23 | path = tomb.getPath() + self.name + "/" |
24 | if(not os.path.exists(path)): | 24 | if(not os.path.exists(path)): |
25 | os.mkdir(path) | 25 | os.mkdir(path) |
26 | - logger.msgLog("Extracting Windows Event Logs from volumes: " + repr(self.vars['winvol'].value), "winreg", logger.TYPE_INFO) | 26 | + logger.msgLog("Extracting Windows Event Logs from volumes: " + repr(self.vars['winvol'].value), "evt", logger.TYPE_INFO) |
27 | for vol in self.vars['winvol'].value: | 27 | for vol in self.vars['winvol'].value: |
28 | mntpoint = "/mnt/" | 28 | mntpoint = "/mnt/" |
29 | try: | 29 | try: |
vars/ntfsvol.py
1 | from dialog import Dialog | 1 | from dialog import Dialog |
2 | - | 2 | +import logger |
3 | from runcmd import runProcess | 3 | from runcmd import runProcess |
4 | from vars.modulevar import Modulevar | 4 | from vars.modulevar import Modulevar |
5 | 5 | ||
@@ -21,7 +21,7 @@ class NTFSVol(Modulevar): | @@ -21,7 +21,7 @@ class NTFSVol(Modulevar): | ||
21 | volumes = [] | 21 | volumes = [] |
22 | for res in resultlst: | 22 | for res in resultlst: |
23 | output,code = runProcess(["ntfslabel","/dev/" + res]) | 23 | output,code = runProcess(["ntfslabel","/dev/" + res]) |
24 | - volumes.append((res,output.decode("utf-8"))) | 24 | + volumes.append((res,output.decode("utf-8").rstrip())) |
25 | return volumes | 25 | return volumes |
26 | 26 | ||
27 | def query(self): | 27 | def query(self): |
@@ -30,6 +30,7 @@ class NTFSVol(Modulevar): | @@ -30,6 +30,7 @@ class NTFSVol(Modulevar): | ||
30 | volumes = self.getNTFSVolumes() | 30 | volumes = self.getNTFSVolumes() |
31 | if(len(volumes) == 0): | 31 | if(len(volumes) == 0): |
32 | raise Exception("[" + self.name + "] No NTFS Volumes found") | 32 | raise Exception("[" + self.name + "] No NTFS Volumes found") |
33 | + logger.msgLog("Detected NTFS volumes in " + repr(volumes), "ntfsvol", logger.TYPE_INFO) | ||
33 | volumeList = [] | 34 | volumeList = [] |
34 | for vol in volumes: | 35 | for vol in volumes: |
35 | volumeList.append((vol[0],vol[1], False)) | 36 | volumeList.append((vol[0],vol[1], False)) |
vars/winvol.py
@@ -24,7 +24,7 @@ class WinVol(Modulevar): | @@ -24,7 +24,7 @@ class WinVol(Modulevar): | ||
24 | volumes = [] | 24 | volumes = [] |
25 | for res in resultlst: | 25 | for res in resultlst: |
26 | output,code = runProcess(["ntfslabel","/dev/" + res]) | 26 | output,code = runProcess(["ntfslabel","/dev/" + res]) |
27 | - volumes.append((res,output.decode("utf-8"))) | 27 | + volumes.append((res,output.decode("utf-8").rstrip())) |
28 | return volumes | 28 | return volumes |
29 | 29 | ||
30 | def getFATVolumes(self): | 30 | def getFATVolumes(self): |
@@ -33,7 +33,7 @@ class WinVol(Modulevar): | @@ -33,7 +33,7 @@ class WinVol(Modulevar): | ||
33 | volumes = [] | 33 | volumes = [] |
34 | for res in resultlst: | 34 | for res in resultlst: |
35 | output,code = runProcess(["dosfslabel","/dev/" + res]) | 35 | output,code = runProcess(["dosfslabel","/dev/" + res]) |
36 | - volumes.append((res,output.decode("utf-8"))) | 36 | + volumes.append((res,output.decode("utf-8").rstrip())) |
37 | return volumes | 37 | return volumes |
38 | 38 | ||
39 | def getWindowsVolumes(self): | 39 | def getWindowsVolumes(self): |
@@ -52,9 +52,9 @@ class WinVol(Modulevar): | @@ -52,9 +52,9 @@ class WinVol(Modulevar): | ||
52 | d = Dialog(dialog="dialog", autowidgetsize=True) | 52 | d = Dialog(dialog="dialog", autowidgetsize=True) |
53 | d.set_background_title("[" + self.parentModule + "] Setting variable: winvol") | 53 | d.set_background_title("[" + self.parentModule + "] Setting variable: winvol") |
54 | volumes = self.getWindowsVolumes() | 54 | volumes = self.getWindowsVolumes() |
55 | - logger.msgLog("Detected Windows volumes in " + repr(volumes),"winvol",logger.TYPE_INFO) | ||
56 | if(len(volumes) == 0): | 55 | if(len(volumes) == 0): |
57 | raise Exception("[" + self.name + "] No Windows Volumes found") | 56 | raise Exception("[" + self.name + "] No Windows Volumes found") |
57 | + logger.msgLog("Detected Windows volumes in " + repr(volumes), "winvol", logger.TYPE_INFO) | ||
58 | volumeList = [] | 58 | volumeList = [] |
59 | for vol in volumes: | 59 | for vol in volumes: |
60 | volumeList.append((vol[0],vol[1], False)) | 60 | volumeList.append((vol[0],vol[1], False)) |