我对一个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 的仅前向扫描
中必须是可确定的。
不知道这是不是引起错误的原因
如果是,应该如何解决?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)