部门新人较多,但愿经过本次分享让同窗们对如下知识点有个认识:html
因为时间有限,本文做为部门分享演示过程当中辅助性文档,会对文中一些关键点列出参考学习的博客地址,供你们课后学习。java
本次实战中所要达成效果以下图:ios
1. 登陆时跳过,判断是否注册函数,直接进入业务操做模块;c++
2. 修改logo大图,改为其余图片,以下图所示;c#
图一 破解前 图二 破解后(去掉登陆限制)windows
一个程序破解的过程,不管是.net仍是c++等,过程大体都是这样。安全
1.了解业务过程(绕过的点);app
2. 找到对应的源代码;函数
3. 删除验证代码;工具
4. 从新为编译可执行文件;
*,只是c++等,须要更为复杂的逆向工程,脱壳等步骤;
那咱们就按此步骤开始;
【【源代码】】今后处获取
通过对须要破解的程序分析,最先突破就在找到【登陆】按钮的代码位置;一般验证的函数都应该独立封装为一个函数;因此得出两种绕过验证的方式:
这里借用反编译工具来将IL反编译可读性更高的c#代码,这样更快速的帮助咱们定位到button点击事件或验证函数(固然没有这步也是能够,只是为了提升咱们理解代码的速度)。
反编译工具一般用这两种“Reflector” 和 “ILSpy” ,Reflector的反编译代码还原度更高可是非开源非免费(能够找低版本6.8如下),ILSpy反编译程度不如Reflector高,可是开源免费,你们能够视本身具体的需求来选取;
1. 使用Reflector查看源代码, 操做说明
2. 查看WindowsFormsApp1.exe ,以下图能够看到,按钮【登录】的业务逻辑为,先调用Class1.getKey()方法来判断是否注册;
图四,反编译后查看按钮点击事件
2.3.1 使用ildasm 将exe反编译为il文件并修改
咱们使用微软官方提供了ildasm.exe来将.net程序反向成il文件
可是须要注意路径,在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,反编译后能够看到代码变成下图:
将139行注释。注释后能够参照方法2.3.2从新编译生成exe。查看新的exe的源代码以下:
ilasm.exe windowsformsapp1.il /out=windowsformsapp1.exe
2.3.3 其余修改方案
不改windowform1.il,修改ClassLibrary.dll的验证逻辑
相似方案一,留做你们本身研究
修改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这么轻易的被破解,那咱们要怎么对咱们的程序进行安全防御,以保证咱们的代码安全呢;主要也是经过如下两点:
强签名:
本文不在描述,强签名的做用和使用方式
代码混淆工具:
代码混淆工具备不少,如:微软官方的Dotfuscator,有开源的ConfuserEX;还有其余的xeoncode、foxit;
代码混淆能够单独做为一个主题铺开来讲(java,ios 等等都面临这个问题,因此不要过度担忧.net)
ConfuserEx操做步骤:https://blog.csdn.net/xiaoyong_net/article/details/78988264
最后,做为开发人员的咱们并不该该法盗用他人劳动成果,这篇文章只是为了让你们更好的认识IL语言,以及IL语言模式的缺点与防护方式,让你们可以更改好的提升防范意识,本文并未真正深刻到破解细节中去,仅起来点睛入门的做用,有兴趣的同窗能够自行深刻去研究,win32下的逆向工程、加壳、脱壳等技术;
【【源代码】】今后处获取