测试文件:https://adworld.xctf.org.cn/media/task/attachments/dc14f9a05f2846249336a84aecaf18a2.zip

1.准备

获取信息

  • 64位文件

2.IDA打开

前面大部分都是“无用代码”,这里贴上我们需要的代码

    while (  )
{
memset(flag, , 0xC8uLL);
numRead = read(pParentWrite[], flag, 0xC8uLL);
if ( numRead == - )
break;
if ( numRead )
{
if ( childCheckDebugResult() )
{
responseFalse();
}
else if ( flag[] == '{' ) // flag[0]为'{'
{
if ( strlen(flag) == ) // len(flag)=42
{
if ( !strncmp(&flag[], "53fc275d81", 10uLL) )// flag[1]~flag[10]为"53fc275d81"
{
if ( flag[strlen(flag) - ] == '}' )// flag[41]='}'
{
if ( !strncmp(&flag[], "4938ae4efd", 10uLL) )// flag[31]~flag[40]为'4938ae4efd'
{
if ( !confuseKey(flag, ) ) // 改变原本flag中字符串的顺序
{
responseFalse();
}
else if ( !strncmp(flag, "{daf29f59034938ae4efd53fc275d81053ed5be8c}", 42uLL) )// '{}'中间有40个字符,10个为一组,则现在顺序为3,4,1,2
{
responseTrue();
}
else
{
responseFalse();
}
}
else
{
responseFalse();
}
}
else
{
responseFalse();
}
}
else
{
responseFalse();
}
}
else
{
responseFalse();
}
}
else
{
responseFalse();
}
}
}
exit();
}
exit();
}
bool __cdecl confuseKey(char *szKey, int iKeyLength)
{
char szPart1[]; // [rsp+10h] [rbp-50h]
char szPart2[]; // [rsp+20h] [rbp-40h]
char szPart3[]; // [rsp+30h] [rbp-30h]
char szPart4[]; // [rsp+40h] [rbp-20h]
unsigned __int64 v7; // [rsp+58h] [rbp-8h] v7 = __readfsqword(0x28u);
*(_QWORD *)szPart1 = 0LL;
*(_DWORD *)&szPart1[] = ;
*(_WORD *)&szPart1[] = ;
szPart1[] = ;
*(_QWORD *)szPart2 = 0LL;
*(_DWORD *)&szPart2[] = ;
*(_WORD *)&szPart2[] = ;
szPart2[] = ;
*(_QWORD *)szPart3 = 0LL;
*(_DWORD *)&szPart3[] = ;
*(_WORD *)&szPart3[] = ;
szPart3[] = ;
*(_QWORD *)szPart4 = 0LL;
*(_DWORD *)&szPart4[] = ;
*(_WORD *)&szPart4[] = ;
szPart4[] = ;
if ( iKeyLength != )
return ;
if ( !szKey )
return ;
if ( strlen(szKey) != )
return ;
if ( *szKey != )
return ;
strncpy(szPart1, szKey + , 0xAuLL);
strncpy(szPart2, szKey + , 0xAuLL);
strncpy(szPart3, szKey + , 0xAuLL);
strncpy(szPart4, szKey + , 0xAuLL);
memset(szKey, , iKeyLength);
*szKey = ;
strcat(szKey, szPart3);
strcat(szKey, szPart4);
strcat(szKey, szPart1);
strcat(szKey, szPart2);
szKey[] = ;
return ;
}

3.代码分析

第一段代码我们能够获取到flag[0],flag[1]~flag[10],flag[31]~flag[40],flag[41],以及调换顺序之后的flag

第二段代码实际上是在对原来的flag字符串的位置进行调换,"{}"中间有40个字符,10个为一组,现在的顺序就是3,4,2,1。

因此,我们通过调换顺序之后的flag,能够获取到原来的flag。这道题最坑的就是真正的flag没有"{}"

4.get flag!

53fc275d81053ed5be8cdaf29f59034938ae4efd

攻防世界--re1-100的更多相关文章

  1. 攻防世界RE1 writeup

    解题过程 将题目给出的exe文件拖入ida中,查看main函数. 分析函数的逻辑,发现用户需要输出一个字符串,存储到变量v9中.如果v9的值与v5的值相等则会打印unk_413e90中的值,否则打印a ...

  2. 攻防世界--re1

    练习文件下载:https://www.lanzous.com/i5lufub 1.使用IDA打开,进入main函数. 2.转为C代码 可以看到,输入v9之后,与v5比较,判断我们输入的flag是否正确 ...

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

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

  4. 记录下做攻防世界的misc题

    0x00 记录一下,代表自己做过 0x01 flag_universe 看简介是来自2018年的百越杯. 将文件下载下来后,就一个flag_universe.pcapng文件,wireshark打开. ...

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

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

  6. 攻防世界Web刷题记录(进阶区)

    攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...

  7. 攻防世界 WriteUp

    附:|>>>攻防世界-WEB-新手练习区<<<| WriteUp目录 01.|>>>baby_web<<<| 02.|>& ...

  8. 攻防世界(六)supersqli

    攻防世界系列:supersqli 方法一: 用逗号包裹回显正常,说明存在注入 1';--+(注释符也可用 -- 或 # 发现均未被过滤!) 有order by 语句可知表由2个字段,使用联合查询 (想 ...

  9. 攻防世界-MISC:pdf

    这是攻防世界新手练习区的第二题,题目如下: 点击附件1下载,打开后发现是一个pdf文件,里面只有一张图片 用WPS打开,没发现有什么不对的地方,参考一下WP,说是要转为word格式.随便找一个在线转换 ...

  10. 攻防世界web进阶题—unfinish

    攻防世界web进阶题-unfinish 1.看一下题目提示SQL 2.打开题目看一下源码,没有问题 3.查一下网站的组成:php+Apache/2.4.7+Ubuntu 4.扫一下目录,扫到一个注册页 ...

随机推荐

  1. NOIP模拟赛(by hzwer) T1 小奇挖矿

    [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...

  2. Oracle 与 ODAC 一起安装

    Oracle 需要设置path变量支持运行,ODAC安装时会将其路径加入path变量. 导致先搜索到ODAC,连接出现:ora-12560: TNS:protocol adapter error 将p ...

  3. mysql UNIQUE约束 语法

    mysql UNIQUE约束 语法 作用:UNIQUE 约束唯一标识数据库表中的每条记录. 江苏大理石平台 说明:UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证.PRI ...

  4. Spring read-only="true" 只读事务的一些概念

    概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必 ...

  5. web大文件下载+断点续传

    实现原理(1)首先获得下载文件的长度,然后设置本地文件的长度.(2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置.如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M,每条 ...

  6. luogu 4381 [IOI2008]Island 单调队列 + 基环树直径 + tarjan

    Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样 ...

  7. HDU 3341 Lost's revenge ( Trie图 && 状压DP && 数量限制类型 )

    题意 : 给出 n 个模式串,最后给出一个主串,问你主串打乱重组的情况下,最多能够包含多少个模式串. 分析 : 如果你做过类似 Trie图 || AC自动机 + DP 类似的题目的话,那么这道题相对之 ...

  8. HDU 2243 考研路茫茫——单词情结 ( Trie图 && DP && 矩阵构造幂和 )

    题意 :  长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里就不考虑单词是否有实际意义. 比如一共有2个词根 aa 和 ab ,则可能存在104个长度不超过3的单词, ...

  9. 双系统使用Linux引导

    今天在装linux的window双系统时,出现在无法使用linux引导的问题,开机总是自动进windows,照理来说我先装的window,后装的linux,应该是开机进grub引导才对.在主板的boo ...

  10. #1114-JSP指令

    JSP 指令 JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言. 语法格式如下: <%@ directive attribute = "value"%& ...