Compare commits

...
Author SHA1 Message Date
moloch-- b7c336cb76 Rename implant/sliver imports 2026-01-04 10:17:56 -08:00
3 changed files with 82 additions and 3 deletions

No files matched your search

+13 -2
View File
@@ -533,12 +533,23 @@ func renderSliverGoCode(name string, build *clientpb.ImplantBuild, config *clien
goPackage = config.GoPackage
}
}
result, err := goname.RenameModule(sliverPkgDir, goPackage)
modResult, err := goname.RenameModule(sliverPkgDir, goPackage)
if err != nil {
buildLog.Errorf("Failed to rename module: %s", err)
return "", err
}
buildLog.Infof("Renamed module: %s -> %s (go.mod updated: %v)", result.OldModule, result.NewModule, result.GoModUpdated)
buildLog.Infof("Renamed module: %s -> %s (go.mod updated: %v)", modResult.OldModule, modResult.NewModule, modResult.GoModUpdated)
// Rename Import Paths
buildLog.Infof("Renaming import paths ...")
oldImportPrefix := path.Join(modResult.NewModule, "implant", "sliver")
newImportPrefix := path.Join(modResult.NewModule, "runc", "cgroup")
importResult, err := goname.RenameImport(sliverPkgDir, oldImportPrefix, newImportPrefix)
if err != nil {
buildLog.Errorf("Failed to rename imports: %s", err)
return "", err
}
buildLog.Infof("Renamed imports (%d files updated)", importResult.FilesUpdated)
}
return sliverPkgDir, nil
+64
View File
@@ -2,7 +2,10 @@ package goname
import (
"errors"
"fmt"
"io/fs"
"os"
"path"
"path/filepath"
"strings"
)
@@ -37,6 +40,9 @@ func RenameImport(dir, oldImportPrefix, newImportPrefix string) (*ImportResult,
if result.ImportsUpdated == 0 {
return result, errors.New("no imports updated (check old/new import prefixes)")
}
if err := renameImportDir(dir, oldImportPrefix, newImportPrefix); err != nil {
return result, err
}
return result, nil
}
@@ -68,3 +74,61 @@ func rewriteImportPrefixes(dir, oldImportPrefix, newImportPrefix string, result
return nil
})
}
func renameImportDir(dir, oldImportPrefix, newImportPrefix string) error {
oldParts := splitImportPrefix(oldImportPrefix)
newParts := splitImportPrefix(newImportPrefix)
if len(oldParts) == 0 || len(newParts) == 0 {
return nil
}
for i := 0; i < len(oldParts); i++ {
suffixParts := oldParts[i:]
oldDir := filepath.Join(append([]string{dir}, suffixParts...)...)
info, err := os.Stat(oldDir)
if err != nil {
if os.IsNotExist(err) {
continue
}
return err
}
if !info.IsDir() {
continue
}
if len(newParts) < len(suffixParts) {
return fmt.Errorf("new import prefix has fewer path segments than old import prefix")
}
newSuffixParts := newParts[len(newParts)-len(suffixParts):]
newDir := filepath.Join(append([]string{dir}, newSuffixParts...)...)
if oldDir == newDir {
return nil
}
if _, err := os.Stat(newDir); err == nil {
return fmt.Errorf("rename import dir: target exists: %s", newDir)
} else if !os.IsNotExist(err) {
return err
}
if err := os.MkdirAll(filepath.Dir(newDir), 0700); err != nil {
return err
}
return os.Rename(oldDir, newDir)
}
return nil
}
func splitImportPrefix(prefix string) []string {
cleaned := path.Clean(strings.TrimSpace(prefix))
if cleaned == "." || cleaned == "/" {
return nil
}
cleaned = strings.TrimPrefix(cleaned, "/")
if cleaned == "" {
return nil
}
return strings.Split(cleaned, "/")
}
+5 -1
View File
@@ -42,11 +42,15 @@ func TestRenameImportBasic(t *testing.T) {
t.Fatalf("main.go still references old prefix")
}
barImports := importPaths(t, filepath.Join(tmp, "foo", "bar", "bar.go"))
barImports := importPaths(t, filepath.Join(tmp, "acme", "corp", "bar.go"))
if !barImports["acme/corp/baz"] {
t.Fatalf("bar.go import not updated")
}
if _, err := os.Stat(filepath.Join(tmp, "foo", "bar")); !os.IsNotExist(err) {
t.Fatalf("expected foo/bar to be renamed")
}
vendorImports := importPaths(t, filepath.Join(tmp, "vendor", "foo", "bar", "vendor.go"))
if !vendorImports["foo/bar/baz"] {
t.Fatalf("vendor import should remain unchanged")