4.speeds and feeds
Google后发现CNC 的language是"G-Code"
再Google "G-code interpreter online",发现这个网站不错用
https://ncviewer.com/
会进资料后发现flag
picoCTF{num3r1cal_c0ntr0l_68a8fe29}
5.Shop
先测试一下基本功能,可以做买卖,但想买flag会说钱不够
再测试个几次,发现买负个商品,前会变多,于是可以买flag
转换后看到flag
6.ARMssembly 1
先看func
func:subsp, sp, #32 #sp=sp+32strw0, [sp, 12]#*(sp+12)=w0=user inputmovw0, 58#w0=58strw0, [sp, 16]#*(sp+16)=58movw0, 2#w0=2strw0, [sp, 20]#*(sp+20)=2movw0, 3#w0=3strw0, [sp, 24]#*(sp+24)=3ldrw0, [sp, 20]#w0=*(sp+20)=2ldrw1, [sp, 16]#w1=*(sp+16)=58lslw0, w1, w0#w0=w1<<w0,w0=58*2**2strw0, [sp, 28]#*(sp+28)=w0=58*(2**2)ldrw1, [sp, 28]#w1=*(sp+28)=58*(2**2)ldrw0, [sp, 24]#w0=*(sp+24)=3sdivw0, w1, w0 #w0=w1/w0=58*(2**2)/3strw0, [sp, 28]#*(sp+28)=w0=58*(2**2)/3=77ldrw1, [sp, 28]#w1=*(sp+28)=58*(2**2)/3ldrw0, [sp, 12]#w0=*(sp+12)=w0(user)subw0, w1, w0#w0=w1-w0=58*(2**2)/3-w0(user)strw0, [sp, 28]#*(sp+28)=w0=58*(2**2)/3-w0(user)ldrw0, [sp, 28]#w0=*(sp+28)=58*(2**2)/3-w0(user)addsp, sp, 32#sp=sp+32ret#return.sizefunc, .-func
可以整理成
stack + 12 = user input
stack + 16 = 58
stack + 20 = 2
stack + 24 = 3
stack + 28 = 77
在看主程式,请看注解
.LC0:.string"You win!".align3.LC1:.string"You Lose :(".text.align2.globalmain.typemain, %functionmain:stpx29, x30, [sp, -48]!addx29, sp, 0#x29=sp+0strw0, [x29, 28]#*(x29+28)=w0strx1, [x29, 16]#*(x29+16)=w1ldrx0, [x29, 16]#x0=*(x29+16)=w1addx0, x0, 8#x0=x0+8ldrx0, [x0]#x0=*(x0)blatoistrw0, [x29, 44]#*(x29+44)=w0ldrw0, [x29, 44]#w0=*(x29+44)blfunccmpw0, 0bne.L4#w0 != 0跳到.L4就会跳到.LC1=>loseadrpx0, .LC0#希望跳到.LC0(win)=>w0 = 0addx0, x0, :lo12:.LC0blputsb.L6.L4:adrpx0, .LC1addx0, x0, :lo12:.LC1blputs
重点是w0 = 0而看回func最后58*(22)/3-w0(user)希望为0,那w0须为58*(22)/3=77转成16进位==>(4d),并照题目说的格式补0==>picoCTF{0000004d}