看雪ctf 流浪者 WP

本文是看雪CTF第一题“流浪者”的解题过程。作者先尝试按签到题思路修改跳转未获flag,后逐步调试发现程序对输入字符串做了处理。用IDA打开程序查看伪代码,分析出核心算法,最后可通过写Python脚本复原算法得到应输入的字符串。

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

看雪ctf 第一题 流浪者 wp

  打开程序,提示要验证password,载入OD,按照签到题的思路,改了一个跳转,出现了提示框pass,但是没有flag,应该不是这种思路(我是一个刚入手的萌新,可能没改全,所以出不来flag,只能换一个思路了)。一步一步调试,发现程序比较的字符串和我输入的不一样,我输入了一堆1,但是发现最终比较的是一堆b,所以应该是中间做了一些处理,如图流浪者
,重新调试,发现了一个循环体,如图
流浪者2

,记录下循环体的地址0x40181b
  用IDA打开程序,跳转到0x40181b,查看伪代码,
流浪者3

,发现了字符串比较函数,如图中方框所示,如果Str1"KanXueCTF2019JustForhappy"相等,则运行函数sub_401770(),双击进去查看,发现是通过的函数,然后往上看,aAbcdefhiabcde是一个字符串,完整的字符串为abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ,然后查看传进来的参数a1流浪者4
,在ans函数名处按x查看调用ans函数的地方,跟过去看看,发现了另一个函数。
通过分析,整理一下思路,输入一个字符串,然后用图中核心算法生成一个数组v5,v5是一个偏移量的列表,然后将这个列表传入ans(a1)函数,得到Str1,相当于下面代码的赋值。

for(int i=0;i<25;i++){
    Str[i] = aAbcdefhiabcde[a[i]]
}

写一个python脚本是复原这个算法,就可以得到应该输入的字符串了流浪者5


# coding=UTF-8

def getf(v5, i):
   global p1,flag
   if p < 25 and v5 == position[p1] :
   	# print(content[i],'p1:',p1)
   	flag += content[i]
   	p1 += 1

def getPosition(KK,content,position):					
   for i in KK:
   	for j in range(0,len(content)):
   		if i == content[j]:
   			position.append(j)	

def getflag(content,v5):								# 还原算法
   for m in range(0,25):								# 因为KK是长度为25的字符串,所以这里循环25次
   	for i in range(0,len(content)):					# 遍历content,相当于爆破,找到v5(也就是a1)
   		num = ord(content[i])
   		if num > 57 or num < 48:
   			if num > 122 or num < 97:
   				if num > 90 or num < 65:
   					pass
   				else:
   					v5 = num - 29
   			else:
   				v5 = num - 87
   		else:
   			v5 = num - 48
   		getf(v5, i)	


if __name__ == '__main__':
   content = 'abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ'
   KK = 'KanXueCTF2019JustForhappy'
   p1 = 0
   position = []
   v5 = 0
   flag = ''
   getPosition(KK,content,position)     # 获取最终要比较的字符串KK的每个字符在content中的位置变换(也就是a1)
   print(position)
   getflag(content,v5)					 
   print(flag)			

参考链接:
https://www.bilibili.com/video/av46108107
http://geekfz.cn/index.php/2019/03/19/reverse_liulangzhe/

### 看CTF比赛概述 看CTF(简称KCTF)是信息安全领域内广受认可的技术竞技活动之一,起源于早期的CrackMe攻防大赛。这项赛事采用在线对抗的形式展开,拥有严谨而全面的比赛规则体系[^1]。 #### 赛事特点 - **历史沿革**:自2007年起至今已成功举办超过十个赛季,期间不断深化与行业领先企业的合作关系,如金山、360、腾讯以及阿里巴巴等知名企业均积极参与其中。 - **覆盖范围**:题目设计横跨多个操作系统平台和技术方向——Windows、Android、iOS、Pwn破解技巧、物联网设备防护乃至Web应用安全性评估等多个方面均有涉猎。 - **社会价值**:不仅促进了国内网络安全人才的成长与发展,同时也为企业选拔优秀技术人员提供了重要渠道;对于推动整个行业的健康发展起到了积极作用。 ### 如何参与到看CTF比赛中? 为了能够顺利加入到这场盛大的技术交流盛会当中: - 关注官方公告:定期浏览[看论坛](https://bbs.pediy.com/)发布的最新消息,了解即将举行的各类线上线下活动安排; - 提升个人技能:深入学习计算机科学基础知识,特别是针对特定领域的专业知识积累至关重要。例如,在准备参加Web类目下的挑战之前,应该掌握HTML/JavaScript编程语言基础、常见的HTTP协议工作原理及其潜在的安全隐患等内容[^4]; - 积极实践锻炼:利用业余时间尝试解答往届真题或是参与其他小型竞赛项目,以此检验自己的实际操作水平并及时查漏补缺; - 加入社区讨论:与其他爱好者保持密切联系,共同探讨遇到的问题解决方案,形成良好的互助氛围有助于快速成长进步。 ```bash # 访问官方网站获取更多信息 curl https://www.kanxue.com/ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值