Newstar CTF 2025 Week 1 Re方向 Write Up
Puzzle
这个题目有很多引导,这里就简单讲讲怎么做的
使用 IDA 打开这个程序,然后按 F5 将汇编转换为伪代码,可以看到主函数的逻辑,以及启动程序时打印在屏幕上的字符串
双击 Puzzle_Challenge 可以进入查看这个函数的逻辑
这里可以得到 part1 了
然后按 Esc 返回上一个查看的函数,即主函数
根据提示按 Shift + F12 查看程序中的字符串
双击第一个字符串即可得到 part4
可以看到下面的 Buffer 中提到了 part2,单击变量名,然后按 X,可以查看引用此变量的函数
选择想要查看的函数,然后按 Enter 或者点击 OK 即可查看函数
进入后可能是汇编界面,依旧是按 F5 将其转为伪代码
这里打印的字符串提到函数名就是 part2
返回刚刚查看变量的标签页,可以看到之前函数里没见到过的变量
就是上图中黄色高亮的部分,按 X 查看交叉引用
按回车进入
这里的逻辑是一个简单的异或加密,双击查看 encrypted_array 数组内容
然后根据提示,按下 Shift + E 可提取数据
选好合适的导出选项,然后编写解密脚本:
a="\xDE\xED\xDA\xF2\xDD\xD8\xD7\xD7"
for i in a:
print(chr(ord(i) ^ 0xAD), end='')
运行即可得到 part3
Strange Base
先使用 IDA 打开,可以看到一个 Base64 加密
尝试解密发现无法解出有效结果
查看加密函数
发现使用了自定义映射字符
将自定义字符提取出来,即可解出 flag
注意:使用 Cyberchef 解码时,其有可能会将自定义映射字符识别为正则表达式,需要将其中的
-转义为\-才可正常解码
有关 Base64 可查阅:Base64
X0r
使用 IDA 打开,main 函数即此程序的加密逻辑
程序对输入的字符串先进行长度判断,然后三个一组,每组第一个字符与 0x11 进行异或,第二个与 0x45 异或,第三个与 0x14 异或
运算完成后还有一次异或的运算,根据这样的逻辑,可以写出解密脚本:
a = 'anu`ym7wKLl$P]v3q%D]lHpi'
for i in range(len(a)):
if i % 3 == 0:
print(chr(ord(a[i]) ^ 0x14 ^ 19), end='')
elif i % 3 == 1:
print(chr(ord(a[i]) ^ 0x11 ^ 19), end='')
else:
print(chr(ord(a[i]) ^ 0x45 ^ 81), end='')
运行即可得到 flag
有关异或运算可以看《深入理解计算机系统》中的 2.1.6,这道题是利用了异或运算中这样的规律:
a^b=c a^c=b b^c=a
EzMyDroid
这是一道安卓逆向题,需要使用 JADX 来进行逆向
使用 JADX 打开可以看到程序逻辑
这里的没有 flag 处理的相关逻辑,可以看看 FirstFragment 类
这里可以发现,按下按钮后,会将输入框中的内容使用 AES 加密,双击 encrypt 方法,可以看到 AES 的模式为 ECB 模式,填充方式为 PKCS5Padding,加密后会将加密内容使用 Base64 编码
由此可知,从 FirstFragment 类中传入 encrypt 方法的是明文与密钥,密钥为 1145141919810000,加密后结果赋值给 strEncrypt 变量,然后与一个 Base64字符串比较
根据以上分析,可以解密得到 flag
debug
动态调试
使用 IDA 打开
可以看到程序的逻辑比较负责,这个时候可以进行动态调试
可能需要配置远程调试器,可以查阅这篇文章
题目提示在 x0r 函数下断点
找到 x0r 函数,然后在最后一行下断点,可以按下 F2 或者点击行号前的小点来下断点
然后按下 F9,程序会运行到断点处暂停
双击 flag 数组,然后提取数据,即可获得 flag
琼公网安备46010602001577号