本帖最后由 fsjsyg 于 2024-06-15 21:22 编辑
.net Eazfuscator.Net 2024.1版无序列号全功能破解补丁前言首先感谢Crane.MethodHook库作者壹佰的方法和指导,后面代码部分也会使用Crane.MethodHook库作为劫持补丁进行编写 地址:https://www.nuget.org/packages/Crane.MethodHook 开整在无序列号的情况下,使用有时间限制,并且过了时间就无法运行程序,包括加壳的程序。使用时间到期后,程序会这样: 通过分析后得知,只需要将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 { } }
到这里,无序列号全功能就算完成了,后面改一下界面提示信息就行了。 最终加密效果如图
下方隐藏内容为本帖所有文件或源码下载链接:
游客你好,如果您要查看本帖隐藏链接需要登录才能查看,
请先登录
|