Commit c544e656 by devttys0

Updated compressor module to run LZMA and deflate scans simultaneously

parent 0a988379
...@@ -147,21 +147,16 @@ class Deflate(object): ...@@ -147,21 +147,16 @@ class Deflate(object):
class RawCompression(Module): class RawCompression(Module):
DECOMPRESSORS = {
'deflate' : Deflate,
'lzma' : LZMA,
}
TITLE = 'Raw Compression' TITLE = 'Raw Compression'
CLI = [ CLI = [
Option(short='X', Option(short='X',
long='deflate', long='deflate',
kwargs={'enabled' : True, 'decompressor_class' : 'deflate'}, kwargs={'enabled' : True, 'scan_for_deflate' : True},
description='Scan for raw deflate compression streams'), description='Scan for raw deflate compression streams'),
Option(short='Z', Option(short='Z',
long='lzma', long='lzma',
kwargs={'enabled' : True, 'decompressor_class' : 'lzma'}, kwargs={'enabled' : True, 'scan_for_lzma' : True},
description='Scan for raw LZMA compression streams'), description='Scan for raw LZMA compression streams'),
Option(short='S', Option(short='S',
long='stop', long='stop',
...@@ -172,17 +167,25 @@ class RawCompression(Module): ...@@ -172,17 +167,25 @@ class RawCompression(Module):
KWARGS = [ KWARGS = [
Kwarg(name='enabled', default=False), Kwarg(name='enabled', default=False),
Kwarg(name='stop_on_first_hit', default=False), Kwarg(name='stop_on_first_hit', default=False),
Kwarg(name='decompressor_class', default=None), Kwarg(name='scan_for_deflate', default=False),
Kwarg(name='scan_for_lzma', default=False),
] ]
#READ_BLOCK_SIZE = 64*1024
def init(self): def init(self):
self.decompressor = self.DECOMPRESSORS[self.decompressor_class](self) self.decompressors = []
if self.scan_for_deflate:
self.decompressors.append(Deflate(self))
if self.scan_for_lzma:
self.decompressors.append(LZMA(self))
def run(self): def run(self):
for fp in iter(self.next_file, None): for fp in iter(self.next_file, None):
file_done = False file_done = False
fp.set_block_size(peek=self.decompressor.BLOCK_SIZE) #fp.set_block_size(peek=self.READ_BLOCK_SIZE)
self.header() self.header()
...@@ -192,12 +195,17 @@ class RawCompression(Module): ...@@ -192,12 +195,17 @@ class RawCompression(Module):
break break
for i in range(0, dlen): for i in range(0, dlen):
description = self.decompressor.decompress(data[i:i+self.decompressor.BLOCK_SIZE]) for decompressor in self.decompressors:
description = decompressor.decompress(data[i:i+decompressor.BLOCK_SIZE])
if description: if description:
self.result(description=description, file=fp, offset=fp.tell()-dlen+i) self.result(description=description, file=fp, offset=fp.tell()-dlen+i)
if self.stop_on_first_hit: if self.stop_on_first_hit:
file_done = True file_done = True
break break
if file_done:
break
self.status.completed += 1 self.status.completed += 1
self.status.completed = fp.tell() - fp.offset self.status.completed = fp.tell() - fp.offset
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment