随笔 - 51  文章 - 0  评论 - 456  阅读 - 47万 

AtomineerUtils是国外的一款用于生成源代码注释的一款VS插件,官方网站:http://www.atomineerutils.com/products.php

通过链接,可以看出这款插件的功能十分强大,不像GhostDoc那样,只支持C#,这款插件,支持C、C++、C++/CLI、C#、Java语言等,由此可以看出其强大,注释的风格可以灵活配置。

虽然他功能十分强大,但是由于是收费的软件,所以当使用超过30天后,就无法再继续适用了。虽然价格不贵,只有40美刀,但是由于时间紧急,必须立刻使用他的功能,所以没有时间去购买license。

那么能不能试着破解他呢,或者继续使用。说到破解,我的水平也就只能研究一下未混淆的.Net程序,如果这个插件是用C++写的话,那么不好意思,破不了。

用Reflector试着打开,发现能识别,如下:

Atomineer版本

同时也可以看到这个版本号是:8.16.5174.40541。这是最新版本了。

既然是.Net的DLL,那么相对来说就好说了,至少和C++相比来说,有希望了。

既然是VS的插件,那么肯定要遵守VS的插件接口规范。(VS的插件接口不在本篇中介绍)

首先找到它的OnConnect方法:

OnConnect方法

然后从OnConnect方法入手进行研究,最终定位到这里:

复制代码
internal static bool b(bool A_0, bool A_1 = false)
{
    bool flag = true;
    int num = (((DateTime.Today.Year - 2010) * 365) + DateTime.Today.DayOfYear) << 8;
    int num2 = 0;
    try
    {
        num2 = Convert.ToInt32(c(f, "0", string.Empty));
    }
    catch
    {
    }
    int num3 = (num - num2) >> 8;
    if (num3 > 19)
    {
        if (e[0][0] == 'I')
        {
            for (int i = 0; i < e.Length; i++)
            {
                StringBuilder builder = new StringBuilder();
                for (int j = 0; j < e[i].Length; j++)
                {
                    builder.Append((char) (e[i][j] ^ (16 | (j % 16))));
                }
                e[i] = builder.ToString();
            }
        }
        if (num3 > 29)
        {
            flag = false;
            Commands.f();
            if ((num3 == g) || A_1)
            {
                return false;
            }
            MessageBox.Show(e[0] + Environment.NewLine + Environment.NewLine + e[1] + Environment.NewLine + Environment.NewLine + e[2], "Atomineer Pro Documentation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        else
        {
            if ((num3 == g) || !A_0)
            {
                return true;
            }
            string[] strArray2 = new string[] { e[3], (30 - num3).ToString(), e[4], Environment.NewLine, Environment.NewLine, e[5] };
            if (MessageBox.Show(string.Concat(strArray2), "Atomineer Pro Documentation", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) != DialogResult.Yes)
            {
                return true;
            }
        }
        k.h("t~e}xzws");
        g = num3;
    }
    return flag;
}
复制代码

根据上面的逻辑,只要不执行 num3 > 29的逻辑,并且返回值为true即可,可以做如下修改:

bool flag = true;
...
int num3 = (num2 - num2) >> 8;

这样,num3等于0,而且返回值为true。

那么如何修改这些代码呢,基于Reflector的Reflexil插件,来修改IL代码,然后另存为dll文件即可。

如下,是修改后的截图:

Atomineer破解后

这样,整个插件就算是被破解了,可以无限期使用了。

posted on   缘生梦  阅读(3441)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示