BINARY_NAME := vmkatz TARGET_DIR := target MUSL_TARGET := x86_64-unknown-linux-musl SHELL := bash .PHONY: default default: release .PHONY: release release: cargo build --release @cp $(TARGET_DIR)/release/$(BINARY_NAME) ./$(BINARY_NAME) @echo "[+] Built: ./$(BINARY_NAME) ($$(du -h ./$(BINARY_NAME) | cut -f1))" .PHONY: release-musl release-musl: RUSTUP_HOME=$(CURDIR)/.rustup cargo build --release --target $(MUSL_TARGET) @cp $(TARGET_DIR)/$(MUSL_TARGET)/release/$(BINARY_NAME) ./$(BINARY_NAME)-musl @echo "[+] Built: ./$(BINARY_NAME)-musl ($$(du -h ./$(BINARY_NAME)-musl | cut -f1))" .PHONY: release-minimal release-minimal: cargo build --release --no-default-features --features vmware @cp $(TARGET_DIR)/release/$(BINARY_NAME) ./$(BINARY_NAME)-minimal @echo "[+] Built: ./$(BINARY_NAME)-minimal ($$(du -h ./$(BINARY_NAME)-minimal | cut -f1))" .PHONY: debug debug: cargo build @echo "[+] Built: $(TARGET_DIR)/debug/$(BINARY_NAME)" .PHONY: check check: cargo check .PHONY: clippy clippy: cargo clippy -- -D warnings .PHONY: fmt fmt: cargo fmt .PHONY: fmt-check fmt-check: cargo fmt -- --check .PHONY: clean clean: cargo clean @rm -f ./$(BINARY_NAME) ./$(BINARY_NAME)-musl ./$(BINARY_NAME)-minimal .PHONY: install install: release @mkdir -p $(HOME)/.local/bin cp ./$(BINARY_NAME) $(HOME)/.local/bin/$(BINARY_NAME) @echo "[+] Installed: $(HOME)/.local/bin/$(BINARY_NAME)" .PHONY: ci ci: fmt-check clippy unit-test .PHONY: unit-test unit-test: cargo test .PHONY: test-lsass test-lsass: release ./$(BINARY_NAME) --format ntlm "/home/user/vmware/Windows 10 x64/Windows 10 x64-Snapshot1.vmsn" .PHONY: test-sam test-sam: release ./$(BINARY_NAME) --format ntlm "/home/user/vm/windows10-clean/windows10-clean.vdi" .PHONY: test-folder test-folder: release ./$(BINARY_NAME) "/home/user/vmware/Windows 10 x64/" .PHONY: test test: test-lsass test-sam test-folder .PHONY: regression regression: release ./scripts/esxi_test.sh --host esx2 .PHONY: regression-all regression-all: release ./scripts/esxi_test.sh --host all .PHONY: help help: @echo "vmkatz - VM memory forensics credential extractor" @echo "" @echo "Build targets:" @echo " make Build release binary (default)" @echo " make release Build optimized release binary → ./vmkatz" @echo " make release-musl Build static musl binary → ./vmkatz-musl" @echo " make release-minimal VMware-only minimal binary → ./vmkatz-minimal" @echo " make debug Build debug binary → target/debug/vmkatz" @echo " make install Install to ~/.local/bin/" @echo " make clean Remove build artifacts" @echo "" @echo "Quality:" @echo " make ci Run full CI pipeline (fmt + clippy + tests)" @echo " make check Run cargo check" @echo " make clippy Run clippy lints" @echo " make fmt Format code" @echo " make fmt-check Check formatting" @echo " make unit-test Run unit tests" @echo "" @echo "Tests:" @echo " make test Run all integration tests" @echo " make test-lsass Test LSASS extraction (VMware)" @echo " make test-sam Test SAM extraction (VBox VDI)" @echo " make test-folder Test folder discovery (VMware)" @echo " make regression Non-regression test vs pypykatz (esx2)" @echo " make regression-all Non-regression test vs pypykatz (all hosts)" @echo "" @echo "Release profile: strip=true, lto=true, codegen-units=1, panic=abort" @echo "Default features: vmware,vbox,qemu,hyperv,sam,ntds.dit,carve,dump" @echo "Override: cargo build --release --no-default-features --features vmware,sam"