资安学习路上-picoCTF 解题(Reverse)2

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:
	sub	sp, sp, #32 	#sp=sp+32
	str	w0, [sp, 12]	#*(sp+12)=w0=user input
	mov	w0, 58			#w0=58
	str	w0, [sp, 16]	#*(sp+16)=58
	mov	w0, 2			#w0=2
	str	w0, [sp, 20]	#*(sp+20)=2
	mov	w0, 3			#w0=3
	str	w0, [sp, 24]	#*(sp+24)=3
	ldr	w0, [sp, 20]	#w0=*(sp+20)=2
	ldr	w1, [sp, 16]	#w1=*(sp+16)=58
	lsl	w0, w1, w0		#w0=w1<<w0,w0=58*2**2
	str	w0, [sp, 28]	#*(sp+28)=w0=58*(2**2)
	ldr	w1, [sp, 28]	#w1=*(sp+28)=58*(2**2)
	ldr	w0, [sp, 24]	#w0=*(sp+24)=3
	sdiv	w0, w1, w0  #w0=w1/w0=58*(2**2)/3
	str	w0, [sp, 28]	#*(sp+28)=w0=58*(2**2)/3=77
	ldr	w1, [sp, 28]	#w1=*(sp+28)=58*(2**2)/3
	ldr	w0, [sp, 12]	#w0=*(sp+12)=w0(user)
	sub	w0, w1, w0		#w0=w1-w0=58*(2**2)/3-w0(user)
	str	w0, [sp, 28]	#*(sp+28)=w0=58*(2**2)/3-w0(user)
	ldr	w0, [sp, 28]	#w0=*(sp+28)=58*(2**2)/3-w0(user)
	add	sp, sp, 32		#sp=sp+32
	ret					#return		
	.size	func, .-func

可以整理成
stack + 12 = user input
stack + 16 = 58
stack + 20 = 2
stack + 24 = 3
stack + 28 = 77

在看主程序,请看注解

.LC0:
	.string	"You win!"
	.align	3
.LC1:
	.string	"You Lose :("
	.text
	.align	2
	.global	main
	.type	main, %function
main:
	stp	x29, x30, [sp, -48]!
	add	x29, sp, 0		#x29=sp+0
	str	w0, [x29, 28]	#*(x29+28)=w0
	str	x1, [x29, 16]	#*(x29+16)=w1
	ldr	x0, [x29, 16]	#x0=*(x29+16)=w1
	add	x0, x0, 8		#x0=x0+8
	ldr	x0, [x0]		#x0=*(x0)
	bl	atoi
	str	w0, [x29, 44]	#*(x29+44)=w0
	ldr	w0, [x29, 44]	#w0=*(x29+44)
	bl	func
	cmp	w0, 0			
	bne	.L4				#w0 != 0跳到.L4就会跳到.LC1=>lose					
	adrp	x0, .LC0	#希望跳到.LC0(win)=>w0 = 0
	add	x0, x0, :lo12:.LC0
	bl	puts
	b	.L6
.L4:
	adrp	x0, .LC1
	add	x0, x0, :lo12:.LC1
	bl	puts

重点是w0 = 0而看回func最後58*(22)/3-w0(user)希望为0,那w0须为58*(22)/3=77转成16进位==>(4d),并照题目说的格式补0==>picoCTF{0000004d}


<<:  一个人在一年写一套ERP程序

>>:  Core Web Vitals 的新指标 INP

Day13 - 如何用shioaji搭配Ta-Lib计算技术指标: 安装篇

Ta-Lib是非常好用的技术指标模组,提供高达100多种的技术指标,常见的技术指标几乎都可以在这里找...

[Day 30] Reactive Programming - RSocket (Hello World) Part 2

前言 补充上一篇的DEMO,包含RSC的其他应用与测试的撰写,测试是透过之前介绍过Reactor提供...

LeetCode解题 Day30

698. Partition to K Equal Sum Subsets https://leet...

Day20_CSS语法3

ID选择器(ID selector) : 符合指定id的HTML元素做为要套用样式规则的对象,命名格...

TCP/IP vs OSI,网际网路中的协议模型

接下来的几篇,我们来看看网路中的协议到底规范了哪些东西,为什麽要有这些规则?又有何优缺点? 首先来看...