# Volatility 101: Building a customize portable version

# 1\. Cài đặt Volatility trên Windows

Cài đặt **Python 2.7.18**

*   Download: https://www.python.org/downloads/release/python-2718/
    

Cài đặt **Microsoft Visual C++ Compiler for Python 2.7**

*   Download: https://web.archive.org/web/20210106040224/https://download.microsoft.com/download/7/9/6/796EF2E4-801B-4FC4-AB28-B59FBF6D907B/VCForPython27.msi
    

Cài đặt **Pip2**

```powershell
$ curl.exe https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
$ python .\get-pip.py
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/2ee3d3af-454f-446a-9235-de8f8f31bcd2.png align="center")

Download mã nguồn của **Volatility Framework**

```powershell
$ git clone --recursive https://github.com/volatilityfoundation/volatility.git
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/e1ff80e8-5269-42d2-ab7c-3422b32251ab.png align="center")

Cài đặt gói `virtualenv` cho Python 2:

```powershell
$ pip install virtualenv
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/8fc363a3-07ed-4a1b-a23e-f7a10a5f463e.png align="center")

Tạo **Python Virtual Environments**

```powershell
$ virtualenv.exe -p path\to\your\python.exe vol2
$ .\vol2\Scripts\activate
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/dd907b12-b386-4210-b1fc-7e3621967fea.png align="center")

Cài đặt các dependencies Python Modules

```powershell
$ pip install distorm3 yara-python==3.11.0 pycrypto Pillow==6.2.2 openpyxl ujson==1.35 pytz ipython
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/0dcdaf3e-39fa-4d10-9317-c870d5ce1ce4.png align="center")

Cài đặt **Volatility**

```powershell
$ python .\setup.py build
$ python .\setup.py install
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/be822271-26fe-4c71-b62f-f1af0309bf17.png align="center")

Kiểm tra hoạt động

```powershell
$ vol.py --info | findstr -i "win10x64"
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/cf6d6585-10fd-44a7-b724-c3626af10b34.png align="center")

```powershell
$ vol.py -f .\sample\triage.mem imageinfo
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/48b03b1e-5eaf-479f-9f30-1855040cb296.png align="center")

```powershell
$ vol.py -f .\sample\triage.mem --profile=Win7SP1x64 pslist
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/f1e74cab-fc58-4e71-9fc5-42bf12acbf6a.png align="center")

# 2\. Cài đặt Volatility trên Linux Ubuntu/WSL hoặc macOS

Cài đặt Python 2:

```bash
$ apt install python python-dev -y
$ python -V
Python 2.7.18
```

Cài đặt Pip:

```bash
$ curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py -o get-pip.py
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/c4e275cf-c9dd-4f2f-8827-ddb5c15fea57.png align="center")

```bash
$ python get-pip.py
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/dbe6cd88-f3cb-4417-aa0e-aa0466ec2d39.png align="center")

Download mã nguồn:

```bash
$ git clone --recursive https://github.com/volatilityfoundation/volatility.git
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/a480badf-1dd4-42c2-8b38-6886b319f44d.png align="center")

Cài đặt gói `virtualenv`

```bash
$ pip install virtualenv
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/27b28bf5-9269-4d0c-aa41-c7a84a9fb03d.png align="center")

Tạo Python Virtual Environments

```bash
$ virtualenv -p $(which python) vol2
$ source vol2/bin/activate
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/d571a74a-0f24-4ced-89d3-98cffda7839c.png align="center")

Cài đặt các dependencies Python Modules

```bash
$ pip install distorm3 yara-python==3.11.0 pycrypto Pillow==6.2.2 openpyxl ujson pytz ipython
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/2eb8dcec-b3b1-488e-99da-e6e2bd2b8a92.png align="center")

Cài đặt Volatility

```bash
$ python setup.py build
$ python setup.py install
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/f4cb5e06-4f91-4287-97ef-d7160ac87003.png align="center")

Kiểm tra hoạt động

```bash
$ vol.py --info | grep -i "win10x64"
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/dbc54405-5c9d-4aad-8a0f-c8bc6ec4c992.png align="center")

```bash
$ vol.py --conf-file=sample/volatilityrc linux_banner
$ vol.py --conf-file=sample/volatilityrc linux_pslist
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/81abbf69-d553-41b6-939e-25721441491d.png align="center")

# 3\. Cài đặt bộ plugin MalConfScan cho Volatility

💡 Áp dụng cho Linux, macOS và WSL

**MalConfScan** là một bộ plugin cho Volatility do **JPCERTCC** phát triển với chức năng phát hiện và trích xuất cấu hình của những dòng mã độc (Malware Family) đã biết. Bộ plugin này rất hữu dụng cho những người làm công việc phân tích Malware trên bộ nhớ.

Sao chép mã nguồn của **MalConfScan** từ Github:

```bash
$ git clone https://github.com/JPCERTCC/MalConfScan.git
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/8398148c-5ab2-45a7-a81f-77e76a7a3382.png align="center")

Cài đặt các gói phụ thuộc của **MalConfScan**

```bash
$ pip install -r MalConfScan/requirements.txt
```

Sao chép các plugin của **MalConfScan** vào thư mục plugin của **Volatility**

```bash
$ cd MalConfScan
$ cp -R malconfscan.py utils yara ~/volatility/vol2/lib/python2.7/site-packages/volatility-2.6.1-py2.7.egg/volatility/plugins/malware/
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/5de25be3-0552-4167-ab3d-1639e757f313.png align="center")

Kiểm tra kết quả

```bash
$ vol.py --info | grep -i "malconf"
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/b48ce72e-f5b8-4b3d-8484-9d2560fc15b4.png align="center")

Chạy thử plugin mới cài

```bash
$ vol.py --conf-file=sample/volatilityrc linux_malconfscan
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/b5c9c145-7e00-43c5-a982-0f44655f3945.png align="center")

# 4\. Đóng gói Volatility với PyInstaller

💡 Áp dụng cho Windows. Phần này độc lập với các phần trước, có thể thực hiện ngay, ko phải thực hiện các bước trước đó.

**PyInstaller** là một công cụ đóng gói các ứng dụng viết bằng Python thành một tệp duy nhất phù hợp với hệ điều hành mà bạn đang chạy. Sau khi đóng gói, có thể dễ dàng đem tệp thực thi sang các hệ điều hành khác cùng loại để chạy mà không cần phải cài đặt bất cứ thành phần nào của Volatility từ đầu.

Tham khảo hướng dẫn tại đây: https://github.com/volatilityfoundation/volatility/wiki/Compiling-Binaries-with-Pyinstaller

Download mã nguồn của **Volatility Framework**

```powershell
$ git clone --recursive https://github.com/volatilityfoundation/volatility.git
```

Tạo **Python Virtual Environments**

```powershell
$ virtualenv.exe -p path\to\your\\python.exe vol2
$ .\vol2\Scripts\activate
```

Cài đặt các dependencies Python Modules

```powershell
$ pip install distorm3 yara-python==3.11.0 pycrypto Pillow==6.2.2 openpyxl ujson==1.35 pytz ipython
```

Cài đặt **PyInstaller** phiên bản v3.4

```powershell
$ pip install pyinstaller==3.4
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/a111ea7a-80b3-4243-ac20-22c1ed28d9be.png align="center")

Patching Source của gói `OpenPyxl`

*   Source code trước khi patch
    
    ```python
    # Copyright (c) 2010-2019 openpyxl
      
    
    from openpyxl.compat.numbers import NUMPY, PANDAS
    from openpyxl.xml import DEFUSEDXML, LXML
    from openpyxl.workbook import Workbook
    from openpyxl.reader.excel import load_workbook
    import openpyxl._constants as constants
    
    # Expose constants especially the version number
    
    __author__ = constants.__author__
    __author_email__ = constants.__author_email__
    __license__ = constants.__license__
    __maintainer_email__ = constants.__maintainer_email__
    __url__ = constants.__url__
    __version__ = constants.__version__
    ```
    
*   Source code sau khi patch
    
    ```python
    # Copyright (c) 2010-2019 openpyxl
    import json
    import os
    import sys
    
    from openpyxl.compat.numbers import NUMPY, PANDAS
    from openpyxl.xml import DEFUSEDXML, LXML
    from openpyxl.workbook import Workbook
    from openpyxl.reader.excel import load_workbook
    import openpyxl._constants as constants
    
    # Expose constants especially the version number
    
    __author__ = constants.__author__
    __author_email__ = constants.__author_email__
    __license__ = constants.__license__
    __maintainer_email__ = constants.__maintainer_email__
    __url__ = constants.__url__
    __version__ = constants.__version__
    
    here = os.path.abspath(os.path.dirname(__file__))
    if hasattr(sys, '_MEIPASS'):
        here = sys._MEIPASS
    ```
    

Tùy chọn: Packed tệp với **UPX Packer**

*   Download tại: https://github.com/upx/upx/releases
    
*   Giải nén và chép tệp upx.exe vào: `volatility\vol2\Scripts\`
    

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/9d1f0ed9-70de-4cc5-a935-85c723e91164.png align="center")

Đóng gói với **PyInstaller**

```powershell
$ pyinstaller --onefile pyinstaller.spec
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/575853dc-cf22-4b5c-86e8-998bc0d8da87.png align="center")

Kiểm tra hoạt động:

```powershell
$ .\dist\volatility.exe -f .\sample\triage.mem --profile=Win7SP1x64 pstree
```

![](https://cdn.hashnode.com/uploads/covers/6698c3b850049834bdc8b385/cc82dee4-bf3c-401a-ae46-e47c4492c873.png align="center")
