题目


分析过程

丢到PE里面

一开始,我看到下面的脱壳提示,以为是我没见过的壳,下载了相关工具脱壳——发现脱了后又出现没见过的脱壳提示,根据提示脱壳弄出来的东西怪怪的

卡题,查了资料

学到一个新知识点:这是一个.NET文件,不脱壳也是可以的,不能用IDA

关于.NET的工具,我下了几个体验了一下同时询问了群里的大佬,在这里提供两个:ILSpy和dnSpy

工具下载:爱盘里面都有  爱盘 - 最新的在线破解工具包 (52pojie.cn)

个人比较喜欢ILSpy的代码

可以看出函数名字都是乱码,总体上不影响阅读与理解

我看大佬的wp,发现佬直接拿原文件调试,将dnSpy(辅助)与ILSpy(主体)结合分析解出flag

但是,我在瞎倒腾脱壳过程中意外发现了一件事

根据PE的脱壳提示,使用de4bot,再丢进ILSpy里面,函数名字竟然出现了

这里了解到了一点:de4dot是一个很强的.Net程序脱壳,反混淆工具,可以利用de4dot解密被混淆的.NET代码

更多:[入门级]de4dot参数详解 - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

乱码的函数名字应该是混淆的结果,利用工具反混淆后就恢复了

先看看main函数

 1 private static void Main(string[] args)
2 {
3 string string_ = null;//初始化一个字符串string_
4 string value = $"{DateTime.Now.Hour + 1}";//获取当前时间的小时部分加1,得到的结果转换成字符串并赋给value
5 string string_2 = "CreateByTenshine";//string_2里面放了字符串 CreateByTenshine
6 smethod_2(string_2, Convert.ToInt32(value), ref string_);//发生了函数调用,Convert.ToInt32(value)是将value字符串转换成整数
7 string text = Console.ReadLine();//获得用户的输入,储存在text
8 if (text == string_)
9 {
10 Console.WriteLine("u got it!");
11 Console.ReadKey(intercept: true);
12 }
13 else
14 {
15 Console.Write("wrong");
16 }
17 Console.ReadKey(intercept: true);
18 }

调用了以下函数

 1 private static void smethod_2(string string_0, int int_0, ref string string_1)
2 {
3 int num = 0;
4 if (0 < string_0.Length)
5 {
6 do
7 {
8 char c = string_0[num];
9 int num2 = 1;
10 do
11 {
12 //发生函数调用,将c的整数值和num2作为参数传递给它,然后将返回值转换为字符并赋给c
13 c = Convert.ToChar(smethod_0(Convert.ToInt32(c), num2));//注意这里,下标是从1遍历到14,不是15,不懂的可以简单写一个程序实验一下
14 num2++;
15 } while (num2 < 15);
16 string_1 += c;
17 num++;
18 } while (num < string_0.Length);
19 }
20 string_1 = smethod_1(string_1);//函数调用
21 }

调用了下面函数,以及下下一个函数

 1 //string_1 = smethod_1(string_1)
2 private static string smethod_1(string string_0)
3 {
4 byte[] bytes = Encoding.ASCII.GetBytes(string_0);//将输入的字符串变为ASCII编码的字节数组,储存在bytes
5 return "flag{" + BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(bytes)).Replace("-", "") + "}";
6 //创建一个新的MD5CryptoServiceProvider实例
7 //调用ComputeHash方法来计算给定字节数组bytes的MD5哈希值,赋值给MD5CryptoServiceProvider
8 //BitConverter.ToString(...):将计算得到的MD5转换为一个由十六进制字符组成的字符串,每个字节用两个字符表示,并且字节之间没有分隔符
9 // .Replace("-", ""): 将生成的十六进制字符串中的所有连字符"-"替换为空字符串""
10 }
 1 //smethod_0(Convert.ToInt32(c), num2)
2 private static int smethod_0(int int_0, int int_1)
3 {
4 return (new int[30]//根据上面下标是1~14,而数组里面有30个,记得去掉不需要的
5 {
6 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
7 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
8 73, 79, 83, 89, 97, 101, 103, 107, 109, 113
9 })[int_1] ^ int_0;//将输入异或
10 }

解密脚本

在这里我犯了一个错误,真是被自己蠢笑了

给你们看看我第一次写的错误代码

 1 import hashlib
2
3 str2 = "CreateByTenshine"
4 str1 = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] # 1~14
5 flag = ""
6
7 for i in str2:
8 for j in str1:
9 c = chr(j ^ ord(i))
10 flag += c
11
12 flag = hashlib.md5(flag.encode()).hexdigest()
13 print(flag)
14
15 ##d539a7cd4194bebe05e544521c9c2405

在第9行,c只会包含每次外部循环迭代中最后一个异或操作的结果,每循环一次c都会刷新

我们再看看反汇编代码:c = Convert.ToChar(smethod_0(Convert.ToInt32(c), num2))——c就是str2

是拿str2的元素作为参数进行函数调用,再赋值回去

修改后的正确代码:

 1 import hashlib
2
3 str2 = "CreateByTenshine"
4 str1 = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] # 1~14
5 flag = ""
6
7 for i in str2:
8 for j in str1:
9 i = chr(j ^ ord(i))##这里由c变为i
10 flag += i
11
12 flag = hashlib.md5(flag.encode()).hexdigest()
13 print(flag)

flag

flag{967dddfbcd32c1f53527c221d9e40a0}

攻防世界 debug的更多相关文章

  1. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  2. 【攻防世界】 高手进阶区 Recho WP

    0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...

  3. pwn篇:攻防世界进阶welpwn,LibcSearcher使用

    攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...

  4. 攻防世界pwn高手区——pwn1

    攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...

  5. 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup

    攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...

  6. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  7. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

  8. 攻防世界 web进阶练习 NewsCenter

    攻防世界 web进阶练习 NewsCenter   题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...

  9. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  10. 攻防世界 | CAT

    来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...

随机推荐

  1. C#多线程(9):多阶段并行线程

    目录 前言 Barrier 类 属性和方法 示例 新的示例 说明 前言 这一篇,我们将学习用于实现并行任务.使得多个线程有序同步完成多个阶段的任务. 应用场景主要是控制 N 个线程(可随时增加或减少执 ...

  2. 用linux命令cd 查找想要找的文件

    如果想找文件Computer下的bin文件,在终端输入绝对路径 cd /bin,不能输入 cd /Computer/bin,因为文件目录不对 文件目录可以在文件的终端看到,/bin就是正确的目录 比如 ...

  3. flutter3-winchat桌面端聊天实例|Flutter3+Dart3+Getx仿微信Exe程序

    首发原创flutter3+bitsdojo_window+getx客户端仿微信exe聊天Flutter-WinChat. flutter3-dart3-winchat 基于flutter3+dart3 ...

  4. 从0开始入门智能知识库和星火大模型,打造AI客服。

    介绍FastWiki FastWiki是一个高性能.基于最新技术栈的知识库系统,旨在为大规模信息检索和智能搜索提供解决方案.它采用微软Semantic Kernel进行深度学习和自然语言处理,在后端使 ...

  5. Lock wait timeout exceeded; try restarting transaction-Mysql报错

    一.问题由来 现在在做一个小程序的后台,使用Java写的,数据库使用的Mysql,之前一直调试的时候都好好的,今天在调试的时候突然就报一个错: ### Error updating database. ...

  6. 选择单词后 按 ctrl + space 单词发音

    需求: 在ide或其他地方,经常有单词发音不是很确定,但并不要很详细 就听个单词发音. 确定快捷键: 左手单手操作,我键盘上貌似就 左边的ctrl和空格键 还没有设定 翻译软件: 使用 pc端的 欧路 ...

  7. C#实现FTP服务端和客户端

    目录 简介 FTP客户端 系统客户端 客户端软件 自定义客户端 FTP服务端 系统服务端 服务端软件 自定义服务端 附件 简介 FTP是FileTransferProtocol(文件传输协议)的英文简 ...

  8. python 读取txt并绘制波形图实例解析

    一 用python绘图有很多方法,笔者找到了一种最简单的方法,使用非常便利,这里分享一下: import numpy as np import matplotlib.pyplot as plt a = ...

  9. eclipse错误之Could not write metadata for "xxx"

    Could not write metadata for '/test'. 这是由于删除一个项目时,没有同时在硬盘上删除该项目,而后又到硬盘文件系统中删除了该项目,才出现这问题的. 到eclipse工 ...

  10. 【At Coder begin 345】[D - Tiling] 回溯

    题目链接:problem D 解法: 比较简单.看代码. import java.io.IOException; import java.io.InputStreamReader; import ja ...