吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5289|回复: 8
收起左侧

[Android CTF] 攻防世界题解4-easy-apk

  [复制链接]
丶诺熙 发表于 2020-1-12 14:51

easy-apk

附件地址:https://adworld.xctf.org.cn/media/task/attachments/5eba4595b15a4afb8567c037ff5a6a88.apk

 这个题目还是比较简单的,感觉是做的前四道里面最简单的。也侧面说明确实这个顺序和难度关系不太对。

解压后可以发现不存在lib文件夹,也就是说我们只分析java代码即可。

首先,老规矩,看一下我们的MainActivity。
可以发现,很简单的逻辑。

将我们输入的字符串,加密后与已知字符串做比较。
此时,可以大胆猜测5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=是段base64。(毕竟代码中写的很清楚。)

尝试解密,发现失败。

然后进而去分析他这个base64New.

可以发现,他对base64码表进行了修改。

此时我们拿出第一关中的用的那个base变种脚本,替换我们的码表即可。
最终get flag


"""
base64实现
"""

import base64
import string

# base 字符集

# base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/'
base64_charset = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/"

def encode(origin_bytes):
    """
    将bytes类型编码为base64
    :param origin_bytes:需要编码的bytes
    :return:base64字符串
    """

    # 将每一位bytes转换为二进制字符串
    base64_bytes = ['{:0>8}'.format(str(bin(b)).replace('0b', '')) for b in origin_bytes]

    resp = ''
    nums = len(base64_bytes) // 3
    remain = len(base64_bytes) % 3

    integral_part = base64_bytes[0:3 * nums]
    while integral_part:
        # 取三个字节,以每6比特,转换为4个整数
        tmp_unit = ''.join(integral_part[0:3])
        tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]
        # 取对应base64字符
        resp += ''.join([base64_charset[i] for i in tmp_unit])
        integral_part = integral_part[3:]

    if remain:
        # 补齐三个字节,每个字节补充 0000 0000
        remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8
        # 取三个字节,以每6比特,转换为4个整数
        # 剩余1字节可构造2个base64字符,补充==;剩余2字节可构造3个base64字符,补充=
        tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]
        resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '='

    return resp

def decode(base64_str):
    """
    解码base64字符串
    :param base64_str:base64字符串
    :return:解码后的bytearray;若入参不是合法base64字符串,返回空bytearray
    """
    if not valid_base64_str(base64_str):
        return bytearray()

    # 对每一个base64字符取下标索引,并转换为6为二进制字符串
    base64_bytes = ['{:0>6}'.format(str(bin(base64_charset.index(s))).replace('0b', '')) for s in base64_str if
                    s != '=']
    resp = bytearray()
    nums = len(base64_bytes) // 4
    remain = len(base64_bytes) % 4
    integral_part = base64_bytes[0:4 * nums]

    while integral_part:
        # 取4个6位base64字符,作为3个字节
        tmp_unit = ''.join(integral_part[0:4])
        tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]]
        for i in tmp_unit:
            resp.append(i)
        integral_part = integral_part[4:]

    if remain:
        remain_part = ''.join(base64_bytes[nums * 4:])
        tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)]
        for i in tmp_unit:
            resp.append(i)

    return resp

def valid_base64_str(b_str):
    """
    验证是否为合法base64字符串
    :param b_str: 待验证的base64字符串
    :return:是否合法
    """
    if len(b_str) % 4:
        return False

    for m in b_str:
        if m != "=" and m not in base64_charset:
            return False
    return True

if __name__ == '__main__':

    local_base64 = "5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs="
    print('使用本地base64解密:', decode(local_base64).decode())

免费评分

参与人数 9吾爱币 +17 热心值 +8 收起 理由
cg1937 + 1 + 1 我很赞同!
ma4907758 + 1 热心回复!
sunnylds7 + 1 + 1 热心回复!
qtfreet00 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hexiaomo + 1 + 1 用心讨论,共获提升!
七个涨停一倍 + 1 用心讨论,共获提升!
smile5 + 1 热心回复!
Nachtmusik + 1 用心讨论,共获提升!
陈世界 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dn163 发表于 2020-1-12 20:22
没人顶???我顶了!
abuiamei 发表于 2020-1-12 21:16
xs8888dm 发表于 2020-1-13 08:15
lhl0235 发表于 2020-1-13 10:11
这个挺不错。可以试下
z5487693 发表于 2020-1-13 16:13
发点动态注册so函数的吧
 楼主| 丶诺熙 发表于 2020-3-17 13:29
v8cfx 发表于 2021-1-30 13:21
ding yi ding
头像被屏蔽
NASS80 发表于 2021-2-3 18:12
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表