如何将一批.NET DLL反编译为Visual Studio项目

Joh*_*oth 6 .net c# decompiling decompiler visual-studio

我只需要在C#代码中搜索一些文本.

我已经有.NET Reflector和File Disassembler Add-In,但这些似乎只是反编译一个DLL.

KUT*_*ime 4

事实上,这些答案都不是正确的。

是的,所有工具都可以将*.dll文件反编译成*.csproj文件,但没有一个支持 CLI 或批处理。您可以节省安装时间。

到目前为止,最好的解决方案是使用dotPeek,将所有*.dll文件放入一个文件夹中并使用“浏览文件夹”选项。

在 dotPeek 中探索文件夹

DLLdotPeek 将分析给定的文件夹并显示位于该文件夹内的 s树。您可以csproj为每个dll加载的单个文件手动生成。

DLL树


如果您看到这篇文章是因为您正在寻找如何在您或第 3 方中查找特定指令dll(特别是反射的使用)的答案,您可以使用此 PowerShell 脚本将dlls 反编译为 IL 并查找指令(System.Reflection.Assembly::Load(string)用于反射)。

笔记

它使用 .NET Framework SDK 套件中的中间语言 DisASseMbler (ILDASM)。根据您的 SDK 版本调整路径。

function Get-LibDump
{
    Param(
# Specifies a path to one or more locations. Wildcards are permitted.
    [Parameter(Mandatory=$true,
            Position=0,
            ParameterSetName="Basic",
            ValueFromPipeline=$true,
            ValueFromPipelineByPropertyName=$true,
            HelpMessage="Path to one or more locations.")]
    [ValidateNotNullOrEmpty()]
    [SupportsWildcards()]
    [ValidateScript({$_ | Test-Path})]
    [System.IO.FileInfo]
    $Path
    )
    process
    {
        $dumpFileFilePath = $Path.BaseName + '.il'
        $outFile = "C:\LibDump\$dumpFileFilePath"
        Start-Process -FilePath 'c:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ildasm.exe' -ArgumentList "/UNICODE /OUT=`"$outFile`" `"$($Path.FullName)`"" -Wait
        "Dump from:`n$(Resolve-Path -Path $Path.FullName -Relative)" | Out-File -FilePath $outFile -Encoding:unicode -Append
    }
}

# Use
Get-ChildItem -Path $PathToLibFolder -Filter '*.dll' -File -Recurse | Get-LibDump
Run Code Online (Sandbox Code Playgroud)

  • 我认为“基于意见”的问题被积极地从 SO 中剔除,这是 SO 最大的失败之一。随着从事 IT 工作的时间越来越长,我认为更多经验丰富的人员的“意见”是最好的资源之一。是的,那里有很多巨魔,但也有善良和聪明的人。‍♀️ (2认同)