Binary‐level program analysis: Stack Smashing
Gang Tan
CSE 597 Spring 2019 Penn State University
1
Binarylevel program analysis: Stack Smashing Gang Tan CSE 597 - - PowerPoint PPT Presentation
Binarylevel program analysis: Stack Smashing Gang Tan CSE 597 Spring 2019 Penn State University 1 Program Stack For implementing procedure calls and returns Keep track of program execution and state by storing local variables
1
2
3
4
5
void function(int a, int b) { char buffer[12]; gets(buffer); return; } void main() { int x; x = 0; function(1,2); x = 1; printf("%d\n",x); }
factors (the target architecture, optimization levels, compiler options, etc);
6
movl $2, %esi movl $1, %edi call function
Note: in x86‐64, the first 6 args are passed via registers (rdi, rsi, rdx, rcx, r8, r9)
7
stack frame for main rbp rsp stack frame for main rbp rsp ret
8
pushq %rbp movq %rsp, %rbp subq $32, %rsp
Procedure prologue
9
stack frame for main rbp rsp ret stack frame for main rsp rbp ret
buffer
10
movq %rbp, %rsp popq %rbp ret
11
stack frame for main rbp rsp ret
buffer stack frame for main rsp rbp ret
buffer
12
void function(int a, int b) { char buffer[12]; gets(buffer); return; } void main() { int x; x = 0; function(1,2); x = 1; printf("%d\n",x); }
stack frame for main rsp rbp ret
buffer
13
stack frame for main rsp rbp ret
buffer
14
void function(int a, int b) { char buffer[12]; gets(buffer);
long* ret = (long *) ((long)buffer+40); *ret = *ret + 7;
return; }
void main() { int x; x = 0; function(1,2); x = 1; printf("%d\n",x); }
the original return address the new return address The output will be 0
15
16
17
18
19
stack frame for main ret
buffer
f f f ⁞
20
stack frame for main ret
21
stack frame for main ret Injected code
22
23
stack frame for main ret execve (“/bin/sh”)