矿大BXSCTF-RE-据说数学不好不会做

还是先将文件拖入IDA,对main函数进行反编译。查看C伪代码。

只有这里一个简单的处理,都在Main函数里。 将放在v15处的数组对V13处的数组进行整除,每一个结果即为FLAG的一位字符。

静态观察不太好看V15与V13处的字符。

使用OD进行动态调试。

ctrl+F8停留在第一个CALL,程序显示需要输入。在此处下断点,CTRL F2重新运行到此处,F7进入该函数,再CTRL F8进入到第二个CALL ,程序才显示需要输入。然后在该处下断点。CTRL F2重新运行到此处。F8开始输入,继续F8中途相应修改标致寄存器Z的值,到达上图所示指令处。可以容易看出这里就是进行flal比对的循环。

在IDA中可以看到 V15在EBP-5C,V13在EBP-A0处。

在OD数据区 CTRL G搜索上两处地址。

可看到对应数据。

运行相应脚本处理得到:

a=[102 , 216,       291,         412, 615 ,        690 ,        777    ,     880, 927  ,       950    ,    1210 ,       1260 ,1235   ,     1428       , 1515   ,     1760 ,2125
]
for i in range(0,len(a)):
       a[i]=int(a[i]/(i+1))
for i in range(0,len(a)):
       print(chr(a[i]),end='')

猜你喜欢

转载自blog.csdn.net/qq_38025365/article/details/82777919