您的位置:首页 > 编程语言

通过学习反编译和修改IL,阅读高人的代码,提高自身的水平。

2010-02-20 01:36 393 查看

前言

本文取了一个很“高雅”的名字,实际上可以用一个英文单词概括:crack。

当然,我不鼓吹随意的crack别人劳动成果以便自身谋取利益。我更推崇的是通过阅读掌握他人优雅的代码,提高自身的程序水平。

恩!大家阅读正文前,请端正下自己的心态。(。。。。)

正文

最近一连研究了几个优秀的webui和winform ui控件,例如divelement, componentart。感觉很是水平,特别自己正在做一个schedule的框架,需要表现力强的ui去好好验证自己的思路,于是拿起工具玩了一把。

传统的crack,无非是写个注册器,生成注册码什么的,可是!这个不是老子的目标!我要做的是连和注册相关的代码全部都delete掉,成为一个真真正正干净的dll。

那么工作前,先列举一些工具:

1. reflector.net 反编译为c#,非常有用,主要用户导出vs项目,然后查看类的调用关系。

2. UntraEdit,用16进制去阅读代码,可以看到很多dotfuscator混淆的乱码。

3. ildasm.exe 微软.net 自带的一个对dll解压成为il的工具。找不到可以用资源管理器搜索一下。

4. ilasm.exe 对il再次编译为dll

5. 附加一个 Remotesoft .net Explorer。可以方便的查看il。不过貌似和ildasm差不多。作为备胎吧。

工作流水账

1. 获取需要玩的dll,一般安装了对方的控件,在program files目录下面可以获得。

2. 使用ildasm.exe 转成il文件,这里有个细节,必须转成Utf-8的格式,不能转成Acsii,否则部分混淆的代码会丢失一些信息。

代码 .custom instance void [System]System.ComponentModel.LicenseProviderAttribute::.ctor(class [mscorlib]System.Type) = ( 01 00 3C 43 6F 6D 70 6F 6E 65 6E 74 41 72 74 2E // ..<ComponentArt.
4C 69 63 65 6E 73 69 6E 67 2E 50 72 6F 76 69 64 // Licensing.Provid
65 72 73 2E 52 65 67 69 73 74 72 79 46 69 6C 65 // ers.RegistryFile
4C 69 63 65 6E 73 65 50 72 6F 76 69 64 65 72 00 // LicenseProvider.
00 )

3. 修改对License的依赖

一般dll里面会存在多个license版本,当然会有一个正式的license,然后代码中间会运行类似以下片段获取license:

this.License = LicenseManager.Validate(base.GetType(), this);

我们现在直接新建一个正式的license就可以了。甚至可以自己虚构一个出来,然后嵌入IL。例如:

this.License = new FullLicense();

做到这部,就需要我上面说的对照法,或者熟悉IL的,直接写IL。

4. 删除所有和licenseProvider相关的类和代码。

反正是继承了licenseProvider之类的,还是调用了,能改就改(借鉴了reflector.net),之后把licenseprovider删了。

小结

本文的目的,是让大家能够更加深入的学习.net,甚至掌握IL。我就是通过改中,慢慢掌握了IL的。感觉比起c#,IL简单多了。希望大家能够成为独霸一方的高人,将来多指导小弟我了!

祝各位虎年快乐!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐