通过学习反编译和修改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简单多了。希望大家能够成为独霸一方的高人,将来多指导小弟我了!祝各位虎年快乐!
相关文章推荐
- 通过学习反编译和修改IL,阅读高人的代码,提高自身的水平。 【转】
- 修改代码主题等,提高阅读体验
- 如何通过ildasm/ilasm修改assembly的IL代码(转
- 通过阅读别人的代码轻松提高自己的编程能力
- 如何通过阅读英文网站提高英文水平
- WordPress 不修改代码通过sql语句修改数据库批量增加文章阅读量
- 2010-3-6 代码阅读(续)编译内核 学习
- 如何通过ildasm/ilasm修改assembly的IL代码
- 提高自身代码阅读能力——代码配色(Dreamweaver、Notepad++)
- 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
- 2010-3-5 代码阅读 编译 学习
- Dreamweaver、Notepad++ 代码配色(提高自身代码阅读能力)
- 如何通过ildas“.NET技术”m/ilasm修改assembly的IL代码
- 如何通过阅读别人的代码提高自己的编程能力
- 如何通过ildasm/ilasm修改assembly的IL代码
- 一起谈.NET技术,如何通过ildasm/ilasm修改assembly的IL代码
- 简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。
- 如何通过ildasm/ilasm修改assembly的IL代码
- Java入门学习-学会用txt文档写一段helloworld,并通过windows命令行编译和执行该Java代码
- .net数据持久化封装 -如何通过修改IL代码实现