吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2984|回复: 32
收起左侧

[.NET逆向] 某源代码转WORD工具破解免注册分析

[复制链接]
iwolf 发表于 2024-6-27 17:01
本帖最后由 iwolf 于 2024-7-1 14:21 编辑

前言

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

某源代码转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

破解方式一

此方式最直接简单粗暴。修改上图第74行使onlineValid()函数返回true即可。软件只在MainForm类中的Verification()处进行联网注册验证,从代码中可以看出,只要程序不退出,若未注册,则每20S进行一次验证通信;若注册,则每10分钟进行一次验证通信。可以修改此处数值,延长注册验证的间隔时间。
Snipaste_2024-06-27_10-15-47.png
代码能运行到onlineValid()函数内74行的逻辑有两种:1. 收不到服务器响应。2.收到的响应数据经过61行处的函数SignatureDeformatterWithMD5()验证后返回false。在运行前断网或者修改hosts文件使域名指向localhost,该方法可满足逻辑1。正常联网状态则满足逻辑2。这两种逻辑的程序执行路径不同,但都会运行到74行代码处,将此处结果修改为true可通过注册。点击第74行,点击右键,选择“编辑IL指令”,将序号105处的操作码ldc.i4.0更改为ldc.i4.1。记得保存文件。 Snipaste_2024-06-26_19-17-26.png
运行软件,显示为“已注册”状态。
Snipaste_2024-06-27_14-48-25.png
由于之前分析不完整,16楼小伙伴提出使用该方法后,生成文档仍然会有未注册的提示。可以字符串搜索,找到添加提示的代码如下图。
Snipaste_2024-07-01_10-56-58.png
软件中将注册状态分3种:已注册、未注册、未联网。图中代码判断当RegState.AlreadyReg字段不是Valid(数值1,表示已注册),则向生成文档中添加未注册提示。因对dnSpy不熟练,不知道有没有类似IDA中查找字段引用的功能,除了使用简单的搜索外不知道有什么办法能快速定位AlreadyReg字段引用,有熟练的大牛可以评论告知。
若使用逻辑1,不接收响应,则要修改ReadCode2Word()中的if判断条件,或使用dnSpy中编辑方法的功能注释掉图中AddText2Doc(“未注册XXX”)的语句(未测试注释掉语句是否能生效)。若使用逻辑2,可以修改ReadCode2Word()中的内容,也可以按照19楼的方法将 “48行操作码ldc.i4.2更改为ldc.i4.1     其对应于代码将

[C] 纯文本查看 复制代码
RegState.AlreadyReg = RegState.SoftwareState.NotValid;
修改为
[C] 纯文本查看 复制代码
RegState.AlreadyReg = RegState.SoftwareState.Valid;
在此感谢评论区指出的问题。

破解方式二

软件与服务器中的validreg.aspx页面通信,进行注册验证。可以修改第61行处的函数SignatureDeformatterWithMD5(),使其返回true,即可通过验证。
Snipaste_2024-06-26_19-32-30.png
此方式需要搭建伪造服务器站点,同时修改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
Snipaste_2024-06-27_09-29-08.png

总结

软件的注册验证机制简单,代码逻辑清晰。方式一最简单直接,修改函数onlineValid()返回值为true,不管联网与否(还需修改RegState.AlreadyReg字段值,详看破解方式一末尾部分)。方式二、三都需要搭建伪造服务器,修改hosts文件,使服务器指向本地。方式三引入RSA签名验证,不用修改函数返回值,但需额外替换公钥。
文中仅简单讨论了破解方式,但对于软件的实际功能并没有实测,评论中也有伙伴给出了开源的类似工具。同时感谢大家的评论,包括指出未完全注册的问题,相应解决办法,类似工具的开源方案,使用hook的方式等等。Hook又是一片新天地,也让我学习了,大家共同进步!
附件: Source2Doc.zip (336.97 KB, 下载次数: 141)



免费评分

参与人数 4威望 +1 吾爱币 +23 热心值 +4 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhu2023 + 1 + 1 谢谢@Thanks!
helian147 + 1 + 1 热心回复!
wjbg2022 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

论坛里搜一下,有分享这个工具的帖子
https://www.52pojie.cn/thread-1304627-1-1.html
msmvc 发表于 2024-7-2 16:01
本帖最后由 msmvc 于 2024-7-5 16:10 编辑

在楼主的基础上,这几天在尝试使用hook的方式注入onlineValid()方法一直返回true,可以看到画面显示注册成功
试用一下软件功能也发现了楼主在方法一补充的问题,参考16楼
接下来尝试用注入的方式解决上面的问题

2.24/07/05
已成功能hook

https://www.52pojie.cn/thread-1941002-1-1.html
wjbg2022 发表于 2024-6-27 18:30
ConfuserEx-Unpacker-v2.0,楼主,这个工具可以分享一下吗?
luxingyu329 发表于 2024-6-27 19:11
学习了,感谢楼主分享,对于这种组合验证还是需要熟悉运行流程
Yifan2007 发表于 2024-6-27 21:56
没加壳就是好操作,想问问加壳的程序有方法在dnspy里看到这个界面直接改代码然后编译吗
jgn3odl2 发表于 2024-6-27 21:58
学习学习
Lty20000423 发表于 2024-6-28 07:42
这个是从源码破解Office的?
HA19683 发表于 2024-6-28 08:43
感谢,学习了!
 楼主| iwolf 发表于 2024-6-28 09:01
Lty20000423 发表于 2024-6-28 07:42
这个是从源码破解Office的?

不是的,这个跟office没关系,工具的功能是将自己开发的程序代码转成特定文档格式(用于申请软著),功能有限且简单,所以这工具本身并没有什么价值
 楼主| iwolf 发表于 2024-6-28 09:14
Yifan2007 发表于 2024-6-27 21:56
没加壳就是好操作,想问问加壳的程序有方法在dnspy里看到这个界面直接改代码然后编译吗

我对加壳脱壳不了解,但是加壳或混淆过的肯定在dnspy里无法直接看到这种可读的代码,应该还是要脱壳
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 23:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表