攻防世界-re新手区wp

攻防世界-re新手区wp

https://adworld.xctf.org.cn/

re1

下载附件文件
使用exeinfope打开,32位无壳

使用ida打开
在这里插入图片描述

发现是明文比较,并没有进行加密,然后看到最上面是赋值语句进入后看到字符串v5即为flag

在这里插入图片描述

ida使用小技巧,当光标移动到数据时,可以点击快捷键进行数据类型的转化,

a:将字符进行ascll编码,形成一个字符。

r:将一串数据转化为字符串,但要注意数据大小端的储存方式,这里形成的字符串时逆序的。

*:将数据组合形成数组。

u:消除对某段数据的分析,并呈现为十六进制数据。

c:将选中的数据分析为代码。

p:将选中的代码部分分析为一个函数。

d:转化选中的数据的数据类型,主要有Byte、Word、Dword

此处我们将转化好的数据放置到python中进行处理,直接倒序就可以得到flag

a = '0tem0c1eW{FTCTUD'[::-1]
b = '}FTCTUD'[::-1]
print(a+b)

在这里插入图片描述

ganme

使用exefope,32位无壳。

ida中分析,

在这里插入图片描述

主函数主要有三部分组成,此处主演展示了后两部分。

第一部分为输出程序出现的界面,然后获取我们输入的n。

第二部分为游戏运行的过程,并重新绘制游戏界面。

第三部分为判定所有行是否已经全部合并,如果是那将进入一个子函数。

所以我们可以明确的看出程序关键的解密并输出flag的函数就是sub_457ab4()

在这里插入图片描述

函数解密和输出部分如图示,其实就是一个简单的异或,但值得注意的是这是一种数组的写法:

其中的(&v2 + i)是表示地址偏移,是一种数组的写法,相当于v2[i],这是一种极为常见的写法。

所以我们可以直接根据这个函数写出脚本,注意将v2,v59写为数组就好。

但是这个函数负责将flag输出。
我们可以进行动态调试,并在此过程中控制if判定,最后让程序自己输出flag。

另外可以直接将游戏完成,输出flag。

还可以patch,使用ida将程序判定部分修改,然后输入一个值就可以判定为对,输出flag。

hello,ctf

在这里插入图片描述

其中需要补充的函数:

sprintf:函数第一个参数为字符串,第二个是格式,第三个是数据,此函数的定义为:将某串数据以一种特定的格式形成一个字符串。

strcat:函数定义为字符串连接函数,将两个参量都是字符串,将参数二连接到参数一结尾。

所以我们可以简单的看出整个程序的算法就是将输入的flag转化为16进制,然后和与定义好的字符串v13比较,我们可以使用python2中的decode()方法:

在这里插入图片描述

open-source

附件是一份c的源代码,使用编辑器打开分析。

if (argc != 4
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值