Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- systemhacking
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- python
- AjouUniv #Whois #정보보안교육 #Pwnable
- Pwnable
- Whois #정보보안교육 #Ajou
- webhacking
- Whois #정보보안교육 #webhacking.kr
- AjouUniv #SuniNatas #Web
- Allocation Starategy
- 스케줄링
- AjouUniv #Whois #정보보안교육
- Memory Virtualization
- 코딩도장
- 운영체제
- Dreamhack
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- 아주대학교 #Whois #정보보안교육 #4주차
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- Variable Partition
- Whois #AjouUniv #정보보안교육 #Pwnable
- 아주대학교
- 사이버보안학과
- hackerschool
- ftz
- AjouUniv #Whois #Reversing
- Whois #정보보안교육 #AjouUniv #Pwnable
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- N0Named
- HackCTF
Archives
- Today
- Total
chipkkang9's story
[Whois 정보보안교육] Reversing Hand-Ray 과제 본문
어셈블리 명령어 정리
| 명령어 | 사용법 | 의미 | 예시 |
| mov | mov A, B; | B의 값을 A에 넣어라. | mov rax, rbx; mov DWORD[rax], ebx; |
| lea | lea A, B; | B의 주소값을 A에 넣어라. | lea rax, [ebx]; |
| add | add A, B; | A의 값을 B만큼 증가하라. | add ecx, 0x10; add BYTE[rbx], al; |
| sub | sub A, B; | A의 값을 B만큼 감소하라. | sub ecx, 0x10; sub BYTE[rbx], al; |
| inc | inc A; | A의 값을 1만큼 증가시켜라. | inc rax; |
| dec | dec A; | A의 값을 1만큼 감소시켜라. | dec rbx; |
| xor | xor A, B; | A와 B를 XOR한 값을 A에 저장하라. | xor rax, rax; |
| and | and A, B; | A와 B를 AND한 값을 A에 저장하라. | and rax, rbx; |
| or | or A, B; | A와 B를 OR한 값을 A에 저장하라. | or rax, rbx; |
| cmp | cmp A, B; | A와 B를 비교하라. | cmp rax, rbx; |
| jmp | jmp A | rip의 값을 A로 설정하라. | jmp 0xdeadbeef; |
| call | call A; | A를 호출한다. | call 0xdeadbeaf; |
| push | push A; | A의 값을 스택에 넣어라. (WORD 단위) | push rax; |
| pop | pop A; | 스택에서 하나의 WORD를 뽑아, A에 넣어라. | pop rax; |
| ret | ret; | 함수 끝나서 돌아갈 때. | Ret; |
| cdq | cdq | edx 레지스터의 값이 0x0으로 셋팅한다. | cdq |
| imul | imul A, B, C; | B와 C의 곱을 A에 저장한다. | imul esi, edi, 25; |
| rep | rep; | ecx 레지스터에 담긴 카운터 횟수만큼 반복한다. | rep stos dward ptr [edi]; |
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 |
int A = 10, B; B = A; B *= 0x17; // 23 (10진수) B -= A; int C; C = B; C /= A; A = B; B = 0x0; return; |
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; |
int A = 0; // ebp-0x400 == A // edx = &ebp-0x3fc // eax = 0x0, ecx = 0xf9, edi = edx; // eax = &ebp-0x400 A = 0x6c6c6548; *[A + 0x4] = 0x6f57206f; *[A + 0x8] = 0x21646c72; *[A + 0xc] = 0x4f48570a; *[A + 0x10] = 0x4a205349; *[A + 0x14] = 0x474e414a; *[A + 0x18] = 0x217e; (Word는 2byte 크기) *[A +0x1a] = 0x0; (BYTE는 1byte 크기) // esp -= 0xc, eax = &ebp-0x400 puts(); // esp += 0x10; // eax = 0x0; return 0; |