首页
社区
课程
招聘
[求助]修改IL代码删除部分类和方法后产生的问题
发表于: 2007-7-11 10:23 10164

[求助]修改IL代码删除部分类和方法后产生的问题

2007-7-11 10:23
10164
我对一个XenoCode混淆过的dll反编译后的IL代码
删除了XenoCode相关的类以及一些垃圾代码(没意义的类、方法等)

编译正常
放在项目中使用正常,没有出现任何问题

但使用Reflector看没有经过反混淆的c#代码(IL代码显示不会出错)
会导致错误
(原先应该是显示
// This item is obfuscated and can not be translated.)

提示

Translation failure in 'xxx.xxx(String, String) : Void' in xxx '.

System.InvalidOperationException

InnerException:

Block statement count of zero during condition expression translation.

System.InvalidOperationException

   在 ូ.ᜆ(Int32 A_0)
   在 ូ.ᜋ(Int32 A_0)
   在 ូ.ᜂ(Int32 A_0, Int32 A_1)
   在 ូ.ᜀ(IMethodDeclaration A_0, IMethodBody A_1)
   在 ឧ.ᜀ(IMethodDeclaration A_0)
   在 ឨ.ᜁ(IMethodDeclaration A_0)
   在 ᝍ.ᜀ(Boolean A_0, Boolean A_1, Boolean A_2)

用fox查看对应的代码时就会出现如下提示错误

There are no statements in this block
在 x25adc2ca6f05c4e5.x2637e979e1ce20a0.x72bd8d5f9bf120a9(Int32 x11d58b056c032b03) 在 x25adc2ca6f05c4e5.x2637e979e1ce20a0.xf7ed8b5d3a35683b(Int32 xdadd3e52ec363720) 在 x25adc2ca6f05c4e5.x2637e979e1ce20a0.xcca310a929e46a7c(Int32 x13d4cb8d1bd20347, Int32 x2832f35f9e73679f) 在 x25adc2ca6f05c4e5.x2637e979e1ce20a0.x4c429db7bb96c78c(xe4f1947afbf9c52f x1306445c04667cc7) 在 xb03536b881c730ad.x80decb06b0b136f1.x4c429db7bb96c78c() 在 xb03536b881c730ad.xc5f99dd440b2d1db.x1be9855bf968dec6(BinaryReader xe134235b3526fa75)

查看dll相关信息,会提示

索引超出了数组界限。
在 x25adc2ca6f05c4e5.x4a9f722036ce62bb.xdb264d863790ee7b() 在 xb03536b881c730ad.xd93a1e27d974cf51.x79f7fd8368ae8a71() 在 x25adc2ca6f05c4e5.x6cdeb649e0a01b2e.x8ea422785d35c219(xb145091922b86cc2 xbcea506a33cf9111) 在 x25adc2ca6f05c4e5.x6cdeb649e0a01b2e.xdd21ce7b6612fac5(x74795415a52bca5e xbcea506a33cf9111) 在 xb03536b881c730ad.x1e2a7a7c9c200e41.xab199d2c45c4af60(xe1e728fcd62194ea x38870620fd380a6b) 在 x25adc2ca6f05c4e5.x047a29a2323fb5c3.x294a80af8a4c2773(Object x9f93ebd2ca5601a2, x8adca45803fe5cfe x8d3f74e5f925679c)

而不是正常的类似

// Assembly mscorlib, Version 1.0.5000.0

[assembly:CLSCompliant(true)]
[assembly:AllowPartiallyTrustedCallers]
[assembly:ComCompatibleVersion(1, 0, 3300, 0)]
[assembly:Guid(”BED7F4EA-1A96-11d2-8F08-00A0C9A6186D”)]
[assembly:AssemblyDescription(”Common Language Runtime Library”)]
[assembly:NeutralResourcesLanguage(”en-US”)]
[assembly:SatelliteContractVersion(”1.0.5000.0″)]
[assembly:TypeLibVersion(1, 10)]
[assembly:AssemblyKeyFile(”E:/com99/bin/EcmaPublicKey.snk”)]
[assembly:AssemblyDelaySign(true)]

Location : C:\WINDOWS\Microsoft.net\Framework\v1.1.4322\mscorlib.dll

这样的信息

而使用dis#则不会弹出错误或提示类似fox上面的信息
只会显示
// decompiler error

这是什么原因

我猜测应该是我删除不需要的类和方法后没有修改一些地方的值(偏移?)造成的

但我不清楚应该修改哪里

或者有没有类似的直接修复工具

PS:dll我是用1.1编译的,也是1.1的dll,但使用2.0下的PEVerify 工具校验生成的dll文件

有900多个类似这样的IL校验错误
[IL]: 错误: [C:\xxx.dll : SupportClass+TransactionManager+ConnectionHashTable:
:SetTransactionIsolation][偏移量 0x0000000B] 所有点的堆栈高度在 IL 的仅前向扫描
中必须是可确定的。

不知道这是不是引起错误的原因
如果是,应该如何解决?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以试试我的小工具Simple Assembly Explorer,在工具下载区。
字符串和名称反混淆都应该不错的。
反流程混淆不是很通用,目前只是针对某些模式作的。
2007-7-11 19:57
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
呵呵,谢谢楼上
但你的工具对我的问题的解决没有什么帮助:(
2007-7-12 08:44
0
雪    币: 5275
活跃值: (476)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
4
流程混淆了
比如一个简单的C#程序
using System;

class Program
{
        public static void Main()
        {
                Console.WriteLine("fff");
        }
}

编译后的IL是:
nop
ldstr "fff"
call       void [mscorlib]System.Console::WriteLine(string)
nop
ret

随便跳一下
nop
br.s LABEL_1

LABEL_2:
call       void [mscorlib]System.Console::WriteLine(string)
nop
ret

LABEL_1:
    ldstr "fff"

自己试试?
2007-7-17 20:17
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
我知道是流程混淆了

但实际情况是
当我未清楚部分类时,用Reflector看会提示
// This item is obfuscated and can not be translated.

而现在都是直接的错误(弹出提交崩溃信息给作者的框)
不明白是什么原因而已

当然,手工对IL代码反流程混淆后,是可以查看到代码的
但如果没反混淆就是弹出错误框了
而不是原来的只是显示无法反编译信息,不弹出错误框

不知道我的意思说明白没有
我不理解的是这个
2007-7-18 15:35
0
雪    币: 5275
活跃值: (476)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
6
理解了
偶也不知道,估计是代码的改动触发了这个异常吧,具体就得看你改了哪些代码了。
2007-7-18 18:45
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
删除的是些无关的类(名称都很乱,内容都是空的,但数量有成百数千之多,个人判断是XenoCode混淆产生的)
另外就是XenoCode的相关类了,只有2个
删除了之后编译是可以通过的,正常使用时也没有任何问题

就是Reflector查看流程混淆过的代码会弹出错误

搞不懂
2007-7-19 09:06
0
游客
登录 | 注册 方可回帖
返回
//