re题(21)BUUCTF—findit
BUUCTF在线评测 (buuoj.cn)
用APK-IDE打开,然后进入到smali -> com -> findit -> MainActivity.smali
把这两个字符串输出以下
array_0 = [0x54, 0x68, 0x69, 0x73, 0x49, 0x73, 0x54, 0x68, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x48, 0x6f, 0x6d, 0x65]
array_1 = [0x70, 0x76, 0x6b, 0x71, 0x7b, 0x6d, 0x31, 0x36, 0x34, 0x36, 0x37, 0x35, 0x32, 0x36, 0x32, 0x30, 0x33, 0x33, 0x6c, 0x34, 0x6d, 0x34, 0x39, 0x6c, 0x6e, 0x70, 0x37, 0x70, 0x39, 0x6d, 0x6e, 0x6b, 0x32, 0x38, 0x6b, 0x37, 0x35, 0x7d]ciph = ""
for i in array_0:ciph += chr(i)print(ciph)ciph = ""
for i in array_1:ciph += chr(i)print(ciph)
ok,也是得到类似flag的字符串
ThisIsTheFlagHome
pvkq{m164675262033l4m49lnp7p9mnk28k75}
其实直接用jadx打开能看到反汇编的代码,这里是一个移位的凯撒加密
,
所以这我们还需要将得到的字符串进行一次凯撒加密
我们可以直接爆破
#凯撒密码爆破def decode_Caesar(s,key):#定义凯撒解密函数letters=''#用于存放所用字符集合for i in range(ord('a'),ord('z')+1):#遍历a-z所有字符letters+=chr(i)#将这些字符存入字符集合letters=list(letters)#将这个字符集合转为列表for j in s:#遍历密文字符集合if j.islower():#如果密文字符是小写字符flag=1#标志为1else:#如果密文字符不是小写字符flag=0#标志为0j=j.lower()#并把密文字符先转换为小写字符if j in letters:#如果密文字符在加密字符集中k=letters.index(j)-key#将这个密文字符前移密钥个位数k=k%len(letters)#保证位数不被移出去if flag==1:#如果标志为1(原来密文字符是小写字符)print(letters[k],end='')#输出解密后的字符else:#如果标志不为1(原来密文字符不是小写)print(letters[k].upper(),end='')#将解密后的字符先转为大写在输出else:#如果密文字符不在加密字符集合print(j,end='')#直接输出def break_Caesar(s):#定义爆破函数for k in range(1,27):#遍历密钥所有可能值print('\n当key =',k,'时',end='\t解密结果为:')decode_Caesar(s,k)#调用解密函数if __name__ == "__main__":#主函数s=input("输入密文:\n")#先需要输入密文break_Caesar(s)#调用爆破函数
也可以看第二串字符,可以猜一下
仔细观察pvkq,发现f——>p移10位,l——>v移10位,a——>k移10位,g——>q移10位
flag{c164675262033b4c49bdf7f9cda28a75}
本题是安卓逆向,用到了凯撒加密,靠猜简单一些,爆破保准一些