新版本

某数据库同步工具开源教程

作者:新版本   发布时间:2017-05-17 13:47   回复数:0   浏览数:242
新版本
2420新版本步入草根
2017-05-17 13:47:05
2420 2017-05-17 13:47:05
本帖最后由 新版本 于 2017-5-17 13:49 编辑

[free]因原程序官方已经不销售,而网上的开源 有点儿略贵,所以自己尝试开源了。方法如下。
软件是这个。

图片:1341023129_7323.png



我的方法是开源8.4.1的,下载地址找百度。[/free]


开源过程:
根据最终结果来看,破客户端或是服务端都无所谓,因为最终算法都一样。我这里是拿客户端来分析的。
1、因为程序要求.NET环境,所以应该是.NET开发的,使用detect it easy查壳,发现加了两层壳reactor 4.8-4.9和xenocode postbuild(2.x-3.x)
2、祭出de4dot脱壳,开始这里绕了很多弯路(第一次用),比如会把资源文件解压出来,包括最后开源成功了,会报错这些问题,
直接使用命令行脱壳附参数
de4dot.exe XXX.exe -p dr4 --dont-rename --keep-types --dr4-embedded false
参数说明:
-p dr4是脱壳类型为reactor 4.8-4.9
--dont-rename是不重命名方法名           --keep-types保留混淆类型,字段,方法   这两个放在一排是因为我不确定这两个哪个具体影响的之前的报错,高手出来解答一下。
--dr4-embedded false //不转储嵌入式组件(不解压资源文件)


这一步的脱壳只是为了程序不报错,留着备用,复制一份。


3、要另存源码需要完全脱壳,即还需要输入命令de4dot.exe XXX.exe -p xc,
脱壳完成之后就是另存源码了,这个可选工具有.NET Reflector/ILSpy/Telerik JustDecompile
我当时是用的.NET Reflector,不管使用哪种工具都记得要装Reflexil插件

4、关键代码分析:
打开另存的源码,搜索字符串无果,查看窗体文件发现有一个frmLicenseManager,看着像是输入注册码的窗体
查看代码里的窗体元素,基本确定就是输入验证码的窗体,
在这里也发现程序字符串都是放在资源文件里的,所以搜索字符串是搜索不出来结果的。
在代码里看一个事件btnApply_Click,这个就是应用按钮的事件。
跟进代码会发现,里面有调用两个方法,一个方法是验证,另外一个方法是写验证码文件
直接进入验证方法(f12)

这一步里发现是RSA验证,直接写注册机是不现实了。要写也需要修改RSA公钥。
这里也明显看出验证码是XML字符串,至于具体有哪些字段,属性都未知。
查看引用此方法的方法还有另一个,跟过去会发现最终会将我们提交的验证码反序列化为一个对象,跟进去之后
这就是注册验证码的XML字段及属性了,涉及 { get; set; } 都是。
至于哪些是属性,哪些是字段,自己写一个程序,生成一下XML结构就出来了。

结构出来了就是根据上面的RSA加密顺序写解密代码,至于怎么写,百度有现成的。
生成前先要生成自己的RSA公钥和私钥,因为我们没有原程序的私钥,所以无法解密。
这里有一个干扰因素,机器码
string.Equals(document.DocumentElement["MachineUID"].InnerText, str4)
这一串是验证机器码是否与XML里一致的,根据str4的赋值去追踪。

5、能生成注册码了之后,接下来就是修改RSA公钥了。我用的是ILSpy
打开程序,搜索<RSAKeyValue
找到第4步验证的地方,开启Reflexil插件。右键编辑相应的值,另存为,会弹出强名称,我直接选的的第一个。
相同方法把服务端也修改了。
补充说明一下,生成的验证码文件目录及文件名在第4步的写入验证码文件那里有。然后把你第4步生成的验证码放在相应的目录里,重启服务,发现开源成功。

游客
登录后才可以回帖,登录 或者 注册