C# 带签名dll破解
首先申明,本文只是从技术的角度来分析下怎样破解带签名的C#写的dll文件。大家如有遇到收费的软件或类库还是应该去购买正版,程序员何苦为难程序员呢。
不带签名的破解
不带签名的dll文件的破解很简单,通常有下面三个步骤:
1. 使用反编译工具对dll文件进行反编译,找到校验过期的相关代码,反编译工具可以使用ILSpy或Reflector;
2. 使用ildasm.exe工具将dll导出成il文本文件,在该文件中找到相关的代码进行修改;
3. 使用ildasm.exe工具将修改后的il文件编译成dll文件。
下面看一个例子,假设有ClassLibrary1.dll文件,该类库中的有关校验过期的代码如下:
public static class License
{
private static bool licenseExpired;
internal static void CheckLicense()
{
//if语句中判断是否过期
if(true)
{
//标示是否过期,设置成true表示过期
License.licenseExpired = true;
}
}
}
使用ILSpy进行反编译看到的代码如下:

在使用ildasm.exe对该dll文件进行导出成il文本文件:

使用文本编辑器打开il文件,找到校验对相关代码:

1. 上图中的红框部分代码对应的就是 License.licenseExpired = true; 这行代码;
2. 第97行代码 IL_0004:ldc.i4.1 代表的就是true,等待着赋值给下面的licenseExpired;
3. 修改97行的代码为 IL_0004:ldc.i4.0 ,然后保存il文件。
打开命令行,进入到il文件所在到目录,执行下面的命令;
c:\windows\microsoft.net\framework\v4.0.30319\ilasm.exe /dll/resource=ClassLibrary1.res ClassLibrary1.il

现在在il文件的目录中可以看到生成的dll文件:

反编译生成的dll文件,可以看出代码已经被修改,如下图:

带签名dll的破解
如果程序集是带签名的程序集,在经过上面的步骤进行破解后,dll文件依然不能正常使用,通常会报如下错误:
未能加载文件或程序集“ClassLibrary1”或它的某一个依赖项。未能验证强名称签名。此程序集可能已被篡改,或者已被延迟签名,但没有用正确的私钥进行完全签名。 (异常来自 >HRESULT:0x80131045)
经过对比发现经过签名的dll文件和未签名的dll文件的区别在于签名的dll文件生成的il代码中会多处如下的代码:

将il代码中上面红框部分代码删除,重新生成的dll文件就是去掉了签名的dll文件。不出什么意外的话此时的dll文件可以正常使用了,但有时又会出现如下的错误:
重写成员“xxx”时违反了继承安全性规则。重写方法的安全可访问性必须与所重写方法的安全可访问性匹配
解决该问题需要在Assemblyinfo.cs文件中添加如下代码:
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

上面添加的代码对应的il代码为:
.custom instance void [mscorlib]System.Security.SecurityRulesAttribute::.ctor(valuetype [mscorlib]System.Security.SecurityRuleSet) = ( 01 00 01 00 00 )
将上面的代码添加到il的相应位置,重新生成dll文件就OK了。
总结
本文是以技术研究学习为目的,不提倡对收费的软件或类库进行破解使用
C# 带签名dll破解的更多相关文章
- 签名DLL
签名DLL 首先需要一个密钥文件,后缀为.snk 密钥文件使用sn.exe 创建: sn.exe /k MySingInKey.snk sn.exe 工具的具体使用,可以通过 sn.exe /h 或 ...
- UTF-8 带签名和不带签名的区别
就和字面上一样,带签名的UTF-8文件比不带签名的,在文件开头的地方就多了几个16进制字符--[EF BB BF ],这9个字符就是"签名",这样做的好处是让文本处理工具或者浏览器 ...
- 【其他】UTF-8带签名与不带签名
在 Visual Web Developer 另存为文件时,有编码选项,其中有: Unicode (UTF-8 with signature) - Codepage 65001 Unicode (UT ...
- utf-8是否带签名 乱码问题。
Encoding utf8 = new UTF8Encoding(true); 参数表示是否带签名, 但此是否带签名在WriteAllBytes 无效,生成的永远是无签名的. 但在WriteAllTe ...
- Intellij Idea:创建带签名的APK
步骤如下: 1. 选择菜单Build -> Generate Signed APK… 2. 创建或选择已存在的Key Store(选择已存在的Key Store的话直接跳到第5步) 3. 输入K ...
- Eclipse下配置Ant脚本 自己主动打包带签名的Android apk
尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得 ...
- 使用Gradle打出带签名的apk包
step1:配置build.gradle文件 step1:切换到项目所在目录,用build命令打包 首先 gradle clean 命令清理一下当前项目 E:\AndroidStudioProject ...
- 实战动态PDF在线预览及带签名的PDF文件转换
开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3 ...
- Android破解学习之路(十六)—— dll破解的IL指令
IL指令介绍 IL是.NET框架中中间语言(Intermediate Language)的缩写. 使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不 ...
随机推荐
- Android数据加密之Des加密
前言: 端午节前有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...
- 1. 使用Filter 作为控制器
最近整理一下学习笔记,并且准备放到自己的博客上.也顺便把Struts2 复习一遍 1. MVC 设计模式概览 实现 MVC(Model.View.Controller) 模式的应用程序由 3 大部分构 ...
- 非关系型数据库来了,CRL快速开发框架升级到版本4
轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有 新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了! ...
- PHP环境配置
PHP环境配置 1.Apache的安装 第一步: 1. 双击httpd-2.2.17-win32-x86-no_ssl.msi.出现 Windows 标准的软件安装欢迎界面,直接点“Next”继 ...
- [JavaEE笔记]Cookie
引言 由于 Http 是一种无状态的协议,服务器单从网络连接上无从知道客户身份. 会话跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话.常用会话跟踪技术是 Cookie 与 Session. ...
- java设计模式之简单工厂模式
简单工厂: 简单工厂的优点: 1.去除客户端与具体产品的耦合,在客户端与具体的产品中增加一个工厂类,增加客户端与工厂类的耦合 2.封装工厂类,实现代码平台的复用性,创建对象的过程被封装成工厂类,可以多 ...
- [SQL Server] 特殊字符、上标、下标处理
今天遇到一个问题是往 SQL Server 中导入像m².m³这样的单位数据,可是在 SQL Server 中查看到的都是 m2.m3,于是在网上查了一下资料,顺便摘录下来供日后查阅. 一 Wind ...
- AutoMapper的介绍与使用(二)
AutoMapper的匹配 1,智能匹配 AutoMapper能够自动识别和匹配大部分对象属性: 如果源类和目标类的属性名称相同,直接匹配,不区分大小写 目标类型的CustomerName可以匹配源类 ...
- ASP.NET CORE配置信息
做个笔记,原文链接 除了应用 IOptions<T> .Value的方式对配置信息进行全局注册外可以应用的另一个微软给出的组件,需要依赖两个包 Microsoft.Extensions.C ...
- linux(十二)___Apache服务器用户认证、虚拟主机的配置
创建xiangkejin zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...