当前位置: 首页 > news >正文

上海 政务网站建设情况青岛网页建站模板

上海 政务网站建设情况,青岛网页建站模板,关键词网络推广企业,怎么制作香囊 教程关于字符串的研究#xff0c;目前已经有两篇。 原理篇#xff1a;字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串 实践篇#xff1a;字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来讲第三篇#xff0c;如何应用上面所学内容#xff0c…关于字符串的研究目前已经有两篇。 原理篇字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串  实践篇字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来讲第三篇如何应用上面所学内容设计一个字符串混淆程序。 先设计一个控制台程序它是将要被我混淆的程序集文件 public static void Main() {try{RunSnippet();}catch (Exception e){string error string.Format(---\nThe following error occurred while executing the snippet:\n{0}\n---, e.ToString());Console.WriteLine(error);}finally{Console.Write(Press any key to continue...);Console.ReadKey();} }   代码是Snippet Compiler 的标准模板在控制台上打印一段字符串。这里有二个字符串常量是我需要对它进行加密的地方。 不能直接改源代码而且要以程序的方式来操作程序集。要能修改.net程序集现在能找到的方法是Mono.Cecil,最新的版本是0.9.5.0。 先设计混淆算法是个很简单的Base64代码转换这一步可以深入挖掘做更复杂的混淆算法。 public static string StringDecode(string text1) {return Encoding.UTF8.GetString(Convert.FromBase64String(text1)); } 要把这段代码转化为IL代码用Mono.Cecil来注入到制定的程序集中先来看看翻译成IL之后的代码 .method public hidebysig static string StringDecode(string) cil managed {.maxstack 8L_0000: call class [mscorlib]System.Text.Encoding [mscorlib]System.Text.Encoding::get_UTF8()L_0005: ldarg.0 L_0006: call uint8[] [mscorlib]System.Convert::FromBase64String(string)L_000b: callvirt instance string [mscorlib]System.Text.Encoding::GetString(uint8[])L_0010: ret } 再对比Mono.Cecil的语法例子把上面的IL代码翻译成C#代码 MethodDefinition new_method new MethodDefinition(StringDecode, attr, asm.MainModule.Import(typeof(string))); ParameterDefinition para new ParameterDefinition(asm.MainModule.Import(typeof(string))); new_method.Parameters.Add(para); tp.Methods.Add(new_method);new_method.Body.MaxStackSize 8; MethodReference mr; ILProcessor worker new_method.Body.GetILProcessor ();mr asm.MainModule.Import(typeof(Encoding).GetMethod(get_UTF8)); worker.Append(worker.Create(OpCodes.Call, mr));worker.Append(worker.Create(OpCodes.Ldarg_0));mr asm.MainModule.Import(typeof(Convert).GetMethod(FromBase64String)); worker.Append(worker.Create(OpCodes.Call, mr));mr asm.MainModule.Import(typeof(Encoding).GetMethod(GetString, new Type[] { typeof(Byte[]) })); worker.Append(worker.Create(OpCodes.Callvirt, mr)); worker.Append(worker.Create(OpCodes.Ret));   再次我样要搜索目标程序集中的所有字符串把它转化成Base64的字符串编码于是遍历IL指令进行转化 ListInstruction actionInsertnew ListInstruction (); foreach (Instruction ins in entry_point.Body.Instructions) {if (ins.OpCode.Name ldstr){Console.WriteLine(Find target instruction, start modify..);byte[] bytes System.Text.Encoding.UTF8.GetBytes (Convert.ToString (ins.Operand));ins.Operand Convert.ToBase64String (bytes);actionInsert.Add(ins);} }     最后我们把原来的指令替换成字符串混淆算法调用 for (int i 0; i actionInsert.Count; i) {mr asm.MainModule.Import(new_method);worker entry_point.Body.GetILProcessor();worker.InsertAfter(actionInsert[i], worker.Create(OpCodes.Call, mr)); }     最后保存程序集用.net Reflector 载入程序集如下图所示字符串常量已经变成了方法调用 这样增加了代码反编译的难度字符串的含义完全被替换成一堆无意义的字符串。 Mono.Cecil最新的版本中API有变化本篇程序代码中应用到的读取程序集和写入程序集 string path C:\Users\Administrator\Desktop\CPP\Default.exe; AssemblyDefinition asm AssemblyDefinition.ReadAssembly(path); MethodDefinition entry_point asm.EntryPoint;path C:\Users\Administrator\Desktop\CPP\DefaultSecury.exe; asm.MainModule.Write(path); 关于字符串混淆算法下面列举几个我找到的混淆算法加密强度会高一些 static string stringEncrypt(string string_0) {char[] chArray;char[] chArray1 chArray string_0.ToCharArray();while (true){int num;int length chArray1.Length;if (length 0){break;}chArray1[num length -1] (char) (chArray[num] - ᑩ);}return string.Intern(new string(chArray)); }   下面是Dotfuscator的混淆算法还加了盐强度提升不少。 static string GetString(string source, int salt){int index 0;char[] data source.ToCharArray();salt 0xe74d6d7; // This const data generated by dotfuscatorwhile (index data.Length){char key data[index];byte low (byte)((key \x00ff) ^ salt);byte high (byte)((key 8) ^ salt);data[index] (char)((low 8 | high));index;}return string.Intern(new string(data));}   经过混淆后的字符串完全看不出原文的含义。比如下面的代码片段都有些怀疑它使用的字符集有点像中东国家的语言 再来看一个代码中有中文的例子这是一段用户登陆代码它加密后的字符看起来更不可理解。 如果要给字符串混淆加盐只需要简单的修改上面的代码添加一个临时变量再增加到调用的混淆算法中。 全文代码以NUnit测试方法写成单元测试配合Resharper真是好用可以节省大量的代码一个方法即可作为入口程序启动运行。 给开发和测试带多很多方便。转载于:https://www.cnblogs.com/JamesLi2015/p/3168786.html
http://www.yutouwan.com/news/217233/

相关文章:

  • 如何建设企业微网站网上的彩票网站是怎么做的
  • 淄博网站设ip钓鱼网站在线生成
  • 什么网站建设最简单网站设计技术入股
  • 校园网站建设申请西安市社交网站制作公司
  • 网站建设私单铁岭做网站
  • 北京网站优化推广效果注册公司在哪个网站系统
  • 大庆网站建设大庆合肥企业网站推广
  • 自己做的网站怎么才有用户访问廊坊建设网站企业
  • 网站建设各部门职责策划电力建设期刊网站投稿
  • 黄山网站网站建设网站建设 数据分析
  • 移动网可以上的网站是什么样子的企业经营沙盘seo优化
  • 最新仿58同城网站源码最新的域名网站
  • 郑州网站建设喝彩科技网站的功能包括哪些
  • 网站 icp备案购物网页代码
  • 来宾住房和城乡建设网站中国10大品牌装修公司
  • 网站建设和维护工作网站开发 设置背景图片
  • 怎样用dw做网站主页微信推广怎么弄
  • 采集站seo提高收录wordpress 修改登录地址
  • wordpress 视频 去广告插件汕头网站建设seo外包
  • 新开传奇网站发布网中变用vs session做网站
  • wordpress汉字注册性价比高的seo网站优化
  • 贵池区城乡与住房建设网站wordpress放音乐
  • 网站制作有哪些技术案例查询网站
  • c 视频播放网站开发仿锤子 wordpress
  • 假网站连接怎么做的网站建设_推广_网页设计_域名注册_企业邮箱_虚拟主机 新闻
  • 建设银行益阳市分行桃江支行网站wordpress中文版
  • python 做网站很快吗网站与支付宝对接
  • 官方网站做背景墙厂家宁波网络营销推广咨询报价
  • 长春建站wordpress 内容换行
  • 工厂做网站有用吗深圳网站设计哪里好