字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串

原文:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串

Visual Studio提供的Dotfuscator保护程序,可以对用户代码中包含的字符串进行加密。比如下面的例子,为了找到这个程序的注册算法,用.NET Reflector加载程序集后,发现代码中的字符串,都变成这种形式的:

Assembly executingAssembly = Assembly.GetExecutingAssembly();
ArrayList list = new ArrayList();
string str = Class64.smethod_0("ᓊᓜᓙᒷᓎᓝᒶᒱᒽ");
string fullName = executingAssembly.FullName;
Version version = new Version();
bool flag = false;
int index = fullName.ToLower().IndexOf(Class64.smethod_0("ᓟᓎᓛᓜᓒᓘᓗᒦ"));

注意到这几行代码中的方法调用的参数,已经完全不是我们熟悉的English,我把它放到Google翻译中去寻找它的语言,结果是一种东欧的国家的语言,为了得到它对应的英语,我得找这方面的翻译资料。如何将这种语言,翻译成英语,结果只有专门做翻译的公司才可以做,而且报价不便宜,按字数来收费。这一条路似乎走不通……

意识到自己走错方向之后,马上把自己的想法,翻译成英语,用Google来搜索。Google翻译的质量,确实不错。

很快,我就得到这篇文章Decrypting strings in obfuscated assemblies,它告诉我,这个程序集应用了字符串混淆算法,同样的例子是这样的

int num = 19;
if (args.Length < 1)
{
        Console.WriteLine(a("昞传圢䐤弦न个弬崮帰䄲༴᜶稸吺似䴾⑀⁂ㅄ杆㩈㉊⍌㭎ぐ⭒畔㹖⩘筚潞ᱠ䍢奤ቦ᭨ݪ卬佮⩰ᱲtͶॸ๺ॼ᥾uda86", num), a("东瘞䰠匢䤤䈦洨䐪娬䄮崰尲吴匶尸䤺", num));
        Console.ReadKey();
}

老外一看到这些方块的文字,第一想到的就是Chinese,呵呵,中文语言在世界上还真有点名气。难怪Windows的安装程序中,专门有一项是Aisan Language是专门用来安装东方语言文字字符集的。

解决方案也比较简单,调用加密的办法,获取它的运行时的值:

string encryptedString = "东瘞䰠匢䤤䈦洨䐪娬䄮崰尲吴匶尸䤺";
int key = 19;

Assembly assembly = Assembly.LoadFile(assemblyPath);

// Okay, It’s sample code.. what do you expect! :)
MethodInfo secretMethod = assembly.GetModules()[0]
                  .GetMethods(BindingFlags.NonPublic| BindingFlags.Public| BindingFlags.Static)[0];
string decryptedString = secretMethod.Invoke(null, new object[] {encryptedString, key}) as string;

这样就解决了字符串的反混淆。如果需要对程序中的每个字符串进行调用,需要写一个GUI,用来批量的解决反混淆。

做到这里,基本上可以理解被混淆的程序集中的字符串的含义,然而,网上的一篇文章介绍的工具DotNetStringSearch,引起了我的注意,我确实是在找这样的工具,也一直想做一个一劳永逸的工作,就是我需要一个工具程序,打开一个应用过字符串混淆的程序,点一个按钮,它马上可以为我显示原文字符串和混淆后的字符串。

可细DotNetStringSearch的作者并没有公布这个软件的细节,源代码也没有开放,唯一提到的Rainst.net这个网站中的一篇文章,现在已经打不开,无从得知它应用的技术。这一条路似乎也走不下去……

 

一个偶然的原因,看到CodeProject上面的一篇文章,讲解如何应用Mono.Cecil实现.NET代码注入,这一下子引起了我的注意。与我们通常用的反射不同,它实现的是直接修改程序集的代码,比起16进制工具修改EXE/DLL的二进制文件要高级得多,毕竟是原来的.NET代码,可以直接调试,观察实现过程。一下小心,找到SystemInternal上面的一个实用工具,Strings,这个程序可以提取PE文件中的字符串内容。

 

思路一下就打开了,原来不是反射,是直接对PE文件格式进行读取,运行Strings程序,果然它顺利的读取了PE格式中的字符串资源,而且源代码是开放的,里面的例子程序是这样的

static void Main(string[] args)
{
            try
            {
                string exePath = args[0];

                List<string> allUserStrings = ReadAllUserStrings(exePath);

                File.WriteAllLines(exePath + ".txt", allUserStrings.Select(str => CSStringConverter.Convert(str)));

                Console.WriteLine("hotovo... ");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.ToString());
                Console.WriteLine("press a key...");
                Console.ReadKey();
            }
 }
 

通过上面的一段代码,你可以很容易的找到它的源代码文件,于是可以解决我说的目标:做一个通用的字符串反混淆程序,可以对当前流行的加密工具加密后的字符串进行反混淆。

时间: 2024-08-28 19:25:50

字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串的相关文章

字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串

原文:字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串 关于字符串的研究,目前已经有两篇. 原理篇:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串  实践篇:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来讲第三篇,如何应用上面所学内容,设计一个字符串混淆程序. 先设计一个控制台程序,它是将要被我混淆的程序集文件: public static void Main() { try { RunSnippet(); } cat

javascript-asp.net中如何把xml字符串解析成表格呈现在网页中?(最好有实现代码)

问题描述 asp.net中如何把xml字符串解析成表格呈现在网页中?(最好有实现代码) xml字符串名称为strResponseXml,内容如下: <?xml version='1.0'?>013海淀区0>343朝阳区3>783密云区7>9103海淀区9> 现想通过网页上的一个按钮事件把以上字符串解析成如下的表格形式:FID ID KIND NAME0 1 3 海淀区3 4 3 朝阳区7 8 3 密云区9 10 3 海淀区

PHP中一些通用和易混淆技术点的最佳编程实践

最新改进&维护 本文档最后一次于2013年3月8日审核.最后一次修改是在2013年3月8日. 这由我, Alex Cabal维护的.到现在我已经写了很长时间PHP代码了, 目前我运行Scribophile,为严肃作家提供的在线写作小组, Writerfolio, 为自由职业者提供的简单的在线写作文件夹, 和 Standard Ebooks, 有插画的出版物,无数字版权的公共领域电子图书 . 偶尔我会自由的去找那些让我感兴趣的项目和客户. 如果你认为我能够帮你些什么,或者有些关于本文的建议或勘误的

Android代码混淆技术总结(一)

Android代码混淆技术总结(一)       一.前言 最近一直在学习Android加固方面的知识,看了不少论文.技术博客以及一些github上的源代码,下面总结一下混淆方面的技术,也算是给想学习加固的同学做一些科普,在文中讲到的论文.资料以及源码,我都会给出相应的链接,供大家进一步去深入学习.后面我会弄成一个系列的文章,如有一些混淆技术没讲到,还希望大家指点,当做是交流学习. 二.Android混淆技术介绍 2.1 控制流平坦化 2.1.1 概念和思路 控制流平坦化,就是在不改变源代码的功

数据混淆技术能有效地防止数据泄漏吗?

对于企业而言,数据泄露事故的影响可能是灾难性的,并失去客户的信心和信任,面临经济惩罚和其他严重后果.根据Ponemon研究所2016年数据泄漏事故成本研究显示,数据泄露事故的平均总成本是400万美元,这比2013年增加了29%.每条泄露记录的平均成本是158美元,而医疗保健和零售业每条泄露记录的平均成本分别是355美元和129美元.尽管数据泄露威胁有着极高的风险,企业仍然是数据泄露的受害者,对此,企业开始非常重视对企业拥有.处理和存储数据的保护. 虽然外部威胁仍然是高优先处理事项,但对敏感数据的

使用java技术在IE浏览器中打开WORD、EXCEL、PDF和TXT文件

问题描述 使用java技术在IE浏览器中打开WORD.EXCEL.PDF和TXT文件 #使用java技术在IE浏览器中打开WORD.EXCEL.PDF和TXT文件 解决方案 http://www.cnblogs.com/zhwl/p/3757069.htmlhttp://wenku.baidu.com/link?url=SfOc2hl0hB-xo9PhjQfXPLemBgg1aj1fV54AW39sk0cJ8_AgCc1_6hb6Lx5aQCF44ILHhn23dyenpOEiBcqJ3Qo1r

优化技术在现实系统中的运用

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行.企业.政府等部门最为重要的计算机应用之一.从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句.举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时.如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见

ASP和数据库技术在WAP开发中的应用

数据|数据库 利用ASP技术可以开发出动态WAP页面,将ASP技术和数据库技术相结合,则可以开发更为复杂的WAP应用.有关ASP和Web数据库的知识请读者参考专门书籍,我们这里以WML为例,说明ASP和数据库技术在WAP开发中的应用. 在WML程序中使用ASP 在WML程序中使用ASP的规则很简单,只要做到以下5条即可: (1) 声明ASP采用的脚本语言.与ASP中声明的方式类似,格式为: <%@ Language=VBScript %> (2) 声明wml文件类型.这可采用ASP的Respo

IIS 7 Smooth Streaming技术在Silverlight 3中的应用

微软的全新一代操作系统将IIS 7(Internet Information Services 7)引 入到人们的视线中,作为IIS 6.0的一个升级版本,IIS 7在很多地方都做了改进 ,诸如模块化服务功能,与.NET的无缝集成,简单的操作和部署,改进的管理功 能,以及安全性.过程改进.错误诊断.兼容性等很多新特性,要想全面了解 IIS 7所带来的更多新特性,可以查看"探索用于Windows Vista的Web服务器和 更多内容"一文. IIS 7的很多功能都是作为模块(插件)被集成