查壳
无壳
IDA
推测str为输入字符串,限制为 0~9 a~z A~Z
sub_4017B0是错误提示输出
if判断后是v5分别对三个范围内的str进行对应操作
最后将v5传给 sub_4017F0函数处理
第一个while循环对a1(也就是传入的v5)的地址进行处理判断,然后用a1+4*v4为字符串下标检索字符串aAbcdefghiabcde。如果检索结果等于KanXueCTF2019JustForhappy 则正确
解题
先在字符串aAbcdefghiabcde里检索KanXueCTF2019JustForhappy的顺序,然后在进行逆序相加得到 0~9 a~z A~Z 的值
这里逆序相加的分组情况事先算好:
0~9:+48
10~35:+87
36~61:+29
EXP
arr1='KanXueCTF2019JustForhappy'
arr2='abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ'
flag=[]
for s in arr1:
demo=arr2.find(s)
flag.append(demo)
flag2=''
for i in flag:
i=int(i)
if(i>=0 and i<10):
flag2+=chr(i+48)
elif(i>9 and i<36):
flag2+=chr(i+87)
if(i>=36 and i<62):
flag2+=chr(i+29)
print(flag2)
flag
flag{j0rXI4bTeustBiIGHeCF70DDM}