这个题目当时没有做出来 然后当时看到这一堆的 int3
第一反应就是 异常函数,。。。。
只不过没有想到用的是
然后 去看这个401090
这个看了一下 大概意思就是
会先加密当前int3 到上一条int3之间的代码,再解密当前int3 到下一条int3之间的代码。加密方法很简单,异或要加密块前一条int3指令地址相对0x404000的偏移。
这里可以用ida脚本实现, 也可以按照exe文件直接读取的方法写
这里我直接用 文件操作的方法= =
f=open("360.exe","rb")
data=f.read()
codes=data[0x2200:0x2400]
encodes=[]
for i in codes:
encodes.append(ord(i))
cun=0
cuns=0
print hex(len(encodes))
while True:
cuns=cun+1
if cuns>0x200:
break
while encodes[cuns]!=0xcc:
cuns+=1
if cuns>=0x200:
break
if cuns>0x200:
break
for i in range(cun+1,cuns):
encodes[i]=encodes[i]^(cun&0xff)
encodes[cun]=0x90
cun=cuns
decode=""
for i in encodes:
decode+=chr(i)
ls=data[:0x2200]+decode+data[0x2400:]
fs=open("360write.exe",'wb')
fs.write(ls)
然后得到了代码
然后用脚本解出来flag 即可
cmpstr="ImMbPoPdFaFbNkPpJgPfPkMdPoNhMmEbGoMnOkLbFmIl"
ls=[]
flag=""
for i in range(0,len(cmpstr),2):
ls.append(((ord(cmpstr[i])-65)*0x10+ord(cmpstr[i+1])-97))
#print ls
for i in range(len(ls)):
flag+= chr((ls[i] ^ 0x4c ^ 0x52 ^i)/2)
print flag
参考链接