某源代码转WORD工具破解免注册分析

查看 92|回复 6
作者:iwolf   
前言
申请软著时,需要按一定word格式提交源代码文档,手动复制粘贴然后再调格式比较繁琐,就在网上搜索类似用途的工具,通过一篇介绍申请注意事项的帖子发现一款软件,遂下载使用。大小只有300多K,只要能生成规范的文档,满足功能即可。但是未注册软件只能生成部分文档,且含有多余文字信息,必须购买才能使用。该软件为一家医疗科技公司所开发(医疗科技公司开发软件?我认为这很跨界),并且就这一个小工具竟要3.99/天,当真有人买?软件很小,所以尝试练手破解。适合新手。


Snipaste_2024-06-26_14-51-45.png (34.72 KB, 下载次数: 0)
下载附件
2024-6-27 16:56 上传

某源代码转WORD工具
混淆:ConfuserEx
版本:2.4.0
去混淆
首先拖入DIE分析,显示其为.NET程序,保护器: Confuser(1.X),拖入dnSpy中查看确为混淆代码。借助工具脱壳去混淆,最终使用ConfuserEx-Unpacker-v2.0能完全去混淆,然后通过dnSpy反编译出代码。
分析
与注册有关的功能在XXXUtils命名空间的HDKey、RSACryption、ValidReg这3个类中。HDKey获取机器的编码(类似于硬盘序列号),代码为
return HDKey.UserMd5(cpuID + diskID + versionInfo.ProductName);
该编码为CPU的ID号、硬盘ID号、软件名称3个字段拼接字符串的MD5。RSACryption是RSA的签名验证算法,其中包含公钥。ValidReg与服务器验证页面通信,结果经RSA签名验证,返回注册状态。


Snipaste_2024-06-26_16-32-44.png (141.2 KB, 下载次数: 0)
下载附件
2024-6-27 16:57 上传

破解方式一
此方式最直接简单粗暴。修改上图第74行使onlineValid()函数返回true即可。软件只在MainForm类中的Verification()处进行联网注册验证,从代码中可以看出,只要程序不退出,若未注册,则每20S进行一次验证通信;若注册,则每10分钟进行一次验证通信。可以修改此处数值,延长注册验证的间隔时间。


Snipaste_2024-06-27_10-15-47.png (17 KB, 下载次数: 0)
下载附件
2024-6-27 16:57 上传

代码能运行到onlineValid()函数内74行的逻辑是收不到服务器响应或者响应数据经过61行处的函数SignatureDeformatterWithMD5()验证后返回false,所以此方式的前提是运行前断网或者修改hosts文件使域名指向localhost即可(正常联网也可以通过验证!只是联网与否的程序执行路径不同,但返回结果已被修改为true)。点击第74行,点击右键,选择“编辑IL指令”,将序号105处的操作码ldc.i4.0更改为ldc.i4.1。记得保存文件。


Snipaste_2024-06-26_19-17-26.png (11.92 KB, 下载次数: 0)
下载附件
2024-6-27 16:58 上传

运行软件,显示为“已注册”状态。


Snipaste_2024-06-27_14-48-25.png (116.85 KB, 下载次数: 0)
下载附件
2024-6-27 16:58 上传

破解方式二
软件与服务器中的validreg.aspx页面通信,进行注册验证。可以修改第61行处的函数SignatureDeformatterWithMD5(),使其返回true,即可通过验证。


Snipaste_2024-06-26_19-32-30.png (16.7 KB, 下载次数: 0)
下载附件
2024-6-27 16:59 上传

此方式需要搭建伪造服务器站点,同时修改hosts文件,使服务器指向本机。搭建相同路径下的网页站点,validreg.aspx.cs代码如下:
protected void Page_Load(object sender, EventArgs e)
{
        string HDKey = Request.Form["HDKey"];
        Response.Write("Valid\n");
        Response.Write(HDKey);
        Response.Write("\nsigndata\n"); //实际应为签名后的数据
        Response.Write("2101 / 1 / 1 0:00:00\n"); //过期时间
}
validreg.aspx收到软件post提交的数据后,返回4行信息。第1行固定为"Valid";第2行为机器编码;第3行为服务器使用私钥进行的签名,因为修改SignatureDeformatterWithMD5()使其返回true,跳过签名验证,所以第3行数据可任意写;第4行为软件过期时间。使用VS搭建站点时需取消掉默认使用的MVC路由机制,否则页面会重定向到无aspx后缀的页面。
破解方式三
不修改方式二中的SignatureDeformatterWithMD5()函数,使其进行正常的RSA签名验证,但需要在validreg.aspx.cs实现代码中添加数据签名的处理过程。首先生成一个公私钥对,网页代码对软件post的字符串使用私钥进行签名,将结果返回给软件。软件用公钥进行签名验证,通过后则注册成功。使用生成的公钥替换掉软件中的公钥即可。


Snipaste_2024-06-27_10-53-22.png (26.47 KB, 下载次数: 0)
下载附件
2024-6-27 16:59 上传



Snipaste_2024-06-27_09-29-08.png (125.28 KB, 下载次数: 0)
下载附件
2024-6-27 17:00 上传

总结
软件的注册验证机制简单,代码逻辑清晰。方式一最简单直接,修改函数onlineValid()返回值为true,不管联网与否。方式二、三都需要搭建伪造服务器,修改hosts文件,使服务器指向本地。方式三引入RSA签名验证,不用修改函数返回值,但需额外替换公钥。
附件:

Source2Doc.zip
(336.97 KB, 下载次数: 27)
2024-6-27 17:10 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB

下载次数, 方式

iwolf
OP
  


wjbg2022 发表于 2024-6-27 18:30
ConfuserEx-Unpacker-v2.0,楼主,这个工具可以分享一下吗?

论坛里搜一下,有分享这个工具的帖子
https://www.52pojie.cn/thread-1304627-1-1.html
wjbg2022   

ConfuserEx-Unpacker-v2.0,楼主,这个工具可以分享一下吗?
luxingyu329   

学习了,感谢楼主分享,对于这种组合验证还是需要熟悉运行流程
Yifan2007   

没加壳就是好操作,想问问加壳的程序有方法在dnspy里看到这个界面直接改代码然后编译吗
jgn3odl2   

学习学习
Bob5230   

谢谢分享!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部