mirror of
https://github.com/lukaszraczylo/go-obfuscation.git
synced 2026-10-15 05:58:22 +00:00
.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
//go:build linux
|
||||
|
||||
package pclntab
|
||||
|
||||
import (
|
||||
"debug/elf"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func readPclntabSection(binaryPath string) ([]byte, error) {
|
||||
f, err := elf.Open(binaryPath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("pclntab: failed to open ELF: %w", err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
sectionNames := []string{
|
||||
".gopclntab",
|
||||
"runtime.pclntab",
|
||||
"runtime.pclntab_v1",
|
||||
}
|
||||
|
||||
for _, name := range sectionNames {
|
||||
section := f.Section(name)
|
||||
if section != nil {
|
||||
data, err := section.Data()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("pclntab: failed to read section %s: %w", name, err)
|
||||
}
|
||||
buf := make([]byte, len(data))
|
||||
copy(buf, data)
|
||||
return buf, nil
|
||||
}
|
||||
}
|
||||
|
||||
for _, section := range f.Sections {
|
||||
data, err := section.Data()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if len(data) >= 8 {
|
||||
for _, magic := range pclntabMagics {
|
||||
if len(data) >= len(magic) && bytesEqual(data[:len(magic)], magic) {
|
||||
buf := make([]byte, len(data))
|
||||
copy(buf, data)
|
||||
return buf, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func WriteCorruptedPclntab(binaryPath string, corrupted []byte, outputPath string) error {
|
||||
return fmt.Errorf("pclntab: offline ELF patching not yet implemented; use runtime corruption instead")
|
||||
}
|
||||
Reference in New Issue
Block a user