攻防世界 debug
题目

分析过程
丢到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的更多相关文章
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- pwn篇:攻防世界进阶welpwn,LibcSearcher使用
攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...
- 攻防世界pwn高手区——pwn1
攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...
- 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup
攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...
- CTF--web 攻防世界web题 robots backup
攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...
- CTF--web 攻防世界web题 get_post
攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...
- 攻防世界 web进阶练习 NewsCenter
攻防世界 web进阶练习 NewsCenter 题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- 攻防世界 | CAT
来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...
随机推荐
- 【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
问题描述 为Azure App Service添加访问限制,需要Python Azure SDK来实现的示例代码. 问题解答 查阅Azure App Service的官方资料,使用Python SDK ...
- 【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因
问题描述 在App Server的部署中心配置好本地Git 仓库 并推送 git push azure master 分支代码到服务器时,并未发生错误 ,但是服务异常,无法访问到正确的项目文件,始终打 ...
- RocketMQ(7) 消费幂等
1 什么是消费幂等 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消 费并未对业务系统产生任何负面影响,那么这个消费过程就是消费幂等的. 幂等:若某操作执行多 ...
- Lazada电商api接口 获取商品详情 数据采集
iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的Lazada电商数据采集API,供用户按需调用. 接口使用详情请参考Lazada接口文档 接 ...
- flomo 窗口置顶 - 通用方法 autohotkey
需求 开网页的时候需要记录一些东西 想一直显示 操作 要安装 https://www.autohotkey.com/ 创建个 .ahk 文件 运行下 快捷键是 alt+小键盘8 ;置顶当前窗口 !Nu ...
- Ingress和Ingress Controller什么关系
Ingress Controller和Ingress在Kubernetes(K8s)中各自扮演着不同的角色,但它们共同协作以实现外部访问集群内部服务的功能. Ingress是一个Kubernetes ...
- a++和++a的运算区别是?
a++和++a 都属于自增运算符, 区别是对变量a的值进行自增的时机不同. a++是先进行取值,后进行自增.++a是先进行自增,后进行取值.
- 音频重采样48kk转16k
作为一个音频算法工程师,不懂重采样怎么可以呢?这里做一个常用的方法介绍: pcm转wav: ffmpeg -f s16le -ar 8000 -ac 2 -i out.pcm -ar 44100 -a ...
- Django使用Bootstrap的经典方法
前面的话 Bootstrap是简单.灵活的用于搭建WEB页面的HTML.CSS.Javascript的工具集.Bootstrap基于HTML5和CSS3,具有漂亮的设计.友好的学习曲线.卓越的兼容性, ...
- Spring Cloud项目搭建版本选择
1.查看spring cloud的版本 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4 ...