WolvCTF2025 writeup by Flooc
Beginner
REverse
简单异或:
1 | cipher = r"t`qcxo0s0o2.kd\.k\o0s0o20z" |
REdata - Rev
字符串窗口里看到flag
reverse
CrackMeEXE
首先有个upx5.0的壳,去github上download一下编译的版本,直接upx -d
IDA载入发现有反调试,nop掉后动调,运行时写入的代码,在WriteProcessMemory后下断点,它的返回值就是分配的内存的地址,在debug段,生成函数:

简单异或:
1 | cipher = [0x11, 0x0F, 0x15, 0x01, 0x1D, 0x2D, 0x0F, 0x09, |

程序之后还有一处输入passwd的地方,随便输几个字符后将rax改成大于0x14的数,然后会报这个错,不知道为什么之后再说吧!

Irregularity
这道题是js的正则,比较复杂,看的头晕眼花,真折磨人啊!
因为不太会,一开始是将整个正则分成一部分一部分的看,类似这样,把捕获组号标清楚:

后面找到一个用来分析正则的在线网站 MK,匹配成功的话会在下面显示捕获组号和内容,还是很有用的!效果如下:

每分析完一部分就把这部分加进来,其他部分在其他的js验证网站上完成,最后耗时差不多三个小时??
1 | wctf{r3gul4r_3xpr35510n5_m0r3_l1k3_1rr3gul4r_3xpr355i0ns_smh_QOKUEfzi49TCzbLr} |
AngerIssues
angr,但我的电脑在运行时会报 out of memory
的错误,跑不出来,等结束后看看其他师傅的脚本吧(
Office
看了看代码,其实没有太懂,应该是一开始有个总数1337,工资默认10,然后可以选择:1下班打卡,同时总数+=工资、2提高天的工资也就是增加数,而且必须比之前的数要大,3放弃
想拿到flag要在3的ptr__与0x101相乘时必须等于总数,而ptr是在程序启动时的随机数,所以应该是通过下班打卡,判断本次启动的ptr的数值,然后找到对应的总数等于ptr*0x101
需要注意的是随机数ptr没有变,变得是它的备份(应该可以这么说)
1的每个语句都代表了一个数值,所以每次1的时候记录一下哪个语句没有输出,那么它对应二进制位上就为0。
脚本使用z3解ptr,输了四次1,才使方程有解,接出来ptr后算一下还差多少到总数
1 | from z3 import * |


1 | wctf{r4nD0m_bUt_N0t_53Cr3t_84a5} |
osint
wintery
用google map和黑色背景黄色M的旗帜可以看出是密西根大学的Michigan Union建筑:

看这个附件的角度,以及大小,拍摄地点应该不会离太远,并且可能在西南面
根据hint,把可能的数都试了,都不对,没有头猪了