还是先将文件拖入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='')