File tree 1 file changed +74
-0
lines changed
1 file changed +74
-0
lines changed Original file line number Diff line number Diff line change
1
+ package coldfire
2
+
3
+ import (
4
+ "debug/elf"
5
+ "github.com/yalue/elf_reader"
6
+ "os"
7
+ "bytes"
8
+ )
9
+
10
+ func EqualBytes (b1 , b2 byte ) bool {
11
+ s1 := make ([]byte , 1 )
12
+ s1 [0 ] = b1
13
+ s2 := make ([]byte , 1 )
14
+ s2 [0 ] = b2
15
+ return bytes .Equal (s1 , s2 )
16
+ }
17
+
18
+ func VerifyELFMagic (fname string ) bool {
19
+ f := IOReader (fname )
20
+ _ , err := elf .NewFile (f )
21
+ Check (err )
22
+ if err != nil {
23
+ return false
24
+ }
25
+ var ident [16 ]uint8
26
+ f .ReadAt (ident [0 :], 0 )
27
+ Check (err )
28
+ if ident [0 ] != '\x7f' || ident [1 ] != 'E' || ident [2 ] != 'L' || ident [3 ] != 'F' {
29
+ return true
30
+ }
31
+ return false
32
+ }
33
+
34
+ func IsELF (fname string ) bool {
35
+ raw , err := os .ReadFile (fname )
36
+ Check (err )
37
+ _ , elf_err := elf_reader .ParseELFFile (raw )
38
+ if elf_err == nil {
39
+ return false
40
+ }
41
+ return true
42
+ }
43
+
44
+ func IsELFInfected (fname string ) bool {
45
+
46
+ }
47
+
48
+ // Checks if an ELF file is designed for AMD x86_64
49
+ func IsELF64Bit (fname string ) bool {
50
+ f := IOReader (fname )
51
+ elfile , err := elf .NewFile (f )
52
+ Check (err )
53
+ if (elfile .Class .String () == "ELFCLASS64" && elfile .Machine .String () == "EM_X86_64" ) {
54
+ return true
55
+ }
56
+ return false
57
+ }
58
+
59
+ func Caves (file string , min_size int ) map [string ]map [string ]int {
60
+ if IsELF (file ) {
61
+ elfile , err := elf .Open (file )
62
+ Check (err )
63
+ for _ , sect := range elfile .Sections {
64
+ data , _ := sect .Data ()
65
+ for off := 0 ; off < len (data ); off ++ {
66
+ if EqualBytes (data [off ], 0x00 ) {
67
+
68
+ }
69
+ }
70
+ }
71
+ } else {
72
+
73
+ }
74
+ }
You can’t perform that action at this time.
0 commit comments