Re刷题WriteUP
BUUCTF
[ACTF新生赛2020]easyre
用ida分析,找一下主类
来看下代码逻辑
# 首先将"*F'\"N,\"(I?+@"复制到v4里面
v4 = "*F'\"N,\"(I?+@"
# 用户输入v6
然后我们看下_data_start__
可以发现这里有一个字符串,提取一下
~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"
这样的话思路就有了,定义v4和data_start,然后遍历v4,然后在data中找与v4中的元素一样的元素位置+1
的位置(v5是用来查找位置的一个数组,里面存放的v7 v8 v9都是匿名内存地址)
所以编写一下解密脚本
data = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"'
v4 = "*F'\"N,\"(I?+@"
flag = ""
for i in v4:
flag += chr(data.find(i) + 1)
print(flag)
flag{U9X_1S_W6@T?}
简单注册器
拿到一个apk,用jadx分析下
需要解密的代码段就是这个
if (flag == 1) {
char[] x = "dd2940c04462b4dd7c450528835cca15".toCharArray();
x[2] = (char) ((x[2] + x[3]) - 50);
x[4] = (char) ((x[2] + x[5]) - 48);
x[30] = (char) ((x[31] + x[9]) - 48);
x[14] = (char) ((x[27] + x[28]) - 97);
for (int i = 0; i < 16; i++) {
char a = x[31 - i];
x[31 - i] = x[i];
x[i] = a;
}
String bbb = String.valueOf(x);
textview.setText("flag{" + bbb + "}");
return;
}
按照这个走一遍,编写解密脚本
x = list("dd2940c04462b4dd7c450528835cca15")
a = ''
x[2] = chr(ord(x[2]) + ord(x[3]) - 50)
x[4] = chr(ord(x[2]) + ord(x[5]) - 48)
x[30] = chr(ord(x[31]) + ord(x[9]) - 48)
x[14] = chr(ord(x[27]) + ord(x[28]) - 97)
#反转字符
x[:] = x[::-1]
bbb = ''.join(x)
print("flag{" + bbb + "}")
得到flag{59acc538825054c7de4b26440c0999dd}
[GWCTF 2019]pyre
下载附件后我们会得到一个pyc文件,需要我们使用uncompyle6
来反编译一下
print("Welcome to Re World!")
print("Your input1 is your flag~")
input1 = input()
l = len(input1)
for i in range(l):
num = ((input1[i] + i) % 128 + 128) % 128
code += num
for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]
print(code)
code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',',
'\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']
这里的思路就是逆向code,把code逆向回input1
code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',',
'\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']
flag = ""
for i in range(len(code) - 2, -1, -1):
code[i] = chr(ord(code[i]) ^ ord(code[i + 1]))
print(code)
for i in range(len(code)):
# num = (input1[i] + i) % 128
num = chr((ord(code[i]) - i) % 128)
flag += num
print(flag)
得到flag{Just_Re_1s_Ha66y!}
moeCTF
Android_Cracker
得到附件,是一个apk
使用jadx打开,找到主类
明文直接出
moectf{Andr01d_1s_so00oo_e@sy_t0_cr4ck!!!}
Art
拿到一个程序,先用小蓝盒分析一下
发现有壳,是upx,那我们脱一下壳
放入IDA中分析
可以看到正确答案是一个长度为28的字符串
先实现对这段代码逻辑的一个逆向
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 QingChenyou | Luda' Blog!