吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5378|回复: 91
收起左侧

[.NET逆向] .net Eazfuscator.Net 2024.2版无序列号全功能补丁

  [复制链接]
wtujoxk 发表于 2024-6-13 12:08
本帖最后由 wtujoxk 于 2024-9-20 14:01 编辑

前言

首先感谢Crane.MethodHook库作者壹佰的方法和指导,后面代码部分也会使用Crane.MethodHook库作为劫持补丁进行编写
地址:https://www.nuget.org/packages/Crane.MethodHook

开整

在无序列号的情况下,使用有时间限制,并且过了时间就无法运行程序,包括加壳的程序。使用时间到期后,程序会这样:
1718249516529.png

通过分析后得知,只需要将Gapotchenko.Eazfuscator.NET.dll中的Program.Main参数劫持,当参数为 0 或者 --no-update-check时程序返回0,就能跳过检查并打开程序

if (args.Length == 0 || args[0] == "--no-update-check")
{
    return 0;
}

这个只是能打开程序,打开后还是有时间限制,那怎么办呢,我们只要hook UtcNow和Subtract即可

public static DateTime NewUtcNow()
{
         return DateTime.Parse("2000-12-30");
}
public static TimeSpan NewSubtract()
{
         return new TimeSpan(1, 1, 1);
}

时间限制过了,在加壳时,加壳后的程序也有时间限制
那么怎么去除呢? 这个貌似很难!!
不要害怕,思路很重要。回顾一下dll的整个混淆过程,无非就是将目标程序转换为IL后,再加入检测代码,最后再编译回来。
要转换,要加入代码,大概率涉及文件操作。我们不妨在TextWriter的WriteLine/Close/Dispose处下断点。看看写的临时文件在哪个地方。
单步跟踪一下,果然找到了目标路径:"C:\Users\用户名\AppData\Local\Temp\Eazfuscator.NET\Instances\of5lrwos.igu\15usox5o.wuy\Eazfuscator.Net.Test.il" 。
用文件编辑器打开这个路径下的IL文件,也同样发现目标检测代码,所以就要在文件生成这前改写检测代码,只要hook File.Delete即可

public static void NewDelete(string path)
{
    try
    {
        if (File.Exists(path) && path.ToLower().EndsWith(".il"))
        {
            FileInfo[] files = new FileInfo(path).Directory.GetFiles("*-*-*.il");
            if (files.Length != 0)
            {
                string fullName = files[0].FullName;
                bool flag = false;
                string text = File.ReadAllText(fullName);
                string text2 = @"(\.method.+bool.+\(bool.+\).+\n)\{[^\}]*get_UtcNow[^\}]*ldc\.r8\s+-21.[^\}]*AddDays[^\}]*\}";
                if (Regex.Match(text, text2).Success)
                {
                    text = Regex.Replace(text, text2,
                         @"$1{
                        .maxstack  5
                        IL_0000:  ldc.i4     0x1
                        IL_0005:  ret
                        }");
                    flag = true;
                }
                string text3 = @"(\.method.+void.+\(\).+\n)\{[^\}]*get_UtcNow[^\}]*ldc\.r8\s+-21.[^\}]*AddDays[^\}]*\}";
                if (Regex.Match(text, text3).Success)
                {
                    text = Regex.Replace(text, text3,
                        @"$1{
                        .maxstack  5
                        IL_0000:  ret
                        }");
                    flag = true;
                }
                if (flag)
                {
                    File.WriteAllText(fullName, text);
                }
            }
        }
    }
    catch
    {
    }
}

到这里,无序列号全功能就算完成了,后面改一下界面提示信息就行了。

最终加密效果如图

1718251116075.png

补丁…… 不解释,不负责,不承诺

winmm.zip (30.27 KB, 下载次数: 77)

点评

为什么测试失败还要发出来呢?  发表于 2024-9-4 08:49
net8是不是没测试?  发表于 2024-6-13 14:27

免费评分

参与人数 13吾爱币 +13 热心值 +12 收起 理由
blue520520 + 1 + 1 热心回复!
XLittleLeft + 1 + 1 希望作者能把下载附件权限下调,我们很多人无法下载!
helloworld22 + 1 + 1 我很赞同!
SagK1lfE + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
angelabebe + 1 + 1 我很赞同!
52pojieplayer + 1 谢谢@Thanks!
ahaneo + 1 + 1 谢谢@Thanks!
jiajs + 1 + 1 谢谢@Thanks!
ps122 + 1 + 1 谢谢@Thanks!
wekabc + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
阿基米德啊 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
ly871108 + 1 + 1 我很赞同!
yanaying + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

yanaying 发表于 2024-6-13 12:23
本帖最后由 yanaying 于 2024-6-13 16:49 编辑

用net8编译的软件测试不通过。用打完补丁之后的Eaz编译release,可以正常启动的软件,修改当前日期到7天之后,就无法启动了

用工具去除试用之后才能启动。

我看了一下临时生成的il,检测日期的代码貌似不一样。另外,il文件是个guid命名的文件。

不如你把源代码发到github,大家一起分析不同版本软件混淆过程中的il代码

也许有个简单办法:
在EAZ启动之前,将日期改为2000年,这样EAZ可以启动,没有30天限制。(测试发现,只改本机时间,有可能启动不了)
当开始混淆的时候,将日期改为9999年,这样混淆出来的程序是永远不会过期的。

Hook之后,找个合适的时机,切换时间就行了

捕获.PNG
头像被屏蔽
jun269 发表于 2024-6-13 14:18
666888tzq 发表于 2024-6-13 12:32
gltianya 发表于 2024-6-13 13:23
感谢分享
ly871108 发表于 2024-6-13 13:56
感谢分享
a2523188267 发表于 2024-6-13 13:58
太强了,学到了一点点皮毛!漂亮的绕过。
jun269 发表于 2024-6-13 14:10
楼主真是大佬,牛逼
dplxin 发表于 2024-6-13 14:11
通过分析后得知,只需要将Gapotchenko.Eazfuscator.NET.dll中的Program.Main参数劫持,当参数为 0 或者 --no-update-check时程序返回0,就能跳过检查并打开程序

复制代码 隐藏代码
if (args.Length == 0 || args[0] == "--no-update-check")
{
    return 0;
}
这个只是能打开程序,打开后还是有时间限制,那怎么办呢,我们只要hook UtcNow和Subtract即可



这些才是关键啊 如何分析出来的
SomniloquyF 发表于 2024-6-13 14:25
感谢分享 留个备用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-22 11:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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