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

简介: 原文:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串Visual Studio提供的Dotfuscator保护程序,可以对用户代码中包含的字符串进行加密。比如下面的例子,为了找到这个程序的注册算法,用.
原文: 字符串混淆技术在.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文件中的字符串内容。

image 

思路一下就打开了,原来不是反射,是直接对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();
            }
 }
 

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

目录
相关文章
|
3月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
9月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
351 0
|
12月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
550 23
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
209 6
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
213 6
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
654 13
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
264 3
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
140 3
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
384 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
244 7

热门文章

最新文章