2020 巅峰极客 WP_ Re
第一题:virus

是一个win32 的题,没给加壳。
主函数:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax
int v5; // [esp+14h] [ebp-4Ch]
int v6; // [esp+3Ch] [ebp-24h]
int v7; // [esp+40h] [ebp-20h]
int v8; // [esp+44h] [ebp-1Ch]
int v9; // [esp+48h] [ebp-18h]
int v10; // [esp+4Ch] [ebp-14h]
size_t v11; // [esp+50h] [ebp-10h]
int v12; // [esp+54h] [ebp-Ch]
int i; // [esp+58h] [ebp-8h]
int v14; // [esp+5Ch] [ebp-4h] __main();
puts("There is a long way to defeat it.");
scanf("%s", flag);
v12 = strlen(flag); // 获取有效长度
v6 = 0;
v7 = 0;
v8 = 0;
v9 = 0; // v6 v7 v8 v9 4个分别保存 "-" 在flag中的序号
//
v10 = 0;
v14 = 0;
v11 = 0;
for ( i = 0; i < v12; ++i )
{
if ( flag[i] == '-' )
{
v3 = v14++;
*(&v6 + v3) = i;
}
if ( !v14 )
{
*(&v5 + i) = flag[i] - '0';
if ( *(&v5 + i) > 9 || *(&v5 + i) < 0 ) // 第一个前 "-" 只能是数字 0 - 9
return 0; // 在 *(&v5 + i)中写入之后参与4个迷宫的顺序
}
}
if ( v14 != 4 ) // 输入的flag中有4个 “-”
return 0;
v10 = v12;
for ( i = 1; i <= v14; ++i )
{
v11 = *(&v6 + i) - *(&v6 + i - 1) - 1; // 将flag的2、3、4、5部分的字符数,即对应迷宫的出走步数依次写入v11
if ( step[i] != v11 ) // step[4]: {0x13 , 0x19 , 0x1A , 0x1C} 用step中限定的步数参与迷宫
return 0;
strncpy(&road[200 * i], &flag[*(&v6 + i - 1) + 1], v11);// 将输入的flag的第2、3、4、5部分(对应迷宫的出走路径)去掉 "-"之后拷入road
}
for ( i = 0; i <= 3; ++i )
{
if ( check_flag((int)&global_map + 0xC8 * *(&v5 + i), *(&v5 + i), &road[200 * (i + 1)]) )
{
puts("How about try again?");
return 0;
}
if ( i == 3 )
printf("Great! We will defeat it!!! your flag is flag{%s}", flag);
}
return 0;
}
main函数的条理还是很清晰的
接收一串形如 " XXXX—XXXX—XXXX—XXXX—XXXX "的字符串
检查flag中的 " - "的数量(必须是4个)和位置,
将第一部分的字符按位减去0x30要求不大于9且不小于0并保存在*(&v5 + i),所以第一部分应该是纯数字。
将flag的第 2、3、4、5部分经过位数检查之后 &road[200 * i]
再往后就是通过函数check_flag 校验flag

我们检查check_flag的参数后发现 global_map记录的是4个迷宫:

整理后如下:
迷宫及起始地址: 路径及所需步数: 0x403108:
||||||||||||||| 0 0 0 0 0 >>> dddddddddsssssaaaaaaaaawww -- 0x1A
||||||||||||||| 0 0 0 0 0
||||||||||||||| 0 0 0 0 0
||s.........||| 0 0 0 0 0
|||||||||||.||| 0 0 0 0 0
||d||||||||.||| 0 0 0 0 0
||.||||||||.||| 0 0 0 0 0
||.||||||||.||| 0 0 0 0 0
||..........||| 0 0 0 0 0
||||||||||||||| 0 0 0 0 0 0x4031D0:
||||||||||||||||||| 0 >>> sdsdsdsdsdsdsddwdwdwdwdwdwdw -- 0x1C
||s|||||||||||||d|| 0
||..|||||||||||..|| 0
|||..|||||||||..||| 0
||||..|||||||..|||| 0
|||||..|||||..||||| 0
||||||..|||..|||||| 0
|||||||..|..||||||| 0
||||||||...|||||||| 0
||||||||||||||||||| 0 0x403298:
||||||||||||||| 0 0 0 0 0 >>> aaaaaaaaasssssssddddddddd -- 0x19
||.........s||| 0 0 0 0 0
||.|||||||||||| 0 0 0 0 0
||.|||||||||||| 0 0 0 0 0
||.|||||||||||| 0 0 0 0 0
||.|||||||||||| 0 0 0 0 0
||.|||||||||||| 0 0 0 0 0
||.|||||||||||| 0 0 0 0 0
||.........d||| 0 0 0 0 0
||||||||||||||| 0 0 0 0 0 0x403360:
||||||||||||||| 0 0 0 0 0 >>> wwwwwdddddddddsssss -- 0x13
||||||||||||||| 0 0 0 0 0
||||||||||||||| 0 0 0 0 0
|||..........|| 0 0 0 0 0
|||.||||||||.|| 0 0 0 0 0
|||.||||||||.|| 0 0 0 0 0
|||.||||||||.|| 0 0 0 0 0
|||.||||||||.|| 0 0 0 0 0
|||s||||||||d|| 0 0 0 0 0
||||||||||||||| 0 0 0 0 0
可以发现每个迷宫之间的偏移都是 0XC8 ,&global_map 到0X403108的偏移也是0XC8
每个迷宫所需的步数都可以在main函数中的step数组里找到 ,故而这四个迷宫的顺序应该是 4312 ,即flag的第一部分是4312
上面提到过,flag的2、3、4、5部分对应各个迷宫的走法,所以 ,将 4312 和 各个迷宫的走法按顺序拼接之后就是真正的flag。
FLAG :flag{4312-wwwwwdddddddddsssss-aaaaaaaaasssssssddddddddd-dddddddddsssssaaaaaaaaawww-sdsdsdsdsdsdsddwdwdwdwdwdwdw}
第二题:fu!k_py
解压开来是一个 .pyc 文件,第一步自然是对它进行反编译:

说实话,Python不太好的我看到这套娃式的代码时人都不好了。
但为了能多搞点分,还是硬着头皮看了下去。
我能识别的信息并不多

这里有个 input ,flag应该是从这里输入的,包含 " flag{} "且总长度必须为 87 个字符。
然后是这个:

应该是有个有关 9 x 9 数组的信息
很容易让人往数独方面想
而且后面还有一堆的什么 check(xx) != 45,而 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

之后我找了个数独的解密网站按位填入 :

然后将整个数独中的数整理下来,并套上flag{} 提交,最终通过了。
FLAG: flag{145327698839654127672918543496185372218473956753296481367542819984761235521839764}
2020 巅峰极客 WP_ Re的更多相关文章
- 2019巅峰极客CTF-web1(LOL英雄联盟)
今晚有空 以后随缘写博客了 好好沉淀 web1当天做出的队伍很少 其实不难 折腾到最后就差一步 可惜 0x01 读取文件 截图没留了 只留了代码部分. 有个页面 有上传和下载功能 起初 ...
- 巅峰极客第二场CTF部分writeup
word-MISC 微信回答问题+word字体里. sqli-WEB 注册个admin空格即可,长字符截断. 晚上把后续的写出来.现在睡觉
- 巅峰极客CTF writeup[上]
经验教训 1.CTF不比实战,最好不要死磕.死磕就输了.我就是死磕在缓存文件死的.真的惭愧: 2.对于flag的位置不要太局限于web目录下,如果是命令执行直接上find / -name flag*: ...
- 2019balsn两道web和2019巅峰极客一道web记录
遇到3道有点意思的web,记录一下~ web1 题目地址:http://warmup.balsnctf.com/ 源码如下所示: <?php if (($secret = base64_deco ...
- 2018 巅峰极客CTF misc writeup
flows 拿到一个pcap包,用wireshark打开,发现是USB协议,尝试在kali下使用tshark提取,提取失败,发现异常.回到wireshark分析数据.在其中一个数据包中发现了tip 把 ...
- 三叶草极客大挑战2020 部分题目Writeup
三叶草极客大挑战2020 部分题目Writeup Web Welcome 打开后状态码405,555555,然后看了一下报头存在请求错误,换成POST请求后,查看到源码 <?php error_ ...
- 2020极客大挑战Web题
前言 wp是以前写的,整理一下发上来. 不是很全. 2020 极客大挑战 WEB 1.sha1碰撞 题目 图片: 思路 题目说,换一种请求方式.于是换成post.得到一给含有代码的图片 图片: 分析该 ...
- 2016第七季极客大挑战Writeup
第一次接触CTF,只会做杂项和一点点Web题--因为时间比较仓促,写的比较简略.以后再写下工具使用什么的. 纯新手,啥都不会.处于瑟瑟发抖的状态. 一.MISC 1.签到题 直接填入题目所给的SYC{ ...
- [web建站] 极客WEB大前端专家级开发工程师培训视频教程
极客WEB大前端专家级开发工程师培训视频教程 教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5 ...
随机推荐
- 关于windou环境下使用http或者ftp搭建网络hu共享
第一步 右键此电脑进入控制面 第二步:进入程序点击启用或关闭windous功能 第三步进入服务开启界面 点击让windows更新为你下载文件,并保存更改完,然后关闭 四:邮件我的电脑进入管理 四右键添 ...
- shader效果
Unity Shader - 消融效果原理与变体 https://www.jianshu.com/p/d8b535efa9db
- Update LateUpdae FixedUpdate
这个问题本来是在研究动画系统时遇到的:OnAnimatorMove在Animator.Update()调用,那这个Animator.Update是什么时候调用的呢. Animator Componen ...
- unity3d中的Quaternion.LookRotation
android开发范例中的第二个粒子,是摇杆操作游戏,模式类似于“迷你高尔”,僵尸包围类型的设计游戏. 其中让我注意到这个函数的使用非常特别:Quaternion.LookRotation. 游戏针对 ...
- CVPR2020 面向密集多角度物体检测的动态修正网络(DRN)
论文链接:https://arxiv.org/pdf/2005.09973.pdf code:https://github.com/Anymake/DRN_CVPR2020 文章概要: 本文是中科院自 ...
- 面试【JAVA基础】Web与网络
1.转发与重定向的区别 转发是服务器请求资源,服务器直接访问目标地址url,把响应内容返回给浏览器. 重定向根据服务器返回的状态码重新请求地址. 转发是服务器行为,重定向是客户端行为. 转发显示的ur ...
- Angular(二) - 组件Component
1. 组件Component示例 2. Component常用的几个选项 3. Component全部的选项 3.1 继承自@Directive装饰器的选项 3.2 @Component自己特有的选项 ...
- 被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 基于各种原因,团队的Kubernetes被加了限制,必须在 ...
- 下拉列表被flash覆盖的解决方法
做鼎闻有一段时间了,有的banner轮播图的地方用flash替换的时候,就会导致上面的导航条下拉列表被flash覆盖,找了一段时间没有得到有效的解决方法,后来知道关键是flash的这一属性{ &quo ...
- 用Maven给一个Maven工程打包,使用阿里云镜像解决mvn clean package出错的问题,使用plugin解决没有主清单属性的问题
本来在STS里做了一个极简Maven工程,内中只有一个Main方法的Java类,然后用新装的Maven3.6.3给它打包. 结果,Maven罢工,输出如下: C:\personal\programs\ ...