调试模糊的.Net程序集

时间:2010-11-24 11:08:10

标签: .net debugging runtime obfuscation disassembly

我试图评估我应用到我的程序集的混淆是否足够,我主要担心的是保护包含密码或私钥的字符串。

我用Salamander Decompiler成功地反编译了我的程序集,看到我的字符串已被加密,但在运行时字符串必须被解密才能使用。

我被告知可以调试应用程序并查看汇编代码,知道如何做到这一点吗?

解决方案
这对我有用,尽管使用WinDbg可能有更好的方法。

1-执行程序
2-打开命令行并键入:

adplus -crash -pn [executablename] -o [ output directory ]

* adplus与WinDBG放在同一个文件夹中

3-关闭程序或等待它关闭
4-打开放置在指定输出目录中的FULLDUMP * .dmp
5-打开NotePad ++和选择TextFX-> Characters->将所有不可打印的字符删除到#
6-用这种格式搜索字符串#t#r#i#n#g'
或者用''替换所有'#'并搜索'string'(这可能需要一段时间)

*顺便说一句,我找不到明文内存中的SecureString

2 个答案:

答案 0 :(得分:4)

对于密码和私钥等敏感数据,您应该使用SecureString

至于查看汇编程序代码 - 当应用程序运行时,您可以使用windbg获取内存转储,然后查看windbg中的实际汇编程序。

答案 1 :(得分:1)

如果你想调试一些硬混淆的应用程序,你可以考虑通过0xd4d来寻找dnSpy,它是一个免费的开源.NET反编译器,可以让你调试任何.NET程序集,&你可以放置断点并获得var的值。就调试而言真的很有意思,让我告诉你,能够在没有WinDBG或Olly2的情况下调试应用程序显然是一种乐趣。

现在,关于字符串混淆,您可以查看.NETGuard's string encryption,它使用非常复杂的方法(.NET stackframe +私钥+资源解密+指针)来保护&保护你的弦乐。在我看来,保护字符串是首要任务,因为黑客通过你的应用程序并主要引用字符串。