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