쉘코딩 하는 여러 방법 소개 시리즈 (1)
어셈 코딩하고 해당 코드를 실행하는 방법 소개
아래 예시는 argv[1] 문자열을 뒤집는 쉘코드
# main.s
# gcc -nostdlib main.s -m32
.intel_syntax noprefix
.global _start
.text
_start:
push ebp
mov ebp, esp
# if (argc < 2) exit;
cmp DWORD PTR [ebp+4], 2
jl exit
# length of argv[1] : esi
mov esi, 0x0 # i = 0
loop:
mov eax, DWORD PTR [ebp+0xc]
add eax, esi
add esi, 1
cmp BYTE PTR[eax], 0
jne loop
sub esi, 1
# while (true) i--; if(i <= -1) break; write(1, &argv[1][i], 1)
write_one_char:
mov eax, DWORD PTR [ebp+0xc]
sub esi, 1
cmp esi, -1
jle exit
add eax, esi
# write(1, eax, 1)
mov edx, 1
mov ecx, eax
mov ebx, 1
mov eax, 4
int 0x80 # write
jmp write_one_char
# exit(0)
exit:
mov ebx, 0x0
mov eax, 0x1
int 0x80 # exit
실행
$ ./a.out
'pwnable > Shellcoding' 카테고리의 다른 글
쉘코딩 (shellcoding) - (3) (0) | 2022.06.08 |
---|---|
쉘코딩 (shellcoding) - (2) (0) | 2022.03.25 |
쉘코드 만들기 (asm 코딩) (0) | 2018.12.23 |
쉘코드 만들기 (직접) (0) | 2018.12.23 |