44 Commits

Author SHA1 Message Date
rthomas
44e072da15 Handle python utf-16 conversion in LangCodeItem values 2020-11-17 18:18:48 +01:00
rthomas
9f1bebb0ff Fix UTF8 (by @tacesrever) 2020-08-25 11:20:16 +02:00
Koh M. Nakagawa
1fd42b4ebf Add parser for resource accelerator
Signed-off-by: Koh M. Nakagawa <tsunekou1019@gmail.com>
2020-08-24 07:15:04 +02:00
Koh M. Nakagawa
eb87ca6ef6 fix to parse html resource
Signed-off-by: Koh M. Nakagawa <tsunekou1019@gmail.com>
2020-07-06 22:01:47 +09:00
Koh M. Nakagawa
96e6fc66ad fix ResourcesManager to parse string table entry
Signed-off-by: Koh M. Nakagawa <tsunekou1019@gmail.com>
2020-06-26 01:18:58 +09:00
Romain Thomas
eeddc38393 Handle PE forwarded exports
Resolve: #307
2019-12-10 06:33:48 +01:00
Andrew
08d31be932 Authenticode-related bug fixes and improvements
Part of Authenticode verification consists of:
 - Comparing the computed Authenticode hash to the digest
   stored in the ContentInfo section
 - Comparing hash(ContentInfo) to the digest stored in the
   AuthenticatedAttributes section
 - Verifying signed(hash(AuthenticatedAttributes)) using a
   certificate identified by the issuer and serial number
   specified in the SignerInfo section

This commit makes it so that the raw bytes needed to
calculate hash(ContentInfo) and hash(AuthenticatedAttributes)
are available for use.

============================================================

Allow missing [0] in SpcSpOpusInfo

Some executables have MoreInfo but not a ProgramName (and the documentation
lists both as OPTIONAL), so handle this case correctly.

Example:

```
01416b1730218454c99b13592650cb170402b86742b4bab971565903b841829b

SEQUENCE(2 elem)
OBJECT IDENTIFIER1.3.6.1.4.1.311.2.1.12spcSpOpusInfo(Microsoft code signing)
SET(1 elem)
  SEQUENCE(1 elem)
  [1](1 elem)
   [0]http://www.mozilla.com
```

============================================================

Improve consistency of parsed serial numbers

When parsing the issuer serial number, call mbedtls_x509_get_serial instead of
parsing it as an integer directly with mbedtls_asn1_get_mpi. These two functions
differ in how they treat serial numbers prepended with '00' to prevent them from
being negative (the former preserves the '00', and the latter discards it). The
embedded certs are parsed via a call to mbedtls_x509_crt_parse_der, which uses
mbedtls_x509_get_serial behind the scenes, so there was an inconsistency between
lief_obj.signature.signer_info.issuer[1] and
lief_obj.signature.certificates[x].serial_number.  Example:

8bf57d97dd917c4f823659266caaa33e7398406daf11ba8318e3f7414ee3fb24

============================================================

Handle SpcLink and SpcString CHOICEs in SpcSpOpusInfo

The Authenticode spec doc says that these can be CHOICES, so
handle the easy ones and safely skip the others.

============================================================

Allow Authenticode sig to be parsed even if cert parsing fails

By default, mbedtls doesn't support MD2 certs, which are fairly
common in older signed executables.  Ex:

1cb16f94cebdcad7dd05c8537375a6ff6379fcdb08528fc83889f26efaa84e2a

============================================================

Enable mbed TLS MD2 and MD4 support; add Unix debug options

By default, mbedtls doesn't support MD2 certs, which are fairly
common in older signed executables.  Ex:

1cb16f94cebdcad7dd05c8537375a6ff6379fcdb08528fc83889f26efaa84e2a

============================================================

Set MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION flag

Some older signed executables use certs with the SpcSpAgencyInfo
Critical Extension, which mbed TLS doesn't support, so set
MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION to have it
skip this extension.  Example:

781ca31416ec708a587851dafd90c661b86f244ab8b8475c4185e958e54ff838

============================================================

Support accessing non-utf8 issuer names via Python

For a few signatures where the issuer name contained non-utf8
characters, accessing the issuer name field in Python would raise
a UnicodeDecodeError exception. Now this field is handled the
same way the names in the individual certs are (I'm not sure if
they get represented 100% correctly, but at least they are
consistent, which is good enough for me). Example:

048f91b9302c88380fc66adac1e314d82733089ef3a31eadca5f0cb4169b195f
2019-10-07 00:58:40 -04:00
Andrew Williams
fcb9c76be6 Expose the raw bytes backing each PE Authenticode cert (#320) 2019-07-26 19:26:13 +02:00
Romain Thomas
90867193b5 Fix #271 2019-03-10 17:49:21 +01:00
1orenz0
3537440b8d Add support to parse POGO debug entries 2018-12-16 16:34:12 +01:00
1orenz0
fcc75dd879 Parse PE debug data directory as a list of debug entries
PE's DATA_DIRECTORY_DEBUG does not define a single debug entry, but
a list of struct pe_debug entries (the number of entries is determined
by the data directory's size).

This commit reflect this layout by returning a vector<> when calling
PE.debug()
2018-11-29 09:16:34 +01:00
Romain Thomas
b5a08463ad Expose API to list functions found in a binary 2018-09-12 14:44:18 +02:00
Romain Thomas
04dddd3710 Fix alignment issue when removing a PE section 2018-08-10 15:16:29 +02:00
Romain Thomas
918438c6be Enable to remove sections using the abstract layer 2018-07-09 15:08:39 +02:00
Romain Thomas
33a2af4b18 Enhance Python binding 2018-06-08 14:58:00 +02:00
Romain Thomas
cd1cc457cf Resolve #119 and enhance ELF Python bindings 2018-06-08 10:48:33 +02:00
Romain Thomas
4ef1bb845f Add new formats: OAT, DEX, VDEX, ART 2018-05-04 12:46:28 +02:00
Romain Thomas
4ef839c3d8 Enhance BinaryStream Interface 2018-04-15 08:55:23 +02:00
Romain Thomas
46fa0e9747 Fix #139
API added:
  * PE::ResourceDialog::lang
  * PE::ResourceDialog::sub_lang
2018-03-18 18:16:19 +01:00
Romain Thomas
3b17aba10e Refactor some parts of the Architecture:
* JSON visitor are located in the format namespace
  * Visitor are *real* visitor
  * Visitable class has been renamed to Object
  * Due to a bug in Visual Studio 2015, we move to VS2017
2018-03-13 16:49:02 +01:00
Romain Thomas
eab4a7614f Parse PE Code View (PDB 7.0)
Resolve: #138
2018-02-17 12:50:10 +01:00
Romain Thomas
ae4c2a95ee Fix #126 2017-12-11 08:55:40 +01:00
Romain Thomas
aa70e07791 Handle Python BytesIO, TextIO for LIEF' parsers
Resolve: #49
2017-11-01 16:44:39 +01:00
Romain Thomas
0234e3b8bb Parse the PE Load Configuration structure 2017-10-06 07:55:58 +02:00
Romain Thomas
a4c69f7868 Rename getter from get_XXX to XXX
related to #66
2017-09-07 14:45:41 +02:00
Romain Thomas
9503f2fc7b Add relocation in the Abstract layer
The abstracted attributes are:
  * Address: virtual address where the relocation occurs
  * Size: size in bits of the relocation

See: LIEF::Relocation / lief.Relocation and abstract_reader

Resolve: #53
2017-09-05 22:00:31 +02:00
Romain Thomas
66b4cd4550 Fix enums conflicts
Enums changes (C++/C):

ELF:
  * s/SECTION_TYPES/ELF_SECTION_TYPES/
  * s/SECTION_FLAGS/ELF_SECTION_FLAGS/
  * s/SYMBOL_TYPES/ELF_SYMBOL_TYPES/
  * s/SEGMENT_FLAGS/ELF_SEGMENT_FLAGS/

MachO:
  * s/SECTION_TYPES/MACHO_SECTION_TYPES/
  * s/SECTION_FLAGS/MACHO_SECTION_FLAGS/
  * s/SYMBOL_TYPES/MACHO_SYMBOL_TYPES/
  * s/SEGMENTS_FLAGS/MACHO_SEGMENTS_FLAGS/

PE:
  * s/SECTION_TYPES/PE_SECTION_TYPES/

Resolve #32
2017-08-21 09:23:40 +02:00
Romain Thomas
5666351e07 Improve API of PE's OptionalHeader
API changes:
  - 'has_dll_characteristics' renamed to 'has'
  - 'add' to add a characteristic - added
  - 'remove' to remove a characteristic - added
  - operator+= to add a characteristic - added
  - operator-= to remove a characteristic - added
2017-08-01 16:11:39 +02:00
Romain Thomas
a89bc6df4f Add import hash function as well as ordinal resolver functions (PE part)
For PE binary it's now possible get the *imphash* value through the
lief.PE.get_imphash function. It's also possible to resolve ordinals
imports by using the lief.PE.resolve_ordinals

Resolve #54
2017-07-16 18:02:54 +02:00
Romain Thomas
8c7ceafa82 Handle encoding errors (resolve #59) 2017-07-15 15:10:47 +02:00
Romain Thomas
c0bb618307 Update doc 2017-07-01 18:35:10 +02:00
Romain Thomas
99896da627 Add 'PE.Symbol.has_section' python API 2017-06-30 17:24:40 +02:00
Romain Thomas
8ddc71d337 Parse PE Rich Header (resolve #15) 2017-06-27 09:12:40 +02:00
Romain Thomas
907e853b18 Fix some ambiguous API (fix #27)
PE::Binary::get_content_from_virtual_address can now take either:
  Absolute Virtual Address / Relative Virtual Address

In the PE Python API:
  * Merge 'PE.parse_from_raw' and 'PE.parse'
  * Change 'PE.Binary.section_from_virtual_address' to 'PE.Binary.section_from_rva'

In the PE C++ API:
  * Change 'Binary::section_from_virtual_address' to 'Binary::section_from_rva'
2017-06-25 15:11:47 +02:00
Romain Thomas
733053bc63 Enhance PE resources
* Improve Resource Manager
* Fix bug when rebuilding resources (aligment issue)
* Provide a Python API to access to the resource tree
* Pretty print lang/sublang of resources
* Parse resource dialog
* Parse resource icons
* Parse resource version
* Add tests on the resource builder
* Add tutorial (related to #28)
2017-06-11 16:47:16 +02:00
Romain Thomas
baa1b415ae Enable DOS stub rebuilding
Python API:

  * lief.PE.Binary.dos_stub property
  * lief.PE.Builder.build_dos_stub method

  C++ API:

  * LIEF::PE::Binary::dos_stub setter/getter
  * LIEF::PE::Builder::build_dos_stub method
2017-05-01 20:45:53 +02:00
Romain Thomas
b60b36a844 Enable PE hooking
* Add 'hook_function' to hook a PE imported function
  * Add tutorial on PE hooking (resolve #5)
  * Add 'PE::get_import' and 'PE::has_import' to retrieve import
2017-05-01 18:11:37 +02:00
Romain Thomas
2ded57e676 Improve documentation 2017-04-29 10:45:26 +02:00
Romain Thomas
c031d7accf Fix #20 2017-04-21 13:59:33 +02:00
Romain Thomas
3ffbb53850 Uniform API name for sections and segments.
ELF:
  - segment.data has been renamed to segment.content
2017-04-17 07:32:30 +02:00
Romain Thomas
8ecba03288 Add 'has_section' and 'has_data_directory' methods to PE::TLS object 2017-04-04 22:25:17 +02:00
Romain Thomas
c6a3d198ad Fix error with unicode 2017-04-04 17:22:16 +02:00
Romain Thomas
dae0c81eda Fix typo (Algorithm) 2017-04-04 15:34:20 +02:00
Romain Thomas
306a191a03 First public release 2017-03-30 16:56:49 +02:00