吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14032|回复: 560
收起左侧

[.NET逆向] 某Excel插件 MagicalVBA 激活码逆向分析

    [复制链接]
pjy612 发表于 2023-4-27 10:54
本帖最后由 pjy612 于 2023-4-27 18:08 编辑

某Excel插件 MagicalVBA 激活码逆向分析

前情提要

某日 某 3xx3 佬 给咱传了个 链接,说他搞不定这个。。。
咱问他是干啥的,他说 他也不清楚 就是看了名字觉得想弄一下。。。
啊这... 不过咱也好奇 到底是个啥,就折腾看看...  

PS.
这个好像是个VBA学习工具,里面生产力的功能到是不多,但是不少图文教程。  

知乎软文链接  

淘宝里面有点贵好像。。。
就用来当 5.1 礼物吧...  (当然想嫖还是要点技术的  

准备工作

下载安装包
1.png
安装完了
2.png
注册表也有了
3.png
功能也出来了  

但是 插件的 dll 呢?文件没了?!这不科学。。。
看样子是安装完就自动删除了。。。
得想办法 文件提取出来。。。
由于对这块儿不熟,所以直接笨办法,那杀毒软件 给屏蔽了删除操作
最后提取出了 具体的安装文件和 vsto
4.png
这个会和原始安装包一起放出来 方便大伙分析。  

原始安装包和提取内容下载地址  

开始分析

打开 产品注册窗口
中文软件的好处 就是可以直接搜名字 比如 激活,产品注册界面
5.png
然后 既然是个 Form 那里面的按钮肯定是 Button,简单看一眼
6.png
试着先去个混淆  

private void uiButton1_Click_1(object sender, EventArgs e)
{
        try
        {
                string text = this.tb_ComputerFingerPrint.Text;  //机器码文本框的值 基本就是 编码后的机器码
                string text2 = this.tb_ActivateCode.Text;        //激活码文本框 就是 传入的激活码 了
                if (!string.IsNullOrWhiteSpace(text2))
                {
                        //RSA解密 
                        string[] array = new RSA(this._clientPublicKey).DencryptWithPublicKey(text2).Split(new char[] { '隔' });
                        //解析后 用 隔 分割,长度为3
                        if (array.Length != 3)
                        {
                                UIMessageBox.ShowError("激活码错误", true, false);
                        }
                        else
                        {
                                string text3 = array[0];
                                string text4 = array[1];
                                string text5 = array[2];
                                if (text == text3) //array[0] 要和 编码后的机器码一致
                                {
                                        DateTime dateTime;
                                        if (DateTime.TryParse(text5, out dateTime)) //array[2] 是日期
                                        {
                                                if (DateTime.Today.Subtract(dateTime).Days <= 0) //array[2] 要比当前日期大
                                                {
                                                        Settings.Default.ZhuCeMa = text2;
                                                        Settings.Default.App_RegistryDate = text4;
                                                        Settings.Default.App_RegistryCodeEndValidDate = text5;
                                                        Settings.Default.Save();  //配置保存
                                                        string activatingCodeSavePath = Settings.Default.ActivatingCodeSavePath;
                                                        if (!File.Exists(activatingCodeSavePath))
                                                        {
                                                                if (!Directory.Exists(Path.GetDirectoryName(activatingCodeSavePath)))
                                                                {
                                                                        Directory.CreateDirectory(Path.GetDirectoryName(activatingCodeSavePath));
                                                                }
                                                                new FileStream(activatingCodeSavePath, FileMode.Create, FileAccess.ReadWrite).Close();
                                                        }
                                                        File.ReadAllLines(activatingCodeSavePath, Encoding.Default);
                                                        FileStream fileStream = new FileStream(activatingCodeSavePath, FileMode.OpenOrCreate);
                                                        StreamWriter streamWriter = new StreamWriter(fileStream);
                                                        streamWriter.WriteLine(text2);
                                                        streamWriter.Close();
                                                        fileStream.Close();
                                                        Microsoft.Office.Tools.Ribbon.RibbonTab magic_VBA_RibbonTab = Globals.Ribbons.GetRibbon<Ribbon1>().Magic_VBA_RibbonTab;
                                                        foreach (RibbonGroup ribbonGroup in magic_VBA_RibbonTab.Groups)
                                                        {
                                                                //....................
                                                        }
                                                        magic_VBA_RibbonTab.ResumeLayout(true);
                                                        magic_VBA_RibbonTab.PerformLayout();
                                                        base.Dispose();
                                                }
                                                else
                                                {
                                                        UIMessageBox.ShowError("当前激活码授予的使用权已过期!请购买新的激活码", true, false);
                                                }
                                        }
                                        else
                                        {
                                                UIMessageBox.ShowError("激活码错误", true, false);
                                        }
                                }
                                else
                                {
                                        UIMessageBox.ShowError("激活码错误", true, false);
                                }
                        }
                }
        }
        catch (Exception ex)
        {
                MessageBox.Show(ex.Message);
        }
}

再来看看 密钥 在哪儿
7.png

密钥在这儿了
8.png

既然上了 RSA那肯定要替换密钥,
怎么换 可以参考 其他帖子,这里不详述。

值得一提的是,里面有一个明显字样

private string warnintext = "产品结构被非法篡改,当前用户已标记";

咱们瞧瞧都用在哪儿了
9.png
10.png

霍儿~ 用了强命名检查呢~
数据是这儿的
11.png

基本如果要改就是修改上面这两处位置了。
替换一个RSA密钥,然后 替换一下强签名验证的密钥,当然也可以直接强制改为判断成功。
咱这边就没动太多 改了两处文本。

编码逻辑

改完文本就要来实现激活码了。
之前已经分析出来 激活码的 格式很简单

[编码后的机器码,激活开始日期,激活结束日期]
然后 用字符 隔 拼接
然后 RSA 加密 具体看看怎么加密的

12.png
13.png

可以看到 有个 加密函数在
14.png
但是 入参是 两个 BigInteger
我们可以逆推一下

//公钥解密是下面这样
RSAHelper.ResolveKey(key, out array, out array2);
BigInteger bigInteger = new BigInteger(array);
BigInteger bigInteger2 = new BigInteger(array2);
text = RSAHelper.DecryptString(encryptString, bigInteger, bigInteger2);

key = RSAHelper.ComponentKey(publicKeyParameters.Exponent, publicKeyParameters.Modulus);

那么 私钥加密 也应该是 类似这样 
然后 看到 上面有个 

public static RSAHelper.RSAKey GetRASKey()
{
        RSACryptoServiceProvider.UseMachineKeyStore = true;
        RSAParameters rsaparameters = new RSACryptoServiceProvider(1024).ExportParameters(true);
        return new RSAHelper.RSAKey
        {
                PublicKey = RSAHelper.ComponentKey(rsaparameters.Exponent, rsaparameters.Modulus),
                PrivateKey = RSAHelper.ComponentKey(rsaparameters.D, rsaparameters.Modulus)
        };
}

那么很明显了 私钥大概 用的就是 rsaparameters.D 和 rsaparameters.Modulus

key = RSAHelper.ComponentKey(rsaparameters.D, rsaparameters.Modulus);
RSAHelper.ResolveKey(key, out array, out array2);
BigInteger bigInteger = new BigInteger(array); 
BigInteger bigInteger2 = new BigInteger(array2);
text = RSAHelper.EncryptString(encryptString, bigInteger, bigInteger2);

可以直接省略为 

BigInteger bigInteger = new BigInteger(rsaparameters.D); 
BigInteger bigInteger2 = new BigInteger(rsaparameters.Modulus);
text = RSAHelper.EncryptString(encryptString, bigInteger, bigInteger2);

开工

开始码代码实现了,老样子 偷懒用反射


15.png

杂项

默认的 插件安装逻辑里面 好像还有 强签名验证,vsto 验证什么的。   

如果对插件进行修改后不重新签名 可能导致插件不加载  

这里又是一大段的重新签名环节,而且感觉网上对这块儿 说明甚少。
为了减少影响 我真不做详细说明。
有兴趣的 可以自己去尝试,我这边会提供重新签名之后的补丁供大家尝试。
vsto 重新签名 参考文档:
https://learn.microsoft.com/zh-cn/visualstudio/deployment/how-to-re-sign-application-and-deployment-manifests?view=vs-2022  

.net dll 重新强签名网上一堆。

最后 卸载原版 使用重新签名后的版本安装后。

验证结果

16.png

补丁下载

这里的补丁 只是做了重新签名,不是破解补丁!
这里的补丁 只是做了重新签名,不是破解补丁!
这里的补丁 只是做了重新签名,不是破解补丁!  

其中将密钥改为了私钥。
可以拿来针对这个特定版本计算激活码。
下载后 覆盖到 提取的插件目录内,然后双击 vsto 安装即可。  



郑重声明

仅供学习交流,请勿用于商业,觉得工具好用的还请支持正版

附录 关于 Excel 插件 某某格子

这个说实话 当打开它的时候 还没出手 它就躺下了...  里面是裸的...
虽说价格其实不贵,结果可网上注册机还满天飞...
你要是真想用 推荐支持正版,毕竟好功能都是联网的 按量计费 。
其他的 你真想白嫖用用 下面给个图 自己悟吧。
搞 .Net 应该一眼就看懂了,不懂的看了我其他帖子也就多少懂了。
所以说 它很良心了 以后就无视它吧...  


17.png

免费评分

参与人数 30威望 +1 吾爱币 +46 热心值 +24 收起 理由
myfany + 1 谢谢@Thanks!
我是小陈呀 + 1 我很赞同!
ps122 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
1314ojbk + 1 我很赞同!
Johy丶小白 + 1 + 1 谢谢@Thanks!
abc023119 + 1 谢谢@Thanks!
wang82530 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
happyoil001 + 1 + 1 谢谢@Thanks!
terryyann + 1 + 1 热心回复!
v662 + 1 用心讨论,共获提升!
zjun777 + 1 + 1 用心讨论,共获提升!
sunlei658 + 1 + 1 谢谢@Thanks!
sk8820 + 2 + 1 谢谢@Thanks!
1MajorTom1 + 1 热心回复!
wzg020228 + 1 + 1 谢谢@Thanks!
zp999 + 1 + 1 谢谢@Thanks!
Bluesky10 + 1 + 1 热心回复!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kingzswang + 1 + 1 谢谢@Thanks!
meilidemm + 1 谢谢@Thanks!
Bugott + 1 谢谢@Thanks!
Zhaofeiyan + 1 鼓励转贴优秀软件安全工具和文档!
3yu3 + 2 + 1 必须得给大佬上分啊
Elaineliu + 1 你这几记重拳,打得Excel插件开发者猝不及防的。以后能不能专攻国外软件呢
furry + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Patches + 1 + 1 用心讨论,共获提升!
mj2013ly + 1 用心讨论,共获提升!
kk52140 + 1 + 1 用心讨论,共获提升!
shandian281 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lcymzzZ + 1 + 1 用心讨论,共获提升!

查看全部评分

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

仙鬼同拥 发表于 2023-4-27 12:42
很受启发,楼主这是武林以和为贵点到为止啊

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
pjy612 + 1 + 1 毕竟都是国产...

查看全部评分

 楼主| pjy612 发表于 2023-4-27 13:02
本帖最后由 pjy612 于 2023-4-27 13:03 编辑
cddc22 发表于 2023-4-27 12:48
学习一下,看来lz对excel是非常执着的

no no no,咱对 excel 和 vba 一点兴趣都没有。。。
主要是你们可能感兴趣。。。。

咱只是对 能力可及,但是却包含不理解的东西 感兴趣和好奇。如果是上了强壳或者混淆的妈都不认识的。。。我也是直接 Shift+Delete 的。。。

比如这次遇到的纯 vsto 。
虽然之前超级v3也遇到过,但那个 不需要改动 dll 所以没仔细看。
这种改了就失效的。 要涉及额外的知识点。。。
 楼主| pjy612 发表于 2023-4-27 13:11
月夜飘雪的泪 发表于 2023-4-27 13:08
大佬,IT小白求教方方格子的方法

好好看帖子,最下面已经写了。
没其他好说的了。
ps520 发表于 2023-4-27 13:39
感谢楼主的分享 ,下来试试

免费评分

参与人数 1吾爱币 +1 收起 理由
pjy612 + 1 Σ(っ °Д °;)っ惊现LCG大佬!

查看全部评分

Elaineliu 发表于 2023-4-27 15:47
我看你挺喜欢折腾Excel插件的。其实国内这帮搞插件的日子过得都很凄惨,基本都是靠爱发电。

你这时不时的来个破解思路,搞得这帮家伙灰心丧气的。

慢慢地就会分化成两类,一类拼命上虚拟机,一类永远停止更新。

这两类也许就是在国内环境下的必然发展方向吧,

你促进了这种分化

不知道是好事还是坏事。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
excel880b + 1 + 1 没办法,比起写一个功能,搞破坏总是更容易

查看全部评分

 楼主| pjy612 发表于 2023-4-27 17:00
本帖最后由 pjy612 于 2023-4-27 17:13 编辑
Elaineliu 发表于 2023-4-27 16:02
我不需要求破,这插件就是个bool判断,注入之后修改,极其简单。

只是不知道这些年加密有没有什么进步

简单看了下 对外放的是阉割版 没啥研究的必要。
启动有500次限制。清下注册表就行了。。。

HKEY_CURRENT_USER\LingNineteen
Win161 值看着像是 9 的倍数 但是直接干掉就行了。

总结下来 防逆向最好的办法就是 。。。别放出来。。。

咱发帖子 也都是别人拱火拱的。。。
有东西了 怎么着儿都得试一试吧。。。 试出来了 就分享下。。。
又不是直接放通杀的成品。。。囧。。。

 楼主| pjy612 发表于 2023-4-27 17:41
Elaineliu 发表于 2023-4-27 17:23
国内Excel插件开发技术水平很低,几乎没几个人知道什么是软件保护基础知识,能会个混淆就不错了

至于 ...


好的好的 大佬我错了行不。。。
有看到 你之前在 别的 VBA 帖子下 声讨了。。。
以后不会了。。。求放过。。。
本来 VBACodeAssistantPro 也不小心爆破了。。。
想着是别人的饭碗就没发。。。现在看来还好没发出来。。。
 楼主| pjy612 发表于 2023-4-27 18:44
3yu3 发表于 2023-4-27 17:22
大佬,到你手里都 是被秒杀啊。

秒毛线。。。
vsto 那玩意 搞到凌晨4点。。。
还好第二天居家办公。。。
不然想刀了你。。。
 楼主| pjy612 发表于 2023-4-29 18:53
本帖最后由 pjy612 于 2023-4-29 19:00 编辑
cc329533757 发表于 2023-4-29 18:16
讲讲学到你这种程度需要多久, 需要储备哪些知识..看什么资料

不知道。主要是看你的兴趣程度。。。
我算是十年码农,但是 实际学习 也就是 培训班出来的 教的 java和C# 两方向。
咱想着能写桌面应用,最后走的.NET,当时主要学的还是 .NET 三层框架。
之后基本就是 自学,对什么感兴趣就研究什么。
当年对魔兽游戏私服感兴趣,那就要自学mysql什么的,C++虽然半生不熟,但是基本能看。
然后写简单的网页充值和对接口就要用php。
之后 页游私服出来了 要给游戏换皮 那就要解包配置文件。那就要学配置文件 和 flash,flex,还有 as3 脚本。不然不好拆官方的配置文件包。
再往后 工作中 java 也要用,语法和C#大差不差,逻辑通就行了。基本就是学其他框架怎么用。其他的都是自己研究。
再谈和破解相关的,那就是想修改游戏,玩的简单点。那就要碰CE,说的CE就要提到自动汇编。
自动汇编学到的简单技术就又能用到 破解的反汇编里面。
都是 一环套一环 。。。没什么特殊的速成。
所以说 咱就是个野路子,走的 实用流派。 理论那类,知道是个什么就行。
出了问题知道怎么拆分关键词,能搜到解决方案就算是成功了。
面试考的八股。。。我反正压根在工作中基本没用上。线程池没配过,知道线程怎么用的合适就行了。

说到软技能,反正就是 一定要有正常的逻辑思维能力和举一反三能力。有了解决方案也不能固收一招鲜,要学着拓展。
很多东西是互通的,某个领域能处理的问题,换了领域其实应该也有类似的解决方法,可能你不知道他的关键词,但是 大概解决流程是一样的。
多搜搜或者问问就知道了。

有你才不孤单 发表于 2023-4-27 18:48
思路很清晰,按步骤确实可以,要是真心学习vba的,还是支持正版吧
 楼主| pjy612 发表于 2023-5-8 08:45
本帖最后由 pjy612 于 2023-5-8 08:46 编辑
zhanglei1371 发表于 2023-5-8 05:43
拦截删除操作,怎么实现的?用什么工具,该怎么设置,能否指点下?

火绒,自定义规则,禁止指定目录的删除操作。。。
毕竟咱不知道具体到底哪个进程执行的解压安装啥的操作,就直接禁止所有程序对指定目录和内容的删除了。。。
反正能拿到结果就行。。。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zhanglei1371 + 1 + 1 我很赞同!

查看全部评分

马叫兽 发表于 2023-4-30 21:25
淘宝确实有点贵,想白嫖可能我悟不出来
Jack-NASA 发表于 2023-4-28 07:52
pjy612 发表于 2023-4-27 23:27
本职工作就是 .NET 码农 一只。。。
而且是 现在出去可能都找不到工作的那种。。。
明天会在开个帖子讲 ...

互联网行业今年是比较难,毕竟前几年的待遇啥的还是比较好的,不像我们工地打灰的,一直都是一个样
 楼主| pjy612 发表于 2023-4-27 10:55
沙发自己的
lizy169 发表于 2023-4-27 11:00
蟹蟹楼主分享
lifefriend 发表于 2023-4-27 11:02
感谢分享....
gly198752 发表于 2023-4-27 11:03
蟹蟹楼主分享
做客人间 发表于 2023-4-27 11:03
学习中 谢谢楼主
做客人间 发表于 2023-4-27 11:05
谢谢楼主     
god125 发表于 2023-4-27 11:06
蟹蟹大神分享过程,很有启发
ycstudio 发表于 2023-4-27 11:07
学习一下,看来lz对excel是非常执着的
lsaizm1314 发表于 2023-4-27 11:08
楼主威武、学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-14 23:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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