将VB.NET exe反编译为C#(dotPeek& JustDecompile)

时间:2018-05-23 12:46:50

标签: c# vb.net decompiling dotpeek

所以我有一个用VB.NET构建的程序,但没有源代码,也不可能得到源代码,我需要修改程序,所以我用dotPeek& JustDecompile to C#因为我可以用C#编写代码但是我从来没有真正学过VB.NET(我也试过用JustDecompile反编译成VB.NET但是对我来说它看起来比C#更麻烦)。但反编译的项目充满了奇怪的代码,当我尝试将C#exe和dll反编译为C#项目时,我看不到这些代码。它充满了看起来不应该存在的代码(看起来像在场景代码后面),如:

private static List<WeakReference> __ENCList;
lock (finvendor.__ENCList)
finvendor.__ENCList.Add(new WeakReference((object) this));
[AccessedThroughProperty("controlname")] //for every controls

对于我在C#中找不到的每个控件,它也充满了这种代码:

internal virtual CheckEdit chkNonAktif
{
  [DebuggerNonUserCode] get
  {
    return this._chkNonAktif;
  }
  [DebuggerNonUserCode, MethodImpl(MethodImplOptions.Synchronized)] set
  {
    EventHandler eventHandler = new EventHandler(this.chk_CheckedChanged);
    if (this._chkNonAktif != null)
      this._chkNonAktif.CheckedChanged -= eventHandler;
    this._chkNonAktif = value;
    if (this._chkNonAktif == null)
      return;
    this._chkNonAktif.CheckedChanged += eventHandler;
  }
}

使用Devexpress版本10,这是因为这些代码吗?这是正常的还是我可以删除这些代码?

2 个答案:

答案 0 :(得分:2)

您有VB Winform项目的调试版本。调试器使用弱引用内容,而不是为发布版本发出。

VB为每个Dim WithEvents ControlName As ControlType创建一个属性,其中还有一个用Handles ContolName.EventName修饰的方法。属性setter包含使 Handles Event 内容工作的事件连接代码。

例如按钮及其点击事件。

Friend WithEvents Button1 As Button

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)  Handles Button1.Click
    'some code
End Sub

将导致生成此属性:

Friend Overridable Property Button1 As Button
    <CompilerGenerated> _
    Get
        Return Me._Button1
    End Get
    <MethodImpl(MethodImplOptions.Synchronized), CompilerGenerated> _
    Set(ByVal WithEventsValue As Button)
        Dim handler As EventHandler = New EventHandler(AddressOf Me.Button1_Click)
        Dim button As Button = Me._Button1
        If (Not button Is Nothing) Then
            RemoveHandler button.Click, handler
        End If
        Me._Button1 = WithEventsValue
        button = Me._Button1
        If (Not button Is Nothing) Then
            AddHandler button.Click, handler
        End If
    End Set
End Property

您可能还有许多名称为My_XYZ的类,它们支持VB的应用程序框架。

我建议您使用一些控件/事件处理程序创建一个新的VB WinForm项目,然后对其进行反编译,以便您可以看到解编译器如何从IL重现锅炉板的内容。一旦你了解了这个模式,它就会容易得多。

答案 1 :(得分:0)

我是这个答案可以帮助某人理解问题并找到自己的解决方案。

  1. 只需创建您自己的小型应用程序,然后将其编译为和 .exe文件。
  2. 然后使用与您使用相同的反编译器反编译此.exe文件。
  3. 现在您在此处看到相同的奇怪代码,并且知道您没有将其放在此处。

谢谢。