C# IL DASM 使用-破解c#软件方法

C# IL DASM 使用-破解c#软件方法

2018-02-23 14:58 by halberts, 115 阅读, 0 评论, 收藏编辑

IL DASM反编译工具

  使用C#的猿人或多或少都会对微软的IL反编译工具(ildasm.exe)有所认识。我最早接触到这工具是公司同事使用他反编译exe程序,进行研读和修改。感觉他还是很强大。
  IL是微软平台上的一门中间语言,我们常写的C#代码在编译器中都会自动转换成IL,然后在由即时编译器(JIT Compiler)转化机器码,最后被CPU执行。ildasm.exe反编译工具将IL汇编成可跨平台可执行的(pe)文件。可供我们了解别人代码和修改。有了他我们看待问题可以不用停留在编辑器层面,可深入中间层。

VS中增加IL DASM工具

我们在安装VS同时都会自动安装ildasm工具,无需另行安装。ildasm工具打开方法如下图:

我们也可以直接wind+R.输入:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe (window 7 64位 操作系统安装目录) 同样可以打开ildasm。
我们也可以把ildasm工具增加到我们常用的VS中。
1.工具(Tools)-->外部工具(External Tools..)

2.添加内容填写对应信息。命令:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe
(window 7 64位 操作系统安装目录) 。

已上信息填写完成后,在“工具”选择卡中能找到我们刚增加的外部工具名称(IL_DASM)。增加完成后可以小试一把。
国际惯例来段"Hello World"。代码编写完后直接F6生成exe文件,然后工具-->IL_DASM-->确认(无需修改任何参数,默认目标文件路径)。系统会弹出IL工具,我们双击Main方法。

这时可以看到Main方法在IL中编译的代码。感觉有点陌生不易看懂。 还有IL编译出现的三角型,正方型都是啥!

IL DASM 基础

1.图标含义

使用IL反编译出项目代码

MANIFEST:是一个附加信息列表,主要包含程序集的一些属性,如程序集名称、版本号、哈希算法等;
Democode:项目名称
Democodeing.Common:命名空间
Democodeing.ICar:接口
Democodeing.Program:类,主要查看存类下面的内容。

.class 类信息项代码:

.class private auto ansi beforefieldinit DemoCoding.Program
       extends [mscorlib]System.Object
{
} // end of class DemoCoding.Program

1).class,表示Program是一个类。并且它继承自程序集—mscorlib的System.Object类;
2)private,表示访问权限;
3)auto,表示程序的内存加载全部由CLR来控制;
4)ansi,是为了在没有托管代码与托管代码之间实现无缝转换。这里主要指C、C++代码等;
5)beforefieldinit,是用来标记运行库(CLR)可以在静态字段方法生成后的任意时刻,来加载构造器(构造函数);

.ctor 方法代码:

.method public hidebysig specialname rtspecialname
        instance void  .ctor() cil managed
{
  // 代码大小       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0006:  ret
} // end of method Program::.ctor

1)cil managed:表示其中为IL代码,指示编译器编译为托管代码;
2).maxstack:表示调用构造函数.otor期间的评估堆栈(Evaluation Stack) ;
3)  IL_0000:标记代码行开头;
4)ldarg.0:表示转载第一个成员参数,在实例方法中指的是当前实例的引用;
5)call:call一般用于调用静态方法,因为静态方法是在编译期就确定的。而这里的构造函数.otor()也是在编译期就制定的。而另一指令callvirt则表示调用实例方法, 它是在运行时确定的,因为如前述,当调用方法的继承关系时,就要比较基类与派生类的同名函数的实现方法(virtual和new),以确定调用的函数所属的Method Table;
6)ret:表示执行完毕,返回;

Main() 静态方法代码:

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // 代码大小       19 (0x13)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Hello World"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  call       string [mscorlib]System.Console::ReadLine()
  IL_0011:  pop
  IL_0012:  ret
} // end of method Program::Main

1) hidebysig:表示当把此类作为基类,存在派生类时,此方法不被继承,同上构造函数;
2).entrypoint:指令表示CLR加载程序时,是首先从.entrypoint开始的,即从Main方法作为程序的入口函数;
3)nop:为空该指令,主要给外部设备或者指令间隙准备时间;
4)ldstr:创建String对象变量"Hello World." ;
5)pop:取出栈顶的值。当我们不需要把值存入变量时使用;

使用IL DASM 修改EXE程序代码

1.打开IL工具,选择所要修改的EXE程序。

2.文件-->转储。确定后选择另存路径,会生成二个文件:*.il 和 *.res

3.用记事本打开*.il修改里面的内容:

 .method private hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // 代码大小       19 (0x13)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World-[已使用il工具修改过...]"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  call       string [mscorlib]System.Console::ReadLine()
    IL_0011:  pop
    IL_0012:  ret
  } // end of method Program::Main

4.把修改后的代码编译成EXE程序。

ilasm /exe /output=C:\CK.exe /Resource=C:\Users\Ck\Desktop\coding.res C:\Users\Ck\Desktop\coding.il

修改就这么简单。运行修改后的EXE程序,值已修改。

原文地址:https://www.cnblogs.com/cjm123/p/8471664.html

时间: 2024-10-06 02:50:50

C# IL DASM 使用-破解c#软件方法的相关文章

北京移动中兴B860AV2.1免拆破解安装软件教程

以下版本亲测成功,另外该方法或许通用各大中兴盒子.移动魔百和.各类运营商定制机,需要自己去测试! 1.Fiddler下载并安装:http://tvapkcdn.b0.upaiyun.com/zndsjc/Fiddler2.zip 2.下载当贝市场(点击立即下载).当贝桌面(点击立即下载).当贝影视快搜(点击立即下载)到电脑桌面,不要重命名为中文,保持原来下载的名字即可: 3.Fiddler设置步骤:3.1 运行Fiddler.exe,提示你更新的换别管它,接着点击顶部的"Tools",

《软件方法》随笔

计算机系统不只是简单地把纸上的东西往电脑里搬. 客户的需求从来就没有变过,只是我们一开始就没有揣摩出来! 利润 = 需求 - 设计,需求致力于解决"产品好卖“的问题,设计致力于解决”降低成本“的问题.代码和设计得到最大程度的复用,从而缩短开发周期,降低开发成本. 从需求直接映射设计,会导致功能分解,得到重复代码.如果从设计出发来定义需求,会得到一大堆假的需求. 如果能学会通过业务建模去推导新系统的需求,而不是拍脑袋得出需求,假的”需求变更“会大大减少. 有的开发人员的”十年工作经验“实际上是”一

VS2012 集成 IL DASM IL查看器

第一步: 找到IL DASM的安装位置,默认在C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools 第二步: 打开vs菜单工具->外部工具 如图填上相应的参数,编译好项目,直接点击 VS菜单工具->IL DASM 就可以查看项目的IL了. 附: IL指令大全

软件方法札记之建模和UML

前言:软件方法第一章主要讲解建模和UML,书中提出了很多新颖的概念,对于建模-需求-分析-设计之间的关系,让我耳目一新.虽然很多概念我知晓的很混乱,但是我仍然坚持写到读书札记中,因为我相信,阅读者早晚会给我启发,而我通过反复阅读我自己的感悟,终究会探寻出我想要的答案. 利润=需求(能卖)-设计(低成本) 需求致力于解决"产品好卖"的问题,设计致力于解决"产品成本"的问题,我在作者的标题中加上了能卖和低成本两个概念,这样可能就更加直观.先来了解需求和设计是什么样的概念

软件方法阅读笔记(一)

<软件方法>讲的是用UML语言来辅助我们进行软件的从0到1的过程.这个过程的结果并不是最终运行在电脑屏幕上的那个界面,而是一堆图纸,可视化的图纸.是的,确实是图纸.建筑行业有设计和施工图纸,电工行业有设计和实施图纸,城市规划有图纸··· ···任何你看得到的工程都有图纸,你要写的软件居然没有.“图纸在我脑子里呢”,我也曾经说过.直到看到这本书.这本书的直接受众应该有两类人:1.程序员这类人一般的工作思路就是提功能的人说要做什么,嗯嗯哦哦之后,迫不及待的打开编辑器开始写代码,调试,然后发现做完的

对比其它软件方法评估敏捷和Scrum

一般来说,选择一种软件开发方法,更像是加入一个邪教组织,而不像是做出了一个技术决策.许多公司甚至从未试图去评估这些方法,而仅仅是盲目采用最流行的方法,这就造成了如今五花八门的各种敏捷方法.因此本文将使用包括功能点.缺陷移除率(DRE).质量成本(COQ)以及总拥有成本(TCO)在内的一些标准的度量指标,对现代软件开发方法的样本进行比较. 目前有约55种已命名的软件开发方法正在使用,还有更大数量的混合方法.这些开发方法中包括传统的瀑布方法.各种花样的敏捷.Rational统一过程(RUP).团队软

《软件方法》潘加宇 读书笔记

设计源于需求却高于需求. <软件方法>上册(五章)所表述的逻辑: 愿景 ------ 业务建模 ------ 需求 ------ 分析 ------ 设计 1. 愿景: 明白软件的意义是什么,帮助或者提高了现有系统的那些方面,减少了那些成本. 利润 = 需求 - 设计 这个公式成立的前提是需求都已经实现,不同的设计会花费不同的成本.但看完上篇,我觉得应该改一改:  利润 = 业务 - 设计.  整个软件制作的过程中,真正的价值和输出是业务,对业务有什么帮助.提高或者减少业务成本.从业务的分析.

SSH防暴力破解的解决方法

SSH防暴力破解的解决方法: 1.禁止root用户ssh登陆: 1.1.修改PermitRootLogin项: [[email protected] ~]# vi /etc/ssh/sshd_config [[email protected] ~]# grep Root /etc/ssh/sshd_config PermitRootLogin no ### 将默认的 #PermitRootLogin yes 修改成这样的 ### # the setting of "PermitRootLogin

必知必会的目录和文件的作用、安装软件方法、运行级别

作者:Georgekai 归档:学习笔记 2017/12/28 目  录 第1章 ctrl+1 1 1.2  /etc/目录 1 1.2.1                   网卡配置文件和DNS配置文件 1.2.2                更改本机hosts文件 1.2.3                修改主机名 1.2.4                开机自动挂载的设备与目录的对应关系 1.2.5                开机自动运行的软件和命令存放位置 1.2.6