哪个 parts/sections 个 PE 文件 (.exe .dll) 包含它们的大部分行为?

Which parts/sections of PE files (.exe .dll) contain most their behaviours?

我正在通过机器学习方法进行 Windows 恶意软件研究。我看了PE格式,用dumpbin提取PE文件,发现里面有很多部分。 eg:.idata .edata .pdata .data .rdata .sxdata .text .rscr .tls... 但并不是所有的都用于actions/behaviours。我只关心他们的行为并在下一步之前减少大数据。谢谢

我找到了微软的官方文档。 Here 就在单词 files.I 下读到 .text 是代码部分。

既然您是在分析恶意软件,那么您不应该查看这些部分的名称。恶意软件开发人员更改节的名称并不困难,而且 msvc 编译器还允许您创建自定义节。

相反,您应该做的是查看版块的特征。通过读取IMAGE_SECTION_HEADER,可以看到该段是否包含可执行代码、静态数据、是否可写等。

我是@user2073973 弄明白的。他的意思是该部分在 header 部分中有单词 "Code"。 像这样:

SECTION HEADER #1
   .text name
   522B9 virtual size
    1000 virtual address (00401000 to 004532B8)
   52400 size of raw data
     400 file pointer to raw data (00000400 to 000527FF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

他说得对,不仅 .text 部分有代码。自定义名称部分也有代码。

如果您正在寻找 powershell DLL,这里有一个不错的选择:

<#
.Synopsis
    Gets the DLLs loaded by processes on the system.
.DESCRIPTION
   Gets the DLLs loaded by processes on the system.
.EXAMPLE
   Get-Dll -ProcessName Notepad
.EXAMPLE
   Get-Dll -ModuleName mydll.dll
#>
function Get-Dll
{
    [CmdletBinding()]
    param(
    # The process to get the DLLs of
    [Parameter(ValueFromPipeline=$true, ParameterSetName="Process")]
    [System.Diagnostics.Process]$Process,
    # The process name to get the DLLs of
    [Parameter(ValueFromPipeline=$true, ParameterSetName="ProcessName")]
    [String]$ProcessName = "",
    # The process ID to get the DLLs of
    [Parameter(ValueFromPipeline=$true, ParameterSetName="ProcessId")]
    [Int]$ProcessId = 0,
    # The module name to search for
    [Parameter()]
    [String]$ModuleName,
    # Whether to returned only unsigned modules
    [Parameter()]
    [Switch]$Unsigned
    )

    Begin{
        $script:Modules = @()
        $script:Processes = @()
    }

    Process {
        if ($Process -ne $null)
        {
            $Modules += $Process.Modules 
        }
        elseif (-not [String]::IsNullOrEmpty($ProcessName))
        {
            $Modules += Get-Process -Name $ProcessName | Select-Object -ExpandProperty Modules 
        }
        elseif ($ProcessId -ne 0)
        {
            $Modules += Get-Process -Id $ProcessId | Select-Object -ExpandProperty Modules
        }
        elseif(-not [String]::IsNullOrEmpty($ModuleName))
        {
            $Processes =  Get-Process | Where-Object { ($_.Modules).ModuleName -Contains $ModuleName }
        }
        else 
        {
            $Modules += Get-Process | Select-Object -ExpandProperty Modules
        }
    }

    End {
        if ($Processes.Length -gt 0)
        {
            $Processes
            return
        }

        if (-not [String]::IsNullOrEmpty($ModuleName))
        {
            $Modules = $Modules | Where-Object { $_.ModuleName -eq $ModuleName }
        }

        if ($Unsigned)
        {
            $Modules = $Modules | Where { -not [PoshInternals.AuthenticodeTools]::IsTrusted($_.FileName) }
        }

        $Modules
    }
}

站点:PowerShell Gallery