#adworld-reverse-game
从1依次输入到8,每个数字会车,最后通关,获得flag
|-----------------------▲--------|
|-----------------------●--------|
|-----------------------◆--------|
|-----------------------■--------|
|--------------------|-----------------------★--------|
| |-----------------------▼--------|
| |--------------------(°Д°)-----|
| |--------------------(*°▽°)=3–|
二 |
| by 0x61 |
done!!! the flag is zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t} |
input n,n(1-8) |
1.△ 2.○ 3.◇ 4.□ 5.☆ 6.▽ 7.( ̄▽ ̄)/ 8.(;°Д°) 0.restart |
n= |
IDA:
搜索play a game
F5反编译
得到的反编译代码:
sub_45A7BE((int)"done!!! the flag is ", v1);
v60 = 18;
v61 = 64;
v62 = 98;
v63 = 5;
v64 = 2;
v65 = 4;
v66 = 6;
v67 = 3;
v68 = 6;
v69 = 48;
v70 = 49;
v71 = 65;
v72 = 32;
v73 = 12;
v74 = 48;
v75 = 65;
v76 = 31;
v77 = 78;
v78 = 62;
v79 = 32;
v80 = 49;
v81 = 32;
v82 = 1;
v83 = 57;
v84 = 96;
v85 = 3;
v86 = 21;
v87 = 9;
v88 = 4;
v89 = 62;
v90 = 3;
v91 = 5;
v92 = 4;
v93 = 1;
v94 = 2;
v95 = 3;
v96 = 44;
v97 = 65;
v98 = 78;
v99 = 32;
v100 = 16;
v101 = 97;
v102 = 54;
v103 = 16;
v104 = 44;
v105 = 52;
v106 = 32;
v107 = 64;
v108 = 89;
v109 = 45;
v110 = 32;
v111 = 65;
v112 = 15;
v113 = 34;
v114 = 18;
v115 = 16;
v116 = 0;
v3 = 123;
v4 = 32;
v5 = 18;
v6 = 98;
v7 = 119;
v8 = 108;
v9 = 65;
v10 = 41;
v11 = 124;
v12 = 80;
v13 = 125;
v14 = 38;
v15 = 124;
v16 = 111;
v17 = 74;
v18 = 49;
v19 = 83;
v20 = 108;
v21 = 94;
v22 = 108;
v23 = 84;
v24 = 6;
v25 = 96;
v26 = 83;
v27 = 44;
v28 = 121;
v29 = 104;
v30 = 110;
v31 = 32;
v32 = 95;
v33 = 117;
v34 = 101;
v35 = 99;
v36 = 123;
v37 = 127;
v38 = 119;
v39 = 96;
v40 = 48;
v41 = 107;
v42 = 71;
v43 = 92;
v44 = 29;
v45 = 81;
v46 = 107;
v47 = 90;
v48 = 85;
v49 = 64;
v50 = 12;
v51 = 43;
v52 = 76;
v53 = 86;
v54 = 13;
v55 = 114;
v56 = 1;
v57 = 117;
v58 = 126;
v59 = 0;
for ( i = 0; i < 56; ++i )
{
*(&v3 + i) ^= *(&v60 + i);
*(&v3 + i) ^= 0x13u;
}
return sub_45A7BE((int)"%s\n", (unsigned int)&v3);
}
两个数组求和,再与0x13u
利用python求解
import re
# sub_45A7BE((int)"done!!! the flag is ", v1);
# v60 = 18;
# v61 = 64;
# v62 = 98;
# v63 = 5;
# v64 = 2;
# v65 = 4;
# v66 = 6;
# v67 = 3;
# v68 = 6;
# v69 = 48;
# v70 = 49;
# v71 = 65;
# v72 = 32;
# v73 = 12;
# v74 = 48;
# v75 = 65;
# v76 = 31;
# v77 = 78;
# v78 = 62;
# v79 = 32;
# v80 = 49;
# v81 = 32;
# v82 = 1;
# v83 = 57;
# v84 = 96;
# v85 = 3;
# v86 = 21;
# v87 = 9;
# v88 = 4;
# v89 = 62;
# v90 = 3;
# v91 = 5;
# v92 = 4;
# v93 = 1;
# v94 = 2;
# v95 = 3;
# v96 = 44;
# v97 = 65;
# v98 = 78;
# v99 = 32;
# v100 = 16;
# v101 = 97;
# v102 = 54;
# v103 = 16;
# v104 = 44;
# v105 = 52;
# v106 = 32;
# v107 = 64;
# v108 = 89;
# v109 = 45;
# v110 = 32;
# v111 = 65;
# v112 = 15;
# v113 = 34;
# v114 = 18;
# v115 = 16;
# v116 = 0;
# v3 = 123;
# v4 = 32;
# v5 = 18;
# v6 = 98;
# v7 = 119;
# v8 = 108;
# v9 = 65;
# v10 = 41;
# v11 = 124;
# v12 = 80;
# v13 = 125;
# v14 = 38;
# v15 = 124;
# v16 = 111;
# v17 = 74;
# v18 = 49;
# v19 = 83;
# v20 = 108;
# v21 = 94;
# v22 = 108;
# v23 = 84;
# v24 = 6;
# v25 = 96;
# v26 = 83;
# v27 = 44;
# v28 = 121;
# v29 = 104;
# v30 = 110;
# v31 = 32;
# v32 = 95;
# v33 = 117;
# v34 = 101;
# v35 = 99;
# v36 = 123;
# v37 = 127;
# v38 = 119;
# v39 = 96;
# v40 = 48;
# v41 = 107;
# v42 = 71;
# v43 = 92;
# v44 = 29;
# v45 = 81;
# v46 = 107;
# v47 = 90;
# v48 = 85;
# v49 = 64;
# v50 = 12;
# v51 = 43;
# v52 = 76;
# v53 = 86;
# v54 = 13;
# v55 = 114;
# v56 = 1;
# v57 = 117;
# v58 = 126;
# v59 = 0;
# for ( i = 0; i < 56; ++i )
# {
# *(&v3 + i) ^= *(&v60 + i);
# *(&v3 + i) ^= 0x13u;
# }
# return sub_45A7BE((int)"%s\n", (unsigned int)&v3);
# }
# 两个数组求和,再与0x13u
s='''v60 = 18;
v61 = 64;
v62 = 98;
v63 = 5;
v64 = 2;
v65 = 4;
v66 = 6;
v67 = 3;
v68 = 6;
v69 = 48;
v70 = 49;
v71 = 65;
v72 = 32;
v73 = 12;
v74 = 48;
v75 = 65;
v76 = 31;
v77 = 78;
v78 = 62;
v79 = 32;
v80 = 49;
v81 = 32;
v82 = 1;
v83 = 57;
v84 = 96;
v85 = 3;
v86 = 21;
v87 = 9;
v88 = 4;
v89 = 62;
v90 = 3;
v91 = 5;
v92 = 4;
v93 = 1;
v94 = 2;
v95 = 3;
v96 = 44;
v97 = 65;
v98 = 78;
v99 = 32;
v100 = 16;
v101 = 97;
v102 = 54;
v103 = 16;
v104 = 44;
v105 = 52;
v106 = 32;
v107 = 64;
v108 = 89;
v109 = 45;
v110 = 32;
v111 = 65;
v112 = 15;
v113 = 34;
v114 = 18;
v115 = 16;
v116 = 0;
v3 = 123;
v4 = 32;
v5 = 18;
v6 = 98;
v7 = 119;
v8 = 108;
v9 = 65;
v10 = 41;
v11 = 124;
v12 = 80;
v13 = 125;
v14 = 38;
v15 = 124;
v16 = 111;
v17 = 74;
v18 = 49;
v19 = 83;
v20 = 108;
v21 = 94;
v22 = 108;
v23 = 84;
v24 = 6;
v25 = 96;
v26 = 83;
v27 = 44;
v28 = 121;
v29 = 104;
v30 = 110;
v31 = 32;
v32 = 95;
v33 = 117;
v34 = 101;
v35 = 99;
v36 = 123;
v37 = 127;
v38 = 119;
v39 = 96;
v40 = 48;
v41 = 107;
v42 = 71;
v43 = 92;
v44 = 29;
v45 = 81;
v46 = 107;
v47 = 90;
v48 = 85;
v49 = 64;
v50 = 12;
v51 = 43;
v52 = 76;
v53 = 86;
v54 = 13;
v55 = 114;
v56 = 1;
v57 = 117;
v58 = 126;
v59 = 0;
'''
s01='''v60 = 18;
v61 = 64;
v62 = 98;
v63 = 5;
v64 = 2;
v65 = 4;
v66 = 6;
v67 = 3;
v68 = 6;
v69 = 48;
v70 = 49;
v71 = 65;
v72 = 32;
v73 = 12;
v74 = 48;
v75 = 65;
v76 = 31;
v77 = 78;
v78 = 62;
v79 = 32;
v80 = 49;
v81 = 32;
v82 = 1;
v83 = 57;
v84 = 96;
v85 = 3;
v86 = 21;
v87 = 9;
v88 = 4;
v89 = 62;
v90 = 3;
v91 = 5;
v92 = 4;
v93 = 1;
v94 = 2;
v95 = 3;
v96 = 44;
v97 = 65;
v98 = 78;
v99 = 32;
v100 = 16;
v101 = 97;
v102 = 54;
v103 = 16;
v104 = 44;
v105 = 52;
v106 = 32;
v107 = 64;
v108 = 89;
v109 = 45;
v110 = 32;
v111 = 65;
v112 = 15;
v113 = 34;
v114 = 18;
v115 = 16;
v116 = 0;'''
s02='''v3 = 123;
v4 = 32;
v5 = 18;
v6 = 98;
v7 = 119;
v8 = 108;
v9 = 65;
v10 = 41;
v11 = 124;
v12 = 80;
v13 = 125;
v14 = 38;
v15 = 124;
v16 = 111;
v17 = 74;
v18 = 49;
v19 = 83;
v20 = 108;
v21 = 94;
v22 = 108;
v23 = 84;
v24 = 6;
v25 = 96;
v26 = 83;
v27 = 44;
v28 = 121;
v29 = 104;
v30 = 110;
v31 = 32;
v32 = 95;
v33 = 117;
v34 = 101;
v35 = 99;
v36 = 123;
v37 = 127;
v38 = 119;
v39 = 96;
v40 = 48;
v41 = 107;
v42 = 71;
v43 = 92;
v44 = 29;
v45 = 81;
v46 = 107;
v47 = 90;
v48 = 85;
v49 = 64;
v50 = 12;
v51 = 43;
v52 = 76;
v53 = 86;
v54 = 13;
v55 = 114;
v56 = 1;
v57 = 117;
v58 = 126;
v59 = 0;
'''
def trim(s):
r = re.findall('[\S]+', s)
return " ".join(r)
from bs4 import BeautifulSoup as bs
#s1=s.split('v*=')
# s1=trim(s)
# print(s1)
# ss1= bs(s, "lxml")
# ss2=re.findall('.*= (.*?);',s)
# #ss2=re.findall('.*=(.*?);',)
# #strOnes=re.findall('.*>(.*?)</a.*',trim(str(strList[0])))
# print(ss2)
# print(s01)
# ss01=bs(trim(s01),"lxml")
# ss02=bs(trim(s02),"lxml")
# # print(ss01)
# # print(ss02)
# sss01=re.findall('.*= (.*?);',ss01)
# sss02=re.findall('.*= (.*?);',ss02)
# print(sss01)
# print(sss02)
ss01=re.findall('.*= (.*?);',s01)
ss02=re.findall('.*= (.*?);',s02)
print(ss01)
print(ss02)
flag=''
for i in range(len(ss01)):
flag+=chr(int(ss01[i])^int(ss02[i])^0x13)
print(flag)
使用OD方法:
参考博文:
- https://copyfuture.com/blogs-details/20211116195508177z
- https://blog.csdn.net/song_10/article/details/83621118