BUUCTF Youngter-drive

本文详细介绍了如何使用UPX脱壳工具处理一个程序,并通过IDA进行静态分析。作者探讨了程序中的主函数和两个关键线程,特别是对一个涉及字符串加密的函数进行了深入分析。加密算法特点是隔一个字符加密,对于大写字母减38,小写字母减96作为索引进行赋值。还提供了一个简单的脚本来解密给定的密文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
首先查壳发现是upx壳,直接上工具脱壳

upx -d E:\桌面\7289daa8-a5d5-430e-87a0-92ce805d8f15\Youngter-drive.exe

在这里插入图片描述
打开是这样的程序

拉入IDA进行分析
在这里插入图片描述
找到主函数,发现创建了两个线程,一个StartAddress,一个sub_41119F,进去看看
在这里插入图片描述

这里是对我们的flag进行操作,主要函数是sub_41112C
在这里插入图片描述
会出现这种情况,原因是堆栈不平衡利用ida调堆栈就好
在这里插入图片描述
找到411A04处,在pop ebp上按alt+k
在这里插入图片描述
将0x4改为0x0
在这里插入图片描述
这样就可以进入函数分析了
这里是将输入的大写字母-38为off_418000的下标进行赋值,将小写字母-96为off_418000的下标进行赋值
在这里插入图片描述
看到另一个线程函数,这个函数使对字符串的加密是隔一个字加密,也就是在奇数位时加密,偶数位时不变

附上我拙劣的脚本

cipher = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
list1 = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
flag = ''
for i in range(29):
    if(i%2==0):
        flag += cipher[i]
    else:
        if(list1.find(cipher[i])>=1 and list1.find(cipher[i])<=26):
            flag += chr(list1.find(cipher[i])+96)
        else:
            flag += chr(list1.find(cipher[i])+38)

print(flag)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值