REVERSE-PRACTICE-CTFSHOW-2
- re3
- 红包题 武穆遗书
- 数学不及格
- flag白给
re3
main函数,分析可知,将输入的字符串按十六进制转成数字,写到v5,赋给v17[6]
当i等于6时,v16会加上输入的值,然后进入循环,最后判断v16是否等于0xffff
因为v17[0~5]的值是固定的,于是当i等于0到5的过程中,v16最后的累加结果是固定的
调试可得,当i刚刚++到6时,v16的值为0xE560
第二层for循环中,v16先加上v17[6],然后判断是否大于0xffff,小于等于0xffff即退出循环
这里可以直接让v17[6]=0xffff-0xE560=0x1A9F,v16加上0x1A9F后即等于0xffff,然后退出循环
下面的if判断v16==0xffff成立,于是有下图,提交flag{1a9f}成功
红包题 武穆遗书
exe程序,要求输入少于50个字符,upx脱壳,ida分析
main函数,有反调试,有看不懂的变换,但是check很简单,直接比较输入和变换后的内容
通过attach来过反调试,如下图设置断点,运行exe后先不输入,ida的Debugger->Attach to process,选择正在等待输入的exe
attach后,在exe黑窗中任意输入,回车,F9,执行流就断在了如下图所示处,此时v4指向的字符串即为flag
数学不及格
elf文件,ida分析,main函数,主要逻辑写在注释里,要算出除程序名之外的4个参数
前三个check相加,有
(v9-v10)+(v9-v11)+(v9-v12)=3*v9-(v10+v11+v12)=0x233F0E151C+0x1B45F81A32+0x244C071725=0x62d10d4673
而check4
v4+v10+v11+v12=0x13A31412F8C
两个等式相加可得,其中v9是斐波那契数列第v4左右项的值,v4是项数
3*v9+v4=0x62d10d4673+0x13A31412F8C=0x19d024e75ff
3*v9+v4的和除以3,可以大概知道v9的值
print((0x233F0E151C+0x1B45F81A32+0x244C071725+0x13A31412F8C)/3)
#591286729898
找一个在线计算斐波那契数列的网站:斐波那契
找到一个非常接近上面算出来的v9的大概值的一个数
于是v9==591286729879,v4=0x19d024e75ff-3*v9=58
再算出4个输入的参数为
v9=591286729879
v4=58
print(hex(v9-0x233F0E151C))
print(hex(v9-0x1B45F81A32))
print(hex(v9-0x244C071725))
print(hex(v4+0x6543))
#0x666c61677bL
#0x6e65776265L
#0x655f686572L
#0x657d
验证一下
再转成字符串,得到flag
from Crypto.Util.number import long_to_bytes
print(long_to_bytes(0x666c61677b6e65776265655f686572657d))
#flag{newbee_here}
flag白给
exe程序,输入序列号验证,upx脱壳,ida分析
ida没有解析出main函数,shift+F12打开字符串窗口,发现一个和exe窗口相同的字符串HackAv
交叉引用过去,来到TForm1_Button1Click函数
简单的将输入的字符串和已知的明文字符串"HackAv"比较,直接输入即可验证成功