一、目的与目标

1.1 主题目的

部门新人较多,希望通过本次分享让同学们对以下知识点有个认识:

  • 破解原理
  • IL原理
  • 强签名与加密
  • resx文件

由于时间有限,本文作为部门分享演示过程中辅助性文档,会对文中一些关键点列出参考学习的博客地址,供大家课后学习。

1.2 本次实战最终要达到的效果

本次实战中所要达成效果如下图:

1. 登录时跳过,判断是否注册函数,直接进入业务操作模块;

2. 修改logo大图,改成其他图片,如下图所示;

                

图一 破解前                                                             图二 破解后(去掉登录限制)

二、破解过程

一个程序破解的过程,无论是.net还是c++等,过程大致都是这样。

1.了解业务过程(绕过的点);

2. 找到对应的源代码;

3. 删除验证代码;

4. 重新为编译可执行文件;

*,只是c++等,需要更为复杂的逆向工程,脱壳等步骤;

那我们就按此步骤开始;

【【源代码】】从此处获取

2.1. 找到需要绕过的点;

经过对需要破解的程序分析,最早突破就在找到【登录】按钮的代码位置;通常验证的函数都应该独立封装为一个函数;所以得出两种绕过验证的方式:

  • 删除业务逻辑中的验证代码;
  • 修改验证业务逻辑,不管是否注册都返回已注册;

2.2. 找到对应源代码

这里借用反编译工具来将IL反编译可读性更高的c#代码,这样更快速的帮助我们定位到button点击事件或验证函数(当然没有这步也是可以,只是为了提高我们理解代码的速度)。

反编译工具通常用这两种“Reflector” 和 “ILSpy” ,Reflector的反编译代码还原度更高但是非开源非免费(可以找低版本6.8以下),ILSpy反编译程度不如Reflector高,但是开源免费,大家可以视自己具体的需求来选取;

1. 使用Reflector查看源代码, 操作说明

2. 查看WindowsFormsApp1.exe ,如下图可以看到,按钮【登陆】的业务逻辑为,先调用Class1.getKey()方法来判断是否注册;

图四,反编译后查看按钮点击事件

2.3. 使用ildasm将exe和dll 逆向成IL文件

2.3.1 使用ildasm 将exe反编译为il文件并修改

我们使用微软官方提供了ildasm.exe来将.net程序反向成il文件

  1. 找到 ildasm.exe 通常在C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools;或者使用vs提供的开发人员命令操作符。

但是需要注意路径,在demo中我已经将ildam和ildasm都打包到文件夹中了

2.  输入 ildasm.exe WindowsFormsApp1.exe /out=il\windowsformsapp1.il

3.  修改IL代码,跳过验证:

1.打开windowsformsapp1.il;

2. IL重点行数分析:

128行,调用 Class1.getKey(),压入值到堆栈;

129行,idc.i4.0在Stack 中int长度为4,值为0=>对应代码为if(Class1.getKey()==false)中的false

130行,ceq 比较

136行,定义文本"请先注册"

137行,调用MessageBox.show

138行, pop 弹出堆栈中的值

139行,转向 IL 0028,对应代码if(){}else{}那个代码块

3. 修改il方式一 (不调用:Class1.getkey())

将128行修改为:IL_0001: ldc.i4.1 //call bool [ClassLibrary1]ClassLibrary1.Class1::getkey()

使用2.3.2重新生成exe,反编译后可以看到代码变成下图:

4. 逻辑修改二,依然调用验证。但是取消else代码块

将139行注释。注释后可以参照方法2.3.2重新编译生成exe。查看新的exe的源代码如下:

2.3.2 重新生成windowsformsapp1.exe(记得这一步哦)

ilasm.exe windowsformsapp1.il /out=windowsformsapp1.exe

2.3.3  其他修改方案

不改windowform1.il,修改ClassLibrary.dll的验证逻辑

类似方案一,留作大家自己研究

2.4. 修改资源文件,修改图片;

修改exe中的图片,使用以下步骤:

1. 将resources文件转为resx

ResGen.exe WindowsFormsApp1.Properties.Resources.resources WindowsFormsApp1.Properties.Resources.resx

2. 使用vs打开新生成的resx文件,替换旧图片icon-02.png,如下图:

3. 或用记事本打开resx文件,将base64文本替换为新图片的base64

4. 重新编译为resources

ResGen.exe WindowsFormsApp1.Properties.Resources.resx WindowsFormsApp1.Properties.Resources.resources

* .resources,编译后的资源文件,是无法直接打开无法直接保存图片文件;使用反编译工具反编译后默认是产生.resources;而.resx 可被VS打开的文件;

那怎么将resources转为resx呢,我们可以利用官方提供的Resgen.exe进行文件转换

https://docs.microsoft.com/zh-cn/dotnet/framework/tools/resgen-exe-resource-file-generator

三、防御方法

既然.net这么轻易的被破解,那我们要怎么对我们的程序进行安全防护,以保证我们的代码安全呢;主要也是通过以下两点:

  • 使用强签名,防止DLL被篡改;
  • 使用代码混淆工具,防止被反编译源码;

强签名:

本文不在描述,强签名的作用和使用方式

官方的使用方式   一些博友的博客

代码混淆工具:

代码混淆工具有很多,如:微软官方的Dotfuscator,有开源的ConfuserEX;还有其他的xeoncode、foxit;

代码混淆可以单独作为一个主题铺开来说(java,ios 等等都面临这个问题,所以不要过分担心.net)

ConfuserEx操作步骤:https://blog.csdn.net/xiaoyong_net/article/details/78988264

四、最后

最后,作为开发人员的我们并不应该法盗用他人劳动成果,这篇文章只是为了让大家更好的认识IL语言,以及IL语言模式的缺点与防御方式,让大家能够更改好的提高防范意识,本文并未真正深入到破解细节中去,仅起来点睛入门的作用,有兴趣的同学可以自行深入去研究,win32下的逆向工程、加壳、脱壳等技术;

【【源代码】】从此处获取

WinForm的EXE破解(基于IL修改)的更多相关文章

  1. 深入理解xLua基于IL代码注入的热更新原理

    目前大部分手游都会采用热更新来解决应用商店审核周期长,无法满足快节奏迭代的问题.另外热更新能够有效降低版本升级所需的资源大小,节省玩家的时间和流量,这也使其成为移动游戏的主流更新方式之一. 热更新可以 ...

  2. Android破解学习之路(十六)—— dll破解的IL指令

    IL指令介绍 IL是.NET框架中中间语言(Intermediate Language)的缩写. 使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不 ...

  3. IPAdr.exe破解[练手]

    [文章标题]: IPAdr.exe破解[软件名称]: IPAdr.exe[加壳方式]: 无[编写语言]: delphi[使用工具]: OD[作者声明]: 失误之处敬请诸位大侠赐教!---------- ...

  4. winform获取EXE图片

    winform获取EXE图片 using (FileStream fs = new System.IO.FileStream(n, FileMode.OpenOrCreate, FileAccess. ...

  5. winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)

    http://www.cnblogs.com/IAmBetter/archive/2012/01/14/2322156.html winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已 ...

  6. 关于winform中*.exe.config中的appSettings的节点的读取与修改

    //读取到这个节点 string file = System.Windows.Forms.Application.ExecutablePath; Configuration config = Conf ...

  7. {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件

    在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...

  8. android黑科技系列——破解游戏之修改金币数

    我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...

  9. Android中怎么破解游戏之修改金币数

    我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...

随机推荐

  1. 浅析JavaScript解析赋值、浅拷贝和深拷贝的区别

    文章首发于sau交流学习社区 一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为: 1.基本数据类型:赋值,赋值之后两个变量互不影响 2.引用数据类型:赋**址**,两个变量具有相同 ...

  2. 长沙4月21日开发者大会暨.NET社区成立大会活动纪实

    活动总结 2019年4月21日是一个斜风细雨.微风和煦的美好日子,由长沙.NET技术社区.腾讯云云加社区.微软Azure云技术社区.中国.NET技术社区.长沙柳枝行动.长沙互联网活动基地(唐胡子俱乐部 ...

  3. Thymeleaf【快速入门】

    前言:突然发现自己给自己埋了一个大坑,毕设好难..每一个小点拎出来都能当一个小题目(手动摆手..),没办法自己选的含着泪也要把坑填完..先一点一点把需要补充的知识学完吧.. Thymeleaf介绍 稍 ...

  4. 第6章 令牌撤销端点(Token Revocation Endpoint) - IdentityModel 中文文档(v1.0.0)

    OAuth 2.0令牌撤销的客户端库是作为扩展方法提供的HttpClient. 以下代码撤消撤销端点处的访问令牌令牌: var client = new HttpClient(); var resul ...

  5. vue项目中vux的使用

    vux VUX 是基于 WeUI 和 Vue.js 的 移动端 UI 组件库,提供丰富的组件满足移动端(微信)页面常用业务需求. 在vue-cli中使用步骤如下: 1.安装: npm i vux -S ...

  6. Android SQLite 数据库学习

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

  7. 读书笔记:深入理解java虚拟机(一)虚拟机的运行时的数据区域

    最近在看深入了解java虚拟机第一版(周志明著),特此写读书笔记,整理其中重要的东西和自己的理解. ”java与c++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却 ...

  8. kodi18.1设置中文的方法

    默认情况下,新安装好的 Kodi 启动后是英文版的界面.但事实上,Kodi 包含多国语言 (包含简繁体中文版),我们可以设置改回简体中文界面.不过,很多人都遇到修改 Kodi 的语言为中文之后整个界面 ...

  9. 题目:python 打印出如下图案(菱形):

    # 题目:打印出如下图案(菱形): # # * # *** # ***** # ******* # ***** # *** # * nu = 1 # 开始值 k = 2 # 变量值 while nu ...

  10. 事务,Oracle,MySQL及Spring事务隔离级别

    一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...