软件界面如下图所示,安装后打开会发现有三天试用期,试用期提示右侧红色字体单击后弹出注册窗口。
点击获取正版授权弹出注册页面.png (45.68 KB, 下载次数: 0)
下载附件
2023-3-23 10:20 上传
我试了将系统时间改为延后一个月,再打开后,首先弹窗提示“试用已过期,请注册正版”,然后弹出注册窗口。
下面开始:
1,拖进PEid感觉问题不大:
查看壳情况,只有一串正常的“Microsoft Visual C# v7.0”字符串,目测无壳,那不就好办了?.Net的东西都是在裸奔。
Peid查看壳情况.png (20.19 KB, 下载次数: 0)
下载附件
2023-3-23 10:30 上传
2,拖进Dnspy傻眼了:
查找注册、授权相关的类、方法,搜索“注册”等字样啥也搜不出来,点开类一看,所有明文字符串全部乱码,
就下面这个样子,代码里面所有涉及到字符串的地方都是这个
[color=]TestQRCodeForm
[color=].
[color=]smethod_0
[color=](
[color=]字符串
[color=],
[color=]
[color=]int
[color=])方法,
混淆的样子.png (29.42 KB, 下载次数: 0)
下载附件
2023-3-23 10:39 上传
3,想着去一下混淆吧:
于是花了一天时间尝试了GrayWolf、.NetReactorSlayer以及De4net所有版本,都没卵用啊,混淆代码依然在,字符串还是乱码一堆。
其中De4net所有版本中只有两个能正常用,其他的版本或者打不开、或者处理后生成的exe无法运行,我在想脱壳和去混淆的区别到底有多大?
4,算了算了,就这样搞吧:
好在能看到正常的类名、方法名。查到关键类:MyRegister。在他的initMachineCode()、doAuth()、checkAuth()下断点后,在dnspy中运行程序,
发现初始运行、注册按钮事件都会触发这个类里面的断点,好了,关键点找到了,就是这个MyRegister类。
关键代码段.png (48.24 KB, 下载次数: 0)
下载附件
2023-3-23 10:34 上传
5,机器码怎么产生的呢?
由下面两图中的方法产生机器码,根据我的断点观察变量内容发现:
1)
[color=]MachineCode
[color=].
[color=]GetInfo
[color=]()产生字符串“
BFEBFBFF000306C3ST1000LM014-1EJ1641ZVG952”;
2)然后传给
[color=]MachineCode
[color=].
[color=]GetMachineCodeString
[color=]()产生
[color=]machineCodeString
[color=]
[color=]=
[color=]“
mxBFEBFBFF000306C3ST1000LM014-1EJ1641ZVG952mx
[color=]”;
3)然后传给MD5加密函数
[color=]DESEncrypt
[color=].
[color=]MD5Encrypt32
[color=](
[color=]machineCodeString
[color=])得到:
[color=]macidMD5
[color=]
[color=]=
[color=]
"693C86F6BCB0CE7B989342FF78002FC7"
4)然后呢,再给他加个头得到:
[color=]sInputString
[color=]
[color=]=
[color=]
"MXPORT693C86F6BCB0CE7B989342FF78002FC7";
5)然后呢,再给他加上
[color=]sInputString
[color=] 的CRC32校验作为尾部,于是得到了完整的机器码:
[color=]Mxcode
="MXPORT693C86F6BCB0CE7B989342FF78002FC7F45A6E84"
就是注册窗口里面我们看到的那个“软件ID”;
获取机器码的函数1.png (18.57 KB, 下载次数: 0)
下载附件
2023-3-23 10:55 上传
机器码初始化过程.png (47.46 KB, 下载次数: 0)
下载附件
2023-3-23 10:55 上传
那
[color=]MachineCode
[color=].
[color=]GetInfo
[color=]()产生的字符串“
BFEBFBFF000306C3ST1000LM014-1EJ1641ZVG952”到底是什么呢?
根据我多年玩电脑硬件的经验,“
[color=]ST1000LM014”这不是希捷硬盘的型号吗?好吧,获取一下电脑硬件序列号一对比,
[color=]发现:
[color=]1)
[color=]“
BFEBFBFF000306C3“是CPU的序列号;
2)“
[color=]ST1000LM014-1EJ164”是主硬盘的型号;
[color=]3)“
[color=]1ZVG952”是主板的序列号中的一部分;
至此彻底弄清楚了机器码是怎么产生的!
硬件信息.png (194.78 KB, 下载次数: 0)
下载附件
2023-3-23 11:07 上传
6,机器码是怎么使用的呢?
程序的验证是用的
[color=]Mxcode
="MXPORT693C86F6BCB0CE7B989342FF78002FC7F45A6E84"这个码吗?
不是。
看下图,程序直接用了
[color=]macidMD5
[color=]
[color=]=
[color=]
"693C86F6BCB0CE7B989342FF78002FC7"这个码,因为这个类初始化的时候
这个变量已经被赋了值,注册页面显示出来的机器码只是这个
[color=]macidMD5
[color=] 又加上头“MXPORT”、加上CRC32校验位“
[color=]F45A6E84”罢了,
[color=]所以可以直接用
[color=]macidMD5
[color=] 的值。
[color=]反过来,注册机要用机器码的时候,就应该去掉头
[color=]“MXPORT”、再去掉尾部CRC32校验的8个字符。
输入假码后的比较.png (49.41 KB, 下载次数: 0)
下载附件
2023-3-23 11:13 上传
那是怎么用
[color=]macidMD5
[color=]
的呢?看上图
,
1)程序对
[color=]macidMD5
[color=] 这个本身就是MD5校验码的码又取了一次
[color=]DESEncrypt
[color=].
[color=]MD5Encrypt32()校验,
得到
sInputString ="DD3208636C8E48A30399138FCDE607A7";
2)然后对
[color=]sInputString
[color=]
再做CRC32Cls().GetCRC32Str(sInputString)校验得到
num3 = =0x000000001397832E;
3)然后对num3进行Base62.Encode(num3)编码得到字符串:
string value = "MqUv6"
而这个字符串就是程序拿来跟我输入的“11111111111111”进行对比的真注册码。
7,开始写注册机
好了,弄清楚了机器码的产生过程和机器码的使用就可以编写注册机了。
有两个思路,一个是仿照程序里面的方法获取那个macidMD5值后按程序里面算法求“真码”;
一个是用注册界面的“软件ID”,反着算一遍求“真码”——就是机器码的来源有两个:
一个自己实现机器码的获取、一个用注册界面现成的。保险起见,俩都实现了吧。
类结构.png (9.42 KB, 下载次数: 0)
下载附件
2023-3-23 11:30 上传
按硬件信息获取、MD5校验、CRC32校验、Base62编码编写相应的类。
这里采用“面向百度、面向Github、
面向吾爱“的编程方法,很快就编好了注册机:
生成的注册码.png (20.85 KB, 下载次数: 0)
下载附件
2023-3-23 11:32 上传
输入产生的注册码后就注册成功啦!
注册成功.png (15.72 KB, 下载次数: 0)
下载附件
2023-3-23 11:33 上传
8,自己写注册机也不一定好用啊
在笔记本win10系统下注册机的使用没什么问题,自动手动都正常,但是在
办公室台式机win7系统下就有问题了,
自动生不成注册码……因为注册机获取不到台式机电脑的主板型号,返回一个“ ”的空字符串。
好吧,就用手动生成吧。
然后呢,注册成功后一点击确定按钮——
[color=]程序崩了
:
程序崩.png (367.58 KB, 下载次数: 0)
下载附件
2023-3-23 11:38 上传
但是呢,授权码是对的,再次打开程序,依然提示正式版~
程序崩了之后再打开.png (167.98 KB, 下载次数: 0)
下载附件
2023-3-23 11:39 上传
开心,哈哈哈哈,有点小小的成就感~
013411liafu4afep4m884h.gif (56.07 KB, 下载次数: 0)
下载附件
2023-3-23 11:59 上传
分享一下注册机:
链接: https://pan.baidu.com/s/1uZsWo2QdBpRWn_IhNGmJMA?pwd=52pj 提取码: 52pj 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v6的分享