2.《game》
首先打开看看长啥样,之后用工具得出32位,下面我们分别用ida和od进行解题。
1.IDA
鉴于28行前代码无关紧要就不放在这里占空间了,同时说下如果IDA不能正确的获得自定义函数的名字,那么IDA会用sub__加上自定义函数的起始地址来定义函数的名字
35行的v2被赋为输入的值,之后if使v2属于[0,8]
在这里我们可以得出使byte_532E28每一位都是1,就会进入sub_457AB4(),我们猜测这可能就是出flag的地方。
继续跟进sub_457AB4()
此处省略部分...
基本可以推测出后面的为print函数,那么我们只要算出for循环里的就可以拿到flag了,上脚本
a = [123,32,......,126,0]
b = [18,64,......,16,0]
c = 0
flag = ''
while (c<56):
a[c] ^= b[c]
a[c] ^= 0x13
flag = flag + chr(a[c])
c = c + 1
print(flag)
2.OD
首先找到可能为最后flag的地址,跟进
图标为1的就是跟进的地址了,我们看标2的地方就是开始我们这个函数的地址,跟着红箭头一路向上找就可以找到跳转的地址
记住这个地址:E37AB4,我们再去寻找失败的地方
继续跟进
到了这,我们只需要覆盖掉就可以直接到达出flag的函数,输入jmp 0xE37AB4
保存文件后输入任意数值即可,