Skip to content

Commit 0e372b3

Browse files
authored
Merge pull request #445 from volatilityfoundation/release/v1.0.0
Release/v1.0.0
2 parents 93c6a62 + 2797ac5 commit 0e372b3

File tree

259 files changed

+1124
-1068
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

259 files changed

+1124
-1068
lines changed

.github/workflows/build-pypi.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: build-pypi
2+
3+
on:
4+
push:
5+
branches:
6+
- stable
7+
- develop
8+
- 'release/**'
9+
10+
pull_request:
11+
branches:
12+
- stable
13+
- 'release/**'
14+
15+
jobs:
16+
17+
build:
18+
runs-on: ubuntu-latest
19+
steps:
20+
- uses: actions/checkout@v2
21+
22+
- name: Set up Python 3.x
23+
uses: actions/setup-python@v2
24+
with:
25+
python-version: '3.x'
26+
27+
- name: Install dependencies
28+
run: |
29+
python -m pip install --upgrade pip
30+
pip install setuptools wheel
31+
32+
- name: Build PyPi packages
33+
run: |
34+
python setup.py sdist --formats=gztar,zip
35+
python setup.py bdist_wheel
36+
37+
- name: Archive dist
38+
uses: actions/upload-artifact@v2
39+
with:
40+
name: volatility3-pypi
41+
path: |
42+
dist/

.gitignore

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ __pycache__
44

55
# Sphinx generated files
66
doc/build
7-
doc/source/volatility.*
7+
doc/source/volatility3.*
88

99
# Pycharm/PyDev development files
1010
workspace.xml
@@ -14,14 +14,14 @@ workspace.xml
1414
# Manually generated files
1515
.mypy_cache
1616
stubs
17-
volatility/symbols/linux*
18-
volatility/symbols/windows*
19-
volatility/symbols/mac*
17+
volatility3/symbols/linux*
18+
volatility3/symbols/windows*
19+
volatility3/symbols/mac*
2020

2121
# Mac metadata files
2222
.DS_Store
2323

24-
# Volatility's config
24+
# Volatility's config
2525
config*.json
2626

2727
# Pyinstaller files

MANIFEST.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ prune development
22
include * .*
33
include doc/make.bat doc/Makefile
44
recursive-include doc/source *
5-
recursive-include volatility *.json
6-
recursive-exclude doc/source volatility*.rst
5+
recursive-include volatility3 *.json
6+
recursive-exclude doc/source volatility3.*.rst

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ The hashes to verify whether any of the symbol pack files have downloaded succes
7777
<https://downloads.volatilityfoundation.org/volatility3/symbols/SHA1SUMS>
7878
<https://downloads.volatilityfoundation.org/volatility3/symbols/MD5SUMS>
7979

80-
Symbol tables zip files must be placed, as named, into the `volatility/symbols` directory (or just the symbols directory next to the executable file).
80+
Symbol tables zip files must be placed, as named, into the `volatility3/symbols` directory (or just the symbols directory next to the executable file).
8181

8282
Windows symbols that cannot be found will be queried, downloaded, generated and cached. Mac and Linux symbol tables must be manually produced by a tool such as [dwarf2json](https://github.com/volatilityfoundation/dwarf2json).
8383

development/schema_validate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
logger.addHandler(console)
1818
logger.setLevel(logging.DEBUG)
1919

20-
from volatility import schemas
20+
from volatility3 import schemas
2121

2222
if __name__ == '__main__':
2323
parser = argparse.ArgumentParser("Validates ")

doc/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ help:
1515

1616
# Ensure we clean the autodoc files when we clean
1717
clean:
18-
-rm source/volatility.*.rst
18+
-rm source/volatility3.*.rst
1919
@$(SPHINXBUILD) -M clean "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
2020

2121
# Catch-all target: route all unknown targets to Sphinx using the new

doc/source/basics.rst

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Volatility splits memory analysis down to several components:
77
* Templates and Objects
88
* Symbol Tables
99

10-
Volatility 3 stores all of these within a :py:class:`Context <volatility.framework.interfaces.context.ContextInterface>`,
10+
Volatility 3 stores all of these within a :py:class:`Context <volatility3.framework.interfaces.context.ContextInterface>`,
1111
which acts as a container for all the various layers and tables necessary to conduct memory analysis.
1212

1313
Memory layers
@@ -21,8 +21,8 @@ two other sources. These are typically handled by programs that process file fo
2121
processor, but these are all translations (either in the geometric or linguistic sense) of the original data.
2222

2323
In Volatility 3 this is represented by a directed graph, whose end nodes are
24-
:py:class:`DataLayers <volatility.framework.interfaces.layers.DataLayerInterface>` and whose internal nodes are
25-
specifically called a :py:class:`TranslationLayer <volatility.framework.interfaces.layers.TranslationLayerInterface>`.
24+
:py:class:`DataLayers <volatility3.framework.interfaces.layers.DataLayerInterface>` and whose internal nodes are
25+
specifically called a :py:class:`TranslationLayer <volatility3.framework.interfaces.layers.TranslationLayerInterface>`.
2626
In this way, a raw memory image in the LiME file format and a page file can be
2727
combined to form a single Intel virtual memory layer. When requesting addresses from the Intel layer, it will use the
2828
Intel memory mapping algorithm, along with the address of the directory table base or page table map, to translate that
@@ -39,17 +39,17 @@ Templates and Objects
3939

4040
Once we can address contiguous chunks of memory with a means to translate a virtual address (as seen by the programs)
4141
into the actual data used by the processor, we can start pulling out
42-
:py:class:`Objects <volatility.framework.interfaces.objects.ObjectInterface>` by taking a
43-
:py:class:`~volatility.framework.interfaces.objects.Template` and constructing
44-
it on the memory layer at a specific offset. A :py:class:`~volatility.framework.interfaces.objects.Template` contains
42+
:py:class:`Objects <volatility3.framework.interfaces.objects.ObjectInterface>` by taking a
43+
:py:class:`~volatility3.framework.interfaces.objects.Template` and constructing
44+
it on the memory layer at a specific offset. A :py:class:`~volatility3.framework.interfaces.objects.Template` contains
4545
all the information you can know about the structure of the object without actually being populated by any data.
46-
As such a :py:class:`~volatility.framework.interfaces.objects.Template` can tell you the size of a structure and its
46+
As such a :py:class:`~volatility3.framework.interfaces.objects.Template` can tell you the size of a structure and its
4747
members, how far into the structure a particular member lives and potentially what various values in that field would
4848
mean, but not what resides in a particular member.
4949

50-
Using a :py:class:`~volatility.framework.interfaces.objects.Template` on a memory layer at a particular offset, an
51-
:py:class:`Object <volatility.framework.interfaces.objects.ObjectInterface>` can be constructed. In Volatility 3, once an
52-
:py:class:`Object <volatility.framework.interfaces.objects.ObjectInterface>` has been created, the data has been read from the
50+
Using a :py:class:`~volatility3.framework.interfaces.objects.Template` on a memory layer at a particular offset, an
51+
:py:class:`Object <volatility3.framework.interfaces.objects.ObjectInterface>` can be constructed. In Volatility 3, once an
52+
:py:class:`Object <volatility3.framework.interfaces.objects.ObjectInterface>` has been created, the data has been read from the
5353
layer and is not read again. An object allows its members to be interrogated and in particular allows pointers to be
5454
followed, providing easy access to the data contained in the object.
5555

@@ -62,23 +62,23 @@ Symbol Tables
6262
-------------
6363

6464
Most compiled programs know of their own templates, and define the structure (and location within the program) of these
65-
templates as a :py:class:`Symbol <volatility.framework.interfaces.symbols.SymbolInterface>`. A
66-
:py:class:`Symbol <volatility.framework.interfaces.symbols.SymbolInterface>` is often an address and a template and can
65+
templates as a :py:class:`Symbol <volatility3.framework.interfaces.symbols.SymbolInterface>`. A
66+
:py:class:`Symbol <volatility3.framework.interfaces.symbols.SymbolInterface>` is often an address and a template and can
6767
be used to refer to either independently. Lookup tables of these symbols are often produced as debugging information
6868
alongside the compilation of the program. Volatility 3 provides access to these through a
69-
:py:class:`SymbolTable <volatility.framework.interfaces.symbols.SymbolTableInterface>`, many of which can be collected
70-
within a :py:class:`~volatility.framework.contexts.Context` as a :py:class:`SymbolSpace <volatility.framework.interfaces.symbols.SymbolSpaceInterface>`.
71-
A :py:class:`~volatility.framework.contexts.Context` can store only one :py:class:`~volatility.framework.symbols.SymbolSpace`
72-
at a time, although a :py:class:`~volatility.framework.symbols.SymbolSpace` can store as
73-
many :py:class:`~volatility.framework.symbols.SymbolTable` items as necessary.
69+
:py:class:`SymbolTable <volatility3.framework.interfaces.symbols.SymbolTableInterface>`, many of which can be collected
70+
within a :py:class:`~volatility3.framework.contexts.Context` as a :py:class:`SymbolSpace <volatility.framework.interfaces.symbols.SymbolSpaceInterface>`.
71+
A :py:class:`~volatility3.framework.contexts.Context` can store only one :py:class:`~volatility.framework.symbols.SymbolSpace`
72+
at a time, although a :py:class:`~volatility3.framework.symbols.SymbolSpace` can store as
73+
many :py:class:`~volatility3.framework.symbols.SymbolTable` items as necessary.
7474

7575
Volatility 3 uses the de facto naming convention for symbols of `module!symbol` to refer to them. It reads them from its
7676
own JSON formatted file, which acts as a common intermediary between Windows PDB files, Linux DWARF files, other symbol
7777
formats and the internal Python format that Volatility 3 uses to represent
78-
a :py:class:`~volatility.framework.interfaces.objects.Template` or
79-
a :py:class:`Symbol <volatility.framework.interfaces.symbols.SymbolInterface>`.
78+
a :py:class:`~volatility3.framework.interfaces.objects.Template` or
79+
a :py:class:`Symbol <volatility3.framework.interfaces.symbols.SymbolInterface>`.
8080

81-
.. note:: Volatility 2's name for a :py:class:`~volatility.framework.symbols.SymbolSpace` was a profile, but it could
81+
.. note:: Volatility 2's name for a :py:class:`~volatility3.framework.symbols.SymbolSpace` was a profile, but it could
8282
not differentiate between symbols from different modules and required special handling for 32-bit programs that
8383
used Wow64 on Windows. This meant that all symbols lived in a single namespace with the possibility of symbol name
8484
collisions. It read the symbols using a format called *vtypes*, written in Python code directly.
@@ -88,18 +88,18 @@ Plugins
8888
-------
8989

9090
A plugin acts as a means of requesting data from the user interface (and so the user) and then using it to carry out a
91-
specific form of analysis on the :py:class:`Context <volatility.framework.interfaces.context.ContextInterface>`
91+
specific form of analysis on the :py:class:`Context <volatility3.framework.interfaces.context.ContextInterface>`
9292
(containing whatever symbol tables and memory layers it may). The means of communication between the user interface and
93-
the library is the configuration tree, which is used by components within the :py:class:`~volatility.framework.contexts.Context`
93+
the library is the configuration tree, which is used by components within the :py:class:`~volatility3.framework.contexts.Context`
9494
to store configurable data. After the plugin has been run, it then returns the results in a specific format known as a
95-
:py:class:`~volatility.framework.interfaces.renderers.TreeGrid`. This ensures that the data can be handled by consumers of
95+
:py:class:`~volatility3.framework.interfaces.renderers.TreeGrid`. This ensures that the data can be handled by consumers of
9696
the library, without knowing exactly what the data is or how it's formatted.
9797

9898
Output Renderers
9999
----------------
100100

101101
User interfaces can choose how best to present the output of the results to their users. The library always responds from
102-
every plugin with a :py:class:`~volatility.framework.renderers.TreeGrid`, and the user interface can then determine how
102+
every plugin with a :py:class:`~volatility3.framework.renderers.TreeGrid`, and the user interface can then determine how
103103
best to display it. For the Command Line Interface, that might be via text output as a table, or it might output to an
104104
SQLite database or a CSV file. For a web interface, the best output is probably as JSON where it could be displayed as
105105
a table, or inserted into a database like Elastic Search and trawled using an existing frontend such as Kibana.
@@ -111,9 +111,9 @@ Configuration Tree
111111
------------------
112112

113113
The configuration tree acts as the interface between the calling program and Volatility 3 library. Elements of the
114-
library (such as a :py:class:`Plugin <volatility.framework.interfaces.plugins.PluginInterface>`,
115-
a :py:class:`TranslationLayer <volatility.framework.interfaces.layers.TranslationLayerInterface>`,
116-
an :py:class:`Automagic <volatility.framework.interfaces.automagic.AutomagicInterface>`, etc.) can use the configuration
114+
library (such as a :py:class:`Plugin <volatility3.framework.interfaces.plugins.PluginInterface>`,
115+
a :py:class:`TranslationLayer <volatility3.framework.interfaces.layers.TranslationLayerInterface>`,
116+
an :py:class:`Automagic <volatility3.framework.interfaces.automagic.AutomagicInterface>`, etc.) can use the configuration
117117
tree to inform the calling program of the options they require and/or optionally support, and allows the calling program
118118
to provide that information when the library is then called.
119119

@@ -122,7 +122,7 @@ Automagic
122122

123123
There are certain setup tasks that establish the context in a way favorable to a plugin before it runs, removing
124124
several tasks that are repetitive and also easy to get wrong. These are called
125-
:py:class:`Automagic <volatility.framework.interfaces.automagic.AutomagicInterface>`, since they do things like magically
125+
:py:class:`Automagic <volatility3.framework.interfaces.automagic.AutomagicInterface>`, since they do things like magically
126126
taking a raw memory image and automatically providing the plugin with an appropriate Intel translation layer and an
127127
accurate symbol table without either the plugin or the calling program having to specify all the necessary details.
128128

0 commit comments

Comments
 (0)