Exemple #1
0
    def start(self, args):
        self.nodes = []
        self.nodescount = 1
        self.oldcur = 0

        fname = args["filter_name"].value()
        expression = args["expression"].value()
        root_node = args["root_node"].value()
        if args.has_key("verbose"):
            self.verbose = True
        else:
            self.verbose = False
        if args.has_key("recursive"):
            recursive = True
        else:
            recursive = False
        f = Filter(fname)
        f.connection(self)
        try:
            f.compile(expression)
        except RuntimeError:
            self.res["error"] = Variant("provided expression is not valid")
        f.process(root_node, recursive)
        self.res["total of matching nodes"] = Variant(len(self.nodes))
        if args.has_key("save_result"):
            si_node = self.vfs.getnode("/Bookmarks")
            if si_node == None:
                root = self.vfs.getnode("/")
                si_node = Node("Bookmarks", 0, root)
                si_node.__disown__()
            fnode = Node(fname, 0, si_node)
            fnode.__disown__()
            for node in self.nodes:
                vl = VLink(node, fnode, node.name())
                vl.__disown__()
Exemple #2
0
    def start(self, args):
       self.parent = args["parent"].value()
       if args.has_key("count"):
           self.count = args["count"].value()
       else:
           self.count = 50000
       #self.start = args["start_offset"].value()
       #self.number_of_nodes = args["number_of_nodes"].value()
       self.root = Node("node-test")
       self.__disown__()
       for x in xrange(0, self.count):
	  xnode = Node(str(x), 0, self.root, self)
	  if (x % 10000) == 0:
		print "have create " + str(x) + " nodes"
	  xnode.setDir()
	  xnode.__disown__()
       self.registerTree(self.parent, self.root) 
Exemple #3
0
 def makeDirs(self, folders):
   sfolders = folders.split("/")
   prev = self.origin
   for folder in sfolders:
     node = self.vfs.getnode(prev.absolute() + "/" + folder)
     if node == None:
       node = Node(folder, 0, prev, self)
       node.setDir()
       node.__disown__()
     prev = node
   return node
Exemple #4
0
 def __createProcessesVadTree(self):
     pcount = 1
     lpcount = len(self.__processes)
     for procnode in self.__processes:
         proc = procnode.eproc
         base, ext = os.path.splitext(str(proc.ImageFileName))
         vadroot = Node(base + ".vad", 0, None, self)
         vadroot.__disown__()
         procnode.setSuspicious(
             self.__createVadTree(proc, vadroot, pcount, lpcount))
         pcount += 1
         self.registerTree(procnode, vadroot)
Exemple #5
0
 def parseOrphan(self, root, mfsobj):
     orphaned = None
     if len(self.__entries) != len(self.__addedEntriesID):
         orphaned = Node('Orphaned', 0, root, mfsobj)
         orphaned.__disown__()
         for eid in xrange(0, len(self.__entries)):
             if eid not in self.__addedEntriesID:
                 try:
                     if self.__entries[eid]:
                         orphaned.addChild(self.__entries[eid])
                 except KeyError:
                     pass
     return orphaned
Exemple #6
0
 def __createProcessTree(self):
     seen_offsets = []
     procmap = {}
     self.__orphaned = {}
     self.stateinfo = "Step {:<2d} / {:<2d}: Processes -- Creating tree".format(
         self.__step, self.__steps)
     for source in self.ps_sources.values():
         for offset in source.keys():
             if offset not in seen_offsets:
                 seen_offsets.append(offset)
                 cproc = source[offset]
                 uid = int(cproc.UniqueProcessId)
                 if procmap.has_key(uid):
                     dtb = []
                     for _proc in procmap[uid]:
                         if cproc.ImageFileName == _proc[
                                 0].ImageFileName and cproc.Pcb.DirectoryTableBase == _proc[
                                     0].Pcb.DirectoryTableBase:
                             dtb.append(_proc)
                     if len(dtb) == 0:
                         procmap[uid].append((cproc, offset))
                     elif cproc.Peb != None:
                         for _proc, _off in dtb:
                             if _proc.Peb is None:
                                 procmap[uid].remove(_proc)
                 else:
                     procmap[uid] = [(cproc, offset)]
                 self.__orphaned[cproc] = 0
     if len(procmap):
         self.stateinfo = "Step {:<2d} / {:<2d}: Processes -- Creating tree {:>3d} / {:<3d}".format(
             self.__step, self.__steps, 0, len(procmap))
         self.__mainProcNode = Node("Processes", 0, None, self)
         self.__mainProcNode.__disown__()
         self.__mainProcNode.setDir()
         for proc, offset in self.__findRootProcesses(procmap):
             self.__orphaned[proc] = 1
             procnode = WinProcNode(proc, offset, self.__mainProcNode, self)
             self.__processes.append(procnode)
             self.__createPtree(procmap, int(proc.UniqueProcessId),
                                procnode)
             count = sum(
                 [v for v in self.__orphaned.itervalues() if v == 1])
             self.stateinfo = "Step {:<2d} / {:<2d}: Processes -- Creating tree {:>3d} / {:<3d}".format(
                 self.__step, self.__steps, count, len(procmap))
         for proc in self.__orphaned:
             if debug and self.__orphaned[proc] == 0:
                 self.__printProcess(proc)
     self.registerTree(self.root, self.__mainProcNode)
     self.__step += 1
Exemple #7
0
 def __createModules(self):
     self.stateinfo = "Step {:<2d} / {:<2d}: Modules -- ModScan".format(
         self.__step, self.__steps)
     self.__scanned_modules = Set([
         ldr_entry.obj_offset
         for ldr_entry in modscan.ModScan(self._config).calculate()
     ])
     self.stateinfo = "Step {:<2d} / {:<2d}: Modules -- Modules calculate".format(
         self.__step, self.__steps)
     self.__loaded_modules = Set([
         module.obj_vm.vtop(module.obj_offset)
         for module in modules.Modules(self._config).calculate()
     ])
     self.__unlinked_or_hidden = self.__scanned_modules.difference(
         self.__loaded_modules)
     self.__modulesNode = Node("Modules", 0, None, self)
     self.__modulesNode.setDir()
     self.__modulesNode.__disown__()
     unknown = 0
     address_space = utils.load_as(self._config, astype='physical')
     kernel_as = utils.load_as(self._config)
     procs = list(tasks.pslist(kernel_as))
     modcount = 1
     lmodcount = len(self.__scanned_modules)
     for offset in self.__scanned_modules:
         self.stateinfo = "Step {:<2d} / {:<2d}: Modules -- creating nodes ({:>6d} / {:<6d})".format(
             self.__step, self.__steps, modcount, lmodcount)
         modcount += 1
         ldr_entry = obj.Object('_LDR_DATA_TABLE_ENTRY',
                                vm=address_space,
                                offset=offset,
                                native_vm=kernel_as)
         if not ldr_entry.BaseDllName:
             unknown += 1
             name = "Unknown" + str(unknown)
         else:
             name = str(ldr_entry.BaseDllName)
         unlinked_or_hidden = False
         if offset in self.__unlinked_or_hidden:
             unlinked_or_hidden = True
         aspace = tasks.find_space(kernel_as, procs, ldr_entry.DllBase.v())
         n = ModuleNode(name, ldr_entry, self.__modulesNode, self, aspace,
                        unlinked_or_hidden)
         n.__disown__()
     self.registerTree(self.root, self.__modulesNode)
     self.__step += 1
Exemple #8
0
 def __createDlls(self):
     self.__loadModulesFromProcesses()
     if len(self.__dlls):
         self.__mainDllNode = Node("Dlls", 0, None, self)
         self.__mainDllNode.setDir()
         self.__mainDllNode.__disown__()
         dcount = 1
         dllcount = len(self.__dlls)
         for dllname in self.__dlls:
             self.stateinfo = "Step {:<2d} / {:<2d}: Dlls -- Creating nodes ({:>6d} / {:<6d})".format(
                 self.__step, self.__steps, dcount, dllcount)
             if len(self.__dlls[dllname]) > 1:
                 if debug:
                     print dllname, [
                         entry[0] for entry in self.__dlls[dllname]
                     ]
                 i = 0
                 for entry in self.__dlls[dllname]:
                     if entry[0] != -1:
                         if i == 0:
                             dllnode = DllNode(dllname, entry[1], entry[2],
                                               self.__mainDllNode, self)
                             dllnode.__disown__()
                         else:
                             dllnode = DllNode(dllname + "-" + str(i),
                                               entry[1], entry[2],
                                               self.__mainDllNode, self)
                             dllnode.__disown__()
                         i += 1
             else:
                 entry = self.__dlls[dllname][0]
                 dllnode = DllNode(dllname, entry[1], entry[2],
                                   self.__mainDllNode, self)
                 dllnode.__disown__()
     self.registerTree(self.root, self.__mainDllNode)
     self.__step += 1
Exemple #9
0
    def exportClick(self, clickState):
        rect = self.timeline.ploter.selectionRect.rect()
        exportSelDateMin = self.timeline.draw.findXTime(rect.x())
        exportSelDateMax = self.timeline.draw.findXTime(rect.x() +
                                                        rect.width())

        for family in self.configuration:
            for time in family[1]:
                if time[1][0][1]:
                    nodes = []
                    everyNodes = self.timeline.elementsInRangeToNodeList(
                        time[1][5][1], self.timeline.toUSec(exportSelDateMin),
                        self.timeline.toUSec(exportSelDateMax))
                    for oneGroupNode in everyNodes:
                        for node in oneGroupNode:
                            nodes.append(node)
                    if len(nodes):
                        if not self.exportedNode:
                            # Create /timeline if needed
                            root = vfs.vfs().getnode('/Bookmarks')
                            baseNode = Node('timeline', 0, root)
                            baseNode.__disown__()
                            baseNode.setDir()
                            e = event()
                            e.thisown = False
                            e.value = RCVariant(Variant(baseNode))
                            self.VFS.notify(e)

                            # Create /timeline/<ParentName>
                            self.exportedNode = Node(self.timeline.node.name(),
                                                     0, baseNode)
                            self.exportedNode.__disown__()
                            self.exportedNode.setDir()
                        timeBaseName = self.exportedNode.absolute(
                        ) + '/' + str(
                            exportSelDateMin.strftime('%d.%m.%Y %H:%M:%S')
                        ) + ' to ' + str(
                            exportSelDateMax.strftime('%d.%m.%Y %H:%M:%S'))
                        timeBaseNode = vfs.vfs().getnode(timeBaseName)
                        if not timeBaseNode:
                            # Create /timeline/<ParentName>/dateStart to dateEnd/<Module:FullTimestampAttributePath>/
                            timeBaseNode = Node(
                                str(
                                    exportSelDateMin.strftime(
                                        '%d.%m.%Y %H:%M:%S')) + ' to ' + str(
                                            exportSelDateMax.strftime(
                                                '%d.%m.%Y %H:%M:%S')), 0,
                                self.exportedNode)
                            timeBaseNode.__disown__()
                            timeBaseNode.setDir()

                        baseFamilyName = timeBaseNode.absolute(
                        ) + '/' + ':'.join([family[0]] + time[0])
                        baseFamilyNode = vfs.vfs().getnode(baseFamilyName)
                        if not baseFamilyNode:
                            # Create /timeline/<ParentName>/dateStart to dateEnd//<Module:FullTimestampAttributePath> if needed
                            baseFamilyNode = Node(
                                ':'.join([family[0]] + time[0]), 0,
                                timeBaseNode)
                            baseFamilyNode.__disown__()
                            baseFamilyNode.setDir()

                        for node in nodes:
                            # Add each node in array as child
                            l = VLink(node, baseFamilyNode)
                            l.__disown__()