欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > BUUCTF re Youngter-drive

BUUCTF re Youngter-drive

2025/4/29 3:12:11 来源:https://blog.csdn.net/2401_83736531/article/details/143403715  浏览:    关键词:BUUCTF re Youngter-drive

传送门:BUUCTF在线评测

先梳理一下这题要用到的知识点

1:upx的查壳与脱壳(老朋友了,就不多讲了,可以去下面看原理)

2:多线程和ida平衡堆栈 (第一次遇到有点难懂)

可以去看下面大佬的文章简单的了解一下其原理

upx壳:upx加壳原理-CSDN博客

线程:多线程原理及简单介绍-CSDN博客​
   线程基本原理_线程原理-CSDN博客多线程原理及简单介绍-CSDN博客​

ida平衡堆栈:IDA F5堆栈不平衡的处理-CSDN博客

做题

将下载好的题目程序放入DE里查一下壳

32位upx的壳直接在Windows上脱壳(工具以前文章中有提到)

这样就脱好壳了,我们可以放入DE里在查一下

放入ida里看看找到主函数main

好空但看到一个main_0跟进看看

这里提示我们这题是线程题而且是多线程的

点开这两个线程看看

StartAddress函数:

sub_41119F函数:

跟进sub_411190看看

在跟进看看sub_411880

for循环?flag字符数有29个。跟进不了了shift+f12看看

看到两个特殊的字符串从上面得到的29个密文应该是第一个加上上面的分析flag有30个字符数

接下来就是找到加密过程了

汇编窗口找到text:00411A04

看到这个alt+k修改sp为-0x4

就可以看sub_411880函数了跟进

字符替换,将上面得到的两个特殊的字符串放入脚本

key = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
enc = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
flag = ''for i, char in enumerate(enc):if i % 2 == 0:flag += char  # 偶数索引,直接添加else:# 奇数索引,根据字符是大写还是小写,分别解密flag += chr(key.index(char) + (96 if char.isupper() else 38))print(flag)

输出:ThisisthreadofwindowshahaIsES;flag有30个最后一个要么爆破要么一个个猜26个字母大小写都试一下猜出最后一个为E,所以最终的flag{ThisisthreadofwindowshahaIsESE}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词