BugkuCTF-Reverse题easy-100(LCTF)

本文详细介绍了如何通过安卓应用的反编译分析,追踪代码逻辑,发现图片中隐藏的字符串,并利用AES加密解密过程来获取最终的Flag。首先,从图片中提取关键字符串,然后进行特定的字符操作,接着使用AES加密算法进行解密,最终得到Flag。整个过程涉及安卓逆向、AES加密和字符串解析等技术。

下载附件,得到apk文件
一道安卓逆向题,JEB反编译,查看 MainActivity
在这里插入图片描述
在这里插入图片描述
分析可得,主函数会先执行 p 函数,创建了一个按钮监听事件在 classs d 里,class d 里的 onclick 函数,当我们点击安卓的按钮,触发函数。
在这里插入图片描述
在这里插入图片描述
if 条件判断正确就显示 flag,并且调用了 main 里的 a 函数,其里第一个参数是句柄,第二个参数是调用了 a 函数(另外一个a)返回一个字符串,第三个参数是我们输入的字符串。
于是我们查看 a 函数(此部分在MainActivity):
在这里插入图片描述
通过调用 a 函数,返回 main 函数里的字符串 v,而字符串 v 的初始操作在 main 里的 p 函数里进行
在这里插入图片描述
p 函数的作用就是读取一张图片的二进制数据取出这张图片 byte[144:144+16] 的数据保存在 v 字符串里。
至此,我们回去继续分析 if 判断语句,上面说了 if 语句调用了 main 的 a 函数(三个参数)
在这里插入图片描述
可以看出 a 函数(三个参数)调用了 a 函数(两个参数),而 a 函数(两个参数)调用 c 的 a 函数(两个参数),计算完后和后面的字节比较,如果相等就显示flag
看看c函数:
在这里插入图片描述
在这里插入图片描述
可以看到 c 函数里还会用到 a 函数,我们不妨先看一下 a 函数:
在这里插入图片描述
在这里插入图片描述
两部分一起分析
arg5 是从图片里获取的字符串,arg6是我们输入的
后面代码主要就是 AES 加密,将 arg5 经过变换后的字符串当做密码,将输入的字符串进行 AES 加密后和后面给出的字符串比较,如果相等得到 flag
那我们就可以直接解密 AES 就可以得到 flag 了

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

#equals比较的字节数组
byteArray =[21, -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值