360 复赛 re题目

这个题目当时没有做出来  然后当时看到这一堆的 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

 

 

参考链接

https://bbs.pediy.com/thread-255566.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值