1.[ACTF新生赛2020]easyre
解压后放入EXE中,发现有upx壳,先使用工具去壳
去掉壳后,再次放入EXE中,可以发现已经无壳了
使用32位IDA打开,F5反汇编
查看_date_start_的值,编写脚本
就可以得到flag
#include <iostream>
#include <cstring>
using namespace std;
int main() {
string s = "z}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$# !\")";
string v4 = "*F'\"N,\"(I?+@";
for (int i = 0; i < v4.length() ; i++ ) {
for (int j = 0 ; j < s.length() ; j++ ) {
if (v4[i] == s[j]) {
cout << char(j + 1);
}
}
}
}
2.[ACTF新生赛2020]rome
同样先解压后放入EXE,发现无壳,32位
使用IDA打开,F5反汇编
进入func分析
编写脚本解出
x = {}
for key in range(65,90+1):
value = ( key - 51) % 26 + 65
x[chr(value)] = chr(key)
for key in range(97,122+1):
value = ( key - 79) % 26 + 97
x[chr(value)] = chr(key)
s = 'Qsw3sj_lz4_Ujw@l'
y = ""
for i in s:
if i in x: # 是字母直接转换
y += x[i]
else: # 不是字母的照旧
y += i
print(y) # Cae3ar_th4_Gre@t
# 加上ACTF{}就得到 You are correct!
#flag{Cae3ar_th4_Gre@t}