大神论坛

找回密码
快速注册
查看: 117 | 回复: 1

[原创] 逆向分析破解免注册软件著作权源代码转WORD工具 著作权登记文档生成系统逆向破解

主题

帖子

0

积分

初入江湖

UID
652
积分
0
精华
威望
0 点
违规
大神币
68 枚
注册时间
2023-10-14 10:44
发表于 2024-06-30 15:52
本帖最后由 恋爱选举巧克力 于 2024-06-30 15:52 编辑

前言

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


某源代码转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签名验证,返回注册状态。

破解方式一

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

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

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

破解方式二

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

此方式需要搭建伪造服务器站点,同时修改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的字符串使用私钥进行签名,将结果返回给软件。软件用公钥进行签名验证,通过后则注册成功。使用生成的公钥替换掉软件中的公钥即可。

总结

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


下方隐藏内容为本帖所有文件或源码下载链接:

游客你好,如果您要查看本帖隐藏链接需要登录才能查看, 请先登录

主题

帖子

1

积分

初入江湖

UID
885
积分
1
精华
威望
2 点
违规
大神币
68 枚
注册时间
2024-07-04 18:27
发表于 2024-07-04 18:43:02.0

18757543207求助大神,米多

返回顶部