Code Monkey home page Code Monkey logo

readpe's Introduction

readpe - Read Portable Executable

Extract and show information from PE32/PE32+ format executables.

Features

  • Output format is JSON;
  • Extract info from DOS, NT, Sections, Import, Export, TLS, etc headers;
  • Detect hook function by binding import;
  • Show offsets, timestamps, names, etc userful information;
  • Show TLS callback offsets;
  • Calculate and show entropy of sections;
  • etc. See to readpe --help

Exit codes

1 - The platform type is not supported
2 - This file is not PE32/PE32+ 
3 - The file is currupted
4 - Usage errors 
5 - Errors occurs during in runtime

Examples

DOS Header

$ readpe --dos virus.exe_

"Dos-Header" : {
        "e_magic" : "0x5A4D",
        "e_cblp" : "0x80",
        "e_cp" : "0x1",
        "e_crlc" : "0x0",
        "e_cparhdr" : "0x4",
        "e_minalloc" : "0x10",
        "e_maxalloc" : "0xFFFF",
        "e_ss" : "0x0",
        "e_sp" : "0x140",
        "e_csum" : "0x0",
        "e_ip" : "0x0",
        "e_cs" : "0x0",
        "e_lfarlc" : "0x40",
        "e_ovno" : "0x0",
        "e_res" : [
            "0x0",
            "0x0",
            "0x0",
            "0x0"
        ],
        "e_oemid" : "0x0",
        "e_oeminfo" : "0x0",
        "e_res2" : [
            "0x0",
            "0x0",
            "0x0",
            "0x0",
            "0x0",
            "0x0",
            "0x0",
            "0x0",
            "0x0",
            "0x0"
        ],
        "e_lfanew" : "0x80"
    }

TLS callback functons

$ readpe --tls-detail virus2.exe_

"tls-directory-details" : {
        "callbacks" : [
                {
                        "rva" : "0x1009",
                        "offset" : "0x209"
                }
        ]
}

Export

$ readpe --export-detail virus3.exe_

"export-directory-details" : [
        {
                "name" : "CopyLZFile",
                "ordinal" : "0x1",
                "forward-to" : "kernel32.CopyLZFile"
        },
        {
                "name" : "GetExpandedNameA",
                "ordinal" : "0x2",
                "forward-to" : "kernel32.GetExpandedNameA"
        },
        {
                "name" : "GetExpandedNameW",
                "ordinal" : "0x3",
                "forward-to" : "kernel32.GetExpandedNameW"
        },
        {
                "name" : "LZClose",
                "ordinal" : "0x4",
                "forward-to" : "kernel32.LZClose"
        },
        {
                "name" : "LZCloseFile",
                "ordinal" : "0x5",
                "forward-to" : "kernel32.LZCloseFile"
        },
        {
                "name" : "LZCopy",
                "ordinal" : "0x6",
                "forward-to" : "kernel32.LZCopy"
        },
        {
                "name" : "LZCreateFileW",
                "ordinal" : "0x7",
                "forward-to" : "kernel32.LZCreateFileW"
        },
        {
                "name" : "LZDone",
                "ordinal" : "0x8",
                "forward-to" : "kernel32.LZDone"
        },
        {
                "name" : "LZInit",
                "ordinal" : "0x9",
                "forward-to" : "kernel32.LZInit"
        },
        {
                "name" : "LZOpenFileA",
                "ordinal" : "0xA",
                "forward-to" : "kernel32.LZOpenFileA"
        },
        {
                "name" : "LZOpenFileW",
                "ordinal" : "0xB",
                "forward-to" : "kernel32.LZOpenFileW"
        },
        {
                "name" : "LZRead",
                "ordinal" : "0xC",
                "forward-to" : "kernel32.LZRead"
        },
        {
                "name" : "LZSeek",
                "ordinal" : "0xD",
                "forward-to" : "kernel32.LZSeek"
        },
        {
                "name" : "LZStart",
                "ordinal" : "0xE",
                "forward-to" : "kernel32.LZStart"
        }
]

Donate

Yandex-Money:   410012415964253
MIR Card:       2204 1201 0546 5948
Ethereum (ETH): 0x97194f6534e904A2416fC0b02894F1782c65B1c5
Bitcoin (BTC):  bc1qc94slcwvde9uafcc64ktue6q840jrjtxgtsme4
DAI (DAI):      0x97194f6534e904A2416fC0b02894F1782c65B1c5

Contact

Send your advices me to base64_decode('bnR2aXNpZ290aEBnbWFpbC5jb20=')

readpe's People

Contributors

andriyankov avatar

Watchers

 avatar

readpe's Issues

Set up CI/CD pipeline

Нужно:

  1. Разобраться в Github Actions
  2. Сборка библиотеки Framework с помощью CMake
  3. Сборка модульных тестов FrameworkTests с помощью CMake
  4. Запуск модульных тестов FrameworkTests
  5. Сборка библиотеки PE с помощью CMake
  6. Сборка модульных тестов PETests с помощью CMake
  7. Запуск модульных тестов PETests
  8. Сборка библиотеки ReadPE с помощью CMake
  9. Запуск smoke-тестов для ReadPE из tests/ с помощью команды poetry run pytest
  10. Создания архива с помощью скрипта scripts/make_release.cmd
  11. Выкладывание архива в realese-папку в Github проекте
  12. Добавление тега в GIT согласно src/readpe/src/version-info.json файлу в формате stable-{major}.{minor].{micro}. Пример: stable-1.0.1

Add new '--file-overlays' option to find and show file overlays

Все что не попадает в виртуальный образ, т.е. не загружается в виртуальное адресное адресное пространство и всегда находится только в файле называется файловым оверлеем. В этой задаче нужно:

  • Написать поиск таких мест
  • Отобразить в виде JSON такие объекты в виде списка объектов {file_offset, file_size}

Added new test sample and test to it with load config directory

Есть фича --load-config-directory, но нет ни одного тестового случая для проверки этой опции. Нужно добавить тестовый файл в набор tests\test-data\test-samples\smoke\pe\ и тесты в test_returncodes.py, test_stderr.py и test_stdout.py

Add new PE unit test to test "grep.exe" crash regression

В Issue #5 была исправлена ошибка парсинга импорта при котором утиллита падала. Нужно добавить в PETests такой тест, который проверяет эту ситуацию.

Add "--summary" option to show common information about input executables

Нужно добавить новую опцию коммандной строки --summary для того чтоб получать общую информацию о файле:

  • Значение энтропии для всего файла
  • Количество импортируемых функций
  • Количество импортируемых модулей
  • Количество экспортируемых функций
  • Количество TLS callback функций

Update "--donate" option with new crypto-currencies addresses

В опцию для получения доната нужно добавить крипто-кошельки для возможных "спасибо" из других стран:

Ethereum (ETH) Address: 0x97194f6534e904A2416fC0b02894F1782c65B1c5
Bitcoin (BTC) Address: bc1qc94slcwvde9uafcc64ktue6q840jrjtxgtsme4
DAI (DAI) Address: 0x97194f6534e904A2416fC0b02894F1782c65B1c5

CMake: src/Framework for Win

Для автоматизации сборки всего проекта с помощью CMake нужно написать скрипт, который будет:

  1. Создавать файлы проекта для MS Visual Studio с фильтрами для удобной навигации в MSVS
  2. Собирать и компилировать библиотеку c исходными кодами в src/Framework
  3. Собирать и компилировать утилиту src/FrameworkTests с модульными тестами для src/Framework
  4. Запускать на выполнение FrameworkTests утилиту

CMake: src/ReadPE for Win

Для автоматизации сборки всего проекта с помощью CMake нужно написать скрипт, который будет:

  1. Создавать файлы проекта для MS Visual Studio с фильтрами для удобной навигации в MSVS
  2. Собирать и компилировать библиотеку c исходными кодами в src/ReadPE
  3. Запускать на выполнение smoke авто-тесты с помощью команды "poetry run pytest"в папке tests

Replace boost::program_options with other minimalistic argument parsing library

В проекте используется достаточно тяжеловесная библиотека boost::program_options для парсинга аргументов командной строки (src/readpe/src/cmdline.cpp). Сама библиотека прекрасная, но это единственное место, где используется boost. С целью упрощения сборки тулзы с помощью CMake нужно найти более простую и независящую от других библиотеку.

CMake: src/PE for Win

Для автоматизации сборки всего проекта с помощью CMake нужно написать скрипт, который будет:

  1. Создавать файлы проекта для MS Visual Studio с фильтрами для удобной навигации в MSVS
  2. Собирать и компилировать библиотеку c исходными кодами в src/PE
  3. Собирать и компилировать утилиту src/PETests с модульными тестами для src/PE
    Запускать на выполнение PETests утилиту

Crash during '-I' option usage for grep.exe file

При попытке посмотреть детали импорта для файла grep.exe(MD5: dc66dc168f81e438c0e7d86e638284ff) с помощью опции --imports-detailed происходит падение приложения

Up to date '--donate' option

Для возможной финансовой помощи проекту от пользователей нужно:

  1. Посмотреть на современные средства передачи денег
  2. Добавить их в опцию командной строки "--donate"
  3. Написать дополнительный раздел в README.md проекта

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.