문제
풀이
<+3>: sub esp,0x10
esp의 주소값에서 0x10(16byte)를 빼서 esp에 넣음
-> 16 byte의 공간을 확보
<+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
ebp-0x4 및 ebp-0x8에 두 개의 새로운 위치가 생성
ebp + 0xc의 값이 저장
-> ebp-0x4는 0x21을 저장
-> ebp-0x8은 0x4를 저장
<+18>: jmp 0x509 <asm2+28>
28행으로 무조건 점프
<+28>: cmp DWORD PTR [ebp-0x8],0xfb46
ebp-0x8에 저장된 값과 0xfb46를 비교
<+35>: jle 0x501 <asm2+20>
0x4 < 0xfb46 이므로 20행으로 점프
(ebp-0x8에는 0x4가 저장)
※jle : 비교 결과 값이 0이거나 작을 경우 점프 (Operand 1 <= Operand 2)
<+20>: add DWORD PTR [ebp-0x4],0x1
epb-0x4의 값에 0x1을 더한 뒤 ebp-0x4에 저장
-> 0x21 + 0x1
<+24>: add DWORD PTR [ebp-0x8],0x74
ebp-0x8의 값에 0x74를 더한 뒤 ebp-0x8에 저장
-> 0x4 + 0x74
<+28>: cmp DWORD PTR [ebp-0x8],0xfb46
다시 ebp-0x8에 저장된 값과 0xfb46를 비교
jle를 충족시키지 못하면 계속하여 20행과 24행을 반복
즉, jle를 충족시켜야 함
-> ebp-0x8에 저장된 값이 0xfb46보다 커져야 함
a = 0x21
b = 0x4
while b <= 0xfb46:
a += 0x1
b += 0x74
print(hex(a))
while문을 통해 0xfb46보다 커지면 hex값으로 변환하여 a를 출력
-> 0x24c
0x24
'Wargame & CTF > picoCTF' 카테고리의 다른 글
[picoCTF][Web Exploitation]Irish-Name-Repo 2 문제 풀이 (0) | 2021.01.07 |
---|---|
[picoCTF][Web Exploitation]Irish-Name-Repo 1 문제 풀이 (0) | 2021.01.05 |
[picoCTF][Reverse Engineering]vault-door-5 문제 풀이 (1) | 2021.01.04 |
[picoCTF][Web Exploitation]where are the robots 문제 풀이 (0) | 2021.01.03 |
[picoCTF][Web Exploitation]dont-use-client-side 문제 풀이 (0) | 2021.01.02 |