理想的海洋 发表于 2022-3-28 11:41

dnspy破解某收费.net软件注册码的探讨

本帖最后由 理想的海洋 于 2022-3-31 17:19 编辑

1.有一款.net的收费软件 参考一个帖子的方法没有成功 参考链接如下
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1099138&highlight=dnspy

2.这个软件和以上帖子的很相似,搜索注册找到了关键代码



3.右键选择编辑方法试了几个代码都提示编译错误

代码如下 有大佬能指点一下吗   原代码如下
using System;
using System.ComponentModel;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Controls;
using DevComponents.DotNetBar.Metro;

namespace IDCardReader.setting
{
      // Token: 0x02000009 RID: 9
      public partial class Setting : MetroForm
      {
                // Token: 0x06000113 RID: 275 RVA: 0x000113F4 File Offset: 0x0000F5F4
                private void btn_active_Click(object sender, EventArgs e)
                {
                        string text = this.tbl_license.Text.Trim();
                        if (!SecurityUtil.Verify(text))
                        {
                              MessageBox.Show("注册码错误了怎么办", "错误提示");
                              return;
                        }
                        MessageBox.Show("成功激活");
                        RegisterUtil.initRegistry();
                        RegisterUtil.SetValue("license", text);
                        if (MessageBox.Show("输入注册码后,重启后生效,是否立即重启", "是否重启", MessageBoxButtons.OKCancel) == DialogResult.OK)
                        {
                              Application.Restart();
                        }
                }
      }
}



结合帖子里的大佬的回复方法,nop掉if判断   可以激活了但是程序有验证,重启失效


谢谢各位大佬出谋划策这个软件的pj方法应该是有很多种,我用了两种方法都可以实现重启验证的pj

第一种:24楼的方法 搜索注册码错误 在错误提示的上面点击 SecurityUtil.Verify跳转然后按照他发的图片把result改成result2具体修改的几处他都贴了图片 参照修改保存即可。
第二种:45楼的方法 在注册码错误提示上面有个if函数 直接删除掉然后把 IDCardReader.finishTrial = true; 这一句改成IDCardReader.finishTrial =false也可以的

还有其他大佬的多种方法由于自己初学看不懂不知道如何操作,不过最感兴趣的还是62楼大佬的方法,说是RSA加密 可以用公钥和私钥,直接模拟生成注册码不知道是不是不用pj和分析主程序
直接能通过两个秘钥文件生成注册码,还在继续学习研究中。

gksj 发表于 2022-3-29 02:21

本帖最后由 gksj 于 2022-3-29 13:00 编辑

zhanglei1371 发表于 2022-3-28 20:27
因为代码没有加壳,所以直接编辑方法就OK了。
按byh3025的修改方案修改后,找到load部分,这样修改:
上 ...
你这样改没用的,你往上看在你之前我发的回复
if (IDCardReader.finishTrial && formName != "setting")
                        {
                              MessageBox.Show("该版本为试用版本或者使用管理员权限运行该软件,试用期结束", "激活通知");
                              return;
                        }
在点击窗体按钮的时候检测了IDCardReader.finishTrial的值
如果是true就直接返回了
试用到期还是用不了
所以

这样是最彻底的解决方案,加载完标题不进行注册表操作直接赋值false

所以说写代码要考虑所有的可能性,把所有相关的条件都处理好

还有经过我对整个程序的分析,发现这个软件即使注册了也还是试用版
因为把秘钥正确写入注册表之后根本就没有读取这个秘钥
所以注册完之后估计作者会发一个正式版的软件

byh3025 发表于 2022-3-28 14:44

感觉这样改就差不多了

rz66 发表于 2022-3-28 11:55

身份证读卡器?

Panel 发表于 2022-3-28 11:58

这应该发错板块了吧?正确板块应该是求助区

理想的海洋 发表于 2022-3-28 12:02

Panel 发表于 2022-3-28 11:58
这应该发错板块了吧?正确板块应该是求助区

我看这个属于.net   就选择这个板块了

vipcrack 发表于 2022-3-28 12:13

SecurityUtil.Verify(text) 验证在这里面

慕若曦 发表于 2022-3-28 12:13

编辑IL代码,把17行的if语句反转就行了。

jidesheng6 发表于 2022-3-28 12:32

提示编译不了的时候你可以滚动一下滚轮,会发现新天地,这种情况你只能编辑il代码了,一般都是dnspy的反编译器编译出来的语法有问题,要么自己修复要么编辑il,后者更快点

列明 发表于 2022-3-28 12:36

删掉return;应该就好了。

理想的海洋 发表于 2022-3-28 12:45

jidesheng6 发表于 2022-3-28 12:32
提示编译不了的时候你可以滚动一下滚轮,会发现新天地,这种情况你只能编辑il代码了,一般都是dnspy的反编 ...

为了能让编辑器没问题 特意安装了win7 的虚拟机 .net4.6   dnspy没问题其他的都可以编译 估计还是我语法有问题

理想的海洋 发表于 2022-3-28 12:46

慕若曦 发表于 2022-3-28 12:13
编辑IL代码,把17行的if语句反转就行了。

反转代码我写不好 一直报错 再麻烦指导一下
页: [1] 2 3 4 5 6 7
查看完整版本: dnspy破解某收费.net软件注册码的探讨