前情提要
看到大佬 @3yu3 以前发了个悬赏,好奇是个啥玩意。
然后就去查了查,发现好像是个Excel上的插件,功能看着不少。。。
可惜只看到尝鲜版地址,估计目标是推广,所以 一个按钮功能一个码 ...
那就研究一下吧,顺便水篇帖子 (你问为啥不写另一篇?...那篇文件夹已经建好了...
官方地址 V3尝鲜版
https://wws.lanzoux.com/b01nmcdgd
准备工作
装完后 简单用用就能弹窗
0.png (55.72 KB, 下载次数: 0)
下载附件
2023-4-24 12:35 上传
1.png (28.62 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
开始分析
简单看了眼 上了混淆,直接扔 de4dot 处理下。
然后 搜下 注册码
private void method_3(object sender, EventArgs e)
{
this.Zcd.Text = Strings.Trim(Class5.Class4_0.Clipboard.GetText());
if (Strings.Len(this.Zcd.Text) != 32)
{
base.Visible = false;
Interaction.MsgBox("没有获取到注册码。", MsgBoxStyle.OkOnly, "注册");
base.Visible = true;
this.Zcd.Text = "";
}
}
看来 Zcd 就算 注册码的文本框,然后因为是 this 所以 直接在 当前 类里面直接搜 this.Zcd.Text
看看 哪里在读写。
你问为什么不分析 .Text 的写入?
因为 这个 Text 实际是 TextBox 的 Text,如果去分析 会把所有的 TextBox 都搜出来。。。反而难分辨。。。
private void method_0(object sender, EventArgs e)
{
base.Visible = false;
Class8.string_3 = this.Zcd.Text;
base.Close();
}
看来 Class8.string_3 是存码的地方,那么我们查查这个码后面用在哪儿了
2.png (123.63 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
3.png (89.01 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
4.png (61.55 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
中间还有个 smethod_5 看下
5.png (34.1 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
那么回到 smethod_6
6.png (44.62 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
7.png (47.71 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
8.png (37.2 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
9.png (39.94 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
那么
Class8.string_7 = Class8.string_1[0] = 机器码
然后 机器码 是 数字 开头 那就搜一下 上面遇到的 44
else if (Operators.CompareString(string_9, "RQZS", false) == 0)
{
short num35 = (short)Information.UBound(array, 1);
unchecked
{
for (num = 0; num
那算法就知道,功能 44 的 注册码=MD5(机器码+"RQZS44")
验证一下
10.png (28.85 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
然后功能就正常使用了。但是 按其他按钮还是会弹框。。。
这怎么办呢?总不能一个一个去对着填吧。
然后插件加了壳,避免功能失效也不能直接改。
有没有办法直接全部提取出来 一次性写入呢?
顺便看眼注册表
Class8.registryKey_0 = Class5.Class4_0.Registry.CurrentUser.OpenSubKey("Printers", true);
Class8.registryKey_1 = Class8.registryKey_0.CreateSubKey("CJCLQSY");
Class8.rVwwYpdme2 = Class5.Class4_0.Registry.CurrentUser.OpenSubKey("Keyboard Layout\\Preload", true);
Class8.RkGwrutEcj = Class8.rVwwYpdme2.CreateSubKey("Time");
Class8.registryKey_2 = Class8.rVwwYpdme2.CreateSubKey("Lmt");
那么 成功的码就应该存在 HKEY_CURRENT_USER\Printers\CJCLQSY 的 AddZCM 字段里面了。
规则 就是所有真码的前8位拼接在一起。
特征也蛮明显的
功能机器码 = MD5(机器码+"功能缩写")
功能机器码 = 功能ID + 功能机器码.SUB(LEN(功能ID))
功能注册码 = MD5(功能机器码 + "功能缩写"+ 功能ID)
那么咱们怎么批量提取 功能ID和功能缩写 呢? 直接写个正则在js里面读吧。
把 包含的判断 的 代码 复制到 Chrome 的控制台里面。
逻辑大概是 "(数字)"任意内容"(文本)" 提取 数字 和 文本
正则就是 /"(\d+)".*"(\w+)"/
11.png (120.13 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
12.png (42.92 KB, 下载次数: 0)
下载附件
2023-4-24 12:36 上传
导出为Json
[["11","SJFL"],["12","SJCP"],["13","DQYFZ"],["14","GSZSZ"],["15","BCFSJS"],["16","BCFSJSJ"],["17","BCFSJRQ"],["18","CFWGZB"],["19","CFWGZBO"],["20","HBGZBIAOSJ"],["21","HBGZBOSJ"],["22","GSJM"],["23","CRL"],["24","CRH"],["25","CJGZB"],["26","GSZH"],["27","GZB2GZB"],["28","SCSHTML"],["29","YDMS2"],["30","YDGZB"],["31","YW22W"],["32","TW21W"],["33","SJHD"],["34","XTMBHZ"],["35","BTMBHZ"],["36","HBTLX"],["37","GZBDH"],["38","PZDH"],["39","TPPZ"],["40","CRTP"],["41","MMWJ"],["42","MMWJJ"],["43","CJWJJ"],["44","RQZS"],["45","TQJG"],["46","HMYZ"],["47","HMSJ"],["48","YDMS1"],["49","JSLCSL"],["50","SZHGLK"],["51","CS"],["52","CHS"],["53","JKDYG"],["54","CFTLX"],["55","QCBB"],["56","YSTP"],["57","TPGSZH"],["58","HBTP"],["59","QYZTP"],["60","YDWJ"],["61","CJWJML"],["62","CJWJJML"],["63","SRZS"],["64","DSGJ"],["65","SCTXM"],["66","SCEWM"],["67","DQTXM"],["68","DQEWM"],["69","BQSZ"],["70","FLZF"],["71","DCCL"],["72","CZXTZ"],["73","TQWYZ"],["74","SCCFZ"],["75","TJCFCS"],["76","HBXTDYG"],["77","CCHBDYG"],["78","ZHZJE"],["79","ZYWJE"],["80","BJDYG"],["81","TQXM"],["82","CJSHT"],["83","MMSHT"],["84","SCGZB"],["85","TB2TP"],["86","SZYJ"],["87","TYTBDX"],["88","BCTX"],["89","WJQL"],["90","QCKWJJ"],["91","TXXB"],["92","TQSR"],["93","JSNL"],["94","WJQLDX"],["95","WJQLLX"]]
这样 功能ID 和 功能缩写 就都有了,写个循环把85个码全算出来。
一下加到注册表里面吧~
完整实现代码
无名小银,如果您要查看本帖隐藏内容请回复
附录
听3yu3大佬说 最新的 正式版 功能更多,而且注册码更精简。
可惜最新版没找到资源
手头虽然也有个 V6 但是注册逻辑精简了反而没 V3 适合练手,就不放了。
仅供学习交流,请勿用于商业,觉得这玩意好用的还请支持正版