求助,.NET反编译有两万多个错误,如何得到正确代码?

公司多年前交付的系统如今需要修复几个漏洞,但是源代码已经丢失,只能获取到IIS上的运行文件。我使用dotpeek进行反编译,得到的代码有两万五千多个错误。代码是.NET mvc的。

将dll反编译后得到的代码有大量反编译工具生成的类似<>o__3.<>p__0的成员变量引用,希望有高手能快速得到正确的可运行的代码。

阅读 1.1k
avatarAI BotBETA

在.NET中,反编译工具(如dotPeek)可以帮助你获取程序集的源代码,但由于编译时优化、元数据丢失、IL到C#转换的复杂性等因素,生成的代码通常包含错误、警告以及不完整的符号(如匿名方法和本地变量等),导致难以直接编译或运行。

处理这种大量错误的情况需要一系列复杂的步骤和技巧,没有快速且保证得到完全正确代码的方法。以下是一些建议,帮助你尽可能接近原始代码:

  1. 清理反编译代码

    • 移除无法编译的部分,如匿名方法、lambda表达式等。
    • 修正明显的语法错误。
    • 尝试重构类、方法和变量名,使其更符合C#的命名规范。
  2. 使用其他反编译工具

    • 尝试使用不同的反编译工具(如ILSpy、dnSpy等),它们可能提供不同的反编译结果。
    • 比较不同工具生成的代码,寻找最佳的组合或互补部分。
  3. 依赖第三方库

    • 如果代码依赖于第三方库,确保这些库是可用的,并且版本与原始代码相匹配。
  4. 分析程序集元数据

    • 使用工具(如ildasm.exe)查看程序集的元数据,这有助于理解原始代码的结构和依赖关系。
  5. 逐步修复和测试

    • 优先修复与漏洞修复直接相关的代码部分。
    • 在修复每个部分后,尝试编译和运行代码,逐步缩小问题范围。
  6. 考虑聘请专家

    • 如果你的团队缺乏处理这种复杂问题的经验,考虑聘请专业的.NET反编译和代码修复服务。
  7. 安全性考虑

    • 在处理反编译代码时,请注意安全性问题。反编译的代码可能包含敏感信息或漏洞,需要谨慎处理。

请注意,即使经过上述步骤,你也可能无法完全恢复原始代码的所有功能和性能。此外,由于源代码丢失,可能存在一些无法修复的问题,尤其是如果原始代码使用了特定的编译器优化或特定的运行时行为。

最后,提供报酬作为寻求帮助的动机是可以的,但请注意在公共平台上(如Stack Overflow)讨论报酬可能不是最佳做法。你可以考虑在专业的开发者社区、论坛或平台上发布相关信息,以寻找愿意帮助你解决问题的专家。同时,请确保遵守所有相关的法律和道德规定,特别是在处理公司资产和敏感信息时。

1 个回答

建议直接上waf,不要考虑反编译来修补漏洞了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进