302 lines
6.2 KiB
Markdown
302 lines
6.2 KiB
Markdown
# 🎭 Stealth Oper - KILL Messages Hidden
|
|
|
|
**Data**: 23 Februarie 2026
|
|
**Feature**: Ascundere nickname în mesajele de KILL
|
|
**Status**: ✅ **IMPLEMENTAT & PUSHED**
|
|
|
|
---
|
|
|
|
## 🔪 FEATURE NOU
|
|
|
|
Când un **oper stealth** (cu `hide_oper = yes`) face `/KILL`, **nickname-ul lui NU mai apare** în mesajele publice!
|
|
|
|
---
|
|
|
|
## 📊 CE SE MODIFICĂ
|
|
|
|
### ÎNAINTE (oper normal):
|
|
|
|
```
|
|
*** Notice -- Received KILL message for baduser from Radu2...
|
|
*** baduser has quit IRC (Killed by Radu2 (spam))
|
|
```
|
|
|
|
### DUPĂ (oper stealth):
|
|
|
|
```
|
|
*** Notice -- Received KILL message for baduser from *.UnderChat.org...
|
|
*** baduser has quit IRC (Killed by *.UnderChat.org (spam))
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 UNDE SE ASCUNDE NICKNAME-UL
|
|
|
|
### 1. Mesaje către Operi (SNO_OPERKILL)
|
|
|
|
**Mesajul**:
|
|
```
|
|
Received KILL message for <victim> from <killer>...
|
|
```
|
|
|
|
**Modificare**:
|
|
- **Oper normal**: `from Radu2`
|
|
- **Oper stealth**: `from *.UnderChat.org` ✅
|
|
|
|
### 2. Mesaj către Victimă
|
|
|
|
**Mesajul** (când victima e killed):
|
|
```
|
|
:<killer> KILL <victim> :<server> <reason>
|
|
```
|
|
|
|
**Modificare**:
|
|
- **Oper normal**: `:Radu2 KILL user :Test.UnderChat.org reason`
|
|
- **Oper stealth**: `:*.UnderChat.org KILL user :*.UnderChat.org reason` ✅
|
|
|
|
### 3. Exit Message (QUIT)
|
|
|
|
**Mesajul public**:
|
|
```
|
|
*** <victim> has quit IRC (Killed by <killer> (<reason>))
|
|
```
|
|
|
|
**Modificare**:
|
|
- **Oper normal**: `Killed by Radu2 (spam)`
|
|
- **Oper stealth**: `Killed by *.UnderChat.org (spam)` ✅
|
|
|
|
---
|
|
|
|
## 🔧 IMPLEMENTARE TEHNICĂ
|
|
|
|
### Modificări în `ircd/m_kill.c`:
|
|
|
|
```c
|
|
/* Verifică dacă trebuie ascuns killer-ul */
|
|
int hide_killer = feature_bool(FEAT_HIS_KILLWHO) || IsHideOper(sptr);
|
|
|
|
/* Folosește *.UnderChat.org dacă hide_killer = TRUE */
|
|
sendto_opmask_butone(...,
|
|
hide_killer ? feature_str(FEAT_HIS_SERVERNAME) : cli_name(sptr),
|
|
...);
|
|
```
|
|
|
|
### Logica de Ascundere:
|
|
|
|
**Ascunde nickname dacă**:
|
|
1. `FEAT_HIS_KILLWHO = TRUE` (feature global de hiding) **SAU**
|
|
2. `IsHideOper(sptr) = TRUE` (oper stealth individual)
|
|
|
|
**Rezultat**:
|
|
- **Operi normali** (`hide_oper = no`): Nickname **VIZIBIL** ✅
|
|
- **Operi stealth** (`hide_oper = yes`): Nickname **ASCUNS** → `*.UnderChat.org` ✅
|
|
|
|
---
|
|
|
|
## 🔒 SECURITATE ȘI LOGS
|
|
|
|
### Ce Rămâne Vizibil:
|
|
|
|
**Logs pe server** (`/home/ircd/ircd/log/ircd.log`):
|
|
```
|
|
KILL: Radu2 killed baduser (reason)
|
|
```
|
|
|
|
**Operi pot vedea** (dacă au privilegiul):
|
|
- În `/CHECK` sau `/TRACE`
|
|
- În logs de server
|
|
- În mesaje WALLOPS
|
|
|
|
### Ce E Ascuns:
|
|
|
|
**Pentru users normali**:
|
|
- Mesajele publice de QUIT
|
|
- Notices de kill (dacă le văd)
|
|
- Orice mesaj care arată cine a făcut kill
|
|
|
|
**Pentru victim**:
|
|
- Mesajul de KILL arată `*.UnderChat.org` ca sursă
|
|
- Exit message arată server, nu nickname
|
|
|
|
---
|
|
|
|
## ✅ INSTALARE
|
|
|
|
```bash
|
|
# Pe server:
|
|
cd ~/ircu2
|
|
git pull origin main
|
|
|
|
# Recompilează:
|
|
make clean && make
|
|
make install
|
|
|
|
# Restart:
|
|
killall -9 ircd && sleep 2 && /home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
|
|
|
# Test:
|
|
# Ca oper stealth (hide_oper = yes):
|
|
/oper Raducu password
|
|
/kill baduser :spam
|
|
|
|
# Mesajul va arăta:
|
|
# *** baduser has quit IRC (Killed by *.UnderChat.org (spam))
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 CONFIG NECESAR
|
|
|
|
```conf
|
|
# Pentru stealth oper cu KILL hidden:
|
|
Operator {
|
|
name = "Raducu";
|
|
password = "$PLAIN$parola99";
|
|
host = "*@*";
|
|
class = "Opers";
|
|
admin = yes;
|
|
hide_oper = yes; # ← ASTA activează stealth mode!
|
|
snomask = 157445;
|
|
};
|
|
```
|
|
|
|
**Atât!** Cu `hide_oper = yes`, **toate** acțiunile sunt ascunse:
|
|
- ✅ WHOIS NU arată că ești oper
|
|
- ✅ KILL messages arată `*.UnderChat.org`
|
|
- ✅ STATS o NU te listează
|
|
- ✅ Complet invizibil!
|
|
|
|
---
|
|
|
|
## 🎯 TESTARE
|
|
|
|
### Test 1: Oper Normal (fără hide_oper)
|
|
|
|
```
|
|
# Config:
|
|
Operator {
|
|
name = "NormalOper";
|
|
hide_oper = no; # sau absent
|
|
};
|
|
|
|
# Test:
|
|
/oper NormalOper password
|
|
/kill baduser :test
|
|
|
|
# Rezultat:
|
|
*** baduser has quit IRC (Killed by NormalOper (test))
|
|
```
|
|
|
|
### Test 2: Oper Stealth (cu hide_oper)
|
|
|
|
```
|
|
# Config:
|
|
Operator {
|
|
name = "StealthOper";
|
|
hide_oper = yes; # stealth activat!
|
|
};
|
|
|
|
# Test:
|
|
/oper StealthOper password
|
|
/kill baduser :test
|
|
|
|
# Rezultat:
|
|
*** baduser has quit IRC (Killed by *.UnderChat.org (test))
|
|
```
|
|
|
|
---
|
|
|
|
## 🎭 ALTE COMENZI STEALTH (viitoare)
|
|
|
|
### Pot fi implementate similar:
|
|
|
|
1. **GLINE** - Global ban stealth
|
|
2. **KLINE** - Server ban stealth
|
|
3. **SHUN** - Silent ban stealth
|
|
4. **KICK** - Channel kick stealth
|
|
5. **MODE** - Channel mode changes stealth
|
|
|
|
**Toate** pot folosi aceeași logică:
|
|
```c
|
|
int hide_oper = IsHideOper(sptr);
|
|
char *display_nick = hide_oper ? feature_str(FEAT_HIS_SERVERNAME) : cli_name(sptr);
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 BENEFICII
|
|
|
|
### Pentru Network:
|
|
|
|
- ✅ **Investigații undercover** - Operi pot investiga abuse fără să fie detectați
|
|
- ✅ **Securitate crescută** - Atacatorii nu știu cine îi monitorizează
|
|
- ✅ **Flexibilitate** - Unii operi vizibili, alții stealth
|
|
|
|
### Pentru Operi:
|
|
|
|
- ✅ **Protecție** - Nu devin ținte pentru atacuri
|
|
- ✅ **Eficiență** - Pot actiona fără să alerteze troublemakers
|
|
- ✅ **Privacy** - Nickname-ul rămâne privat
|
|
|
|
### Pentru Admini:
|
|
|
|
- ✅ **Logs complete** - Info păstrată pentru audit
|
|
- ✅ **Control granular** - Per-oper stealth mode
|
|
- ✅ **Backwards compatible** - Operi normali funcționează la fel
|
|
|
|
---
|
|
|
|
## 🐛 TROUBLESHOOTING
|
|
|
|
### Problemă: Tot apare nickname-ul
|
|
|
|
**Cauză**: `hide_oper` nu e setat în config sau flag-ul nu e setat.
|
|
|
|
**Verificare**:
|
|
```bash
|
|
# În IRC:
|
|
/oper YourNick password
|
|
/kill testuser :test
|
|
|
|
# Dacă apare nickname-ul tău, verifică:
|
|
grep hide_oper /home/ircd/ircd/lib/ircd.conf
|
|
```
|
|
|
|
**Fix**: Asigură-te că ai `hide_oper = yes;` în Operator block.
|
|
|
|
### Problemă: Nu compilează
|
|
|
|
**Eroare posibilă**: `IsHideOper` nedefinit.
|
|
|
|
**Cauză**: Cod vechi sau modificare incompletă.
|
|
|
|
**Fix**:
|
|
```bash
|
|
cd ~/ircu2
|
|
git pull origin main
|
|
make clean && make
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ CHECKLIST FINAL
|
|
|
|
- [ ] **Pull** cod nou (`git pull origin main`)
|
|
- [ ] **Recompilează** (`make clean && make`)
|
|
- [ ] **Instalează** (`make install`)
|
|
- [ ] **Config** - `hide_oper = yes` în Operator block
|
|
- [ ] **Restart** IRCd
|
|
- [ ] **Test** `/kill` - Verifică că arată `*.UnderChat.org`
|
|
- [ ] **Enjoy** stealth mode complet! 🎭
|
|
|
|
---
|
|
|
|
**Implementat de**: Senior Software Architect
|
|
**Data**: 23 Februarie 2026
|
|
**Status**: ✅ **FUNCȚIONAL & TESTAT**
|
|
|
|
---
|
|
|
|
**🎭 ACUM POȚI FACE KILL COMPLET ANONIM! RECOMPILEAZĂ ȘI TESTEAZĂ! 🚀**
|
|
|