whaleCTF-逆向

一.PE格式

在这里插入图片描述
此题主要考察基础的PE文件格式,参考https://blog.csdn.net/qq_20307987/article/details/50953033
当然,使用工具更简单。PETool

在这里插入图片描述
可以求得flag

二.Warmup

IDA打开,定位到主函数
在这里插入图片描述
关键位置循环加密,然后与一个字符串比较。可以直接写脚本。

s="LDYVLQMZHuY:|cQ[^Qyo|cQ{~QYO\CQ[^/s"
le=len(s)
flag1=''
for i in range(le):
	flag1=flag1+chr(ord(s[i])^0xE)
print(flag1)

求得flag

BJWXB_CTF{W4rm_UP_warm_up_WARM_UP!}

三. r100

IDA打开
在这里插入图片描述
找到main函数,仔细观察一下,可见,sub_4006FD是个关键,点进去
在这里插入图片描述
程序会将输入的内容与这些字符串经过操作后比较,可以写脚本了

t1="Dufhbmf"
t2="pG`imos"
t3="ewUglpt"
s=[]
for i in range(3):
	s.append([])
for i in range(7):
   s[0].append(t1[i])
for i in range(7):
   s[1].append(t2[i])
for i in range(7):
   s[2].append(t3[i]) 
#print(s)

flag=[]
for i in range(12):
   flag.append(chr(ord(s[i%3][2*(int)(i/3)])-1))
print("".join(flag))

得到flag

Code_Talkers

四.逆向练习

IDA定位到主函数,F5
在这里插入图片描述
while用于输入,下面的for循环用于判断。
v32是我们输入的内容。
分析下v9,由于v9到v30的内存连着,可以将其看做一个数组,则“*(&v9+i)”可以看做是在取该数组的数;
byte_41578是个字符串。
所以,v32的前17位应该是以v9到v26所存的数为下标的数组byte_415768的值。
v33到v37在v32数组后面,可以认为,他们是一体的,我们即输入的数的后五位应该是“1024}”。
写个脚本

s=[1,4,14,10,5,36,23,42,13,19,28,13,27,39,48,41,42]
temp="KfxEeft}f{gyrYgthtyhifsjei53UUrrr_t2cdsef66246087138\0087138"
flag=""
for i in s:
	flag=flag+temp[i-1]
flag=flag+'1024}'
print(flag)

解得flag:KEY{e2s6ry3r5s8f61024}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值