2022-02-25

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}
正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值