软件开发产品 购物商城系统定制开发 购物商城系统二次开发 购物商城小程序开发 购物商城系统定制开发 购物商城系统二次开发 购物商城小程序开发-蜂联软件 ¥100查看详细 企业网站开发 门户网站开发 网站建设 仿站 网站定制开发网站二开 企业网站开发 门户网站开发 网站建设 仿站 网站定制开发网站二开-蜂联软件 ¥100查看详细 软件定制开发 网站开发 购物商城开发 API对接CRM OA ERP MES开发 软件定制开发 网站开发 购物商城开发 API对接CRM OA ERP MES开发-蜂联软件 ¥100查看详细 首页 > 养蜂技术 > 软件开发 > 其他 养蜂技术正文 由浅至深,谈谈.NET混淆原理 (一) 养蜂技术软件开发其他 湖北天马养蜂场2010-03-16 11:10:14其他2064 分为这么几个部分来试着谈谈.NET混淆原理1. IL基础,什么是IL2. 最简单的混淆3. 什么是流程混淆,它的利与弊4. 反混淆实战(原理+工具篇)5. 新一代.NET代码保护加密工具MaxtoCode基本原理6. 其它保护手段好,今天我们来讲讲基础――.NET中的IL相信大家都知道不管你使用C#还是VB.NET还是C++托管,最后编译出来的都是IL语言程序集。什么是IL呢,它是一种中间语言字节码,存在于高级语言和机器码的一种中间语言。它的作用就是建立“统一”运行的.NET运行环境,使net可以跨平台(不过,从实际情况来看,MS是不会允许net跨平台的,至少3年内不会,甚至更长。其实,跨平台也没什么好的,看看Java,号称一次编译,到运行,结果变成一次编译,到处调试!我就在Windows系统下没见过大量用Java编写的好工具,也许是偶不经常关注它的原因吧!!)。不好意思,刚刚又跑题了,近来思想老打岔,唉,这是个不好的现象。IL的格式与汇编语言的格式极为相似,所不同的是,IL语言比汇编语言更加易懂,因为它里面可以直接调用已封装好的Object,而且运行逻辑也与高级语言一致,所以基本上是差不多的。湖北天马养蜂场,加我们的微信一起学养蜂。 我们不能对IL做一个系统的介绍,所以我们用一段非常简单的C#代码,让我们看看:(凡事从简单入手,熟悉后再开始复杂)这段代码没有意义,我只是为了增加运算量,做强度测试的时候再这样写的。我们看看这段代码被译为IL将是什么模样。C#的代码对比一下,基本上还是比较清楚的,可能有的朋友已经被ldarg、starg、ldloc、stloc搞糊涂了,呵呵,其实看熟释了就好了,他可比Mov好清楚的多啊,后面所跟的变量所指也比EAX等寄存器清楚的我。.methodpublichidebysiginstanceint32 Level3(int32a)cilmanaged //.method是说这个区域是方法区域指的是{}中的内容 //publichidebysiginstance是此方法的属性 //int32是这个方法的反回值,如果是VB.NET中的sub在这里翻译出来返回值为void //Level3是方法名称,与原代码一至 //int32a是进入的参数,与原代码一至//cilmanaged是托管方法//由于net的一大特性就是MetaData,而它带上了许多的程序信息,所以基本上,il与C#很相以。还是一句老话嘛,凡事有利必有弊。{ .maxstack 2 //最大的堆数量2 //此值是能过代码中的交换需求计算而来的 .localsinit([0]strings, //交换变量的类型定义,这里可以看得很清楚。//三个变量与一个参数(或返回值)都在这里 [1]unsignedint8[]b, [2]class[mscorlib]System.Text.ASCIIEncodingasii, [3]int32CS$00000003$00000000) //下面是代码区 IL_0000: ldstr "215dsgfdart42315s" //赋值字符器 IL_0005: stloc.0 //赋值给变量感觉如push IL_0006: newobj instancevoid[mscorlib]System.Text.ASCIIEncoding::.ctor() //建立一个System.Text.ASCIIEncoding对象 IL_000b: stloc.2 //赋值给变量 IL_000c: ldloc.2 //取出System.Text.ASCIIEncoding对象感觉如pop IL_000d: ldloc.0 //取出字符串 IL_000e: callvirt instanceunsignedint8[][mscorlib]System.Text.Encoding::GetBytes(string) //进行转换 IL_0013: stloc.1 //将结果给byte[] IL_0014: ldarg.1 // IL_0015: ldloc.1 //取出byte[] IL_0016: ldlen //计算长度 IL_0017: conv.i4 // IL_0018: add //与a相加 IL_0019: starg.s a IL_001b: ldarg.0 // IL_001c: ldarg.1 IL_001d: call instanceint32Name1.strong::Level4(int32)//调用Level4方法 IL_0022: starg.s a IL_0024: ldarg.1 IL_0025: stloc.3 IL_0026: br.s IL_0028 //我不知道这里为什么会出现这一句,这一句完全是没必要的 IL_0028: ldloc.3 IL_0029: ret //ret表示方法结果,如果上面有入栈值,则当成返回变量} 扫描关注湖北天马养蜂场微信,第一时间获取养蜂行业动态 转载请说明来源于"湖北天马养蜂场" 本文地址:http://www.hbtianma.com/article/d406.html 上一篇 由浅至深,谈谈.NET混淆原理 (二) 最简单的混淆 什么是混淆,故名思意,就是混杂,使界限不分明。这个词相当妙,特别是用在计算机界。我们知道NET程序集中有一个重要特性叫做MetaData(元数据),它是NET的... 下一篇 由浅至深 谈谈.NET混淆原理(三)-- 流程混淆 流程混淆就是移来移去,达到让你看不懂流程的原理来进行的。 在此,我还要介绍一些... 相关文章 由浅至深,谈谈.NET混淆原理 (二) 最简单的混淆 让你变成ps高手 ASP.NET正则表达式大全 Asp.net项目与paypal支付整合源码 搜索引擎蜘蛛IP大全 由浅至深 谈谈.NET混淆原理(三)-- 流程混淆 由浅至深 谈谈.NET混淆原理(三) 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法) MaxToCode加密过程全解析! MaxtoCode对.Net程序加密的原理及解密探讨(二) 文章评论