【极客大挑战2023】RE方向 WriteUp
1.砍树
下载题目得到一个apk文件,jadx打开,查看Android.Manifest.xml
查看MainActivity
发现使用了一个I0o0I处理了输入和Syclover,猜测应该是对text处理后与Syclover对比,当result赋值为1就成功了。故查看I0o0I
发现I0o0I再so文件中,故查看libezreeeee.so文件
IDA打开,查找I0o0I
生成伪代码并修改一些可以分辨的函数
在 函数中
text[i] ^= syclover[i % 7];
syc = Sycloverforerver实际上只被用到了前6个字符
解题脚本
点击查看代码
#include <stdio.h>
#include <string.h>
int main(void) {
unsigned char text[40];
unsigned char syc[20] = "Sycloverfover";
unsigned char dest[36] = {
0x00, 0x20, 0x20, 0x17, 0x1B, 0x36, 0x0E, 0x36,
0x26, 0x17, 0x04, 0x2A, 0x29, 0x07, 0x26, 0x15,
0x52, 0x33, 0x2D, 0x0F, 0x3A, 0x27, 0x11, 0x06,
0x33, 0x07, 0x46, 0x17, 0x3D, 0x0A, 0x3C, 0x38,
0x2E, 0x22, 0x18
};
for (int i = 0; i < 35; ++i) {
text[i] = dest[i] ^ syc[i % 7];
}
printf("Recovered text: ");
for (int i = 0; i < 35; ++i) {
printf("%c", text[i]);
}
printf("\n");
return 0;
}
2.点击就送的逆向题
这道题给了一个.s文件
解决方案有两个:
1.利用gcc编译成可执行文件,然后反编译生成伪代码
2.直接分析汇编(我不会。。。)
1.利用gcc编译成可执行文件
linux执行gcc -o 1.s 1
IDA打开,分析并编写,注意一定要在字符串末尾加上\0结束符!!!
点击查看代码
#include <stdio.h>
int main(void)
{
char e1[32] = "Z`J[X^LMNO`PPJPVQRSIUTJ]IMNOZKMM";
char result[33];
for (int i = 0; i <= 31; i++)
{
result[i] = e1[i] - 7;
}
result[33] = "\0";
printf("%s",result);
return 0;
}
3.幸运数字
解题脚本:
点击查看代码
# 定义 datas 数组
datas = [
13, 7, 29, 37, 29, 110, 48, 57, 44,
63, 42, 43, 50, 63, 42, 55, 110, 48,
48, 48, 48, 45, 1, 7, 49, 43, 1,
57, 31, 59, 45, 45, 27, 58, 1, 12,
ord('o'), ord('9'), ord('6'), ord('*'), ord('#')
]
# 计算 result 函数
def result(k):
if k:
return result(k - 1) + k
else:
return 0
# 生成 flag 的函数
def generate_flag(input_value):
flag = ""
v5 = result(input_value) % 211 # 计算 v5
for v4 in datas:
flag += chr(v4 ^ v5) # 生成字符
return flag
for input_value in range(1000): # 遍历所有可能的输入
flag = generate_flag(input_value)
# 检查 flag 是否符合特定格式,例如 SYC{}
if flag.startswith("SYC{") and flag.endswith("}"):
print(f"找到符合条件的输入值: {input_value}, 生成的 flag: {flag}")
break
4.小黄鸭
题目给了一个exe文件,IDA打开,发现是Pyinstall打包的软件
使用PyInstaller Extractor:https://sourceforge.net/projects/pyinstallerextractor/files/latest/download
python pyinstxtractor.py 1111.exe反编译
发现是Python3.7
通过查看其他pyc文件知道Magic Number 是 42 0D
发现一直报错,不明原因换一个软件:pyinstxtractor(找到问题了,一定要从github下载!!!)
https://www.cnblogs.com/pcat/p/8990482.html
使用在线工具进行pyc反编译
https://tool.lu/pyc/
解题脚本:
点击查看代码
d='~h|p4gs`gJdN`thPwR`jDn`te1w`2|RNH'
flag=''
for i in range(len(d)):
if d[i].isalpha():
c=chr(ord(d[i])-2)
flag+=chr(ord(c) + 13 - 26 if ord(c) + 13 > (90 if c <= 'Z' else 122) else ord(c) + 13)
else:
flag+=chr(ord(d[i])-1)
print(flag[::-1])
参考:
https://github.com/MrWQ/reverse_pyinstaller
https://blog.ctftools.com/2022/10/newpost-50/