目录
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:
部分标志位跳转条件