buuctf Youngter-drive

本文详细介绍了在CTF比赛中遇到的一个逆向工程问题,涉及脱壳、IDA静态分析及多线程同步。通过分析两个线程的执行逻辑,发现了一个基于字符串替换的解密算法。最终使用Python脚本实现了解密过程,并找出缺失的数据,成功得到解密后的30位字符串。
摘要由CSDN通过智能技术生成

buuctf Youngter-drive

拿到题目,查壳(upx),首先脱壳,(不会脱壳自行百度,很多教程),脱壳之后是不能运行的,好像是因为文件重定向,但是不影响ida静态分析,ida打开
在这里插入图片描述
分析,多线程,最近刚好在学多线程,第一个线程h0bject会执行StartAddress函数,第二个线程v2执行sub_41119f函数,然后挨个分析打开StartAddress函数在这里插入图片描述
会出现这种情况,原因是堆栈不平衡利用ida调堆栈就好,在这里插入图片描述
在红色部分用alt+k,打开![在这里插入图片描述]在这里插入图片描述
把原来的0x-4改成0x00,堆栈平衡,然后就可以打开函数了
在这里插入图片描述
逻辑就出现了
然后有坑的地方出现了
他是两个线程同时工作的,所以要交替处理数据
看另一个线程,发现没有处理任何数据在这里插入图片描述
只是把原来的字符串向前移动
注意数据是从后向前处理的,查看数据大小发现是0x1d,就是29个,然后分析就行
最后贴上脚本

str="0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
text1='TOiZiZtOrYaToUwPnToBsOaOapsyS'
text2='QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
flag=''
s=0
for i in range(len(text1)):
    if(i%2==0):
        flag+=text1[i]
    else:
        s=text2.index(text1[i])
        flag+=str[s]
print(flag)

然后要求有30位数据,发现有一位数据没有对比,一个一个试,发现"E"成立

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值