; trojan.msl v2.2 by teppuli
alias -l encodeCodes {
return $replace($1,$chr(3),?c-?,$chr(2),?b-?,$chr(31),?u-?)
}
alias -l decodeCodes {
return $replace($1,?c-?,$chr(3),?b-?,$chr(2),?u-?,$chr(31))
}
on *:join:#:{
if ($readini(trojanscan.ini,$chan,trojanscan) == ON) && ($me isop $chan) {
if (%netsplit) || ($nick == fishbot) || ($nick == catbot) || ($nick == snailbot) { halt }
var %x = $ini(trojanscan.ini,database,0)
while (%x) {
if ($ini(trojanscan.ini,database,%x) iswm $fulladdress) {
var %host = $address($nick,2)
inc %trojanid
inc %trojanid_chan_ [ $+ [ $chan ] ]
var %kskin = Trojan detected! Chan-ID: :id: Global-ID: :gid:
if ($decodeCodes($readini(trojanscan.ini,$chan,kickskin))) { var %kskin = $decodeCodes($v1) }
mode $chan +b %host
kick $chan $nick $replace(%kskin,:gid:,%trojanid,:id:,%trojanid_chan_ [ $+ [ %chan ] ])
timer 1 120 mode $chan -b %host
halt
}
dec %x
}
who $nick n%nat,465
set -u30 %trojanscan_ [ $+ [ $nick ] ] $chan
set -u6 %trojannickchange_ [ $+ [ $nick ] ] $chan
}
}
on *:nick:{
if (%trojannickchange_ [ $+ [ $nick ] ]) {
var %chan = %trojannickchange_ [ $+ [ $nick ] ]
var %host = $address($newnick,2)
inc %trojanid
inc %trojanid_chan_ [ $+ [ %chan ] ]
var %kskin = Trojan detected! Chan-ID: :id: Global-ID: :gid:
if ($decodeCodes($readini(trojanscan.ini,%chan,kickskin))) { var %kskin = $decodeCodes($v1) }
mode %chan +b %host
kick %chan $newnick $replace(%kskin,:gid:,%trojanid,:id:,%trojanid_chan_ [ $+ [ %chan ] ])
writeini trojanscan.ini database %host service
timer 1 120 mode %chan -b %host
}
}
on 1:quit:{
if ($1- == *.net *.split) && (!%netsplit) {
set -u600 %netsplit on
amsg Netsplit detected, TrojanScan disabled for 10 minutes
}
}
raw 319:*:{
if (!%trojanscanauth_ [ $+ [ $2 ] ]) {
var %z = $numtok($$3-,32)
if (%trojanscanauth_ [ $+ [ $2 ] ] == 0) {
if (%z == 1) {
var %host = $address($2,2)
inc %trojanid
var %chan = %trojanscan_ [ $+ [ $2 ] ]
inc %trojanid_chan_ [ $+ [ %chan ] ]
var %kskin = Trojan detected! Chan-ID: :id: Global-ID: :gid:
if ($decodeCodes($readini(trojanscan.ini,%chan,kickskin))) { var %kskin = $v1 }
mode %chan +b %host
kick %chan $2 $replace(%kskin,:gid:,%trojanid,:id:,%trojanid_chan_ [ $+ [ %chan ] ])
writeini trojanscan.ini database %host service
timer 1 120 mode %chan -b %host
}
}
}
}
raw 354:& 465 & *: { set -u30 %trojanscanauth_ [ $+ [ $3 ] ] $4 }
raw 315:*: { whois $2 }
on *:text:!trojan *:#:{
if ($wi($auth($nick)) == owner) {
if ($2 == version) {
[ [ %type ] ] %chanlevskin trojan.msl v2.2 by teppuli %chanlevskin
halt
}
if ($2 == add) {
if (!$3) { [ [ %type ] ] %chanlevskin Usage: $1-2 <host/nick> %chanlevskin | halt }
writeini trojanscan.ini database $iif($3 ison $chan,$address($3,2),$3) $nick
[ [ %type ] ] %chanlevskin Done. $3 ( $+ $address($3,2) $+ ) added to database. %chanlevskin
var %host = $address($3,2)
inc %trojanid
inc %trojanid_chan_ [ $+ [ $chan ] ]
var %kskin = Trojan detected! Chan-ID: :id: Global-ID: :gid:
if ($decodeCodes($readini(trojanscan.ini,$chan,kickskin))) { var %kskin = $decodeCodes($v1) }
kick $chan $3 $replace(%kskin,:gid:,%trojanid,:id:,%trojanid_chan_ [ $+ [ %chan ] ])
mode $chan +b %host
timer 1 120 mode %chan -b $host
halt
}
if ($2 == del) {
if (!$3) { [ [ %type ] ] %chanlevskin Usage: $1-2 <host> %chanlevskin | halt }
remini trojanscan.ini database $3
var %i = 1
while (%i <= $ibl($chan,0)) {
if ($3 iswm $ibl($chan,%i)) { mode $chan -b $ibl($chan,%i) }
inc %i
}
[ [ %type ] ] %chanlevskin Done. %chanlevskin Entry removed. %chanlevskin
halt
}
if ($2 == list) {
[ [ %type ] ] %chanlevskin Trojan list (showing only 10 entries. Total entries: $ini(trojanscan.ini,database,0) $+ ): %chanlevskin
var %i = $ini(trojanscan.ini,database,0)
var %d = 0
while (%i) {
inc %d
if (%d == 11) { break }
[ [ %type ] ] %chanlevskin Hostname: $ini(trojanscan.ini,database,%i) %chanlevskin Added by: $iif($readini(trojanscan.ini,database,$ini(trojanscan.ini,database,%i)) != service,$v1,Bot ( $+ $me $+ )) %chanlevskin
dec %i
}
[ [ %type ] ] %chanlevskin End of list %chanlevskin
halt
}
if ($2 == info) {
if (!$3) { [ [ %type ] ] %chanlevskin Usage: $1-2 <hostname> %chanlevskin | halt }
[ [ %type ] ] %chanlevskin Trojan ( $+ $3 $+ ) $iif($ini(trojanscan.ini,database,$3),is,is not) in database. %chanlevskin
halt
}
if ($2 == on) {
writeini trojanscan.ini $chan trojanscan ON | [ [ %type ] ] TrojanScan › ON ‹ | halt
}
if ($2 == off) {
writeini trojanscan.ini $chan trojanscan OFF | [ [ %type ] ] TrojanScan › OFF ‹ | halt
}
if ($2 == status) {
[ [ %type ] ] %chanlevskin Trojanscan status on $chan $+ : $iif($readini(trojanscan.ini,$chan,trojanscan),$v1,OFF) %chanlevskin | halt
}
if ($2 == kickid) {
[ [ %type ] ] Trojan-KickId › $iif(%trojanid_chan_ [ $+ [ $chan ] ],$v1,0) ‹ | halt
}
if ($2 == kickskin) {
if (!$3) || ($3 != set) {
[ [ %type ] ] %chanlevskin Current kickskin for $chan $+ : $iif($decodeCodes($readini(trojanscan.ini,$chan,kickskin)),$decodeCodes($readini(trojanscan.ini,$chan,kickskin)),Not set) %chanlevskin
[ [ %type ] ] %chanlevskin Set new kickskin with $1-2 set <kickskin> %chanlevskin
[ [ %type ] ] %chanlevskin NOTE: You can use following variables: :id: :gid: %chanlevskin
halt
} else {
if (!$4) { [ [ %type ] ] %chanlevskin Set new kickskin with $1-2 set <kickskin> %chanlevskin | .notice $nick %chanlevskin NOTE: You can use following variables: :id: :gid: %chanlevskin | halt }
writeini trojanscan.ini $chan kickskin $encodeCodes($4-)
[ [ %type ] ] %chanlevskin Done. %chanlevskin New kickskin set for $chan $+ . %chanlevskin
halt
}
}
[ [ %type ] ] %chanlevskin Usage: $1 version,on,off,status,kickid,kickskin,add,del,list,info %chanlevskin
}
}
on *:text:!trojan:#:{
if ($wi($auth($nick)) == owner) {
[ [ %type ] ] %chanlevskin Usage: $1 version,on,off,status,kickid,kickskin,add,del,list,info %chanlevskin
}
}