饶派杯XCTF车联网安全挑战赛Reverse GotYourKey

文章目录
  • 一.程序逻辑分析
  • 二.线程2的operate方法解析
  • 三.找出真flag

一.程序逻辑分析

onCreate方法中判断SDK版本是否>=27
在这里插入图片描述
然后创建两个线程
第一个线程是接受输入的字符串并发送出去
第二个线程用于接受数据
在这里插入图片描述
线程1,就是将字符串转为字节数组发送出去
在这里插入图片描述
线程2,作为服务端接受数据并进行处理
在这里插入图片描述

二.线程2的operate方法解析

这部分主要是用于混淆的代码,很多没有实际作用
在这里插入图片描述
有一个方法是根据buffer来截取后一段数据,照着程序逻辑分析可以得出buffer分三段,一段是下标0~3,中间一段是topic(stringData),最后一段是messageData
不过这里都不是很重要可以直接忽略
在这里插入图片描述
主要在于check方法,跟进可以发现是aes加密
在这里插入图片描述
不过要注意这里的base64换了表,并且填充符不是’=‘而是’^’
在这里插入图片描述
解密:

  1. base64解密
import base64
str1 = "UGCA3QBFjPnlAZ6-NbV2Ca=="#将^替换为==即可
string1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+"#换表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
bytes=base64.b64decode(str1.translate(str.maketrans(string1,string2)))
value=int.from_bytes(bytes,byteorder='big')
print(hex(value))
#得到base64解密后的16进制数据0xe2a9a477496927334b93d83ec41e5c98
  1. aes解密

在这里插入图片描述
不过很不幸这里是假的flag

三.找出真flag

可以发现apk文件的assets目录下有一个bin文件,但是不知道具体内容是什么
在这里插入图片描述
MainActivity这里也导入了一个库,那么很有可能是这里做了些手脚
在这里插入图片描述

stringFromJni是默认的,没有什么特殊操作
在这里插入图片描述
JNI_Load里面有不少函数调用,笨方法逐个查看
在这里插入图片描述
这个sub_21868就是关键函数了,跟进之后也可以找到打开asset.bin文件的操作(这里如果用字符串查找会更快)
在这里插入图片描述
再往下看可以看到"goodluck"字符串,这可能是加密密钥,跟进之后可以发现是一个rc4加密
到这里可以大概看出是将asset.bin文件打开后进行rc4解密
解密asset.bin文件:

def rc4(data, key):
    S = list(range(256))
    j = 0
    out = []
    # KSA
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]
    # PRGA
    i = j = 0
    for char in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        out.append(char ^ S[(S[i] + S[j]) % 256])
    return bytes(out)
# Read the encrypted file
with open('asset.bin', 'rb') as f:
    encrypted_data = f.read()
# Decrypt the data
decrypted_data = rc4(encrypted_data, b'goodluck')
# Write the decrypted data to a new file
with open('decrypted_file', 'wb') as f:
    f.write(decrypted_data)

解密后的文件可以看到dex的标识
在这里插入图片描述
将解密后的dex文件用jadx打开,可以发现大部分逻辑还是和之前的结果一样,最主要的差别就是check函数不同,这里是rc4加密和rc4最后调用的base64加密
在这里插入图片描述
解密:

  1. base64解密
import base64
str1 = "SSro3CogRALMhCnQRBDyWa=="

string1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
bytes=base64.b64decode(str1.translate(str.maketrans(string1,string2)))
value=int.from_bytes(bytes,byteorder='big')
print(hex(value))
#0xdb644e766386d64bf01e6374d659d8e8

2.rc4解密
在这里插入图片描述
输出结果有乱码,将输出结果设置为16进制,然后用16进制转字符串网站即可
在这里插入图片描述
根据题目提示最终flag是md5(flag{ikjnmkjh±$})

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值