我打破了与Dotfuscator的兼容性......请帮助我理解如何

时间:2015-01-08 04:11:01

标签: c# visual-studio-2010 crash obfuscation dotfuscator

我已经使用Visual Studio 2010使用C#创建Windows程序超过18个月了。至少在这些月中的12个月中,我一直在使用社区版的Dotfuscator来模糊我的所有程序。到目前为止它的工作非常好。

我的最新项目是在其初始测试版中发布的,使用Visual Studio 2010 for .NET Framework 4.0编译。这很混乱。

从那时起,我将其导入Visual Studio 2013,将其移至.NET Framework 4.5.1,然后继续处理我的调试版本。当我准备好为我的用户发布另一个测试版时,我意识到混淆版本在其发布状态下崩溃了。发布形式的unobsfucated版本不会崩溃。如果我把混淆的EXE替换为调试版本,Visual Studio会给我一个警告但是然后运行该程序就好了。没有崩溃。

即使我在Program.cs中有一个UnhandledException处理程序,该程序只是崩溃,而Windows只给了我一个装配线引用。我没有什么可以用来缩小原因。

我已将程序移回Visual Studio 2010,.NET Framework 4.0,.NET Framework 4.0 Client Profile,尝试了Dotfuscator中所有设置的变体。尝试了专业版的Dotfuscator(14天试用版)。没有。混淆后,崩溃没有可用的信息。即使我删除所有内容,因此重命名0.0%,仍然会崩溃。

我有一些加密信息需要像过去一年左右那样保持混淆。所以我需要让混淆工作。而我根本无法弄清楚发生了什么,或者我做了什么,让它停止工作。

我非常感谢能够提供的一些指导。提前谢谢。

编辑:这是非常基本但不是非常有用的错误消息。如果有人提供,我可以跟踪堆栈跟踪。我还有大量的错误捕获程序,以及一般的AppDomain.CurrentDomain.UnhandledException处理程序。不过,这就是我得到的:

http://www.keepitfishy.com/files/crash1.jpg

http://www.keepitfishy.com/files/crash2.jpg

这是我尝试使用Visual Studio进行调试时得到的汇编代码的一部分,我标记了应该是罪魁祸首的行:

7362CEF1 E8 15 05 00 00       call        7362D40B  
7362CEF6 59                   pop         ecx  
7362CEF7 68 09 04 00 C0       push        0C0000409h  
7362CEFC E8 16 05 00 00       call        7362D417  
7362CF01 59                   pop         ecx  
7362CF02 5D                   pop         ebp  
7362CF03 C3                   ret  
7362CF04 55                   push        ebp  
7362CF05 8B EC                mov         ebp,esp  
7362CF07 81 EC 24 03 00 00    sub         esp,324h  
7362CF0D 6A 17                push        17h  
7362CF0F E8 37 DE C3 FF       call        7326AD4B  
7362CF14 85 C0                test        eax,eax  
7362CF16 74 05                je          7362CF1D  
7362CF18 6A 02                push        2  
7362CF1A 59                   pop         ecx  
[error line]7362CF1B CD 29                int         29h[error line]
7362CF1D A3 58 61 75 73       mov         dword ptr ds:[73756158h],eax  
7362CF22 89 0D 54 61 75 73    mov         dword ptr ds:[73756154h],ecx  
7362CF28 89 15 50 61 75 73    mov         dword ptr ds:[73756150h],edx  
7362CF2E 89 1D 4C 61 75 73    mov         dword ptr ds:[7375614Ch],ebx  
7362CF34 89 35 48 61 75 73    mov         dword ptr ds:[73756148h],esi  
7362CF3A 89 3D 44 61 75 73    mov         dword ptr ds:[73756144h],edi  
7362CF40 8C 15 70 61 75 73    mov         word ptr ds:[73756170h],ss  
7362CF46 8C 0D 64 61 75 73    mov         word ptr ds:[73756164h],cs  
7362CF4C 8C 1D 40 61 75 73    mov         word ptr ds:[73756140h],ds  
7362CF52 8C 05 3C 61 75 73    mov         word ptr ds:[7375613Ch],es  
7362CF58 8C 25 38 61 75 73    mov         word ptr ds:[73756138h],fs  
7362CF5E 8C 2D 34 61 75 73    mov         word ptr ds:[73756134h],gs  
7362CF64 9C                   pushfd  
7362CF65 8F 05 68 61 75 73    pop         dword ptr ds:[73756168h]  
7362CF6B 8B 45 00             mov         eax,dword ptr [ebp]  
7362CF6E A3 5C 61 75 73       mov         dword ptr ds:[7375615Ch],eax  
7362CF73 8B 45 04             mov         eax,dword ptr [ebp+4]  
7362CF76 A3 60 61 75 73       mov         dword ptr ds:[73756160h],eax  
7362CF7B 8D 45 08             lea         eax,[ebp+8]  
7362CF7E A3 6C 61 75 73       mov         dword ptr ds:[7375616Ch],eax  
7362CF83 8B 85 DC FC FF FF    mov         eax,dword ptr [ebp-324h]  

如果有人能帮我解读,我可以追查原因。感谢。

1 个答案:

答案 0 :(得分:0)

根据您发布的错误对话框,您在本机代码中遇到堆栈问题:

来自MSDN

  

0xC0000409 STATUS_STACK_BUFFER_OVERRUN

     

系统检测到了   在此应用程序中溢出基于堆栈的缓冲区。这超出范围   可能允许恶意用户控制此应用程序。

跟踪导致溢出的原因可能就像抛出异常时查看堆栈跟踪一样简单。即使VS没有向您展示代码,它仍然可以identify the module and function on the top off the call stack

如果问题来自于早已过去的堆栈损坏,您可能需要处理问题而不是来自.Net,而是作为任何其他本机应用程序。

如果您不是应用程序中任何本机组件的作者,则可能有P / Invoke签名不正确,分配的大小不正确的缓冲区或结构传递给P / Invoked函数,或者是调用本机代码不正确。检查你的P / Invokes并确保你有MDAs enabled