pdfalyzer 1.14.5__py3-none-any.whl → 1.14.7__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.
- CHANGELOG.md +7 -0
- pdfalyzer/__main__.py +1 -1
- pdfalyzer/decorators/document_model_printer.py +0 -1
- pdfalyzer/decorators/pdf_object_properties.py +0 -2
- pdfalyzer/decorators/pdf_tree_node.py +1 -3
- pdfalyzer/detection/javascript_hunter.py +0 -2
- pdfalyzer/detection/yaralyzer_helper.py +13 -1
- pdfalyzer/helpers/number_helper.py +3 -4
- pdfalyzer/helpers/pdf_object_helper.py +1 -3
- pdfalyzer/helpers/string_helper.py +0 -2
- pdfalyzer/output/layout.py +1 -1
- pdfalyzer/output/pdfalyzer_presenter.py +1 -1
- pdfalyzer/output/styles/node_colors.py +0 -1
- pdfalyzer/output/tables/decoding_stats_table.py +0 -1
- pdfalyzer/util/adobe_strings.py +0 -2
- pdfalyzer/util/argument_parser.py +1 -3
- {pdfalyzer-1.14.5.dist-info → pdfalyzer-1.14.7.dist-info}/METADATA +7 -7
- {pdfalyzer-1.14.5.dist-info → pdfalyzer-1.14.7.dist-info}/RECORD +21 -22
- pdfalyzer/output/tables/Whether or not PaulLeRoux invented Bit.md +0 -3
- {pdfalyzer-1.14.5.dist-info → pdfalyzer-1.14.7.dist-info}/LICENSE +0 -0
- {pdfalyzer-1.14.5.dist-info → pdfalyzer-1.14.7.dist-info}/WHEEL +0 -0
- {pdfalyzer-1.14.5.dist-info → pdfalyzer-1.14.7.dist-info}/entry_points.txt +0 -0
CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# NEXT RELEASE
|
|
2
2
|
|
|
3
|
+
### 1.14.7
|
|
4
|
+
* Bump `yaralyzer` version to 0.9.4 (and thus bump `yara-python` to 4.3.0+)
|
|
5
|
+
* Remove unused imports, remove unused `requirements.txt` file.
|
|
6
|
+
|
|
7
|
+
### 1.14.6
|
|
8
|
+
* Fix issue where additional YARA rules supplied with `--yara-file` option were not being used
|
|
9
|
+
|
|
3
10
|
### 1.14.5
|
|
4
11
|
* Update PDF matching YARA rules file (@anotherbridge)
|
|
5
12
|
|
pdfalyzer/__main__.py
CHANGED
|
@@ -10,7 +10,6 @@ from rich.markup import escape
|
|
|
10
10
|
from pdfalyzer.helpers.pdf_object_helper import pypdf_class_name
|
|
11
11
|
from pdfalyzer.helpers.string_helper import pp, INDENT_DEPTH
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
INDENT_SPACES = ' ' * INDENT_DEPTH
|
|
15
14
|
INDENT_JOIN = "\n" + INDENT_SPACES
|
|
16
15
|
VALUE_WIDTH = 30
|
|
@@ -3,9 +3,7 @@ Decorator for PyPDF2 PdfObject that extracts a couple of properties (type, label
|
|
|
3
3
|
"""
|
|
4
4
|
from typing import Any, List, Optional, Union
|
|
5
5
|
|
|
6
|
-
from anytree import NodeMixin
|
|
7
6
|
from PyPDF2.generic import DictionaryObject, IndirectObject, NumberObject, PdfObject
|
|
8
|
-
from rich.markup import escape
|
|
9
7
|
from rich.text import Text
|
|
10
8
|
from yaralyzer.util.logging import log
|
|
11
9
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
PDF node decorator - wraps actual PDF objects to make them anytree nodes.
|
|
3
3
|
Also adds decorators/generators for Rich text representation.
|
|
4
4
|
|
|
5
|
-
Child/parent relationships should be set using the add_child()
|
|
5
|
+
Child/parent relationships should be set using the add_child() and set_parent()
|
|
6
6
|
methods and not set directly. (TODO: this could be done better with anytree
|
|
7
7
|
hooks)
|
|
8
8
|
"""
|
|
@@ -13,7 +13,6 @@ from PyPDF2.errors import PdfReadError
|
|
|
13
13
|
from PyPDF2.generic import IndirectObject, PdfObject, StreamObject
|
|
14
14
|
from rich.markup import escape
|
|
15
15
|
from rich.text import Text
|
|
16
|
-
from yaralyzer.helpers.string_helper import comma_join
|
|
17
16
|
from yaralyzer.output.rich_console import console
|
|
18
17
|
from yaralyzer.util.logging import log
|
|
19
18
|
|
|
@@ -224,4 +223,3 @@ class PdfTreeNode(NodeMixin, PdfObjectProperties):
|
|
|
224
223
|
|
|
225
224
|
def __repr__(self) -> str:
|
|
226
225
|
return self.__str__()
|
|
227
|
-
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Count the Javascript (at least the 3+ letter words, record big matches
|
|
3
3
|
"""
|
|
4
|
-
from os import path
|
|
5
4
|
import re
|
|
6
5
|
|
|
7
|
-
from pdfalyzer.config import PdfalyzerConfig
|
|
8
6
|
from pdfalyzer.detection.constants.javascript_reserved_keywords import JAVASCRIPT_RESERVED_KEYWORDS
|
|
9
7
|
from pdfalyzer.helpers.string_helper import count_regex_matches_in_text
|
|
10
8
|
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
Class to help with the pre-configured YARA rules in /yara.
|
|
3
3
|
"""
|
|
4
4
|
from importlib.resources import as_file, files
|
|
5
|
+
from sys import exit
|
|
5
6
|
from typing import Optional, Union
|
|
6
7
|
|
|
8
|
+
from yaralyzer.config import YaralyzerConfig
|
|
7
9
|
from yaralyzer.yaralyzer import Yaralyzer
|
|
8
10
|
|
|
9
11
|
YARA_RULES_DIR = files('pdfalyzer').joinpath('yara_rules')
|
|
@@ -31,4 +33,14 @@ def _build_yaralyzer(scannable: Union[bytes, str], label: Optional[str] = None)
|
|
|
31
33
|
with as_file(YARA_RULES_DIR.joinpath(YARA_RULES_FILES[1])) as yara1:
|
|
32
34
|
with as_file(YARA_RULES_DIR.joinpath(YARA_RULES_FILES[2])) as yara2:
|
|
33
35
|
rules_paths = [str(y) for y in [yara0, yara1, yara2]]
|
|
34
|
-
|
|
36
|
+
rules_paths += YaralyzerConfig.args.yara_rules_files or []
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
return Yaralyzer.for_rules_files(rules_paths, scannable, label)
|
|
40
|
+
except ValueError as e:
|
|
41
|
+
# TODO: use YARA_FILE_DOES_NOT_EXIST_ERROR_MSG variable
|
|
42
|
+
if "it doesn't exist" in str(e):
|
|
43
|
+
print(str(e))
|
|
44
|
+
exit(1)
|
|
45
|
+
else:
|
|
46
|
+
raise e
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
from typing import Union
|
|
3
|
-
|
|
4
|
-
from rich.text import Text
|
|
1
|
+
"""Some simple math helpers."""
|
|
5
2
|
|
|
6
3
|
|
|
7
4
|
def is_divisible_by(n: int, divisor: int) -> bool:
|
|
5
|
+
"""Returns True if 'n' is evenly divisible by 'divisor'."""
|
|
8
6
|
return divmod(n, divisor)[1] == 0
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
def is_even(n: int) -> bool:
|
|
10
|
+
"""Returns True if 'n' is even."""
|
|
12
11
|
return is_divisible_by(n, 2)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Some methods to help with the direct manipulation/processing of PyPDF2's PdfObjects
|
|
3
3
|
"""
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import List, Optional
|
|
5
5
|
|
|
6
6
|
from PyPDF2.generic import IndirectObject, PdfObject
|
|
7
|
-
from rich.text import Text
|
|
8
|
-
from yaralyzer.util.logging import log
|
|
9
7
|
|
|
10
8
|
from pdfalyzer.pdf_object_relationship import PdfObjectRelationship
|
|
11
9
|
from pdfalyzer.util.adobe_strings import *
|
|
@@ -5,9 +5,7 @@ import re
|
|
|
5
5
|
from pprint import PrettyPrinter
|
|
6
6
|
from typing import List, Pattern, Union
|
|
7
7
|
|
|
8
|
-
from PyPDF2.generic import PdfObject
|
|
9
8
|
from yaralyzer.output.rich_console import console_width
|
|
10
|
-
from yaralyzer.util.logging import log
|
|
11
9
|
|
|
12
10
|
INDENT_DEPTH = 4
|
|
13
11
|
PRETTY_PRINT_WIDTH = 60
|
pdfalyzer/output/layout.py
CHANGED
|
@@ -4,7 +4,7 @@ Methods to help with the design of the output
|
|
|
4
4
|
from rich import box
|
|
5
5
|
from rich.padding import Padding
|
|
6
6
|
from rich.panel import Panel
|
|
7
|
-
from rich.table import
|
|
7
|
+
from rich.table import Table
|
|
8
8
|
from yaralyzer.output.rich_console import console, console_width
|
|
9
9
|
|
|
10
10
|
DEFAULT_SUBTABLE_COL_STYLES = ['white', 'bright_white']
|
|
@@ -10,7 +10,6 @@ from PyPDF2.generic import (ArrayObject, ByteStringObject, EncodedStreamObject,
|
|
|
10
10
|
StreamObject, TextStringObject)
|
|
11
11
|
from yaralyzer.output.rich_console import YARALYZER_THEME_DICT
|
|
12
12
|
|
|
13
|
-
from pdfalyzer.helpers.pdf_object_helper import pypdf_class_name
|
|
14
13
|
from pdfalyzer.output.styles.rich_theme import PDF_ARRAY
|
|
15
14
|
from pdfalyzer.util import adobe_strings
|
|
16
15
|
|
|
@@ -3,7 +3,6 @@ from numbers import Number
|
|
|
3
3
|
from rich.table import Table
|
|
4
4
|
from rich.text import Text
|
|
5
5
|
from yaralyzer.helpers.rich_text_helper import CENTER, na_txt, prefix_with_plain_text_obj
|
|
6
|
-
from yaralyzer.util.logging import log
|
|
7
6
|
|
|
8
7
|
from pdfalyzer.helpers.rich_text_helper import pct_txt
|
|
9
8
|
from pdfalyzer.output.layout import generate_subtable, half_width, pad_header
|
pdfalyzer/util/adobe_strings.py
CHANGED
|
@@ -3,12 +3,10 @@ from argparse import ArgumentError, ArgumentParser
|
|
|
3
3
|
from collections import namedtuple
|
|
4
4
|
from functools import partial, update_wrapper
|
|
5
5
|
from importlib.metadata import version
|
|
6
|
-
from os import
|
|
6
|
+
from os import getcwd, path
|
|
7
7
|
from typing import List
|
|
8
8
|
|
|
9
9
|
from rich_argparse_plus import RichHelpFormatterPlus
|
|
10
|
-
from yaralyzer.config import YaralyzerConfig
|
|
11
|
-
from yaralyzer.helpers.rich_text_helper import console
|
|
12
10
|
from yaralyzer.util.argument_parser import export, parser, parse_arguments as parse_yaralyzer_args
|
|
13
11
|
from yaralyzer.util.logging import log, log_and_print, log_argparse_result, log_current_config, log_invocation
|
|
14
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pdfalyzer
|
|
3
|
-
Version: 1.14.
|
|
3
|
+
Version: 1.14.7
|
|
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
|
|
@@ -23,7 +23,7 @@ Requires-Dist: chardet (>=5.0.0,<6.0.0)
|
|
|
23
23
|
Requires-Dist: python-dotenv (>=0.21.0,<0.22.0)
|
|
24
24
|
Requires-Dist: rich (>=12.5.1,<13.0.0)
|
|
25
25
|
Requires-Dist: rich-argparse-plus (>=0.3.1,<0.4.0)
|
|
26
|
-
Requires-Dist: yaralyzer (>=0.9.
|
|
26
|
+
Requires-Dist: yaralyzer (>=0.9.4,<0.10.0)
|
|
27
27
|
Project-URL: Documentation, https://github.com/michelcrypt4d4mus/pdfalyzer
|
|
28
28
|
Project-URL: Repository, https://github.com/michelcrypt4d4mus/pdfalyzer
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
@@ -81,6 +81,7 @@ See [PyPDF2 installation notes](https://github.com/py-pdf/PyPDF2#installation) a
|
|
|
81
81
|
```bash
|
|
82
82
|
sudo apt-get install build-essential libssl-dev libffi-dev rustc
|
|
83
83
|
```
|
|
84
|
+
1. If you get a YARA internal error number you can look up what it actually means [here](https://github.com/VirusTotal/yara/blob/master/libyara/include/yara/error.h).
|
|
84
85
|
|
|
85
86
|
# Usage
|
|
86
87
|
|
|
@@ -94,13 +95,13 @@ If you provide none of the flags in the `ANALYSIS SELECTION` section of the `--h
|
|
|
94
95
|
1. `pdfalyzer lacan_buys_the_dip.pdf`
|
|
95
96
|
1. `pdfalyzer lacan_buys_the_dip.pdf -d -t -r -f -y -c`
|
|
96
97
|
|
|
97
|
-
The `--streams` output is the one used to hunt for patterns in the embedded bytes and can be _extremely_ verbose depending on the `--quote-char` options chosen (or not chosen) and contents of the PDF. [The Yaralyzer](https://github.com/michelcrypt4d4mus/yaralyzer)
|
|
98
|
+
The `--streams` output is the one used to hunt for patterns in the embedded bytes and can be _extremely_ verbose depending on the `--quote-char` options chosen (or not chosen) and contents of the PDF. [The Yaralyzer](https://github.com/michelcrypt4d4mus/yaralyzer) handles this task; if you want to hunt for patterns in the bytes other than bytes surrounded by backticks/frontslashes/brackets/quotes/etc. you may want to use The Yaralyzer directly. As The Yaralyzer is a prequisite for The Pdfalyzer you may already have the `yaralyze` command installed and available.
|
|
98
99
|
|
|
99
100
|
### Setting Command Line Options Permanently With A `.pdfalyzer` File
|
|
100
101
|
When you run `pdfalyze` on some PDF the tool will check for a file called `.pdfalyzer` first in the current directory and then in the home directory. If it finds a file in either such place it will load configuration options from it. Documentation on the options that can be configured with these files lives in [`.pdfalyzer.example`](.pdfalyzer.example) which doubles as an example file you can copy into place and edit to your needs. Handy if you find yourself typing the same command line options over and over again.
|
|
101
102
|
|
|
102
103
|
### Environment Variables
|
|
103
|
-
Even if don't configure your own `.pdfalyzer` file you may still glean some insight from reading the descriptions of the various variables in [
|
|
104
|
+
Even if you don't configure your own `.pdfalyzer` file you may still glean some insight from reading the descriptions of the various variables in [`.pdfalyzer.example`](.pdfalyzer.example); there's a little more exposition there than in the output of `pdfalyze -h`.
|
|
104
105
|
|
|
105
106
|
### Colors And Themes
|
|
106
107
|
Run `pdfalyzer_show_color_theme` to see the color theme employed.
|
|
@@ -152,7 +153,7 @@ for node in pdfalyzer.stream_nodes():
|
|
|
152
153
|
node = pdfalyzer.find_node_by_idnum(44)
|
|
153
154
|
pdf_object: PdfObject = node.obj
|
|
154
155
|
|
|
155
|
-
# Use anytree's findall_by_attr to find nodes with a given property
|
|
156
|
+
# Use anytree's findall_by_attr() to find nodes with a given property
|
|
156
157
|
from anytree.search import findall_by_attr
|
|
157
158
|
page_nodes = findall_by_attr(pdfalyzer.pdf_tree, name='type', value='/Page')
|
|
158
159
|
|
|
@@ -270,7 +271,7 @@ This tool was built to fill a gap in the PDF assessment landscape following [my
|
|
|
270
271
|
Thus I felt the world might be slightly improved if I strung together a couple of more stable/well known/actively maintained open source projects ([AnyTree](https://github.com/c0fec0de/anytree), [PyPDF2](https://github.com/py-pdf/PyPDF2), [Rich](https://github.com/Textualize/rich), and [YARA](https://github.com/VirusTotal/yara-python) via [The Yaralyzer](https://github.com/michelcrypt4d4mus/yaralyzer)) into this tool.
|
|
271
272
|
|
|
272
273
|
# Contributing
|
|
273
|
-
One easy way of contributing is to run [the script to test against all the PDFs in `~/Documents`](scripts/test_against_all_pdfs_in_Documents_folder.sh) and
|
|
274
|
+
One easy way of contributing is to run [the script to test against all the PDFs in your `~/Documents` folder](scripts/test_against_all_pdfs_in_Documents_folder.sh) and report any issues.
|
|
274
275
|
|
|
275
276
|
Beyond that see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
276
277
|
|
|
@@ -309,4 +310,3 @@ These are the naming conventions at play in The Pdfalyzer code base:
|
|
|
309
310
|
|
|
310
311
|
[^6]: At least they weren't catching it as of September 2022.
|
|
311
312
|
|
|
312
|
-
|
|
@@ -1,38 +1,37 @@
|
|
|
1
|
-
CHANGELOG.md,sha256=
|
|
1
|
+
CHANGELOG.md,sha256=rd0fHZG0y8IXdXsWztrYwC_dG7kOhqZeElCpxDAGbok,10793
|
|
2
2
|
LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
3
3
|
pdfalyzer/__init__.py,sha256=9yUk9qcFX1QJuFtNTmsvZXQ6is8_8FGOz2DR1xjp-Rc,3183
|
|
4
|
-
pdfalyzer/__main__.py,sha256=
|
|
4
|
+
pdfalyzer/__main__.py,sha256=Ko_AoAyYMLIe_cmhiUSl6twheLZrGyT8aOSJ2CP7EZY,43
|
|
5
5
|
pdfalyzer/binary/binary_scanner.py,sha256=iZN0vrqBFgADR3ACGY5SE9wAcQcNs0hlGgrMg1530sg,10121
|
|
6
6
|
pdfalyzer/config.py,sha256=oN-pVR037lt3giRsnsm4c8ku5hCW8ChFqYFi9V7w1qU,1918
|
|
7
|
-
pdfalyzer/decorators/document_model_printer.py,sha256=
|
|
7
|
+
pdfalyzer/decorators/document_model_printer.py,sha256=lp6PvyVsxfNzW9k2IEe_8zmAtrPLiGdeFv3F5fCBfpg,2642
|
|
8
8
|
pdfalyzer/decorators/indeterminate_node.py,sha256=f9Us3Vpr7DIA7PUEvLoMSurRyWySFTiT6Pyjt120PRs,6449
|
|
9
|
-
pdfalyzer/decorators/pdf_object_properties.py,sha256=
|
|
10
|
-
pdfalyzer/decorators/pdf_tree_node.py,sha256=
|
|
9
|
+
pdfalyzer/decorators/pdf_object_properties.py,sha256=28jNnav9NYVfMphF7HZQpau0NLV9m-Fzg-S2jBZrkUU,5507
|
|
10
|
+
pdfalyzer/decorators/pdf_tree_node.py,sha256=kdMXdlfcGhaHFDvHjVxFL4jFQ8NJvNXFm53KddxKG7Q,10737
|
|
11
11
|
pdfalyzer/decorators/pdf_tree_verifier.py,sha256=pk0NysYt8PxsKh532IfNSrcoHpdb-wUxUw2TjJFVqDM,4542
|
|
12
12
|
pdfalyzer/detection/constants/binary_regexes.py,sha256=rcgQ984q6a8CFvV2QX4-asuqT5w_aH8LPqoN2N13eOM,1665
|
|
13
13
|
pdfalyzer/detection/constants/javascript_reserved_keywords.py,sha256=CXXdWskdQa0Hs5wCci2RBVvipgZg34_cLfmkWG4Xcmg,991
|
|
14
|
-
pdfalyzer/detection/javascript_hunter.py,sha256=
|
|
15
|
-
pdfalyzer/detection/yaralyzer_helper.py,sha256=
|
|
14
|
+
pdfalyzer/detection/javascript_hunter.py,sha256=pxdy_NIr15uRLvus-iDGpFFCPokf_mSqQJUPndYsD64,710
|
|
15
|
+
pdfalyzer/detection/yaralyzer_helper.py,sha256=v0XN36F2EjioAi4rP1qNqEj_aZJOMDfVQhGiY3Xg66I,1750
|
|
16
16
|
pdfalyzer/font_info.py,sha256=L5ykKvlifAQv2uw-pKqxbQPqWrvbli0IcO8DgDK0SQo,6665
|
|
17
17
|
pdfalyzer/helpers/dict_helper.py,sha256=2TP0_EJBouaWD6jfnAekrEZ4M5eHKL8Tm61FgXZtBAg,303
|
|
18
|
-
pdfalyzer/helpers/number_helper.py,sha256=
|
|
19
|
-
pdfalyzer/helpers/pdf_object_helper.py,sha256=
|
|
18
|
+
pdfalyzer/helpers/number_helper.py,sha256=9XVxI6fygHIb0oqkOmFQUlvTxED9QKtwxvIYYGyUYU8,290
|
|
19
|
+
pdfalyzer/helpers/pdf_object_helper.py,sha256=u0j8B9mY8s5cTGo5LmDcozotvvgZNrwwJ4w_ipQqiXw,1105
|
|
20
20
|
pdfalyzer/helpers/rich_text_helper.py,sha256=Ytd1n1ONmEe7BxEwT-LLT6rt7QF-m_wnapPdwWYT4Pc,1800
|
|
21
|
-
pdfalyzer/helpers/string_helper.py,sha256=
|
|
21
|
+
pdfalyzer/helpers/string_helper.py,sha256=75EDEFw3UWHvWF32WtvZVBbqYY3ozO4y30dtH2qVMX0,2278
|
|
22
22
|
pdfalyzer/output/character_mapping.py,sha256=lKPf-Xw3K3A3h33EOB_B-YaaxuFie7h7PUXCrphuwmw,2095
|
|
23
|
-
pdfalyzer/output/layout.py,sha256=
|
|
24
|
-
pdfalyzer/output/pdfalyzer_presenter.py,sha256=
|
|
25
|
-
pdfalyzer/output/styles/node_colors.py,sha256=
|
|
23
|
+
pdfalyzer/output/layout.py,sha256=0QoFVUzOQfOAfhOAsAO_LH-kCdJCyuwilpcelHhlSpU,2054
|
|
24
|
+
pdfalyzer/output/pdfalyzer_presenter.py,sha256=73M5uTnUoG4t7va55V_PRpZAjgkWrk6iCYIQPbrHmUQ,8133
|
|
25
|
+
pdfalyzer/output/styles/node_colors.py,sha256=sw-e97iRwAzqBdg0sP_b__9KCe6MbRcgMzQlPL6sCrA,3987
|
|
26
26
|
pdfalyzer/output/styles/rich_theme.py,sha256=Y8QmuINlyZNIHvf3oD0CV3w2dC49NNKtvOChvudDCT8,1983
|
|
27
|
-
pdfalyzer/output/tables/
|
|
28
|
-
pdfalyzer/output/tables/decoding_stats_table.py,sha256=J97FrkV8vnwBJYniIJaBLp-_v7vRrxZd7VXEqrgRl6M,3500
|
|
27
|
+
pdfalyzer/output/tables/decoding_stats_table.py,sha256=mhQOiWhmovaC4sop38WcxStv_bIdAlQWUysAz5fW4MU,3461
|
|
29
28
|
pdfalyzer/output/tables/font_summary_table.py,sha256=xfTqC7BlQd0agQf6nDDhkcJno7hru6mf9_xY1f5IDcw,2065
|
|
30
29
|
pdfalyzer/output/tables/pdf_node_rich_table.py,sha256=Soz5gkSl9pMFbwmGxyKyil_9X-Pl-fI0i8s0cvwLC3Q,5909
|
|
31
30
|
pdfalyzer/output/tables/stream_objects_table.py,sha256=nzCTci8Kqs8Pyghad3L5KWHDdIWRSrKCRNW8geA_rMo,707
|
|
32
31
|
pdfalyzer/pdf_object_relationship.py,sha256=fQs0Jx1Tx2aC-ON_hGBMJ96vWkL7JOP_ykustQWVzDQ,5391
|
|
33
32
|
pdfalyzer/pdfalyzer.py,sha256=hifxJfBPoAWL8EJPQ7nEnI5WvijFj3ijlFJ2D4zkp3E,11016
|
|
34
|
-
pdfalyzer/util/adobe_strings.py,sha256=
|
|
35
|
-
pdfalyzer/util/argument_parser.py,sha256=
|
|
33
|
+
pdfalyzer/util/adobe_strings.py,sha256=A4V3BI2pOaOmF4_RCbtsLxfv5LBWWKVtqrW562DzR6Y,4983
|
|
34
|
+
pdfalyzer/util/argument_parser.py,sha256=EiOBaMRFvb9C_Zq3Odhw0KECSvElEfm8hGyljsOmzV4,8053
|
|
36
35
|
pdfalyzer/util/debugging.py,sha256=nE64VUQbdu2OQRC8w8-AJkMtBOy8Kf3mjozuFslfWsw,156
|
|
37
36
|
pdfalyzer/util/exceptions.py,sha256=XLFFTdx1n6i_VCmvuzvIOCa-djJvGEitfo9lhy3zq0k,98
|
|
38
37
|
pdfalyzer/util/pdf_parser_manager.py,sha256=FVRYAYsCd0y5MAm--qvXnwCZnDtB3x85FdJtb-gpyw4,3109
|
|
@@ -40,8 +39,8 @@ pdfalyzer/yara_rules/PDF.yara,sha256=sEUx5t0knhHcUJgHciN3TdZ2Bfp4OnvmrCLlmhFCICo
|
|
|
40
39
|
pdfalyzer/yara_rules/PDF_binary_stream.yara,sha256=oWRPLe5yQiRFMvi3BTHNTlB6T7NcAuxKn0C9OSvgJSM,804
|
|
41
40
|
pdfalyzer/yara_rules/__init.py__,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
41
|
pdfalyzer/yara_rules/lprat.static_file_analysis.yara,sha256=i0CwRH8pBx_QshKFTQtr1CP5n378EZelsF2FxMY2y5A,21859
|
|
43
|
-
pdfalyzer-1.14.
|
|
44
|
-
pdfalyzer-1.14.
|
|
45
|
-
pdfalyzer-1.14.
|
|
46
|
-
pdfalyzer-1.14.
|
|
47
|
-
pdfalyzer-1.14.
|
|
42
|
+
pdfalyzer-1.14.7.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
43
|
+
pdfalyzer-1.14.7.dist-info/METADATA,sha256=f73GJTig6iTQIUoAvou6hoMPGLafkgfmw_tkDq7nckA,24474
|
|
44
|
+
pdfalyzer-1.14.7.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
45
|
+
pdfalyzer-1.14.7.dist-info/entry_points.txt,sha256=rl7OpBvxSNmV90rjTPCjhXTtjRMqZxHUAQfP0Cdmt1Y,111
|
|
46
|
+
pdfalyzer-1.14.7.dist-info/RECORD,,
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
Whether or not #PaulLeRoux invented #Bitcoin is an interesting question but even if he didn't, the design and politics of #TrueCrypt finally provide an answer to that ancient question:
|
|
2
|
-
|
|
3
|
-
If a brutal international crime kingpin had the skills and the knowledge to design an encryption system to protect him from the FBI/CIA/FSB/Mossad/everyone, how would he design it?
|
|
File without changes
|
|
File without changes
|
|
File without changes
|