MCPcopy Create free account
hub / github.com/codeyourweb/irma / main

Function main

main.go:36–204  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

34var wg sync.WaitGroup
35
36func main() {
37 var err error
38
39 // create mutex to avoid program running multiple instances
40 if _, err = CreateMutex("irmaBinMutex"); err != nil {
41 logMessage(LOG_ERROR, "Only one instance or irma can be launched")
42 os.Exit(1)
43 }
44
45 // clean and exit on CTRL+C
46 c := make(chan os.Signal, 1)
47 signal.Notify(c, os.Interrupt)
48 go func() {
49 for sig := range c {
50 fmt.Printf("[INFO] captured %v, stopping irma and exiting..", sig)
51 exit <- true
52 }
53 }()
54
55 // parse arguments
56 parser := argparse.NewParser("irma", "Incident Response - Minimal Analysis")
57 pConfigurationFile := parser.String("c", "configuration", &argparse.Options{Required: true, Default: "configuration.yaml", Help: "yaml configuration file"})
58 pBuilder := parser.String("b", "builder", &argparse.Options{Required: false, Default: "", Help: "create a standalone launcher executable with packed rules and configuration"})
59 pLog := parser.String("o", "outfile", &argparse.Options{Required: false, Default: "", Help: "save log informations inside the specified file path"})
60
61 err = parser.Parse(os.Args)
62 if err != nil {
63 fmt.Print(parser.Usage(err))
64 }
65
66 // read configuration file
67 config.getConfiguration(*pConfigurationFile)
68 if len(*pBuilder) > 0 {
69 BuildSFX(config.Yara.Path, config.Yara.Rulesrc4key, config, *pBuilder)
70 os.Exit(0)
71 }
72
73 maxFilesizeScan = config.Advancedparameters.MaxScanFilesize
74 cleanIfFileSizeGreaterThan = config.Advancedparameters.CleanMemoryIfFileGreaterThanSize
75 defaultScannedFileExtensions = config.Advancedparameters.Extensions
76 quarantineKey = config.Response.QuarantineRC4Key
77
78 // log inside a file
79 if len(*pLog) > 0 {
80 f, err := os.OpenFile(*pLog, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
81 if err != nil {
82 log.Fatal(err)
83 }
84
85 out := os.Stdout
86 mw := io.MultiWriter(out, f)
87 r, w, _ := os.Pipe()
88
89 os.Stdout = w
90 os.Stderr = w
91
92 go func() {
93 _, _ = io.Copy(mw, r)

Callers

nothing calls this directly

Calls 15

CreateMutexFunction · 0.85
logMessageFunction · 0.85
BuildSFXFunction · 0.85
SpawnFakeProcessesFunction · 0.85
SearchForYaraFilesFunction · 0.85
LoadYaraRulesFunction · 0.85
CompileRulesFunction · 0.85
NetworkAnalysisRoutineFunction · 0.85
MemoryAnalysisRoutineFunction · 0.85
RegistryAnalysisRoutineFunction · 0.85
StartMenuAnalysisRoutineFunction · 0.85

Tested by

no test coverage detected