XCTF-BABYRE,XCTF-simple-check-100

目录

BABYRE

simple-check-100


BABYRE

参考wp:攻防世界逆向高手题的BABYRE_沐一 · 林的博客-CSDN博客_babyre

题目下载:下载

一个数组经过处理后,由前面的数据生成一个函数

无壳直接拖入IDA,查看主函数

 judge数组与0x0C进行异或操作,然后输入s即flag。v5是flag的长度并且等于14,然后if条件语句又有一个judge函数?点进去跟进一下这不是数组吗,为什么是函数?查看其他的wp知道,由于前面对judge数组进行异或后,这些数据可以定义为一个新的函数,而这个函数就被命名为judge函数,并且是本题的关键函数。通过对其他wp参考可以通过快捷键“shift+f2”使用IDApython对judge数组进行操作让他的数据在IDA中更改

1.注意在IDA7.5版本以上要使用from idc_bc695 import *。因为在7.5版本以上对PatchByte不兼容。

2.最开始的地址一定要是judge的首地址处

 对操作后的judge数组按c变为汇编代码,在按p变为函数,就可以查看内容了就很容易获得flag

key="fmcd\x7Fk7d;V`;np"
flag=""
for i in range(14):
	flag+=chr(ord(key[i])^i)
print(flag)

 方法二:
当然也可以通过远程调试,让judge先自己进行完异或操作然后直接生成函数查看。

下断点

远程调试断在断点处(judge已经进行完操作)

 跟进judge再把他变为函数,查看代码也是可以的。

simple-check-100

题目:下载

无壳载入IDA,

 从代码中可以看到,v8为key,其后是check_key函数,从名字看应该是检查输入是否符合规定。则interesting_function是关键函数。

 看了好像没有明确的比较函数,相等之类的条件,动态调试,改变eax的值,使不跳转到wrong不就相当于success了嘛。(对于为什么改变eax,是因为对eax进行了text操作,而它影响着ZF标志位,ZF又影响下面的跳转是否成立,下面会具体解释)具体如下:

1.下断点远程调试,在远程端随意输入一个key,IDA会停在断点处。

2.修改eax值,让text eax,eax为1,则ZF==0,则上面图片的jz跳转不成立,不会跳入wrong

3.在jz处下断点在运行

在远程中就得到flag:

部分标志位跳转条件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值