2月17日
关于控件破解的步骤
.net下的控件如果不用使用混淆工具混淆,就相当于把自己的源码白送给人家。今天刚破解了SlickUpload,一个大文件上传工具,记录一下一般的破解步骤:
1.先使用reflector反编译工具打开dll文件分析,此工具可以反编译成不同的语言,如c#和il,切换对比一下可以对比c#和il之间的差异,把鼠标移IL指令代码上,还会出现注释说明该IL代码的作用,真是太方便了,找到输出公司标记的部分BrandFilter.GetBrand(),此控件在httpModule处理中直接在response输出流中插入了一个div标签。因此只要将此字符串替换为空就可以了。令人疑惑的是该控件的注册类LicenseValidator并没有在其它部分调用,在reflector中分析代码的依赖关系也很方便,在左侧选中一个方法,点击右键选择analyze就可以分析该方法被哪些代码调用。
2.用ildasm打开dll,转储为文本文件。
3.打开文il文本,首先把校验去掉,否则会出现异常,在文件头部,
.publickey = (。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。 )
把这部分整个删掉。
4.查找GetBrand,会找到两处,第一处为声明,第二处才是要找的部分,修改为就可以了。
.method private hidebysig instance string GetBrand() cil managed { // Code Size: 6 byte(s) .maxstack 1 L_0000: ldstr "<div></div>" L_0005: ret } 如果有注册机制的话,一般给他返回true就可以了。
public bool IsValid(KeyInfo keyInfo) { return true; }
转换成IL后变成
.method public hidebysig instance bool IsValid([System.Security]System.Security.Cryptography.Xml.KeyInfo keyInfo) cil managed { // Code Size: 2 byte(s) .maxstack 0 L_0000: ldc.i4.1 L_0001: ret } 5.保存il文件后还要重新编译回去,在vs命令行输入
ilasm /dll /resource=slick.res slick.il
其中/dll是表明编译为dll,/resouce表明要包含的资源文件。
![](http://c.services.spaces.live.com/CollectionWebService/c.gif?space=pleasure8&page=RSS%3A+%E5%85%B3%E4%BA%8E%E6%8E%A7%E4%BB%B6%E7%A0%B4%E8%A7%A3%E7%9A%84%E6%AD%A5%E9%AA%A4&referrer=)
![](https://i-blog.csdnimg.cn/blog_migrate/aa97d77ec6e1a259289dfce2bc1f623d.gif)