SuperAPI AI 工具集

ilspy-cli

通用与其它

查看项目

更新于 10-15 19:54

技能介绍

用途:ilspy-cli 是使用 ILSpy(ICSharpCode.Decompiler)进行 .NET 程序集反编译与分析的 Rust 命令行工具,二进制名为 ilspy,可将 .NET IL 字节码还原为干净的 C# 源码。

架构与要求:Rust CLI(clap)通过 netcorehost FFI 调用 C# 桥接 DLL(IlSpyBridge.dll),进而调用 ICSharpCode.Decompiler;.NET 运行时在 Rust 二进制进程内托管,无服务/守护进程,每条命令加载程序集后执行并退出;数据经 JSON 字符串在 FFI 函数指针间交换,使用 [UnmanagedCallersOnly]。需要 .NET 8 运行时(运行时加载)和 .NET 8 SDK(仅构建期用于发布 C# 桥接)。

主要能力:

  • 检测:纯 Rust 解析 PE 头,无需加载 .NET 运行时即可区分 .NET 与原生二进制,输出 path、isDotnet、framework、recommendedTool;框架检测涵盖 .NET Core/5+/6+/7+/8+、.NET Framework、.NET Standard、Native(Delphi/Qt C++/MFC C++)。
  • 列类型:ilspy list types ASSEMBLY,可按 --filter 子串(不区分大小写)和 --kind(class、interface、struct、enum、delegate)过滤,输出 fullName、ns、name、kind、methodCount、propertyCount、fieldCount、isPublic。
  • 列方法:ilspy list methods ASSEMBLY,可按 --type 和 --filter 过滤,输出 typeName、name、returnType、parameters、accessibility、isStatic、isVirtual、isAbstract。
  • 反编译:ilspy decompile ASSEMBLY 可整体、按 --type 单类型、按 --type 加 --method 单方法反编译;--method 必须配合 --type。默认输出 C# 源码,指定 --json/--pretty 时输出含 source、typeName、methodName、returnType 的 JSON。单方法反编译是其区别于 ilspycmd 的关键能力。
  • 搜索:ilspy search ASSEMBLY PATTERN 对反编译后的 C# 源码做不区分大小写、多行的正则匹配,输出 typeName、matchCount 及 matches 的 line、matched、context。
  • 信息与体检:ilspy info ASSEMBLY 输出 name、typeCount、targetFramework、references;ilspy doctor 检查 .NET 运行时、桥接 DLL 存在与加载,可用 ILSPY_BRIDGE_DIR 覆盖 DLL 搜索路径。

全局标志:--json 输出压缩 JSON,--pretty 输出美化 JSON,--compact 每项一行,-v/--verbose 详细输出;格式自动检测,TTY 用表格,非 TTY 用 compact。反编译默认始终输出原始源码,除非指定 --json 或 --pretty。

建议流程:先 ilspy detect 分诊未知二进制,再 ilspy info 查看类型规模,用 list types 加 filter 定位目标,再按类型或方法定向反编译,也可先 search 关键词再反编译匹配类型,避免对大程序集整体反编译;解析输出时用 --json 或 --compact。在混合代码库中,.NET 用 ilspy,原生代码用 ghidra,ghidra-cli 遇到 .NET IL 时会提示改用 ilspy-cli。

限制与排错:需 .NET 8 运行时;“dotnet not found”需安装 .NET 8 SDK;桥接 DLL 缺失需 cargo build 或设置 ILSPY_BRIDGE_DIR;类型/方法未找到可用 list types/list methods 查找确切名称;桥接加载失败可运行 ilspy doctor 诊断。其余安装细节、许可与收费信息资料未提供。