首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Reflector进行反编译

使用Reflector进行反编译
EN

Stack Overflow用户
提问于 2011-10-15 19:08:11
回答 3查看 4.5K关注 0票数 1

我已经完成了代码的反编译。但它显示的不是字符串,而是负数。如何找到原始字符串?

我的反编译代码如下:

代码语言:javascript
复制
string str = .(-812265445);  

它应该是:

代码语言:javascript
复制
string str = "My string"; 

请帮帮忙

注意,当我添加对project和debug的引用时,它可以看到字符串"My string“not。(-812265445);

当我使用另一个反汇编程序时,它显示:

代码语言:javascript
复制
string str = ACK. STX(-812265445);  

I来宾ACK和STX是二进制字符。

非常感谢

对你的回答的回应是我从ILSpy上拍摄的两张照片,以便更好地想象:

EN

回答 3

Stack Overflow用户

发布于 2011-10-15 20:20:27

很可能字符串是加密的..。或者它是Reflector中的一个bug。如果是加密的,这是没有用的(调试器是您最好的选择,因为加密器在您的应用程序使用字符串之前注入解密代码)。

要使用Reflector和ILDasm在编译的程序集中查找字符串,请执行以下操作:

  1. 打开反射器并找到您正在从C#到IL的语言的成员/方法(为了查看ILDASM将显示给您的内容)
  2. 验证字符串是否仍未正确显示
  3. 获取指令旁边的行标签(例如: L_0060:)
  4. 在ILDasm中打开程序集并找到您正在从选择器中获取指令标签的方法(应该是与IL_0060:相同的行)
  5. 如果此处的字符串仍然不正确,则该字符串已被加密

要验证程序集中存储的字符串,可以执行以下操作:

  1. 在ILDasm中,关闭显示方法的IL的对话框
  2. 转到视图菜单并选中显示令牌
  3. 在ILDASM中再次打开该方法,这一次当您找到代码行时,它后面应该有一个令牌,如/* 70002C92 */ (您的数字当然会有所不同),但这是该字符串在程序集的用户字符串元数据堆中的位置。
  4. 转到查看->元信息并检查原始:堆

H125转到查看->元信息并显示!在此新对话框中,转至查找菜单并将令牌放入其中,然后单击查找

这将把您带到User Strings元数据堆中的条目,并确切地显示在二进制文件中编译了哪个字符串。

票数 3
EN

Stack Overflow用户

发布于 2011-10-15 19:36:06

请尝试Telerik Decompiler

票数 0
EN

Stack Overflow用户

发布于 2011-10-15 21:32:09

反编译不会返回原始代码。

你的例子看起来就像一个简单的“用字符串的地址加载寄存器,用它做点什么……”。

编译器不会将字符串(或任何数据)与指令内联,数据、字符串、数字都会移动到适当的部分。因为这是一个字符串常量,所以很可能会移到.data或.rodata部分。

将您的-812265445数字转换为十六进制会更清楚一些,因为它变成了0xCF95D01B,这是一个存储某些内容的有效地址。如果你的输出基数是有符号的十进制(看起来是这样的),那么地址通常以巨大的负值结束。将它们转换为十六进制或更改您的默认设置,让您看到(或更容易地摸索)他们所指的地方。

代码语言:javascript
复制
L_0012: ldc.i4 -812265440  (0xCF95D020)
L_0017: call string ::(int32)
L_001c: stloc.0
L_001d: ldc.i4 -812265445  (0xCF95D01B)
L_0022: call string ::(int32)
L_0027: stloc.s str5

从这个(你上面的评论)很明显,在0x12 (L_0012)行有一个'load register with address of the string‘,调用'string::...’转换它(我想),然后存储,将结果“string”指针放在某个地方。

然后,在0x1D-0x27行再次执行此操作。可能有一个4字节长的常量字符串(因为第一个和第二个加载(ldc.i4)地址相隔5个单位。(4个字符+0终止符)。

使用您的调试器或其他工具来显示所示地址的内存(使用当前程序反汇编中实际存在的内容),并查看其中的内容。探索!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7777430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档