VisualSVN是一款集成在VS中的svn客户端工具,总的来说还是比较好用的。可惜的是不是免费的,未注册有30天试用。
体验了一把vs2012,所以也下载 VisualSVN3.0 beta版。可惜找不到注册机了。
从网上下载的注册工具,都是针对2.x版本的,或者直接替换VisualSVN.Core.dll文件。所以我在想,一般的软件,注册算法不会有太大的改变的,要不然我买了2.0的版本,升级到3.0后注册码就不能用了。既然算法改变不大,那么为什么不能写一个通用的注册机呢?
使用Reflector.exe看了一下VisualSVN.Core.dll,里面算法其实还算简单,最麻烦的就是RSA认证。在这个dll里面有一个资源文件,名字叫VisualSVN.Core.public.key。一看就知道是RSA的public key。可是我们没有private key,没办法生成注册码啊!
我本身是学习c/c++开始的,对.net程序不是很熟悉。在win32程序中的资源是不加密的。也就是说如果我有个资源,内容是"1234567890",那么我可以用16进制编辑器(如ultraedit)搜索到这个字符串的。基于这个想法,我假设.net的资源也是没加密的。从VisualSVN.Core.dll中搜索VisualSVN.Core.public.key的内容,那么是不是就可以替换成我自定义的public key?事实证明我的想法是对的。
想法有了,那么编写keygen就简单了。基本思路如下:
1. 用assembly来加载VisualSVN.Core.dll,获得VisualSVN.Core.public.key的内容