Overview
Dr.Semu generates multiple JSON files during analysis, each containing different types of information about the analyzed sample.Report Files
A complete analysis report directory contains:starter.json- Metadata about the initial process{pid}.json- Dynamic analysis for each process{sha256}.json- Static analysis for each executable
starter.json
Contains metadata about the initial analyzed process.Indicates whether the starter process data is empty. If
true, analysis did not complete successfully.Full path to the executable that was analyzed
Process ID of the initial process
SHA-256 hash of the analyzed executable. Use this to locate the corresponding static analysis file.
Dynamic Analysis (.json)
Contains logged Windows API calls for a specific process. The file is an array of API call objects.Present in some cases to indicate if the process data is empty
API Call Object
The Windows API function name (e.g.,
NtCreateUserProcess, NtCreateKey)Indicates whether the API call completed successfully
Parameters and state before the API call execution. Fields vary by function.
Results and state after the API call execution. Fields vary by function.
Static Analysis (.json)
Contains PE file information and static analysis results.Common API Functions
These are the most frequently encountered Windows API calls in dynamic analysis:NtCreateUserProcess
Process creation and execution.Path to the executable being launched
Command line arguments
Process ID of the newly created process. Use with
utils.get_json_pid() (Lua) or to construct the path to the process’s JSON file (Python).NtCreateKey
Registry key creation.Full registry key path being created
NtSetValueKey
Registry value modification.Registry key path
Name of the registry value
Data being written to the registry value
NtCreateFile
File creation or opening.Path to the file being created or opened
Requested access rights
NtWriteFile
File write operation.Handle to the file
Data being written (may be truncated or encoded)
Working with Child Processes
When a process creates child processes, you can analyze them by:- Finding
NtCreateUserProcesscalls withsuccess: true - Extracting the
after.proc_idvalue - Loading the corresponding
{proc_id}.jsonfile
File Naming Convention
- Dynamic analysis:
{pid}.jsonwhere pid is the process ID (e.g.,1234.json) - Static analysis:
{sha256}.jsonwhere sha256 is the full SHA-256 hash (e.g.,abc123def456...789.json) - Starter metadata: Always named
starter.json
Best Practices
- Check empty flag: Always verify
emptyisfalsebefore processing data - Verify success: Check the
successfield before accessing API call results - Handle missing fields: Not all API calls include all fields; check for existence before accessing
- Track process tree: Use PIDs from
NtCreateUserProcessto build a complete process execution tree - Combine static and dynamic: Use both static PE information and dynamic behavior for accurate detection