当前位置: 首页 > 知识库问答 >
问题:

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

吴建中
2024-05-25

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

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

共有2个答案

陆子石
2024-05-25

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

丁文轩
2024-05-25

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

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

  1. 清理反编译代码

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

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

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

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

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

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

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

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

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

 类似资料:
  • 我在C#中使用NUnit和Selenium来构建一个框架,其中包含在多个浏览器上运行多个测试用例。在这种情况下也支持Microsoft Edge。当我设置测试时,chrome和firefox正常运行,但edge出现以下错误: OpenQA。硒。WebDriverException:向远程WebDriver服务器发送HTTP请求以获取URL时,引发了一个响应为null的异常http://localh

  • 我正在反编译一个谷歌chrome扩展,因为它看起来很可疑。扩展是用javascript编写的,但有人能告诉我像这样的符号到底是什么,以及如何将它们“翻译”回正常的字符串吗? “\x63\x68\x61\x72\x43\x6F\x64\x65” 完整文件的Jsbin:http://Jsbin.com/onevira/1/

  • [ERROR]$home/workspace/javaExamplePbServiceCall/src/main/java/example/ServiceCallPiqi.java:[13,23]ERROR:';‘预期 手工编译产生100个错误,这里是第一个: javac-cp$home/.m2/repository/com/google/protobuf/protobuf-java/2.4.1/

  • 自述文件说 init:[mkdir]跳过/home/euphoria/androidscreencast/androidscreencast/bin,因为它已经存在。 BUILD FAILED/home/euphoria/androidscreencast/androidscreencast/BUILD.xml:26:编译失败;有关详细信息,请参阅编译器错误输出。在org.apache.tools

  • 我们的控制器看起来像这样- 在这里,如果我们没有在请求中指定所需的参数“testCode”,我们会得到“400 Bad request”,但错误响应的消息部分仍然为空。 我们得到的回应- 但预期是- 我们在下面使用Spring依赖项- 我看到的是,为此我们得到了MissingServletRequest estParameterException,但在异常中消息为空白("")。

  • 我最近在部署到我们的共享主机时遇到了问题。从 Visual Studio 通过 Web 部署进行部署时,99% 的时间我在登录后在登录页面或主页上收到此错误。有时我可能会点击几下不同的部分,然后它就会击中。它通常会在几分钟到90分钟后消失。 运行Windows Server 2012 R2 Standard、IIS8和.NET 4.5的Web主机。 Web主机建议我需要使用Visual Studi