This repository was archived by the owner on Jun 29, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathclone64.asm
More file actions
66 lines (62 loc) · 1.85 KB
/
clone64.asm
File metadata and controls
66 lines (62 loc) · 1.85 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
;//=====================================================//
;// Copyright (c) 2015, Dan Staples (https://disman.tl) //
;//=====================================================//
use64
; function paramater registers: RDI, RSI, RDX, RCX, R8, R9
; syscall parameter regsiters: rdi, rsi, rdx, r10, r8, r9
SYS_CLONE = 0x38 ; syscall 56: clone
SYS_MUNMAP = 0x0b ; syscall 11: munmap
SYS_EXIT = 0x3c ; syscall 60: exit
; initial values in registers:
; RAX: size of memory mmap'd for this shellcode
; RDI: clone flags
; RSI: stack address
; RDX: stack size
; RCX: payload address
; R8 : size of memory mmap's for payload
; R9 : payload parameter
start:
mov rsp,rsi ; start using new stack
push rax ; shellcode size
call @f
@@:
sub qword[rsp],@b-start ; shellcode addr
push rdx ; stack size
push rsi ; stack addr
push r8 ; payload size
push rcx ; payload addr
push rcx ; payload addr
push r9 ; payload param
mov rsi,rsp ; update stack pointer for clone
clone:
; long clone(unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs);
; flags and stack address are already in proper registers (rdi,rsi)
xor rax,rax
mov al,SYS_CLONE
xor rdx,rdx ; ptid
xor r10,r10 ; ctid
xor r8,r8 ; regs
syscall
test rax,rax
je child
int 0x3 ; interrupt to be trapped by parent
child:
pop rdi ; payload parameter
pop rax ; payload address
call rax ; call payload
cleanup:
xor rax,rax
mov al,SYS_MUNMAP
xor rdx,rdx ; what we'll use for our counter register for the loop, since RCX seems to get clobbered during syscall
mov dl,3 ; munmap each of: payload, stack, shellcode
munmap:
pop rdi ; allocated memory address
pop rsi ; size of allocation
syscall
dec dl
jnz munmap
exit:
xor rax,rax
mov al,SYS_EXIT
xor rdi,rdi ; exit code 0
syscall