picoCTF 2019 asm3 - Points: 300
문제

풀어 보았다.
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}
그렇게 할 수있었습니다.
Reference
이 문제에 관하여(picoCTF 2019 asm3 - Points: 300), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/samohan/items/73f4e1525166f4bd186a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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}
그렇게 할 수있었습니다.
Reference
이 문제에 관하여(picoCTF 2019 asm3 - Points: 300), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/samohan/items/73f4e1525166f4bd186a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)