Estou estudando recursos de PDFs mal-intencionados. Eu estou usando um wrapper Python do pdfinfo para extrair alguns recursos como tamanho do arquivo e tamanho da página do código. Esta é a parte do wrapper do código.
def pdfinf(infile):
cmd = '/usr/bin/pdfinfo'
if not osp.exists(cmd):
raise RuntimeError('System command not found: %s' % cmd)
if not osp.exists(infile):
raise RuntimeError('Provided input file not found: %s' % infile)
def _extract(row):
"""Extracts the right hand value from a : delimited row"""
return row.split(':', 1)[1].strip()
output = {}
labels = ['Title', 'Author', 'Creator', 'Producer', 'CreationDate',
'ModDate', 'Tagged', 'Pages', 'Encrypted', 'Page size',
'File size', 'Optimized', 'PDF version']
cmd_output = subprocess.check_output([cmd, infile])
for line in cmd_output.splitlines():
for label in labels:
if label in line:
output[label] = _extract(line)
return output
la = lb = 0
for files in malware_files:
path = "/home/hima/Downloads/data/mpdfs/" + files
output = pdfinf(path)
value = output['File size']
value = value[:-6]
lb += float(value)
No entanto, continuo recebendo erros como esses.
Syntax Error: Couldn't find trailer dictionary
Syntax Error (6689): Missing 'endstream' or incorrect stream length
Syntax Error (15795): Missing 'endstream' or incorrect stream length
Syntax Error: Couldn't find trailer dictionary
Syntax Error: Couldn't find trailer dictionary
Syntax Error: Couldn't read xref table
Traceback (most recent call last):
File "code.py", line 67, in <module>
output = pdfinf(path)
File "code.py", line 50, in pdfinf
cmd_output = subprocess.check_output([cmd, infile])
File "/usr/lib/python2.7/subprocess.py", line 574, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['/usr/bin/pdfinfo', '/home/hima/Downloads/data/mpdfs/c9954f5f3fbfb3b150abe208c763d942043bfc0f.pdf']' returned non-zero exit status 1
Como posso extrair esses recursos se o código parar de ser executado em um arquivo mal-intencionado? Eu quero analisar esses recursos como eu acho que se conseguirá encontrar uma relação. Existe uma alternativa ao pdfinfo que eu possa chamar usando shell ou usando um wrapper em Python?