攻防世界mobile第一题
-
模拟器打开apk文件
-
用jeb反汇编出这个apk文件
-
查看MainActivity.java文件
查看BuildConfig.java文件:
-
源码分析
str1为用户输入框输入的字符串;
str2为全局变量version_name,值为X<cP[?PHNB<P?aj
j为全局变量version_code,值为15
分析源码可知需满足两个条件才能"恭喜开启闯关之门"
条件1:str1.charAt(i) == (str2.charAt(i) ^ j)
即str1的第1位=X
与j
异或运算后的值,str第2位=<
与j
异或运算,3=c
异或j
,以此类推
条件2:str1.length() == str2.length()
即str1与str2字符串长度相同 -
编辑代码得到值为
-
Python代码
if __name__ == '__main__':
str1 = "X<cP[?PHNB<P?aj";
j = 15;
i=0;
flag='';
for i in range(len(str1)):
for strs in range(32,127):
if strs == ord(str1[i]) ^ j:
# print(chr(strs));
flag = flag+chr(strs);
break;
print(flag);
以前代码写复杂了,新代码:
if __name__ == '__main__':
str1 = "X<cP[?PHNB<P?aj";
j = 15;
i=0;
flag='';
for i in range(len(str1)):
strs = ord(str1[i]) ^ j;
flag = flag+chr(strs);
print(flag);