picoCTF2019 asm1 [Reverse Engineering]

What does asm1(0x345) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format. Source located in the directory at /problems/asm1_5_301df039c0ee4ee4dfa8adad6a40b875.
Hints: assembly conditions

アセンブラの問題です。0x345を引数として与えられたときにasm1は何を返しますかという問題です。与えられたコードは以下です。

asm1:
	<+0>:	push   ebp
	<+1>:	mov    ebp,esp
	<+3>:	cmp    DWORD PTR [ebp+0x8],0x37a
	<+10>:	jg     0x512 <asm1+37>
	<+12>:	cmp    DWORD PTR [ebp+0x8],0x345
	<+19>:	jne    0x50a <asm1+29>
	<+21>:	mov    eax,DWORD PTR [ebp+0x8]
	<+24>:	add    eax,0x3
	<+27>:	jmp    0x529 <asm1+60>
	<+29>:	mov    eax,DWORD PTR [ebp+0x8]
	<+32>:	sub    eax,0x3
	<+35>:	jmp    0x529 <asm1+60>
	<+37>:	cmp    DWORD PTR [ebp+0x8],0x5ff
	<+44>:	jne    0x523 <asm1+54>
	<+46>:	mov    eax,DWORD PTR [ebp+0x8]
	<+49>:	sub    eax,0x3
	<+52>:	jmp    0x529 <asm1+60>
	<+54>:	mov    eax,DWORD PTR [ebp+0x8]
	<+57>:	add    eax,0x3
	<+60>:	pop    ebp
	<+61>:	ret    

+0と+1はFunction Prologueというお決まりの方法です。 

+3行目で引数の0x345と0x37aの比較(cmp)が行われています。0x345のほうが小さいので、+10行目のjg (jump greater)はジャンプしません。

そのまま進んで+12行目で引数の0x345と0x345の比較(cmp)が行われますが、+19行目はjne(jump not equal)なので、ここもジャンプしません。

+21行目で引数の0x345をeaxレジスタに格納して、+24行目でeaxに0x3を加えて(add)いるので、eaxは0x345 + 0x3 = 0x348になります。

+27行目でjmp(jump)命令が実行されて、+60行目に飛びます。このまま値を返しますので、結果は0x348となります。

答え:0x348

picoCTF2019 write-upまとめ

いいなと思ったら応援しよう!