web:[HDCTF 2023]Welcome To HDCTF 2023
可以直接玩出来
但是这边还是看一下怎么解吧,看一下js代码,在js.game里面找到一个类似brainfuck加密的字符串
解密可以得到答案,但是后面我又去了解了一下let函数let命令、let命令
let命令用于声明变量,其用法类似于var,和var不同的是,所声明的变量只在let命令所在的代码快内有效。且在let的代码块中不能重复声明一个变量,所以seeeeeecrt这个变量不存在变量提升,不能重复声明,且变量只在代码块内有效,具有较唯一性,所以说不用担心它会被重置,他只会等于当前区块设置的唯一值,而且这个变量是等于后面的那个brain fuck字符串的,所以直接在控制台看看能不能利用代码本身设置好的解密去得到答案,这也是直接解密出来之后想到的
pwn:[NSSCTF 2022 Spring Recruit]R3m4ke?
查壳,ida
看主函数,声明v4为32字节
先看nss()函数,就i是输出提示而已
后面用到了get这个危险函数,没有限制存在溢出,找一下后门函数和地址
直接写脚本,这次的脚本和之前的其实都差不多,覆盖量我尝试了好多个,最后是试出来了,但是没找到上面规律,也不是偶数啊,或者什么什么的倍数,太大太小都不行
misc:攻防世界如来十三掌
打开文件是与佛伦禅,解密看看
光看解密出来的字符串其实没什么概念,看不出来什么特征,像是没见过一样,返回去看题目十三应该是线索,找一下有没有相关的加密,找到13rot加密,
解密看看
尝试提交还不是答案,这个格式不就和原来的密文差不多吗,找一下结果是base64解密
这么多种解密方式,有的还真的是找不出来什么特征很难判断
crypto:polar靶场周杰伦的贝斯
打开文件结合题目一看纠正到时base100加密
直接解密,一看就是base64
一般=结尾的考虑base64,=作为填充字符来保证数据长度是 4 的倍数
结果是base32
reserve:攻防世界666
查壳,ida
看主函数
将我们输入的赋值给v5,然后执行加密函数,之后就是一个判断,加密之后是否等于对应的字符串
直接追踪加密函数
首先定义我们输入的字符串的长度为key,历遍我们输入的字符串以三个三个为一组进行加密,和之前做过的议题很像也是三个三个来
看加密之后的字符串,光看加密过程的话,加密过程应该是不涉及字符串长度的变化的,所以我们可以得到key为18
接下来逆向写一个解密脚本,注意我们要求的是原本输入的字符串也就是a1,而v3就是加密之后的字符串,类似这样去写
还要注意,我们这里是三个三个一组的进行加密运算所以说v3的i的位置如果按原本那样去挑肯定是错的,我们需要的是让他对应到三个三个那样的位置,不然位置不匹配会出现索引位置出错这样的错误
改成这样就i可以