Dotpeek有问题反编译代码?

问题描述 投票:0回答:1

作为Hackthebox.eu的逆向工程挑战的一部分,我试图反编译一个.net可执行文件。整个程序成功反编译但有两个错误。我将在整个方法下面发布。

  private unsafe void kapa(object sender, EventArgs e)
{
  int num1 = 0;
  this.z = "";
  this.o = "";
  this.m = "";
  int num2;
  IntPtr num3 = (IntPtr) &num2;
  int num4;
  int* numPtr1 = &num4;
  int num5;
  int* numPtr2 = &num5;
  int num6;
  int* numPtr3 = &num6;
  int num7;
  int* numPtr4 = &num7;
  int num8;
  int* numPtr5 = &num8;
  int num9;
  int* numPtr6 = &num9;
  int* numPtr7 = &num1;
  int num10 = 79;
  *(int*) num3 = num10;
  *numPtr1 = 128;
  *numPtr2 = 128;
  *numPtr3 = 105;
  *numPtr4 = 112;
  *numPtr5 = 112;
  *numPtr6 = 129;
  *numPtr7 = 130;
  this.pp = num2;
  this.linear(this.pp);
}

此行有错误:

“'IntPtr'是一种类型,在给定的上下文中无效”

IntPtr num3 = (IntPtr) &num2;

然后是未定义变量num2的错误。

这是DotPeek中的错误吗?

c# reverse-engineering decompiling dotpeek
1个回答
0
投票

我今天刚刚做了这个挑战。 dot Peek没有任何问题,但您需要对代码进行一些微妙的更改。

  1. num2在未分配的情况下使用:只需将其分配给(IntPtr)行正上方的0即可
  2. IntPtr是在给定上下文中无效的类型:您只需要将代码修改为(IntPtr)(&num2)。这样编译器就知道你将num2的地址转换为IntPtr。

在C ++(非托管代码)中,指针基本上是指向内存地址的变量。在这个特定的代码中,它说num3是指向变量num2的地址的指针。希望有助于澄清事情。

© www.soinside.com 2019 - 2024. All rights reserved.