buu-re-CrackCTF & easyre

本文最后更新于:2021年3月17日 下午

CrackCTF

总共有两个加密过程,第一个过程是调用了Windows的sha1加密,第二个过程是调用了类MD5加密,大致就是把AAA文件复制到了IPBuffer中,然后调用sub_401005函数,对lpString 和 lpBuffer进行异或操作,输入的是6个字符,因此异或的也应该是6个字节,在这里记录一下异或的具体py代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import hashlib

passwd1="6e32d0943418c2c33385bc35a1470250dd8923a9"
passwd2="27019e688a4e62a649fd99cadaafdb4e"
suffix="@DBApp"
aaa=[0x5, 0x7d, 0x41, 0x15, 0x26, 0x1]
rtf_h=[0x7b, 0x5c, 0x72, 0x74, 0x66, 0x31]

pass1=""
pass2=""
for i in range(100000, 1000000):
instr=str(i)+suffix
res=hashlib.sha1(instr.encode('utf-8')).hexdigest()
if res==passwd1:
pass1=str(i)
print("passwd1 = ", pass1)
break

for i in range(6):
res=aaa[i]^rtf_h[i]
pass2+=chr(res)
print("passwd2 = ", pass2)

[ACTF新生赛2020]easyre

观察for循环就行,从for循环了解到flag长度应该是11,将flag的ASCII值作为下标取值,与v4数组比较。很简单,只需要利用v4数组在_data_start_中找位置,就是我们flag的值

1
2
3
4
5
6
7
8
9
10
11
12
v4=[42, 70, 39, 34, 78, 44, 34, 40, 73, 63, 43, 64]

str=r"}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(" + chr(0x27) + r'&%$# !"'

pos=[]

for i in v4:
pos.append(str.find(chr(i))+1)
s=[chr(x+1) for x in pos]
flag=''.join(s)

print('flag{'+flag+'}')

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!