之前下载了一个小软件,使用的时候提示要求注册,试用部分功能收到限制,看来还得动刀了,嘿嘿。
使用查壳软件查看,是Microsoft Visual C# / Basic .NET程序,没有加壳,链接器是8.0,就是说使用visual studio 2005编译的程序喽,上网一搜,破解.net的程序原来比较简单,常用的工具包括vs自带的ildasm和ilasm、Reflector、Xenocode_Fox等等很多,下载了Reflector,这个是免费的,Xenocode_Fox是收费的,还需要找破解版,不过网上也有很多。
飞尘这里使用ildasm和Reflector两个配合起来,使用两个工具都打开需要反编译的程序,在Reflector中查看程序源码,这里是C#,同时在ildasm中显示对应的il代码,使用ildasm将程序转储为il文件,使用文本编辑软件打开对应的il文件,至于如何修改,不同的程序不同的方式。这里遇到的程序较为简单,代码本身没有进行混淆,所以源代码很容易解读,是在窗体加载时调用注册验证的一个函数,返回一个逻辑值,为真则为注册,否则提示需要注册。于是简单的把判断条件做了下互换修改,即值为假时为已经注册,使用ilasm将il文件重新编译,在cmd命令行中输入
ilasm /output:"D:\abc\unpack.exe" "D:\abc\unpack.il"
如果文件所在路径中包含空格,最好将其用引号引起来
运行unpack.exe,没有提示要求注册,欣喜——不过使用原来收限制的功能时注册框又跳了出来,看来是同样调用了注册验证模块。
这样修改比较麻烦,换个角度,把注册验证的函数做下修改不就ok了吗,使其永远返回真值,这样一劳永逸啊,哈哈。于是赶紧到注册函数中查看,比较简单,也不去管它到底怎么个验证法,把返回false的统统改为true,对应的il代码就是
ldc.i4.0改为ldc.i4.1
具体的il语言感兴趣的朋友可以自己学习下,飞尘这里也不懂,就是C#和il代码对照着查看,猜着改的,嘿嘿。不过修改完,重新编译后的程序就已经是已注册版了,之前修改的判断条件那里不要忘记改回来啊。