Q1 |-----------------
Q1 :
push ebp
mov ebp,esp
sub esp,0x10
mov DWORD PTR [ebp-0x4],0xa
mov eax,DWORD PTR [ebp-0x4]
mov DWORD PTR [ebp-0x8],eax
mov eax,DWORD PTR [ebp-0x8]
imul eax,eax,0x17
mov DWORD PTR [ebp-0x8],eax
mov eax,DWORD PTR [ebp-0x8]
sub eax,DWORD PTR [ebp-0x4]
mov DWORD PTR [ebp-0xc],eax
mov eax,DWORD PTR [ebp-0xc]
cdq
idiv DWORD PTR [ebp-0x4]
mov DWORD PTR [ebp-0x4],eax
mov eax,0x0
leave
ret
1~3: esp ~ ebp์ ์ฌ์ด ๊ฐ๊ฒฉ์ด 0x10๋งํผ ๋ฒ์ด์ก๋ค. ์ฆ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 16๋ฐ์ดํธ๋งํผ ์ก์๊ฐ๋ค
4: ์ซ์ 10์ ebp-4, ์ฆ 4๋ฐ์ดํธ๋งํผ ์ฌ์ฉํ์ฌ ์ ์ฅํ๋ค (๋ฉ๋ชจ๋ฆฌ์ ๋ด๋๋ค)
5: ๋ฐฉ๊ธ ๋ด์ ๊ฐ์ cpu๋ด๋ถ ๋ ์ง์คํฐ eax์ ๋ฃ๋๋ค
6: eax๊ฐ์ ebp-8์์น์ ๋ค์ ์ด๋ํ๋ค.
7~9: eax์ ebp-8์์น์ ๊ฐ์ ๊ฐ์ ธ์์ ๋ด๊ณ , ๊ฑฐ๊ธฐ์ 23์ ๊ณฑํ์ฌ ๋ค์ ebp-8์์น์ ๊ฐ์ ๋ฎ์ด์์ด๋ค.
10~12: ebp-8์์น์ ๊ฐ์ eax์ ๊ฐ์ ธ์ ๋ด๊ณ , ebp-4๊ฐ์ ๋บ ๋ค ebp-12์์น์ ์ ์ฅํ๋ค
13: ebp-12์์น์ ๊ฐ์ eax์ ๊ฐ์ ธ์ ๋ด๊ณ ,
14: eax๊ฐ์ ebx, ecx, edx์ ์ ๋ถ ๋ณต์ฌํ ๋ค,
15: edx๊ฐ์ ebp-4์ ๊ฐ์ผ๋ก ๋๋์ด
16: ๊ทธ์ค ๋ชซ์ ebp-4์ ๋ฎ์ด์์ด๋ค.
17: eax์ 0์ ๋ด๋๋ค
18, 19: return
Q1: ํธ๋๋ ์ด |----------------
ebp ~ ebp-4 => a
ebp-5 ~ ebp-8 => b
ebp-9 ~ ebp-12 => c
ebp-13 ~ ebp-16 => d
#include <stdio.h>
int main() {
int a, b, c ,d;
a = 10;
b = a;
b *= 23;
c = b-a;
a = c/a;
return 0;
}
Q2 |-----------------
Q2 :
push ebp;
mov ebp,esp;
sub esp,0x3fc;
mov DWORD PTR [ebp-0x400],0x0;
lea edx,[ebp-0x3fc];
mov eax,0x0;
mov ecx,0xf9;
mov edi,edx;
rep stos DWORD PTR es:[edi],eax;
lea eax,[ebp-0x400];
mov DWORD PTR [eax],0x6c6c6548;
mov DWORD PTR [eax+0x4],0x6f57206f;
mov DWORD PTR [eax+0x8],0x21646c72;
mov DWORD PTR [eax+0xc],0x4f48570a;
mov DWORD PTR [eax+0x10],0x4a205349;
mov DWORD PTR [eax+0x14],0x474e414a;
mov WORD PTR [eax+0x18],0x217e;
mov BYTE PTR [eax+0x1a],0x0;
sub esp,0xc;
lea eax,[ebp-0x400];
push eax;
call 0x8049030;
add esp,0x10;
mov eax,0x0;
leave;
ret;
1~3: esp ~ ebp์ ์ฌ์ด ๊ฐ๊ฒฉ์ด 0x3fc๋งํผ ๋ฒ์ด์ก๋ค. ์ฆ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 1020๋ฐ์ดํธ๋งํผ ์ก์๊ฐ๋ค
4: ebp-1024 ์์น์ ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ค.
5: ebp-1020 ์์น์ ๊ฐ์ edx์ ๋ด๋๋ค.
6: eax๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ค.
7: ecx๊ฐ์ 25๋ก ์ค์ ํ๋ค.
8: edx๊ฐ์ edi๋ก ์ด๋ํ๋ค.
9: edi๊ฐ์ด ๋๋ ๋ ๊น์ง ํด๋น ์์น์ ๊ฐ์ eax๊ฐ์ผ๋ก ์ค์ ํ๋ค.
10: ebp-1024 ์์น์ ๊ฐ์ eax์ ๊ฐ์ผ๋ก ์ค์ ํ๋ค
11~18: 16์ง์ ๊ฐ์ ํด๋น ํฌ์ธํฐ ์์น์ ๊ฐ์ผ๋ก ์ค์ ํ๋ค
19: esp๊ฐ์ 12 ์ค์ธ๋ค. ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ 12๋ฐ์ดํธ๋งํผ ์ค์ด๋ ๋ค
20: ebp-1024 ์์น์ ๊ฐ์ eax์ ๊ฐ์ผ๋ก ์ค์ ํ๋ค
21~: ์ถ๋ ฅ (์ ํํ ์ดํดํ์ง ๋ชปํจ)
Q2: ํธ๋๋ ์ด |----------------
#include <stdio.h>
int main() {
char[0x18] b, short c, unsigned char d;
char a;
for (int i = 0; i < 0xf9; i++) a[i] = 0;
a = 0x6c6c6548;
b[0] = 0x6f57206f;
b[1] = 0x21646c72;
b[2] = 0x4f48570a;
b[3] = 0x4a205349;
b[4] = 0x474e414a;
c = 0x217e;
d = 0;
printf(a);
printf(b[0]);
printf(b[1]);
printf(b[2]);
printf(b[3]);
printf(b[4]);
printf(c);
printf(d);
return 0;
}
'๐ ๋ณด์,์ ๋ณด๋ณดํธ > ๐ [STYDY] ๋ฆฌ๋ฒ์ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ DoPwn ] Week1 - "system" Write Up (0) | 2021.11.22 |
---|---|
[ DoPwn ] Week1 - "Magic Spell" Write Up (0) | 2021.11.22 |
[ DoPwn ] Week1 - "Student ID" Write Up (0) | 2021.11.20 |
[Whois-Internal] "EasyReverseMe" Write-Up (0) | 2021.11.08 |
[root-me.org] "reversing - PE x86 -0 protection" Write Up (0) | 2021.11.08 |