XCTF-RE-debug-.NET

CTF · 03-21 · 278 人浏览

一、查看程序类型

Pasted image 20231205144154.png
PE32 无壳,库中显示其为.NET库,故为C#编写的程序,用dnspy打开
运行程序
Pasted image 20231205144217.png

二、用dnspy打开

1.定位关键代码段

Pasted image 20231205152249.png
左侧导航栏再此程序中逐个查看,最终再02000003中找到关键代码段
发现其定义个多个函数
逐个分析

2.查看各个函数

(1)private static int ᜀ(int A_0, int A_1)

Pasted image 20231205153536.png
定义了一个数组,将输入的两个参数异或后返回

(2)private static string ᜀ(string A_0)

Pasted image 20231205154136.png
srting()函数将传入的参数,进行MD5加密后返回

(3)private static void ᜀ(string A_0, int A_1, ref string A_2)

Pasted image 20231205212017.png
第65行,括号内的第一个单独的“.”,调用了第一个函数int()(可能因为dnspy反编译显示不完整)
将输入字符串与上面定义的数组进行逐位异或,得到的结果通过第三个参数A_2返回

(4)private static void ᜀ(string[] A_0)

Pasted image 20231205214015.png
对字符串a= "CreateByTenshine"进行一系列处理+调用第二个函数string()进行md5加密后,最终与b进行对比,若相等则输出正确提示,所以b的值即为flag

三、解题

方法一、动态调试

F9下和取消断点,F10单步步过,F11单步步⼊,shift+F11跳出函数
在第84行下断点后,直接运行查看b的值
Pasted image 20231205215046.png
查看局部变量窗口,找到flag为:flag{967DDDFBCD32C1F53527C221D9E40A0B}

方法二、编写脚本

import hashlib
a=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,
61,67,71,73,79,83,89,97,101,103,107,109,113]
str = "CreateByTenshine"
flag = ''
for x in str:

x = ord(x)  
for i in range(1,15):  
    x ^= a[i]  
flag += chr(x)  

flag = hashlib.md5(flag.encode()).hexdigest().upper()
print("flag{" + flag +"}")

运行结果:
Pasted image 20231206174637.png
flag{967DDDFBCD32C1F53527C221D9E40A0B}

在程序中尝试
Pasted image 20231206175305.png

动态调试 CTF RE XCTF .NET dnspy
Theme Jasmine by Kent Liao