某Excel插件 xx处理器 尝鲜版 注册码分析

查看 137|回复 10
作者:pjy612   
某Excel插件 xx处理器 尝鲜版 注册码分析
前情提要
看到大佬 @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 适合练手,就不放了。
仅供学习交流,请勿用于商业,觉得这玩意好用的还请支持正版

下载次数, 功能

pjy612
OP
  


xuanshao46 发表于 2023-4-24 14:26
对于一个小白该怎么学这些东西呢?

先至少学会一门 高级语言,至少 懂基础理论 变量,常量,条件判断,循环,函数,回调,委托。(另外有必要再研究下反射
之后 就可以对能反编译的 程序进行追码分析了。。。
毕竟反编译之后 基本就是 看代码。。。
因为 除了汇编外的任何编程语言,如果到了代码 基本是 上面几个的各种组合。。。
这个 代码会看会定位之后, 反正工作中改bug,定位错误都会很快就是了。。。
最难的其实是脱壳
各自静静   

向大佬学习
▍左瞳—LIKE^_^   

牛P楼主,这个比方方格子厉害吗
pjy612
OP
  

沙发自己坐~
@3yu3
xu3456   

谢谢分享,不错的追码实例。
sukingmoo   

牛,怎么才能达到这种分析水平                                               
黄教主   

学习一下
woxing   

我也来顶下好东西
bjxiaoyao   

感谢楼主分享,学习了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部