Initial Commit

This commit is contained in:
dtookey 2022-07-18 17:00:52 -04:00
commit 12afb64c2a
3 changed files with 88 additions and 0 deletions

4
entry.go Normal file
View File

@ -0,0 +1,4 @@
package main
func main() {
}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module Wordifier
go 1.18

81
word/macroeditor.go Normal file
View File

@ -0,0 +1,81 @@
package word
import (
zip2 "archive/zip"
"bytes"
"io"
"io/ioutil"
"os"
)
type (
MacroInjectTarget struct {
Name string
Marker []byte
Replacement []byte
}
)
func NewMacroInjectTarget(name string, marker []byte, replacement []byte) MacroInjectTarget {
if len(replacement) != len(marker) {
panic("Payload and target are not the same size. Make sure replacement is the same length as marker")
}
return MacroInjectTarget{name, marker, replacement}
}
func CopyZipWithReplacements(src string, dest io.Writer, replacements []MacroInjectTarget) {
inf, err := os.OpenFile(src, os.O_RDONLY, 0755)
if err != nil {
panic(err)
}
defer inf.Close()
infInfo, err := inf.Stat()
if err != nil {
panic(err)
}
zReader, err := zip2.NewReader(inf, infInfo.Size())
if err != nil {
panic(err)
}
zWriter := zip2.NewWriter(dest)
defer zWriter.Flush()
defer zWriter.Close()
for _, file := range zReader.File {
modified := false
for _, rule := range replacements {
if file.Name == rule.Name {
modified = true
container, err := zWriter.Create(file.Name)
if err != nil {
panic(err)
}
alternateContent := modifyEntry(file, rule)
_, err = container.Write(*alternateContent)
if err != nil {
panic(err)
}
}
}
if !modified {
zWriter.Copy(file)
}
}
}
func modifyEntry(f *zip2.File, injectionTarget MacroInjectTarget) *[]byte {
entry, err := f.Open()
if err != nil {
panic(err)
}
content, err := ioutil.ReadAll(entry)
if err != nil {
panic(err)
}
idx := bytes.Index(content, injectionTarget.Marker)
copy(content[idx:idx+len(injectionTarget.Marker)], injectionTarget.Replacement[0:])
return &content
}