pdfalyzer 1.16.9__py3-none-any.whl → 1.16.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfalyzer might be problematic. Click here for more details.
- .pdfalyzer.example +66 -0
- CHANGELOG.md +4 -0
- pdfalyzer/binary/binary_scanner.py +1 -1
- pdfalyzer/config.py +4 -0
- pdfalyzer/font_info.py +1 -2
- pdfalyzer/helpers/pdf_object_helper.py +1 -0
- pdfalyzer/helpers/rich_text_helper.py +1 -3
- pdfalyzer/output/layout.py +1 -1
- pdfalyzer/output/pdfalyzer_presenter.py +2 -2
- pdfalyzer/output/tables/decoding_stats_table.py +4 -0
- pdfalyzer/output/tables/stream_objects_table.py +0 -1
- pdfalyzer/util/adobe_strings.py +0 -1
- pdfalyzer/util/argument_parser.py +4 -1
- {pdfalyzer-1.16.9.dist-info → pdfalyzer-1.16.10.dist-info}/METADATA +3 -7
- {pdfalyzer-1.16.9.dist-info → pdfalyzer-1.16.10.dist-info}/RECORD +18 -17
- {pdfalyzer-1.16.9.dist-info → pdfalyzer-1.16.10.dist-info}/LICENSE +0 -0
- {pdfalyzer-1.16.9.dist-info → pdfalyzer-1.16.10.dist-info}/WHEEL +0 -0
- {pdfalyzer-1.16.9.dist-info → pdfalyzer-1.16.10.dist-info}/entry_points.txt +0 -0
.pdfalyzer.example
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# If you place a filed called '.pdfalyzer' in your home dir or the current dir environment variables specified
|
|
2
|
+
# in that .pdfalyzer file will be added to the environment each time pdfalyzer is invoked. (See the `dotenv`
|
|
3
|
+
# package for more details.) This file contains environment variables you can place in .pdfalyzer to configure
|
|
4
|
+
# the application above and beyond providing command line options. Useful if you want to permanently
|
|
5
|
+
# configure options you tend to reuse (e.g. '--maximize-width') so you can stop remembering to type them.
|
|
6
|
+
#
|
|
7
|
+
# Almost all of the yaralyzer (yes, you read that right - The Pdfalyzer uses The Yaralyzer for all
|
|
8
|
+
# kinds of backend functionality) command line options can be configured in this file by capitalizing them and
|
|
9
|
+
# prefixing 'YARALYZER'. e.g. to configure the --maximize-width option for every invocation, you would set:
|
|
10
|
+
# YARALYZER_MAXIMIZE_WIDTH=True
|
|
11
|
+
#
|
|
12
|
+
# Note that many of these options are actually configuring the yaralyzer, which is a separate tool leveraged
|
|
13
|
+
# by the Pdfalyzer to actually do the work of finding patterns. More info can be found at
|
|
14
|
+
# https://github.com/michelcrypt4d4mus/yaralyzer
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# Expand the width of the output to the fit the display window (same as the --maximize-width options)
|
|
19
|
+
# YARALYZER_MAXIMIZE_WIDTH=True
|
|
20
|
+
|
|
21
|
+
# yara-python internal options passed through to yara.set_config() as the stack_size and max_match_data arguments
|
|
22
|
+
# YARALYZER_STACK_SIZE=10485760
|
|
23
|
+
# YARALYZER_MAX_MATCH_LENGTH=10737418240
|
|
24
|
+
|
|
25
|
+
# Suppress all PDF binary regex matching/scanning/etc
|
|
26
|
+
# YARALYZER_SUPPRESS_DECODES_TABLE=False
|
|
27
|
+
|
|
28
|
+
# Suppress the display of the table showing the the encoding assessments given by `chardet.detect()`
|
|
29
|
+
# about a particular chunk of binary data. (The most important data in the chardet confidence table is
|
|
30
|
+
# redunandant anyways. Only the low likelihood encodings are hidden from the usef)
|
|
31
|
+
# YARALYZER_SUPPRESS_CHARDET_TABLE=False
|
|
32
|
+
# Minimum confidence to display an encoding in the chardet results table
|
|
33
|
+
# YARALYZER_MIN_CHARDET_CONFIDENCE=2.0
|
|
34
|
+
|
|
35
|
+
# Configure how many bytes before and after any binary data should be included in scans and visualizations
|
|
36
|
+
# YARALYZER_SURROUNDING_BYTES=64
|
|
37
|
+
|
|
38
|
+
# Size thresholds (in bytes) under/over which pdfalyzer will NOT make attempts to decode a match.
|
|
39
|
+
# Longer byte sequences are for obvious reasons slower to decode by force.
|
|
40
|
+
# It may feel counterintuitive but larger chunks of random binary are also harder to examine and
|
|
41
|
+
# (in my experience) less likely to be maningful. Consider it - two frontslash characters 20,000 lines apart
|
|
42
|
+
# are more likely to be random than those same frontslashes when placed nearer to each other and
|
|
43
|
+
# in the vicinity of lot of computerized sigils of internet power like `.', `+bacd*?`,. and other regexes.*
|
|
44
|
+
# Keeping the max value number low will do more to affect the speed of the app than ay anything else you
|
|
45
|
+
# can easily configure..
|
|
46
|
+
#
|
|
47
|
+
# YARALYZER_MIN_DECODE_LENGTH=1
|
|
48
|
+
# YARALYZER_MAX_DECODE_LENGTH=256
|
|
49
|
+
|
|
50
|
+
# Directory to write application logs to. Must be an absolute path, not a relative one.
|
|
51
|
+
# These logs are not normally written to a file and the default log level means that the standard behavior
|
|
52
|
+
# is to more or less discard them. Be aware that if you configure this variable a few things will change:
|
|
53
|
+
#
|
|
54
|
+
# 1. Logs WILL NOT be written to STDOUT. They will stream ONLY to files in the configured directory.
|
|
55
|
+
# This is true even with the -D option.
|
|
56
|
+
# 2. The default log_level will be decreased from WARN (extremely spartan) to INFO (fairly verbose).
|
|
57
|
+
# The -D option, which sets the log level to DEBUG, will be respected whether or not
|
|
58
|
+
# YARALYZER_LOG_DIR is configured.
|
|
59
|
+
#
|
|
60
|
+
# YARALYZER_LOG_DIR=/path/to/pdfalyzer/log_dir/
|
|
61
|
+
|
|
62
|
+
# Log level
|
|
63
|
+
# YARALYZER_LOG_LEVEL='INFO'
|
|
64
|
+
|
|
65
|
+
# Path to directory containing Didier Stevens's pdf-parser.py. Only required for extracting binary streams to files.
|
|
66
|
+
# PDFALYZER_PDF_PARSER_PY_PATH=/path/to/pdfparserdotpy/
|
CHANGELOG.md
CHANGED
|
@@ -12,8 +12,8 @@ from yaralyzer.decoding.bytes_decoder import BytesDecoder
|
|
|
12
12
|
from yaralyzer.encoding_detection.character_encodings import BOMS
|
|
13
13
|
from yaralyzer.helpers.bytes_helper import hex_string, print_bytes
|
|
14
14
|
from yaralyzer.helpers.string_helper import escape_yara_pattern
|
|
15
|
-
from yaralyzer.output.rich_console import BYTES_NO_DIM, console, console_width
|
|
16
15
|
from yaralyzer.output.regex_match_metrics import RegexMatchMetrics
|
|
16
|
+
from yaralyzer.output.rich_console import BYTES_NO_DIM, console, console_width
|
|
17
17
|
from yaralyzer.yara.yara_rule_builder import HEX, REGEX, safe_label
|
|
18
18
|
from yaralyzer.yaralyzer import Yaralyzer
|
|
19
19
|
from yaralyzer.util.logging import log
|
pdfalyzer/config.py
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PdfalyzerConfig object holds the unification of configuration options parsed from the command line
|
|
3
|
+
as well as those set by environment variables and/or a .pdfalyzer file.
|
|
4
|
+
"""
|
|
1
5
|
import importlib.resources
|
|
2
6
|
from argparse import Namespace
|
|
3
7
|
from os import environ, pardir, path
|
pdfalyzer/font_info.py
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Unify font information spread across a bunch of PdfObjects (Font, FontDescriptor,
|
|
3
3
|
and FontFile) into a single class.
|
|
4
4
|
"""
|
|
5
|
-
|
|
6
5
|
from pypdf._cmap import build_char_map, prepare_cm
|
|
7
6
|
from pypdf.generic import IndirectObject, PdfObject
|
|
8
7
|
from rich.text import Text
|
|
@@ -11,9 +10,9 @@ from yaralyzer.util.logging import log
|
|
|
11
10
|
|
|
12
11
|
from pdfalyzer.binary.binary_scanner import BinaryScanner
|
|
13
12
|
from pdfalyzer.output.character_mapping import print_character_mapping, print_prepared_charmap
|
|
14
|
-
from pdfalyzer.output.tables.font_summary_table import font_summary_table
|
|
15
13
|
from pdfalyzer.output.layout import print_section_subheader
|
|
16
14
|
from pdfalyzer.output.styles.node_colors import get_label_style
|
|
15
|
+
from pdfalyzer.output.tables.font_summary_table import font_summary_table
|
|
17
16
|
from pdfalyzer.util.adobe_strings import (FONT, FONT_DESCRIPTOR, FONT_FILE, FONT_LENGTHS, RESOURCES,
|
|
18
17
|
SUBTYPE, TO_UNICODE, TYPE, W, WIDTHS)
|
|
19
18
|
|
|
@@ -20,6 +20,7 @@ def does_list_have_any_references(_list) -> bool:
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
def _sort_pdf_object_refs(refs: List[PdfObjectRelationship]) -> List[PdfObjectRelationship]:
|
|
23
|
+
"""Sort a list of PdfObjectRelationship objects by their to_obj's idnum. Only used by pytest."""
|
|
23
24
|
return sorted(refs, key=lambda ref: ref.to_obj.idnum)
|
|
24
25
|
|
|
25
26
|
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Functions for miscellaneous Rich text/string operations.
|
|
2
|
+
Functions for miscellaneous Rich text/string pretty printing operations.
|
|
3
3
|
"""
|
|
4
4
|
from typing import List, Union
|
|
5
5
|
|
|
6
6
|
from pypdf.generic import PdfObject
|
|
7
7
|
from rich.console import Console
|
|
8
|
-
from rich.highlighter import RegexHighlighter, JSONHighlighter
|
|
9
8
|
from rich.text import Text
|
|
10
|
-
from yaralyzer.output.rich_console import console
|
|
11
9
|
|
|
12
10
|
from pdfalyzer.helpers.pdf_object_helper import pypdf_class_name
|
|
13
11
|
from pdfalyzer.output.styles.node_colors import get_label_style, get_class_style_italic
|
pdfalyzer/output/layout.py
CHANGED
|
@@ -23,9 +23,9 @@ from pdfalyzer.detection.yaralyzer_helper import get_bytes_yaralyzer, get_file_y
|
|
|
23
23
|
from pdfalyzer.helpers.string_helper import pp
|
|
24
24
|
from pdfalyzer.output.layout import (print_fatal_error_panel, print_section_header, print_section_subheader,
|
|
25
25
|
print_section_sub_subheader)
|
|
26
|
+
from pdfalyzer.output.tables.decoding_stats_table import build_decoding_stats_table
|
|
26
27
|
from pdfalyzer.output.tables.pdf_node_rich_table import generate_rich_tree, get_symlink_representation
|
|
27
28
|
from pdfalyzer.output.tables.stream_objects_table import stream_objects_table
|
|
28
|
-
from pdfalyzer.output.tables.decoding_stats_table import build_decoding_stats_table
|
|
29
29
|
from pdfalyzer.pdfalyzer import Pdfalyzer
|
|
30
30
|
from pdfalyzer.util.adobe_strings import *
|
|
31
31
|
|
|
@@ -91,7 +91,6 @@ class PdfalyzerPresenter:
|
|
|
91
91
|
2. Check for (and force decode) dangerous PDF instructions like /JavaScript and /OpenAction
|
|
92
92
|
3. Check for (and force decode) any BOMs (byte order marks)
|
|
93
93
|
4. Check for (and force decode) any sequences of bytes between quotes
|
|
94
|
-
|
|
95
94
|
"""
|
|
96
95
|
print_section_header(f'Binary Stream Analysis / Extraction')
|
|
97
96
|
console.print(self._stream_objects_table())
|
|
@@ -109,6 +108,7 @@ class PdfalyzerPresenter:
|
|
|
109
108
|
log.warning(msg)
|
|
110
109
|
node_stream_bytes = node_stream_bytes.encode()
|
|
111
110
|
|
|
111
|
+
console.line()
|
|
112
112
|
print_section_subheader(f"{escape(str(node))} Summary and Analysis", style=f"{BYTES_HIGHLIGHT} reverse")
|
|
113
113
|
binary_scanner = BinaryScanner(node_stream_bytes, node)
|
|
114
114
|
console.print(bytes_hashes_table(binary_scanner.bytes))
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helper functions for building a table that summarizes the decoding attempts made on binary data.
|
|
3
|
+
"""
|
|
1
4
|
from numbers import Number
|
|
2
5
|
|
|
3
6
|
from rich.table import Table
|
|
@@ -13,6 +16,7 @@ NOT_FOUND_MSG = Text('(not found)', style='grey.dark_italic')
|
|
|
13
16
|
REGEX_SUBTABLE_COLS = ['Metric', 'Value']
|
|
14
17
|
DECODES_SUBTABLE_COLS = ['Encoding', '#', 'Decoded', '#', 'Forced', '#', 'Failed']
|
|
15
18
|
|
|
19
|
+
|
|
16
20
|
def build_decoding_stats_table(scanner: 'BinaryScanner') -> Table:
|
|
17
21
|
"""Diplay aggregate results on the decoding attempts we made on subsets of scanner.bytes"""
|
|
18
22
|
stats_table = _new_decoding_stats_table(scanner.label.plain if scanner.label else '')
|
pdfalyzer/util/adobe_strings.py
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Parse command line arguments for pdfalyzer and construct the PdfalyzerConfig object.
|
|
3
|
+
"""
|
|
1
4
|
import sys
|
|
2
|
-
from argparse import
|
|
5
|
+
from argparse import ArgumentParser, Namespace
|
|
3
6
|
from collections import namedtuple
|
|
4
7
|
from functools import partial, update_wrapper
|
|
5
8
|
from importlib.metadata import version
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pdfalyzer
|
|
3
|
-
Version: 1.16.
|
|
3
|
+
Version: 1.16.10
|
|
4
4
|
Summary: A PDF analysis toolkit. Scan a PDF with relevant YARA rules, visualize its inner tree-like data structure in living color (lots of colors), force decodes of suspicious font binaries, and more.
|
|
5
5
|
Home-page: https://github.com/michelcrypt4d4mus/pdfalyzer
|
|
6
6
|
License: GPL-3.0-or-later
|
|
@@ -9,8 +9,10 @@ Author: Michel de Cryptadamus
|
|
|
9
9
|
Author-email: michel@cryptadamus.com
|
|
10
10
|
Requires-Python: >=3.9.2,<4.0.0
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Environment :: Console
|
|
12
13
|
Classifier: Intended Audience :: Information Technology
|
|
13
14
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
14
16
|
Classifier: Programming Language :: Python :: 3
|
|
15
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -304,12 +306,6 @@ These are the naming conventions at play in The Pdfalyzer code base:
|
|
|
304
306
|
* [`PyPDF` documentation](https://pypdf.readthedocs.io/en/stable/) (latest is 4.x or something so these are the relevant docs for `pdfalyze`)
|
|
305
307
|
|
|
306
308
|
|
|
307
|
-
# TODO
|
|
308
|
-
* Highlight decodes with a lot of Javascript keywords
|
|
309
|
-
* https://github.com/mandiant/flare-floss (https://github.com/mandiant/flare-floss/releases/download/v2.1.0/floss-v2.1.0-linux.zip)
|
|
310
|
-
* https://github.com/1Project/Scanr/blob/master/emulator/emulator.py
|
|
311
|
-
|
|
312
|
-
|
|
313
309
|
[^1]: The official Adobe PDF specification calls this tree the PDF's "logical structure", which is a good example of nomenclature that does not help those who see it understand anything about what is being described. I can forgive them given that they named this thing back in the 80s, though it's a good example of why picking good names for things at the beginning is so important.
|
|
314
310
|
|
|
315
311
|
[^2]: An exception will be raised if there's any issue placing a node while parsing or if there are any nodes not reachable from the root of the tree at the end of parsing. If there are no exceptions then all internal PDF objects are guaranteed to exist in the tree except in these situations when warnings will be printed:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
.pdfalyzer.example,sha256=sh_qkUBw4hfJia_Dx2wB-fsqJInhx2sSgA7WJz3MHYo,3917
|
|
2
|
+
CHANGELOG.md,sha256=ERsstc38Mfv5mBUifZK8OGPQEJJ-3Ci5O3sllSnUzcg,12451
|
|
2
3
|
LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
3
4
|
pdfalyzer/__init__.py,sha256=q8qSdGdyUYmTYGOp_d2bRCCFASnlVt4wa-DlBikD5-M,5362
|
|
4
5
|
pdfalyzer/__main__.py,sha256=Ko_AoAyYMLIe_cmhiUSl6twheLZrGyT8aOSJ2CP7EZY,43
|
|
5
|
-
pdfalyzer/binary/binary_scanner.py,sha256=
|
|
6
|
-
pdfalyzer/config.py,sha256=
|
|
6
|
+
pdfalyzer/binary/binary_scanner.py,sha256=6U0MmVRww3eNjUyQB9vKBWaN5QA4usJLchupGepnVao,10217
|
|
7
|
+
pdfalyzer/config.py,sha256=4YMDZu3-t5RSGckjN9bT5LzXyhwHXcxi4QjzVQ4-N6U,2097
|
|
7
8
|
pdfalyzer/decorators/document_model_printer.py,sha256=2tjJItZltukmOD2wjGvl2IsBM7Gug59wMHGLpzGDbV0,2682
|
|
8
9
|
pdfalyzer/decorators/indeterminate_node.py,sha256=ivB6dX5aN8W9m0ksXhmUcixnjYjnuE7DARalH-nMjxY,6616
|
|
9
10
|
pdfalyzer/decorators/pdf_object_properties.py,sha256=I7kix5hXNguAH2VW2uINIZRHJ8xYS4JGfc6Aiakyh4c,5522
|
|
@@ -13,26 +14,26 @@ pdfalyzer/detection/constants/binary_regexes.py,sha256=eFx1VVAOzxKmlacbGgicDCp1f
|
|
|
13
14
|
pdfalyzer/detection/constants/javascript_reserved_keywords.py,sha256=CXXdWskdQa0Hs5wCci2RBVvipgZg34_cLfmkWG4Xcmg,991
|
|
14
15
|
pdfalyzer/detection/javascript_hunter.py,sha256=_wT2vkKTMlm_RGCjYsmwcmV-ag1qep3EpkHmUw0nWcQ,711
|
|
15
16
|
pdfalyzer/detection/yaralyzer_helper.py,sha256=KLGhX9qDB7eeuBbdl6mPRP1GivKkMZa79DPMTzq7b1c,2342
|
|
16
|
-
pdfalyzer/font_info.py,sha256=
|
|
17
|
+
pdfalyzer/font_info.py,sha256=Ao_y035iFBeaEf_V0WhCVdWfa1HuLnyOWRQpW5Z-MKM,6662
|
|
17
18
|
pdfalyzer/helpers/dict_helper.py,sha256=2TP0_EJBouaWD6jfnAekrEZ4M5eHKL8Tm61FgXZtBAg,303
|
|
18
19
|
pdfalyzer/helpers/filesystem_helper.py,sha256=1clV0mqKFJUJC4xU2q_ApklpHCqCclxJAVJwRp93OF0,4110
|
|
19
20
|
pdfalyzer/helpers/number_helper.py,sha256=8IlRmaOVLJsUV18VLvWRZU8SzRxL0XZjrY3sjmk2Ro4,292
|
|
20
|
-
pdfalyzer/helpers/pdf_object_helper.py,sha256=
|
|
21
|
-
pdfalyzer/helpers/rich_text_helper.py,sha256=
|
|
21
|
+
pdfalyzer/helpers/pdf_object_helper.py,sha256=2JTn2hpAB7KSxaoid20JVgLjQZqD_0IHknYfrfguLQU,1203
|
|
22
|
+
pdfalyzer/helpers/rich_text_helper.py,sha256=5fOXBDHKzh6RvJV8NK20R97MIIluuhDFVowWiVFRMAQ,2142
|
|
22
23
|
pdfalyzer/helpers/string_helper.py,sha256=75EDEFw3UWHvWF32WtvZVBbqYY3ozO4y30dtH2qVMX0,2278
|
|
23
24
|
pdfalyzer/output/character_mapping.py,sha256=MtC3jKdtMaugi5038fne0T_SFSo9QU4lZl_s7bW7gzI,2092
|
|
24
|
-
pdfalyzer/output/layout.py,sha256=
|
|
25
|
-
pdfalyzer/output/pdfalyzer_presenter.py,sha256=
|
|
25
|
+
pdfalyzer/output/layout.py,sha256=lAJQiu76E-_5MRghpRK7zuXqkhWI7ZjsptfadXXZQF8,2183
|
|
26
|
+
pdfalyzer/output/pdfalyzer_presenter.py,sha256=WG8H9kGdz5W15cS3DliUZ-7_0mjSGckiGUMNd4e9mLE,8518
|
|
26
27
|
pdfalyzer/output/styles/node_colors.py,sha256=rfsTAUF43K_buw21SZoP6L5c_cLy7S-xA4GUiWJsDkc,3986
|
|
27
28
|
pdfalyzer/output/styles/rich_theme.py,sha256=Y8QmuINlyZNIHvf3oD0CV3w2dC49NNKtvOChvudDCT8,1983
|
|
28
|
-
pdfalyzer/output/tables/decoding_stats_table.py,sha256=
|
|
29
|
+
pdfalyzer/output/tables/decoding_stats_table.py,sha256=lVZUdEiI6R0t0cx4eryZSed4-pJ_Y2JvLZoOS4xNJz4,3567
|
|
29
30
|
pdfalyzer/output/tables/font_summary_table.py,sha256=xfTqC7BlQd0agQf6nDDhkcJno7hru6mf9_xY1f5IDcw,2065
|
|
30
31
|
pdfalyzer/output/tables/pdf_node_rich_table.py,sha256=7G-FLb_EUP50kZmYCTbo8Q6taU4xKp2QIGNOnQtYbNg,5908
|
|
31
|
-
pdfalyzer/output/tables/stream_objects_table.py,sha256=
|
|
32
|
+
pdfalyzer/output/tables/stream_objects_table.py,sha256=PgQj8oTtW5_X8SMQb3FvCWDS-d4Zl6QiE44Qhiv7lTY,706
|
|
32
33
|
pdfalyzer/pdf_object_relationship.py,sha256=ug-338eoXFdD4YtDWPdzcfxP2fQDQa-GE8I3m3a01TA,5339
|
|
33
34
|
pdfalyzer/pdfalyzer.py,sha256=6JflqQJb2crXXaVA6DHHgWB45w2MBFB3pqE3AlZO5WI,11013
|
|
34
|
-
pdfalyzer/util/adobe_strings.py,sha256=
|
|
35
|
-
pdfalyzer/util/argument_parser.py,sha256=
|
|
35
|
+
pdfalyzer/util/adobe_strings.py,sha256=yZPVULsnXZ6GIqWhyXlQdcqzo_4_OJQzUz-uJZGWu-I,5032
|
|
36
|
+
pdfalyzer/util/argument_parser.py,sha256=CJpWsycG9SCFE0SRXVCuQqPcgI6nwR8k3RzqMguDnhE,11996
|
|
36
37
|
pdfalyzer/util/debugging.py,sha256=nE64VUQbdu2OQRC8w8-AJkMtBOy8Kf3mjozuFslfWsw,156
|
|
37
38
|
pdfalyzer/util/exceptions.py,sha256=XLFFTdx1n6i_VCmvuzvIOCa-djJvGEitfo9lhy3zq0k,98
|
|
38
39
|
pdfalyzer/util/pdf_parser_manager.py,sha256=FVRYAYsCd0y5MAm--qvXnwCZnDtB3x85FdJtb-gpyw4,3109
|
|
@@ -42,8 +43,8 @@ pdfalyzer/yara_rules/__init.py__,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
42
43
|
pdfalyzer/yara_rules/didier_stevens.yara,sha256=4XhqafU09xzYUP7LCygHHBXOpAXUblJf6Tkn37MUy0w,7253
|
|
43
44
|
pdfalyzer/yara_rules/lprat.static_file_analysis.yara,sha256=i0CwRH8pBx_QshKFTQtr1CP5n378EZelsF2FxMY2y5A,21859
|
|
44
45
|
pdfalyzer/yara_rules/pdf_malware.yara,sha256=jDqSTP5BQSi2I_1xZiFZdy68I4oVWDat2j08-qdfbto,91063
|
|
45
|
-
pdfalyzer-1.16.
|
|
46
|
-
pdfalyzer-1.16.
|
|
47
|
-
pdfalyzer-1.16.
|
|
48
|
-
pdfalyzer-1.16.
|
|
49
|
-
pdfalyzer-1.16.
|
|
46
|
+
pdfalyzer-1.16.10.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
47
|
+
pdfalyzer-1.16.10.dist-info/METADATA,sha256=Hdbh0DetO-jbNYELTwLRh4Z0Dy6Y7V7aAzD0rQEDbEw,26043
|
|
48
|
+
pdfalyzer-1.16.10.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
49
|
+
pdfalyzer-1.16.10.dist-info/entry_points.txt,sha256=aZurgt-Xg3pojS7oTRI4hNLpK1hO4kTfChf0x2eQoD8,147
|
|
50
|
+
pdfalyzer-1.16.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|