Windows programs
livewells reads a Windows program as data. It lists what the file holds and flags the parts that attackers use. The program never runs.
Send a program
Send a .exe, .dll, .sys, .scr, .cpl, .ocx or .com file on the Upload a file tab, or through the API. livewells decides the type from the content of the file, so a program with another name gets the same reading. livewells also reads a program inside another item of the same case, such as an email attachment or an archive member.
A program always carries the flag "This file type can start a program when it opens. Do not open it." Your analysts set the verdict.
What you see
- Facts. Kind (program, library or driver), machine, 32-bit or 64-bit, subsystem, compile time as the file states it, number of sections, imported functions, exported functions, import hash, digital signature and installer framework.
- Version information. Company, description, file version, product, original name, internal name and copyright, as the file states them.
- Sections. The name, the size in memory, the size in the file and the entropy of each section, and whether the section can run or change.
- Imports of concern. The functions that raised an import flag, grouped by what they allow.
- Libraries imported and exported names. The name of each library the program imports, and each name a library exports.
- Programs inside the resources. The size and SHA-256 of each program that sits in the resources of the file. livewells checks each one as its own item.
- Web addresses and hosts. Each web address, host name and IP address in the text of the file. Each is defanged.
Every address and host name in the report is defanged. An example is hxxps[://]example[.]com/a.
Signatures
livewells reads the digital signature in the file as data, and the report gives the signer, the issuer, the dates and whether the digest in the signature matches the file.
- For a signature that livewells read, the report says
present, not validated to a root certificate. - A digest that differs from the file raises a flag, and so does a signature that cannot be read.
- The import hash is the MD5 of the lower-case library and function names in import order.
Installers
livewells names the installer framework (NSIS, Inno Setup, 7-Zip SFX, WiX Burn or an MSI wrapper) when it reads that framework's own structure in the file, and then a program in the resources, data after the end and a small import table are reported under one installer flag instead of three.
A start marker that is not followed by the structure of an installer names no framework and raises its own flag. For that file, and for an installer whose signature digest differs from the file or whose signature cannot be read, the program in the resources, the data after the end and the small import table keep their own flags.
How livewells decides
- A section counts as packed when its entropy is 7.2 or more and it holds at least 1,024 bytes, or when its name is one that packers use. The resource section is not judged by entropy.
- A program has a small import table when it imports fewer than 5 functions and is not built for .NET.
- A program has extra data after its end when more than 256 bytes follow the last section, not counting the digital signature.
- The checksum flag appears when the stored checksum is not zero and differs from the computed one.
- An import group raises its flag when the program imports at least 2 functions of the group. The group for fetching files and starting programs needs one function of each kind.
Limits
| Limit | Value |
|---|---|
| File size | 25 MiB |
| Sections read | 96 |
| Imported libraries read | 200 |
| Imported functions read | 8,000 |
| Exported names read | 8,000 |
| Resource entries read | 20,000 |
| Programs opened from the resources | 20, each at most 64 MiB |
| Text checked for addresses | the first 8 MiB, up to 2,000 web addresses |
| Links listed | 500 |
| Indicators listed | 500 |
| Rows in a table | 200 |
| Reading time | 30 seconds |
When a program reaches a limit, livewells reads what it can and raises the flag "We stopped reading part of this program because it is too big or too deep." Treat that program as hostile.
Flags
| Severity | Flag |
|---|---|
| medium | This program has packed or scrambled code that hides what it does. |
| medium | This program has a part that can be both changed and run. |
| high | This program can write code into other programs. |
| high | This program can watch what you type. |
| medium | This program can detect when an analyst is watching it. |
| high | This program can read saved passwords or sign-in secrets. |
| medium | This program can fetch files from the internet and start programs. |
| medium | This program asks Windows for almost nothing, which is typical of packed programs. |
| low | This program has extra data after its end. |
| low | The checksum stored in this program differs from the one its contents give. |
| low | This program has no digital signature. |
| medium | The digest in the digital signature of this program differs from the digest of its contents. |
| low | This program carries a digital signature that we could not read. |
| info | This program is an installer built with a known installer framework. |
| low | This program carries the start marker of an installer without the structure of an installer. |
| info | This program is built for .NET. |
| high | This program carries another program inside its resources. |
| medium | This program has code that runs before its main entry point. |
| medium | This library exports names that loader and attack tools use. |
| medium | This program is damaged or built in an unusual way. We read only part of it. |
| medium | We stopped reading part of this program because it is too big or too deep. |
A flag points at something to check. Your analysts set the verdict.