论坛首页 CTF竞赛交流区 阅读主题

[原创]KCTF2025 第九题 智斗邪首 writeup

466 浏览 0 回复
#1 楼主 2026-06-01 21:08:55
此题一看应该是.net的程序,不过.net的程序本人没怎么玩过,网上下了好些工具都不能反编译,卡了很久,最后还是按网上说法,在 _CorExeMain 下断,查找 OEP 并Dump, 并用de4dot修复,之后扔dnSpy就能反编译了。
namespace _2024003_Crackme
// Token: 0x02000005 RID: 5
internal class Class1
// Token: 0x0600000F RID: 15 RVA: 0x00002410 File Offset: 0x00000610
private static void Main()
Console.WriteLine("Name:");
string text = Console.ReadLine();
Console.WriteLine("SN:");
string text2 = Console.ReadLine();
if (!string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2))
byte[] bytes = Encoding.UTF8.GetBytes(text);
byte b = 0;
foreach (byte b2 in bytes)
b ^= b2;
int num = (int)(b % 64);
if (num % 2 == 0)
num++;
StringBuilder stringBuilder = new StringBuilder();
try
stringBuilder = Class1.KX_RGVjb2Rl(text2);
catch
return;
StringBuilder stringBuilder2 = new StringBuilder(num.ToString());
if (stringBuilder2 == null || stringBuilder == null || string.IsNullOrWhiteSpace(stringBuilder2.ToString()) || string.IsNullOrWhiteSpace(stringBuilder.ToString()))
Console.WriteLine("Failed!");
Console.WriteLine("按任意键结束!");
Console.ReadKey();
return;
if (stringBuilder2.ToString().EndsWith("0") || stringBuilder.ToString().EndsWith("0"))
Console.WriteLine("Failed!");
Console.WriteLine("按任意键结束!");
Console.ReadKey();
return;
int num2 = 2040;
int num3 = 2025;
Class0 @class = new Class0();
@class.Precision = 4133025;
@class.method_0(stringBuilder2, stringBuilder);
int j = 0;
try
while (j < num2)
if (@class.Quotient.Substring(j * num3, num3) == @class.Quotient.Substring((j + 1) * num3, num3) && @class.Quotient.Substring((j + 1) * num3, num3) == @class.Quotient.Substring((j + 2) * num3, num3))
j = int.MaxValue;
if (Class1.KX_VmVyaWZ5U2lnbmFs(@class.Quotient.Substring(j * num3, num3), @class.Quotient.Substring((j + 1) * num3, num3), @class.Quotient.Substring((j + 2) * num3, num3), @class.Quotient.Substring((j + 3) * num3, num3)))
j++;
else
j++;
IL_0206:
if (j != num2 - 3)
Console.WriteLine("Failed!");
Console.WriteLine("按任意键结束!");
Console.ReadKey();
return;
goto IL_0249;
goto IL_0206;
catch
Console.WriteLine("Failed!");
Console.WriteLine("按任意键结束!");
Console.ReadKey();
return;
IL_0249:
Console.WriteLine("Congratulations!");
Console.WriteLine("按任意键结束!");
Console.ReadKey();
return;

// Token: 0x06000010 RID: 16 RVA: 0x000026EC File Offset: 0x000008EC
public static bool KX_VmVyaWZ5U2lnbmFs(string string_0, string string_1, string string_2, string string_3)
Class0 @class = n

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288391.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号