picoCTF 2019 asm3 - Points: 300

1863 단어 picoCTFCTF

문제





풀어 보았다.



asm3(0xaeed09cb,0xb7acde91,0xb7facecd)일 때의 반환값(eax)을 구하는 문제입니다.

스택의 상태는 이렇습니까?



소스를 살펴보겠습니다.



eax, ax, ah, al이 나왔기 때문에 한 번 표로 둡니다.


<+3>:   xor    eax,eax

이것은 eax를 0으로 만드는 처리입니다.
<+5>:   mov    ah,BYTE PTR [ebp+0xb]

ah에 ebp+0xb를 대입한다.
ebp+0xb는 무엇인가 하면 ebp+0xc가 인수 2이므로, 그 직전에 2자리수.
즉 인수 1의 맨 왼쪽의 2 자리수이므로 ae가 됩니다.
BYTE이므로 2자리입니다.
ah는 ae.
<+8>:   shl    ax,0x10

ax를 0x10bit 왼쪽으로 시프트한다.
ax=0xae00이므로 왼쪽으로 16bit 시프트하면 ax=0x0000입니다.
<+12>:  sub    al,BYTE PTR [ebp+0xe]

al에서 [ebp+0xe]를 뺍니다.
ebp+0xe는 ac이므로 0x00-0xac=FFF~FF54
라고 됩니다만, BYTE는 것이므로 2자리수. FFF 부분은 아마 무시하고 좋을 것 같기 때문에
al=0x54
<+15>:  add    ah,BYTE PTR [ebp+0xd]

ah에 [ebp+0xd]를 준다.
[ebp+0xd]는 0xde, ah=0x00이므로
0x00+0xde=0xde
<+18>:  xor    ax,WORD PTR [ebp+0x12]

ax=0xde54
[ebp+0x12]=0xb7fa
0xde54 xor 0xb7fa = {flag}

그렇게 할 수있었습니다.

좋은 웹페이지 즐겨찾기