findit
不知不觉,小明长大了,变成了一个程序员,虽然很苦逼,但是偶尔编写个小东西坑害公司新人还是蛮好玩的。新人小萌一天问小明wifi账号密码,一分钟后,小萌收到了一个文件。小萌想了好久都没得到密码,怎么办,女朋友要买东西,流量告罄,没wifi上不了网,不买就分手,是时候该展现月老的实力了兄弟们!代表月亮惩罚小明!得出答案。 注意:得到的 flag 请包上 flag{} 提交
IDA打开
没看明白,搜了下,发现这是安卓的,不能用IDA,要用
APK改之理(APK IDE)是一款可视化的、易用的、快捷的、一体化的安卓APK修改工具,集成了ApkTool、Dex2jar、JD-GUI等Apk修改工具,集Apk反编译、Apk查壳、加密解密、Apk调试分析、Apk打包、Apk签名,支持语法高亮的代码编辑器,基于文件内容的关键字(支持单行代码或多行代码段)搜索、替换引擎,打造成可视的、一体化的安卓反汇编工具,从而大大简化Apk修改过程中的繁琐操作,修改更轻松。
虽然但是,我还是不懂
。。。
终于找到了异常的地方
找到两串数
.line 22
:array_0
.array-data 2
0x54s
0x68s
0x69s
0x73s
0x49s
0x73s
0x54s
0x68s
0x65s
0x46s
0x6cs
0x61s
0x67s
0x48s
0x6fs
0x6ds
0x65s
.end array-data
.line 23
nop
:array_1
.array-data 2
0x70s
0x76s
0x6bs
0x71s
0x7bs
0x6ds
0x31s
0x36s
0x34s
0x36s
0x37s
0x35s
0x32s
0x36s
0x32s
0x30s
0x33s
0x33s
0x6cs
0x34s
0x6ds
0x34s
0x39s
0x6cs
0x6es
0x70s
0x37s
0x70s
0x39s
0x6ds
0x6es
0x6bs
0x32s
0x38s
0x6bs
0x37s
0x35s
0x7ds
.end array-data
.end method
去掉s,ASCII码输出
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)
结果为
ThisIsTheFlagHome
pvkq{m164675262033l4m49lnp7p9mnk28k75}
显然第二段是flag的变形
尝试凯撒爆破
(找了自己好久之前写的代码)
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#标志为1
else:#如果密文字符不是小写字符
flag=0#标志为0
j=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)#调用爆破函数
flag{c164675262033b4c49bdf7f9cda28a75}
正确