吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6719|回复: 23
收起左侧

[Android CTF] 日常破解--XCTF easy_apk

[复制链接]
windy_ll 发表于 2019-11-29 00:02
本帖最后由 windy_ll 于 2022-3-29 21:48 编辑

一、题目来源

    来源:XCTF社区安卓题目easy_apk


二、破解思路

    1、首先运行一下给的apk,发现就一个输入框和一个按钮,随便点击一下,发现弹出Toast验证失败。如下图所示:  

    2、将该APK直接拖进AndroidKiller中反编译,搜索关键字验证失败,如下图所示:  

  

    3、关键代码就在MainCtivity.java处,使用jeb直接查看Java代码(偷懒不看smali汇编了,看到脑壳痛),发现代码逻辑为将用户输入的字符串使用Base64New类中的Base64Encode()函数加密后和一个字符串相比较,若相等,则验证通过,否则验证失败,点击跳转到Base64New类中,发现Base64Encode()函数首先将用户输入得到的字符串转为字节数组作为参数,然后每3个字节为一组,扩展为4个字节,最后查表即可(感觉很眼熟的样子,emmmm就是base64编码,只是对照表跟base64对照表不同,可惜我在写完解密脚本之后才发现是这东西),那么解密过程也很简单了,直接对字符串4个字节一组分组,缩减为3个字节一组(语文水平感觉很差的样子写道这里。。。。),然后转为字符拼接成字符串即可。  


  

    4、将解码过程写出python脚本跑出flag,填入验证通过!!!  



三、总结

    总结:很基础的一道题,唯一的难点就在必须写base64解码脚本了吧,emmmm要是像我一样木有认出来是base64,那一开始就有点难受了!!!下面附上Base64编码解码原理以及相关脚本!!!
    Base64编码原理:
    1、将字符串转为字节数组,然后每3个字节一组,一个24个比特,不足3个字节直接补0
    2、在每一组3个字节24bit中,以6个bit构成一个字节(高两位补0),形成4个字节为一组
    3、根据编码后的字节查找对照表,拼接成字符串,自此,Base64编码完成!!!  

    Base64解码原理:
    1、将编码后的字符串查找对照表后的字节以4个字节为一组,出现=直接去掉即可
    2、将这4个字节每个字节的高两位去掉,有32bit变为24bit,将这24bit以8个bit构成三个字节
    3、将第二步得到的字节数组转为字符串即可!!!  

    附上python脚本(ps:由于markdown问题,所以有需要的主机更改一下某些地方的缩进):  

def Base64Decode(str_list):
list_base = []
a = str_list[0] << 2
c = str_list[1] & 15
b = str_list[1] >> 4
a = a | b
list_base.append(a)
c = c << 4
a = str_list[2] & 3
b = str_list[2] >> 2
c = c | b
list_base.append(c)
a = a << 6
a = a | str_list[3]
list_base.append(a)
return list_base

CodingTable = 'vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/'
Ciphertext = '5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs='

i = 0
flag = 'flag{'

while i <= (len(Ciphertext) - 1):
list1 = []
n = 0
for k in range(4):
    if Ciphertext[i + k] == '=':
        list1.append(0)
        n = n + 1
    else:
        list1.append(CodingTable.index(Ciphertext[i + k]))
ba = Base64Decode(list1)
for j in range(3 - n):
    ch = chr(ba[j])
    flag = flag + str(ch)
i = i + 4

flag = flag + '}'
print(flag)

免费评分

参与人数 5威望 +1 吾爱币 +15 热心值 +5 收起 理由
qtfreet00 + 1 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
西枫游戏 + 1 + 1 用心讨论,共获提升!
行脚商人 + 1 + 1 用心讨论,共获提升!
六岁玩论坛 + 1 热心回复!
joneqm + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

 楼主| windy_ll 发表于 2019-11-29 20:51
流光夜雪200 发表于 2019-11-29 19:47
您好,请问我为啥逆向反编译的时候报这个错误?D:\java1\lib\rt.jar: invalid LOC header (bad signature)

你的报错显示dex文件头部sha-1签名有问题
 楼主| windy_ll 发表于 2019-11-29 15:47
zhangz7777777 发表于 2019-11-29 15:24
挺好的,谢谢啦。我想要源码看下拿来研究下

题目来源于xctf社区,需要的可以自己去xctf社区去下载
头像被屏蔽
949561081 发表于 2019-11-29 00:23
 楼主| windy_ll 发表于 2019-11-29 00:26
949561081 发表于 2019-11-29 00:23
这不是我上次做过的一道题。。。

emmm,最近在做xctf题库的题,重复很正常
1970zlx 发表于 2019-11-29 07:21
感谢分享!
头像被屏蔽
神秘高手Mars偉 发表于 2019-11-29 08:16
提示: 作者被禁止或删除 内容自动屏蔽
aoyoudahai 发表于 2019-11-29 08:17
谢谢楼主分享
xznulc 发表于 2019-11-29 09:20

感谢分享!
TwilightZ 发表于 2019-11-29 09:34
大佬,请问你大腿还缺挂件不?
 楼主| windy_ll 发表于 2019-11-29 11:35
TwilightZ 发表于 2019-11-29 09:34
大佬,请问你大腿还缺挂件不?

。。。。。。。。可惜我不是大佬
 楼主| windy_ll 发表于 2019-11-29 11:36
神秘高手Mars偉 发表于 2019-11-29 08:16
楼主,从哪里开始学这个呢?

可以先从写安卓开始
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 20:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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