Skip to content

Commit f650a07

Browse files
author
Emmanuel Fleury
committed
Adding a few anti-disassembler tricks
1 parent 060fb34 commit f650a07

File tree

22 files changed

+364
-10
lines changed

22 files changed

+364
-10
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
CFLAGS = -Wall -Wextra -g
2+
CPPFLAGS =
3+
LDFLAGS =
4+
5+
PTRACE = anti-ptrace
6+
BREAKPOINT = breakpoint_detection
7+
8+
EXEC = $(PTRACE)-i386 $(PTRACE)-amd64 \
9+
$(BREAKPOINT)-i386 $(BREAKPOINT)-amd64
10+
11+
all: $(EXEC)
12+
13+
$(PTRACE)-i386: $(PTRACE).c
14+
$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
15+
16+
$(PTRACE)-amd64: $(PTRACE).c
17+
$(CC) -m64 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
18+
19+
$(BREAKPOINT)-i386: $(BREAKPOINT).c
20+
$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
21+
22+
$(BREAKPOINT)-amd64: $(BREAKPOINT).c
23+
$(CC) -m64 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
24+
25+
clean:
26+
@rm -f *~ $(PTRACE)-i386 $(PTRACE)-amd64 \
27+
$(BREAKPOINT)-i386 $(BREAKPOINT)-amd64
28+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
#include <sys/ptrace.h>
5+
6+
int
7+
main ()
8+
{
9+
if (ptrace (PTRACE_TRACEME, 0, 1, 0) == -1)
10+
{
11+
printf ("don't trace me !!\n");
12+
exit (EXIT_FAILURE);
13+
}
14+
15+
return EXIT_SUCCESS;
16+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
#include <stdint.h>
5+
6+
#if defined(__i386__)
7+
# define OFFSET 6
8+
#elif defined(__amd64__)
9+
# define OFFSET 4
10+
#else
11+
# define OFFSET 0
12+
#endif
13+
14+
void
15+
foo ()
16+
{
17+
printf ("No breakpoint detected...\n");
18+
}
19+
20+
int
21+
main ()
22+
{
23+
/* Looking for a breakpoint at foo() */
24+
if ((*(volatile unsigned *) ((uintptr_t) foo + OFFSET) & 0xff) == 0xcc)
25+
{
26+
printf ("Breakpoint detected!\n");
27+
exit (EXIT_FAILURE);
28+
}
29+
30+
/* No breakpoint found */
31+
foo ();
32+
33+
return EXIT_SUCCESS;
34+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
CFLAGS = -Wall -Wextra -nostdlib
2+
CPPFLAGS =
3+
LDFLAGS =
4+
5+
SRC = dynamic_jump
6+
I386 = $(SRC)-i386
7+
AMD64 = $(SRC)-amd64
8+
9+
all: $(I386) $(AMD64)
10+
11+
$(I386): $(I386).s
12+
$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
13+
14+
$(AMD64): $(AMD64).s
15+
$(CC) -m64 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
16+
17+
clean:
18+
rm -f $(I386) $(AMD64) *~
19+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.globl _start
2+
3+
.text
4+
_start:
5+
mov $end, %rax
6+
jmpq *%rax
7+
.long 0x12345
8+
add $10, %eax
9+
nop
10+
nop
11+
end: mov $0x0, %ebx
12+
mov $0x1, %eax
13+
int $0x80
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.globl _start
2+
3+
.text
4+
_start:
5+
movl $end, %eax
6+
jmp *%eax
7+
.long 0x12345
8+
add $10, %eax
9+
nop
10+
nop
11+
end: mov $0x0, %ebx
12+
mov $0x1, %eax
13+
int $0x80
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
CFLAGS = -Wall -Wextra -nostdlib
2+
CPPFLAGS =
3+
LDFLAGS =
4+
5+
SRC = exotic_instructions
6+
I386 = $(SRC)-i386
7+
AMD64 = $(SRC)-amd64
8+
9+
all: $(I386) $(AMD64)
10+
11+
$(I386): $(I386).s
12+
$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
13+
14+
$(AMD64): $(AMD64).s
15+
$(CC) -m64 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
16+
17+
clean:
18+
rm -f $(I386) $(AMD64) *~
19+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.globl _start
2+
3+
.text
4+
_start:
5+
movq $0xdeadbeef, %rax
6+
pushq %rax
7+
movq %rsp, %rcx
8+
movq (%rcx), %mm0
9+
paddb (%rcx), %mm0
10+
movq %mm0, (%rcx)
11+
fwait
12+
mov $0x0, %rbx
13+
mov $0x1, %rax
14+
int $0x80
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.globl _start
2+
3+
.text
4+
_start:
5+
pushl $0xdeadbeef
6+
movl %esp, %ecx
7+
movq (%ecx), %mm0
8+
paddb (%ecx), %mm0
9+
movq %mm0, (%ecx)
10+
fwait
11+
mov $0x0, %ebx
12+
mov $0x1, %eax
13+
int $0x80
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
CFLAGS = -Wall -Wextra -std=c99 -g -nostdlib
2+
CPPFLAGS =
3+
LDFLAGS =
4+
5+
all: instruction_overlapping-i386
6+
7+
%: %.s
8+
$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
9+
10+
%.o: %.s
11+
$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(LDFLAGS)
12+
13+
clean:
14+
rm -f instruction_overlapping-i386 *~
15+

0 commit comments

Comments
 (0)