picoCTF 2019 asm2 - Points: 250

1968 단어 picoCTFCTF

문제





풀어봤어



asm2(0xc,0x15)를 실행할 때 어떻게 됩니까?
라는 문제입니다.
어셈블러를 살펴보겠습니다.


<+0>:   push   ebp
<+1>:   mov    ebp,esp
<+3>:   sub    esp,0x10
<+6>:   mov    eax,DWORD PTR [ebp+0xc]
<+9>:   mov    DWORD PTR [ebp-0x4],eax
<+12>:  mov    eax,DWORD PTR [ebp+0x8]
<+15>:  mov    DWORD PTR [ebp-0x8],eax
<+18>:  jmp    0x50c <asm2+31>

<+3>: 이것의 의미는 무엇입니까? 조금 모릅니다, 앞으로 esp 사용되지 않기 때문에 지장은 없을 것 같다.
<+6>: 두번째 인수의 0x15를 eax에 대입한다.
<+9>:ebp-0x4에 0x15를 대입한다.
<+12>:eax에 첫번째 인수의 0xc를 대입한다.
<+15>:ebp-0x8에 0xc를 대입한다.
<+18>:asm2+31로 점프한다.
<+31>:  cmp    DWORD PTR [ebp-0x8],0xa3d3
<+38>:  jle    0x501 <asm2+20>

<+31>:ebp-0x8과 0xa3d3을 비교한다. ebp-0x8은 0xc.
<+38>:0xc<0xa3d3이므로 점프한다.
<+20>:  add    DWORD PTR [ebp-0x4],0x1
<+24>:  add    DWORD PTR [ebp-0x8],0xaf
<+31>:  cmp    DWORD PTR [ebp-0x8],0xa3d3
<+38>:  jle    0x501 <asm2+20>

<+20>:ebp-0x4에 0x1을 더한다. ebp-0x4는 0x15이므로 0x16이 된다.
<+24>:ebp-0x8에 0xaf를 더한다. ebp-0x8은 0xc이므로 0xBB가 된다.
<+31>:과 <+38>:0xBB<0xa3d3이므로 점프한다.

라는 것이 반복된다.

그래서
0xa3d3 - 0xc = ‭0xA3C7

에서 차이를 내고
0xA3C7 / 0xaf = 0xef
0xef + 0x1 = 0xf0

반복 할 횟수를 계산하고 오버해야합니다. 1을 더합니다.
0x15 + 0xf0 = ?

루프하기 전의 eax에 더한다는 것이 대답입니다.
대답을 마스킹하는 것이 어려운 문제였습니다.

좋은 웹페이지 즐겨찾기