From 81bc9dd686c73ef2b5a46616d2c732f9fb84b62a Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Sat, 5 Nov 2011 14:27:56 -0600 Subject: [PATCH 01/11] put tanks back in --- packages/tanks/service/tanksd/tanksd | 15 +- packages/tanks/tanks.mk | 2 + packages/tanks/tokens.txt | 1440 ++++++++++++++++++++++++++ 3 files changed, 1450 insertions(+), 7 deletions(-) create mode 100644 packages/tanks/tokens.txt diff --git a/packages/tanks/service/tanksd/tanksd b/packages/tanks/service/tanksd/tanksd index 8bef825..a540e37 100755 --- a/packages/tanks/service/tanksd/tanksd +++ b/packages/tanks/service/tanksd/tanksd @@ -3,6 +3,7 @@ d=/var/lib/ctf/tanks p=$d/players w=/var/www/tanks +log=$d/winners.log summary () { cat < EOF - # Get a token and add it to the redemption log - nc 10.0.0.2 1 -e /opt/ctfbase/bin/tokencli tanks ./category.key 3> $tfn - k=$(cat $tfn) winner.awk $rfn | while read winner; do hash=$(basename $winner) - echo "Round $next winner: $hash" + echo "Round $next winner: $hash" >> $log + nwinners=$(wc -l $log) + + # Read a token + k=$(sed -n ${nwinners}p /opt/tanks/tokens.txt) # XXX: pull this out into another daemon # XXX: this puts the token in /proc/self/cmdline diff --git a/packages/tanks/tanks.mk b/packages/tanks/tanks.mk index b530520..42c933b 100644 --- a/packages/tanks/tanks.mk +++ b/packages/tanks/tanks.mk @@ -21,6 +21,8 @@ tanks-install: tanks-build cp $(TANKS_BUILDDIR)/rank.awk $(TANKS_PKGDIR)/bin cp $(TANKS_BUILDDIR)/winner.awk $(TANKS_PKGDIR)/bin + cp packages/tanks/tokens.txt $(TANKS_PKGDIR)/ + $(call COPYTREE, packages/tanks/html, $(TANKS_PKGDIR)/html) cp packages/mcp/www/ctf.css $(TANKS_PKGDIR)/html/style.css cp $(TANKS_BUILDDIR)/nav.html.inc $(TANKS_PKGDIR)/html diff --git a/packages/tanks/tokens.txt b/packages/tanks/tokens.txt new file mode 100644 index 0000000..581272f --- /dev/null +++ b/packages/tanks/tokens.txt @@ -0,0 +1,1440 @@ +tanks:xogak-lihef-vevax +tanks:xubod-momuc-lynax +tanks:xuheh-kysig-narox +tanks:xefal-hynyl-symyx +tanks:xutin-ganib-nydox +tanks:xihep-gytud-kutox +tanks:xeged-lebys-totyx +tanks:xevog-bivuf-bydax +tanks:xefep-votok-kunux +tanks:xibol-rymav-zypix +tanks:xebat-rivif-lygux +tanks:xivek-cezyr-lesox +tanks:xobim-gymiv-henex +tanks:xefib-hebad-tipex +tanks:xezef-tikul-nuzax +tanks:xigom-rikav-rinux +tanks:xedik-rydig-lebyx +tanks:xibos-nydah-lolax +tanks:xukoc-libuz-nicox +tanks:xurab-pimok-sypix +tanks:xevih-guvur-kivax +tanks:xiped-pirug-gihox +tanks:xulaz-getuh-mekax +tanks:xovev-fycil-matix +tanks:xisof-cosel-tytyx +tanks:xehiz-tumuh-potox +tanks:xoroc-hugyf-pukix +tanks:xicef-kodoz-pasex +tanks:xikiz-vekap-relex +tanks:xodom-pabod-nimyx +tanks:xuvic-dasum-vamix +tanks:xukit-zumyh-derex +tanks:xosag-kever-tybux +tanks:xevob-purar-sarix +tanks:xufer-rocis-himix +tanks:xegit-vacup-masax +tanks:xoref-mamym-gezox +tanks:xipac-dizic-mitux +tanks:xovat-belyp-gomax +tanks:xukaz-cahah-lotyx +tanks:xolab-sepef-kavux +tanks:xufov-nusac-zerax +tanks:xigom-kovig-dylux +tanks:xitac-gasoh-tyzax +tanks:xifag-lufim-hyzex +tanks:xeroz-piced-mefix +tanks:xopem-buzod-luhix +tanks:xuzar-susyg-ledox +tanks:xetil-zobik-bufax +tanks:xuvel-kohip-damix +tanks:xihet-cycyk-zamax +tanks:xireb-hedom-hutex +tanks:xoceh-vezus-vibax +tanks:xurip-budyk-hebex +tanks:xoter-biciz-bymax +tanks:xocok-pezyp-bigax +tanks:xesif-sifah-vudox +tanks:xoten-gavid-sylix +tanks:xutoh-mumuf-zydix +tanks:xehid-dinov-dusyx +tanks:xogal-tykoz-rahix +tanks:xokot-fyhoh-lugux +tanks:xesis-bufef-gadix +tanks:xotid-merug-zorax +tanks:xegil-cynuc-fumyx +tanks:xesod-pocuc-vuzex +tanks:xigad-tudid-mifax +tanks:ximav-pedul-lihyx +tanks:xedoh-dycob-tudux +tanks:xifol-cenyn-tacix +tanks:xideb-nybat-dycix +tanks:xumah-mekes-lebyx +tanks:xofam-gitar-vebyx +tanks:xekas-dipiz-tacyx +tanks:xobol-firyn-rahux +tanks:xirib-kukyd-turyx +tanks:xigoc-zyhel-pocex +tanks:xesoz-tyfiv-labux +tanks:xilen-bilid-hunax +tanks:xekaz-rylam-gidex +tanks:xeniz-tobyp-vacix +tanks:xisad-byrek-digex +tanks:xesog-migek-mipix +tanks:xunan-puven-rilyx +tanks:xudev-tymas-titox +tanks:xicot-vydog-dysex +tanks:xemif-mevuh-vapox +tanks:xesov-sysos-ryfux +tanks:xozad-zedad-facex +tanks:xehav-notus-hamux +tanks:xesoh-cyruf-simix +tanks:xugim-kubyg-tazex +tanks:xuris-peris-romex +tanks:xerok-taped-letax +tanks:xevog-zipyb-kicyx +tanks:xehok-becuc-lucax +tanks:xukip-hyvog-safux +tanks:xudom-betuv-vokax +tanks:xutin-zikyg-simex +tanks:xenog-helor-zadix +tanks:xovag-tukoh-rekyx +tanks:xisap-facuk-latax +tanks:xesap-riduh-puvex +tanks:xuper-fovyk-suryx +tanks:xered-diryt-horux +tanks:xetel-himal-sapix +tanks:xobac-palyh-venox +tanks:xobik-byhal-gumux +tanks:xihek-cesoh-vemyx +tanks:xisen-motur-conux +tanks:xopem-hitaz-sokyx +tanks:xizag-nekih-sidox +tanks:xidem-tusir-pocix +tanks:xubap-tekuv-pikux +tanks:xihil-byveh-kesax +tanks:xobaf-gihos-huhix +tanks:xidab-topor-codax +tanks:xifod-cycoh-volux +tanks:xigob-dogov-dasyx +tanks:xevet-futir-katox +tanks:xiliv-mirid-zikox +tanks:xotab-dobib-kilix +tanks:xibif-syfuk-kynux +tanks:xitot-hekil-divix +tanks:xerog-bykac-bulax +tanks:xekav-dyves-bifux +tanks:xuzib-gagur-furex +tanks:xohos-ridom-ruvex +tanks:xuvet-kebyf-ranax +tanks:xedoc-pehin-vafox +tanks:xetes-capyd-cunux +tanks:xedoz-sysim-nidux +tanks:xihas-mofav-tatix +tanks:xopal-latis-balex +tanks:xehot-redur-tekix +tanks:xumol-vurek-lulex +tanks:ximit-taduc-lalex +tanks:xupil-feleh-kokix +tanks:xitos-potan-dosix +tanks:xibop-cesut-vytux +tanks:xelel-firab-mezex +tanks:xegop-bysor-megex +tanks:xupid-cumuv-rulax +tanks:xehic-sunul-dolex +tanks:xovic-kykin-nylix +tanks:ximod-kapuz-rohex +tanks:xobor-nyvuc-cikox +tanks:xinet-fenub-tylox +tanks:xoveb-daboc-fanyx +tanks:xicem-fozeb-fubux +tanks:ximar-daseh-hidyx +tanks:xubam-cidon-cadox +tanks:xulan-bofyt-zagex +tanks:xutad-kydab-ryryx +tanks:xepar-zific-dygix +tanks:xilak-cokel-hycox +tanks:xekiz-boran-tarex +tanks:xutem-vifef-rizux +tanks:xifad-fohyf-makux +tanks:xotec-vitin-besix +tanks:xipam-tetoc-kekyx +tanks:xiviv-valyn-zanox +tanks:xedig-zuben-sitex +tanks:xogok-pecal-padox +tanks:xomeh-fyhad-nudox +tanks:xemog-dacyr-gybax +tanks:xudov-bokim-cacyx +tanks:ximov-pyriz-hykex +tanks:xutan-tedyg-rekex +tanks:xonar-tysod-dipax +tanks:xugag-kedav-hygex +tanks:xemig-tizyr-ducax +tanks:xosak-kuzig-nuzox +tanks:xepeg-zidol-byzax +tanks:xogev-nelas-nevix +tanks:xesol-napir-romux +tanks:xonoh-koder-vifux +tanks:xidot-dubub-cocex +tanks:xoval-sufog-tytex +tanks:xulam-zupin-sudex +tanks:xisit-pugod-dufux +tanks:xonad-laloc-vapux +tanks:xemak-macik-zezux +tanks:xihog-fofef-dufyx +tanks:xinec-gasum-rukox +tanks:xisap-zused-pygex +tanks:xuloz-bitil-cirux +tanks:xohez-kunem-muhex +tanks:xivab-habur-befax +tanks:xitok-nimek-sasox +tanks:xulaz-vepys-romox +tanks:xumep-fucik-serox +tanks:xezot-nuzuk-fifyx +tanks:xezod-nesut-fufex +tanks:xupik-pumab-dypux +tanks:xuper-dorir-nucax +tanks:xubog-sifik-ludix +tanks:xubeh-hevig-romux +tanks:xomek-nonym-henix +tanks:xidig-dovop-tyhux +tanks:xidap-kotyl-gadox +tanks:xomip-putub-zutax +tanks:xecik-vufut-pycix +tanks:xuhov-gesuz-norox +tanks:xikil-dylep-fokyx +tanks:xinog-ledas-lidyx +tanks:xekiz-lynof-nehax +tanks:xobel-bilyf-bunax +tanks:xelif-vifuc-tynax +tanks:xinik-goteg-rikax +tanks:xefor-temun-mysix +tanks:xogim-bapov-mozax +tanks:xozig-himar-bomox +tanks:xiges-mysof-duhox +tanks:xicis-runyg-favix +tanks:xipez-sitof-vypox +tanks:xeloz-tocuv-dadax +tanks:xedoz-fezol-relyx +tanks:xeliz-fugad-kubix +tanks:xunac-piluc-sutux +tanks:xupaz-letim-tysex +tanks:xerah-fahoz-kahix +tanks:xocab-dunyb-kecax +tanks:xugig-cabak-kivox +tanks:xekeg-synak-zomox +tanks:xevam-hunuc-legax +tanks:xihep-rykyd-tasix +tanks:xohon-mybuv-cihex +tanks:xibol-celob-lybyx +tanks:xebif-kopat-rinyx +tanks:xosif-ponos-luvix +tanks:xudis-zifes-gepox +tanks:xiheh-dated-ganix +tanks:xegam-vibec-copix +tanks:xuhig-mohuk-devox +tanks:xuziv-tuhok-ganux +tanks:xecov-gaviv-rakux +tanks:xebog-bopak-gagex +tanks:xugaf-nalis-gopyx +tanks:xotap-fafar-vihox +tanks:xetam-ruvop-telex +tanks:xuteh-rypez-zodox +tanks:xemor-lemad-hodux +tanks:xibop-butub-licux +tanks:xipag-zyrob-hizex +tanks:xutit-sydit-lusex +tanks:xozal-bycah-sotyx +tanks:xozol-kyrom-lylix +tanks:xulah-dehus-horax +tanks:xihok-zifeh-vidox +tanks:xivif-bigub-dekux +tanks:xikeh-bozuk-tohix +tanks:xulop-busyf-bocix +tanks:xetom-sohyv-lolux +tanks:xesak-gysef-padax +tanks:xosat-kyden-bosox +tanks:xilef-tuker-hytox +tanks:xedes-hemob-zinax +tanks:xinav-tefer-serix +tanks:xizid-hafym-folax +tanks:xopec-gukoz-lucex +tanks:xifom-bygoc-hibax +tanks:xovof-kidid-tukex +tanks:xugel-hefit-ryhax +tanks:xocik-bofic-figux +tanks:xogaz-gukim-gudax +tanks:xirab-kybih-lykix +tanks:xivak-sylyh-cimax +tanks:xizon-ludoh-dymex +tanks:xukil-hyduc-cetyx +tanks:xetif-nidus-cyvyx +tanks:xeniz-kizuh-volyx +tanks:xodof-zaral-betyx +tanks:xigeg-gamar-tecux +tanks:xuges-dehim-guhax +tanks:xepac-vybaf-gekyx +tanks:xesiv-vydyp-zokyx +tanks:xelig-mivym-zizex +tanks:xugek-lilyf-hivix +tanks:xotin-docyl-locix +tanks:xigal-sadaf-ticux +tanks:xemes-ziset-sykux +tanks:xubes-hyhez-gizax +tanks:xuval-kamoc-celox +tanks:xokif-nenez-dafox +tanks:xuhel-mivan-ropax +tanks:xeheg-fysas-bemyx +tanks:xezip-dekaz-nenux +tanks:xepib-nolog-sarux +tanks:xetoh-mafip-hihix +tanks:xipik-vysyt-lidox +tanks:xugef-fumes-dysax +tanks:xunep-zofum-gopux +tanks:xupan-pupol-kehox +tanks:xiris-feveh-hinax +tanks:xibal-mazat-zemax +tanks:xelag-silut-bygox +tanks:xigof-zolon-nysix +tanks:xisab-gikog-tilax +tanks:xitos-zotiv-fabix +tanks:xisem-zufep-ligix +tanks:xogap-lepyc-monix +tanks:xitev-demor-sylax +tanks:xocen-mihuk-kydox +tanks:xinoc-limug-nubyx +tanks:xuvef-petid-mokux +tanks:xipir-kacag-tenyx +tanks:xemeh-nizih-pazix +tanks:xicip-fupos-lyfix +tanks:xoged-cyvih-satex +tanks:xenel-ficoc-zynex +tanks:xulov-lupeg-fulix +tanks:xefab-popas-rysox +tanks:xored-hemuf-gysyx +tanks:xugir-tufil-rebex +tanks:xuref-fynup-risex +tanks:xofit-docuk-remix +tanks:xecim-bipyl-pocax +tanks:xugih-zagyl-ladax +tanks:xegep-vahop-begox +tanks:xikac-ropok-cilox +tanks:xopoh-picid-binux +tanks:xetip-fanoz-sufox +tanks:xodep-rusyz-tusax +tanks:xutab-hozez-kisox +tanks:xugiz-besog-mukox +tanks:xilan-rasyd-gyfyx +tanks:xihik-bolan-supex +tanks:xusit-runus-muhox +tanks:xocig-nohur-humox +tanks:xikas-peler-cisex +tanks:xokar-cekaz-bybix +tanks:xesef-fuhem-mylyx +tanks:xoleb-zatel-rymyx +tanks:xunod-sybep-migax +tanks:xudik-hidos-suvux +tanks:xehel-zakun-vakix +tanks:xolak-bakor-pynax +tanks:xivot-kopih-bynax +tanks:xidif-gavim-savax +tanks:xucez-pukyv-kybyx +tanks:xivas-nipaf-lunux +tanks:xebeg-guzus-zikax +tanks:xotat-hokok-nuhax +tanks:xefaf-ramab-dyvux +tanks:xohog-bacok-ryzox +tanks:xogam-behun-kivux +tanks:xubih-zizaz-senax +tanks:ximoc-nagak-mumux +tanks:xetin-foreh-lygox +tanks:xopat-kuryz-sufix +tanks:xotah-nahug-vogix +tanks:xokor-cumus-rycax +tanks:xigak-hadyp-palux +tanks:xolac-cutig-nucux +tanks:xisad-memem-futux +tanks:xidal-gevim-rugux +tanks:xucor-bymuk-gadyx +tanks:xucez-titic-gelyx +tanks:xireb-vozus-tykox +tanks:xupob-tehol-pypux +tanks:xoloz-nigyv-hepex +tanks:xebor-gufyz-pycix +tanks:xubep-ticic-buryx +tanks:xezip-kasuf-tagax +tanks:xopor-puryc-gafox +tanks:xuheb-fakys-dykox +tanks:xocaz-vemeg-zurax +tanks:xopih-koror-bedux +tanks:xulid-pylyz-sicix +tanks:xikaf-lusam-futix +tanks:xidaf-fuzaf-nabox +tanks:xihiz-zaget-gedix +tanks:xigif-mezyz-fulax +tanks:xinav-dozyd-didux +tanks:xunim-cadum-hakux +tanks:xezav-dozeg-petux +tanks:xomic-rymys-pubux +tanks:xukep-nipat-hurux +tanks:xehed-guder-hopux +tanks:xoveh-pugoz-vysex +tanks:xozid-cibaf-tagyx +tanks:xogoh-livap-corix +tanks:xitom-cefal-vagux +tanks:xogof-cofas-lyzix +tanks:xisas-buhub-binox +tanks:xerez-kival-kizux +tanks:ximid-dakot-kihyx +tanks:xosim-lomys-fucax +tanks:xirat-gerib-tylyx +tanks:xudin-botor-rafox +tanks:xuboc-hipof-kifex +tanks:xusag-nomyr-dizax +tanks:xulas-zonyp-livox +tanks:xihig-pavyf-bigix +tanks:xifip-terid-zikex +tanks:xesaf-sevel-focex +tanks:xizas-nivin-zufyx +tanks:xogoz-hecal-momyx +tanks:xilol-sorek-vevyx +tanks:xokep-cicys-lymix +tanks:xurof-dahoz-bylax +tanks:xohan-caced-hemex +tanks:xudig-habub-petux +tanks:xofoz-gydud-zatux +tanks:xupir-ragih-nocox +tanks:xuzod-filan-zehex +tanks:xohoz-safob-helix +tanks:xotor-zehag-nimix +tanks:xugev-lohib-fisax +tanks:xefek-cohur-dopex +tanks:xubis-zamak-lybux +tanks:xitez-tyfiz-rebux +tanks:ximen-fafit-sytox +tanks:xuloz-getim-verax +tanks:xufav-horis-camux +tanks:xolal-zosod-cihux +tanks:xiraz-tisef-nyfox +tanks:xikap-dadav-larox +tanks:xulem-ludah-bypyx +tanks:xidal-pelor-dezax +tanks:xumak-sesug-dibax +tanks:xizaz-bugit-gepax +tanks:xibon-livod-mycix +tanks:xerol-devim-vodox +tanks:xusin-zakoz-rovax +tanks:xomod-nyhyh-mopix +tanks:xeled-fuben-pybox +tanks:xovam-nifer-zebyx +tanks:xuzag-kulip-pazux +tanks:xemoh-fydoc-sisax +tanks:xemof-povan-fyhux +tanks:xoles-fodih-syfix +tanks:xipen-dyhuh-mibex +tanks:xofah-rogiz-busex +tanks:xutav-gabec-rotix +tanks:xerop-laden-gehyx +tanks:xinil-samic-zosox +tanks:xupit-peluv-lodox +tanks:xizom-zabul-gibex +tanks:xidos-sifol-sacax +tanks:xukir-syren-zocix +tanks:xegof-gacuz-tedyx +tanks:xilav-vesap-pozux +tanks:xupez-zityb-buvux +tanks:xopef-dukut-rifax +tanks:xumen-ripir-bynex +tanks:xuzob-duzar-revex +tanks:xepif-kimen-mohix +tanks:ximop-vipel-tidix +tanks:xurom-karuf-tafix +tanks:xepek-gipeg-fapux +tanks:xenag-tuhuk-sevix +tanks:xonoc-sutos-sisax +tanks:xekad-movyb-zycex +tanks:xegan-laduk-kumix +tanks:xegit-zabet-vuzex +tanks:xosac-telog-zegox +tanks:xevig-paduk-fasux +tanks:xupic-bomeb-pucex +tanks:xupof-guvez-nirix +tanks:xinov-vapyv-mihex +tanks:xedeb-sunir-rirox +tanks:xobod-donaz-cenax +tanks:xuhab-hirab-mymax +tanks:xebov-gicov-hamox +tanks:xegen-ryhuk-neryx +tanks:xozor-fated-zigex +tanks:xisat-kupeg-dymyx +tanks:xeror-muvut-tomex +tanks:xikis-puhoc-mikox +tanks:xegof-fubis-kizox +tanks:xufos-mafig-fobux +tanks:xoniz-tycoh-pyfox +tanks:xumod-nofic-rilix +tanks:xokot-lazik-syhux +tanks:xoter-varyv-vohox +tanks:xihob-vevib-gilux +tanks:xopat-sulyc-pekex +tanks:xekac-vibyt-libyx +tanks:xucaf-pevyp-kahyx +tanks:xorap-myceg-nafax +tanks:xutip-vahyr-nurex +tanks:xinec-fygul-cunix +tanks:xemah-dinyg-rirax +tanks:xivav-sugil-pumix +tanks:xitih-cibyg-dalex +tanks:xekoh-seciz-zisyx +tanks:xusit-kefim-dypax +tanks:xocab-nukot-sokox +tanks:xupak-polek-carox +tanks:xuner-cugat-sisox +tanks:xovet-cuzyk-kedax +tanks:xidir-huhyh-dolex +tanks:xihed-cavom-muhex +tanks:xecim-tolet-dahix +tanks:xubam-pedev-valox +tanks:xofof-digor-zinox +tanks:xifah-gylih-fabox +tanks:xiver-loval-retix +tanks:xugic-pumuf-kufox +tanks:xinel-gedab-fypax +tanks:xecoz-zotan-mobex +tanks:xelah-nogin-cycix +tanks:xuboz-cypyr-zagax +tanks:xitan-dynen-cyfex +tanks:xetos-himev-kepux +tanks:xedec-pegak-camax +tanks:xulos-lozik-gisyx +tanks:xegic-dekag-sicox +tanks:xopek-nuhyd-hafex +tanks:xerol-ridyb-hesex +tanks:xerel-fazev-nydox +tanks:xibel-lugep-gypex +tanks:xuroc-camav-dazux +tanks:xizoh-gabub-bosix +tanks:xipaz-dypic-gepix +tanks:xegip-venuk-vosux +tanks:xelid-cydys-ralex +tanks:xekin-mucug-comux +tanks:ximon-vegyh-gefax +tanks:ximes-gyhyg-botix +tanks:ximeh-sohyn-pyfyx +tanks:xuzim-rokot-cuhix +tanks:xufir-vatuc-gezax +tanks:xugiz-cifad-nugax +tanks:xitoz-nedec-memux +tanks:xezap-vymoz-getix +tanks:xotek-lonif-vynex +tanks:xitok-filiz-nazix +tanks:xilom-rysit-lekux +tanks:xuvoh-nobuc-tarox +tanks:xefeg-gofug-vycix +tanks:xisas-mytic-socix +tanks:xecec-nekah-hozux +tanks:xugor-cotol-tosox +tanks:xuget-tyhyv-lulex +tanks:xogat-lezor-dabex +tanks:xigod-riloc-rugax +tanks:xegib-mepit-cenyx +tanks:xedeb-hoded-cosyx +tanks:xifac-zebul-ketax +tanks:ximen-fyrof-lamix +tanks:ximir-pifuc-bubix +tanks:xikov-lozuk-hitix +tanks:xipas-tygen-gomix +tanks:xofoc-cacot-luzux +tanks:xunol-pasin-bumyx +tanks:xupih-tupob-dodux +tanks:xuben-zuzim-tetax +tanks:xodov-tokyz-tabax +tanks:xugah-vebok-sopix +tanks:xegib-duvek-mefox +tanks:xudav-gugit-rihux +tanks:xivah-nygyf-desux +tanks:xonis-hicit-nozex +tanks:xelis-fibum-ritux +tanks:xutad-mibal-hifyx +tanks:xuman-vukeb-fafyx +tanks:xozag-vemyk-fukox +tanks:xirig-nolat-kivix +tanks:xulir-zabos-katox +tanks:xegoh-dabed-murex +tanks:xotic-lamoh-navyx +tanks:xoted-coheb-zilux +tanks:xerap-kilev-mubex +tanks:xitep-rifob-hibox +tanks:xuser-hegik-vulex +tanks:xibic-larul-limox +tanks:xibal-ranoc-nyzux +tanks:xomik-fizyp-depux +tanks:xoper-gazot-gycax +tanks:xeher-banaf-harex +tanks:xolig-zilef-lecox +tanks:xopav-gydal-perox +tanks:xoror-tamyv-honux +tanks:xonog-cuvov-dihyx +tanks:xobez-kisiz-cirex +tanks:xedem-bunus-calex +tanks:xepap-nycar-zarix +tanks:xures-bydom-luzix +tanks:xutaf-bucef-lutax +tanks:xohaz-pipev-pazox +tanks:xibin-gagoh-kelyx +tanks:xodad-setev-mirox +tanks:xeboz-rorag-hibex +tanks:xodot-humel-pozyx +tanks:xetaz-dyvah-morox +tanks:xumef-detug-kubox +tanks:xudav-sokys-bycex +tanks:xives-diked-kilux +tanks:xohek-tycih-tyfux +tanks:xerim-coduf-lanax +tanks:xecil-novyr-kicax +tanks:xugat-zypar-vycax +tanks:xizib-hudak-zopix +tanks:xivom-hucef-polex +tanks:xeped-vyzic-cyzyx +tanks:xunec-kygir-robux +tanks:xuhoh-bisuc-tudux +tanks:xepid-rabar-dehex +tanks:xomem-vyvis-hivax +tanks:xovop-fozeg-dydux +tanks:xives-gecom-gyvyx +tanks:xuzit-nygos-pelix +tanks:xudom-simub-karix +tanks:xicod-fokah-penax +tanks:xunir-rygip-suzex +tanks:xisis-fypyc-belux +tanks:xifeh-kicyg-higux +tanks:xulic-tubar-pupyx +tanks:xurac-bypyt-rakyx +tanks:xisen-cemal-fadax +tanks:xefan-vegiv-gilyx +tanks:xecot-nemuf-gahox +tanks:xucap-todeh-myrax +tanks:xutas-rypen-lohox +tanks:xedoz-mohuc-zalux +tanks:xizal-bogoh-canex +tanks:xehic-lizaf-zulyx +tanks:xizat-cobeg-pikax +tanks:xepod-dumyz-colex +tanks:xizap-tomiv-sidax +tanks:xovil-vitep-tokyx +tanks:xipir-bidud-hyhox +tanks:xifeg-fypyf-lihix +tanks:xifet-cagyv-hocux +tanks:xefac-rysez-cekux +tanks:xonof-delad-zikex +tanks:xobih-funep-tonax +tanks:xehev-cimug-pecyx +tanks:xusot-hevuz-parax +tanks:xotov-kahez-himox +tanks:xikev-lemiv-cumux +tanks:xuzag-fenov-kybix +tanks:xiniv-tuban-nosux +tanks:xigep-fysic-rotex +tanks:xiriz-feguv-hyfux +tanks:xidaf-pazub-rovax +tanks:xurag-mufeh-mazyx +tanks:xuvoh-bozid-vikex +tanks:xipib-maras-myhyx +tanks:xunak-zofur-hahyx +tanks:xuzot-gykug-kikix +tanks:xigal-sadit-dumex +tanks:xezet-pysop-sefex +tanks:xedaf-birek-gecix +tanks:xitag-fizos-bykax +tanks:xizan-hifob-tedix +tanks:xehik-nidos-gosux +tanks:xuhas-gehyv-tupux +tanks:xited-guvet-dutyx +tanks:xigif-cegos-fenex +tanks:xebim-masod-bokux +tanks:xezon-kytab-gynax +tanks:xucal-hiron-ruzex +tanks:xobor-dycun-dytox +tanks:xococ-dygis-rerix +tanks:xepof-dubap-nybix +tanks:xivak-vebor-homyx +tanks:xugok-nytas-bynax +tanks:xonop-zehuv-nonox +tanks:xohap-rohud-legyx +tanks:xecev-vitus-tyfyx +tanks:xudit-gihop-kanex +tanks:xigam-madic-deryx +tanks:xovar-cafin-bylax +tanks:xilet-dykid-kuvux +tanks:ximek-cunyk-rebex +tanks:xufas-niril-sycax +tanks:xelev-momig-natox +tanks:xulil-himaf-tunex +tanks:xokiz-gukal-nikex +tanks:xikab-basel-duvex +tanks:xoman-legyd-domex +tanks:xivaz-cibip-kehux +tanks:xicih-cagir-nyvux +tanks:xoses-vusir-bytex +tanks:xinod-bihit-gyfox +tanks:xopok-cyzez-hilax +tanks:xohec-zacef-kecex +tanks:xegon-getip-zenyx +tanks:xorop-larep-bymix +tanks:xuzat-vinir-nizux +tanks:xecet-ruken-tanox +tanks:xegon-bazib-sofyx +tanks:xesob-fipig-libux +tanks:xifad-tihul-hebox +tanks:xukin-rimys-kyvex +tanks:xeceg-tytiv-gutux +tanks:xuros-kafom-sopex +tanks:xevin-tahaf-musax +tanks:xokak-gebum-dakex +tanks:xuzib-cokaz-tadux +tanks:xodon-zamoc-sozux +tanks:ximoz-muzud-bisax +tanks:xifaz-kylyv-lehax +tanks:xepes-defyt-kadux +tanks:xidaf-letym-vokox +tanks:xutab-mibaz-hulax +tanks:xevif-rudir-sifyx +tanks:xinaz-cesor-lifox +tanks:xeren-tyden-cicax +tanks:xelap-mamop-pabix +tanks:xefor-tetef-cyrix +tanks:xihat-dazef-rynex +tanks:xular-vubot-padex +tanks:xobez-mycem-zylax +tanks:xilal-hukon-hovax +tanks:xivel-tegit-mafox +tanks:xumit-romen-pocyx +tanks:xutos-fudac-zusyx +tanks:xugof-basun-tinux +tanks:xinip-notud-ryvix +tanks:xuvin-sydod-livax +tanks:xinib-nivur-zidix +tanks:xobad-nebov-colyx +tanks:xuzib-domyk-nygix +tanks:xulef-huryz-fyrix +tanks:xizin-cisyh-gymex +tanks:xirom-cavum-lulix +tanks:xovig-mevoc-tomyx +tanks:xunor-ryheb-sosix +tanks:xenoz-ninut-hifux +tanks:xugag-hetav-modox +tanks:xolan-devub-luryx +tanks:xolon-hopel-lepix +tanks:xupon-mulah-dobax +tanks:xubam-pekoh-mutix +tanks:xesal-syteb-rygix +tanks:xeves-hozen-futex +tanks:xuceh-semeg-tagax +tanks:xitet-mudir-nylux +tanks:xofos-kegyz-fakax +tanks:xurap-gyvyz-depux +tanks:xopas-fupub-kogax +tanks:xonol-zygig-podux +tanks:xonic-pyker-fegox +tanks:xosop-rubav-kulux +tanks:xovaz-tukek-cybix +tanks:xecop-vezol-casox +tanks:xusan-teker-legax +tanks:xupez-mobuz-kupox +tanks:xison-rahug-zotax +tanks:xedib-guzur-mehax +tanks:xukah-pinap-kusux +tanks:xezan-mohom-camox +tanks:xucit-vyzyn-rocex +tanks:xonif-zakot-gukyx +tanks:xodep-duvof-besax +tanks:xohoz-panyc-tizux +tanks:xuvas-typef-vylex +tanks:xited-zicon-gofyx +tanks:xetah-refur-gusox +tanks:xigof-haceb-sakax +tanks:xupec-nirep-tadux +tanks:xuhis-ninuh-kovux +tanks:xukon-pesoc-sibax +tanks:xofoc-hegyf-zyhyx +tanks:xecin-padur-sunex +tanks:xidik-kopol-bymyx +tanks:xecis-tazon-nokox +tanks:xopah-zeryp-fytix +tanks:xelog-runev-nidex +tanks:xosir-bihov-nuhyx +tanks:xurat-nygim-kikyx +tanks:xizav-zyciv-ritux +tanks:xokel-sisif-zalyx +tanks:xefig-lemyd-vucex +tanks:xezec-finug-mecox +tanks:xivem-gofiv-gahyx +tanks:xezis-dybog-hilax +tanks:xebec-gizyc-dybyx +tanks:xicoz-burac-fynax +tanks:xuleb-lenik-syrux +tanks:xovid-suvas-vigex +tanks:xitan-cymar-kedax +tanks:xicov-cotun-rukax +tanks:xofov-kokyv-tekyx +tanks:xugof-numyl-vemax +tanks:xuvet-gabym-gikyx +tanks:xonon-gyfaf-hihax +tanks:xitaz-losat-fohax +tanks:xihol-hyzil-gusyx +tanks:xelaf-tysuh-mezex +tanks:xesiv-dyhes-merox +tanks:xiges-fyfot-pysox +tanks:xivok-zipev-hidux +tanks:xupez-zirav-bylux +tanks:xunop-lukur-vopyx +tanks:xivet-fumul-ryzax +tanks:xitod-solub-bykox +tanks:xuzip-zutok-dofyx +tanks:xeric-gikus-fikex +tanks:xisos-bisan-kunux +tanks:xuded-hagic-dofux +tanks:ximit-gubep-docax +tanks:xuvar-fihoz-cacux +tanks:xuhas-muhaf-gotux +tanks:xihep-huvun-pecox +tanks:xuroz-poruh-domex +tanks:xehis-budad-lupux +tanks:xozog-vegob-kopox +tanks:xekor-vodar-fadux +tanks:xuver-tigut-tekax +tanks:xuner-picet-litex +tanks:xigeg-hatyd-muhex +tanks:xepom-cynad-lulux +tanks:xelap-bofed-tecax +tanks:xubec-focih-fenox +tanks:xuhem-hypoz-zynux +tanks:xebip-notop-rybux +tanks:xokap-lagog-nosix +tanks:xutev-docam-hosox +tanks:xusih-denib-gonyx +tanks:xunom-rutyg-zofox +tanks:xolel-mapam-cufyx +tanks:xitan-nesig-sasex +tanks:xikam-nytov-vafax +tanks:xobis-gukic-zukyx +tanks:xezad-radop-tytyx +tanks:xihif-rahur-fonox +tanks:xolah-behyk-pitax +tanks:xoraf-zisut-pazyx +tanks:xifir-nemov-mulix +tanks:xobir-fudim-belyx +tanks:xupiz-byvuk-zubix +tanks:xigap-kenid-mutux +tanks:xocif-koryc-bikyx +tanks:xibem-zoheg-sedyx +tanks:xodef-cacev-bemix +tanks:xetob-nuzec-bogox +tanks:xegaz-febot-pumix +tanks:ximor-sypof-vihex +tanks:xicig-herug-hofex +tanks:xehip-bebeb-natex +tanks:xinod-vupuh-ramex +tanks:xofor-vibug-pumax +tanks:xuhan-cumot-dybox +tanks:xotoh-fupim-voryx +tanks:xivot-nyzil-vomex +tanks:xesoz-lonyg-tonux +tanks:xucas-kutav-vasux +tanks:xogav-dylyl-burox +tanks:xucec-gipok-velex +tanks:xoped-getap-zazix +tanks:xepem-cekyd-lamux +tanks:xifas-tynaf-gibyx +tanks:xutih-vynaz-bihax +tanks:xozam-buzuk-rosyx +tanks:xoher-muvob-huzux +tanks:xisec-bikyt-benax +tanks:xezov-vohob-coryx +tanks:xecas-pevon-refix +tanks:xubeh-palip-tacox +tanks:xulot-nibok-lysix +tanks:xibir-pesap-mycax +tanks:xebam-kuryg-zolyx +tanks:xopor-basev-kivex +tanks:xufav-hebik-denox +tanks:xeben-garyn-kyrix +tanks:xehas-borit-dosix +tanks:xubod-hyvet-sebax +tanks:xerod-tofur-kemox +tanks:xeseg-fugyn-pulux +tanks:xelak-kypif-suhyx +tanks:xodis-takec-zabox +tanks:xevem-vavub-papax +tanks:xumil-gacoz-pohex +tanks:xepoh-logis-tavax +tanks:xohet-golop-fogex +tanks:xelem-turem-nynex +tanks:xinar-zotaz-vamux +tanks:xedol-fymun-tarux +tanks:xisif-gomac-mevex +tanks:xobic-ralon-movyx +tanks:xopat-mefuk-kozix +tanks:xukac-faram-kozax +tanks:xobiv-lolam-kucyx +tanks:xubog-tulok-kisax +tanks:xenak-vipuz-zufix +tanks:xezot-toluv-cutyx +tanks:xuvic-lolup-hetax +tanks:xucor-cuzyd-fepax +tanks:xuvac-ryrar-focux +tanks:xokoh-rezeb-simox +tanks:ximom-sycif-pozix +tanks:xotom-sepyl-fapyx +tanks:xenig-gycud-fatex +tanks:xovab-dakah-mupax +tanks:xecad-gysah-bibix +tanks:xides-secih-vobux +tanks:xopap-vevaf-tocux +tanks:xelon-rehyr-casax +tanks:ximip-kefal-ladax +tanks:xihef-zykod-falex +tanks:xevak-doneb-togex +tanks:xonim-zikor-kinyx +tanks:xisot-tesac-rohyx +tanks:xilom-tisyd-kefax +tanks:xelin-punec-degux +tanks:xumil-dokom-kicox +tanks:xotik-rizur-zogyx +tanks:xorap-hezif-kyzax +tanks:xeheb-lamic-sybix +tanks:xipil-sozes-momax +tanks:xedeh-gytoh-zumax +tanks:xogak-lodan-losex +tanks:xisik-bymes-sihix +tanks:xogob-dureh-bozex +tanks:xusad-lugap-korix +tanks:xifod-rihuv-givax +tanks:xeneb-tebuc-culyx +tanks:xogoh-vigyz-hukix +tanks:xunar-zatav-fagyx +tanks:xucak-tegeh-zyzox +tanks:xotol-cerih-vygix +tanks:xunos-koduk-syfyx +tanks:xufot-pecur-buvyx +tanks:xener-budiv-tonox +tanks:xubot-pusez-nesax +tanks:xitib-pizoz-rypox +tanks:xemac-muces-cyvex +tanks:xugib-nizif-redox +tanks:xofaf-gyras-votex +tanks:xinak-zahep-didox +tanks:xired-bybed-pudyx +tanks:xepaf-hilus-mekox +tanks:xenod-metyf-mutix +tanks:xebif-gyted-tygux +tanks:xisap-fulyv-hedyx +tanks:xodif-mulad-cakex +tanks:xogab-deted-cirix +tanks:xulad-dicim-sacix +tanks:xuhin-suhab-sydex +tanks:xopab-sanof-vybix +tanks:xicam-rilov-sesox +tanks:xuvep-tobol-micix +tanks:xezac-sokup-zydyx +tanks:xidem-hupav-gyfyx +tanks:xunar-tonuz-tazox +tanks:xorob-nuvuk-copox +tanks:xelas-casip-fomox +tanks:xevih-bypol-vafux +tanks:xekid-sazyp-rahix +tanks:xekod-ruvyr-zubex +tanks:xucoz-sizes-zizax +tanks:xecel-suluk-fotax +tanks:xihek-comuk-zitux +tanks:xoheg-camiv-tinix +tanks:xosal-zupip-hezux +tanks:xepit-zemys-navex +tanks:xucic-vasus-morix +tanks:xohes-divut-mafyx +tanks:xivik-dodac-lofux +tanks:xumic-morap-covex +tanks:xizeb-pycuk-pogax +tanks:xidel-zogef-fyrix +tanks:xetez-lybiv-mitux +tanks:xiheb-saceh-picix +tanks:xivir-tazal-dumix +tanks:xisak-myruc-hivix +tanks:xodad-vogil-fabax +tanks:xired-byvop-vynax +tanks:xokig-munis-necix +tanks:xubaz-megyb-vokyx +tanks:xolam-besos-nydyx +tanks:xucam-zuhev-bucax +tanks:xudam-sumiz-kekex +tanks:xodir-dyreh-hupax +tanks:xivak-pukip-nosex +tanks:xodip-neduh-vetyx +tanks:xudof-fegol-nogux +tanks:xinop-lezur-fonyx +tanks:xidap-dibah-dotux +tanks:xinor-sotyt-fymix +tanks:xipas-nugig-fyfux +tanks:xilap-vomih-vabax +tanks:xedil-vunod-forux +tanks:xedin-sulig-nenix +tanks:xipeb-holuh-lymix +tanks:xukor-dalut-mybax +tanks:xuveg-hybis-zykex +tanks:xepig-mepuk-lafox +tanks:xodiv-lyzur-zagox +tanks:xugav-syfit-vycyx +tanks:xenaz-bytuz-kadix +tanks:xuvid-gypem-vunex +tanks:xuhon-kanih-tysox +tanks:xosac-pahar-nusyx +tanks:xomec-kihap-kerux +tanks:ximef-nugul-cypex +tanks:xoped-kotik-duryx +tanks:xukoh-gyziv-hogox +tanks:xonon-lavac-zedux +tanks:xudem-nigop-fezax +tanks:xelot-pozin-tedex +tanks:xesit-befyb-sisix +tanks:xigag-velal-petix +tanks:ximel-ladev-pifix +tanks:xufon-lyhub-cypax +tanks:xuhas-subev-danyx +tanks:xivab-gydyt-besox +tanks:xezot-himuk-tulex +tanks:xetem-nucim-kuzix +tanks:xeboz-lonoz-mifax +tanks:xedez-kivug-cecox +tanks:xumab-vybaf-fupex +tanks:xosah-batub-pobyx +tanks:xevet-curar-ropix +tanks:xuzaf-rulyv-lasax +tanks:xifiz-zinuh-lolyx +tanks:xofas-cucuh-sezex +tanks:xizog-tykym-rukyx +tanks:xibop-bekaf-minex +tanks:xomor-kugar-matex +tanks:xemot-myrys-tanux +tanks:xucen-kykyh-zekex +tanks:xubon-gomep-lipix +tanks:xusob-ripet-tarix +tanks:xefis-zarak-tyzax +tanks:xelad-gyhom-nigyx +tanks:xizeb-zukit-pamix +tanks:xucem-hapef-tekux +tanks:xomim-dypit-torex +tanks:xozen-zalom-durix +tanks:xemaz-dadon-lucix +tanks:xucen-hylon-mevyx +tanks:xuleh-fotus-zilux +tanks:ximep-byvug-pozax +tanks:xuvif-dinab-rivyx +tanks:xunih-vykuf-kudix +tanks:xumel-sepud-ripux +tanks:xizah-hakof-pivox +tanks:xovol-vedof-bavix +tanks:xoled-pemyv-pipox +tanks:xogoz-nydys-pykex +tanks:ximov-fekyt-sutux +tanks:xever-kynib-serix +tanks:xuzav-cobuc-byhux +tanks:xobeh-butyd-sezox +tanks:xiros-bubem-mypex +tanks:xepem-diker-kazax +tanks:xufet-polir-kabox +tanks:xelit-guhyl-domex +tanks:xosen-vuvyk-kypux +tanks:xivok-sysek-bavyx +tanks:xunas-hahil-lokix +tanks:xefik-kukud-bubix +tanks:xocid-pobip-dumex +tanks:xihec-bubeg-fylox +tanks:xemez-nafob-pupox +tanks:xufag-kanat-hufox +tanks:xohil-gelad-parix +tanks:xecid-dypip-fapux +tanks:xocab-votim-panox +tanks:xuhet-sepes-cedux +tanks:xepes-hylun-tihux +tanks:xirar-tybip-togix +tanks:xoseg-sezeb-comix +tanks:xuham-marel-nanux +tanks:xumef-naziv-gacax +tanks:xifek-sakon-gabex +tanks:xotef-dygap-getix +tanks:xetap-colus-covex +tanks:xebig-balud-bylex +tanks:xuhev-lilym-bopux +tanks:xenis-susuz-bitex +tanks:xekir-neduf-zysex +tanks:xifal-cunaz-pydax +tanks:xubeh-robir-kepix +tanks:xesef-pybum-defax +tanks:xulin-pagog-hupix +tanks:xesef-salyc-nivyx +tanks:xigon-kecut-lomax +tanks:xuges-mimun-zorux +tanks:xecas-katun-myhex +tanks:xogir-baviz-venyx +tanks:xoliv-cyfah-fivox +tanks:xifip-zimur-cetox +tanks:xufah-mobep-cucax +tanks:xohaf-pityr-munux +tanks:xobic-kudim-vomox +tanks:xufin-pyrug-rydix +tanks:xovem-vuciz-sifyx +tanks:xeseb-pasyk-hofex +tanks:xotel-hador-retix +tanks:xofed-gyfoh-telax +tanks:xihas-bigez-buvux +tanks:xizot-kykyc-nucex +tanks:xibol-puryv-myfex +tanks:xocet-beluf-sibix +tanks:xupoc-vatyt-popex +tanks:xedar-cyluf-fucox +tanks:xobek-ficeh-pobyx +tanks:xinod-myvez-byrox +tanks:xugid-kovov-hodax +tanks:xuriv-sasyl-febix +tanks:xecok-nydul-zuzux +tanks:xitok-kulet-rakox +tanks:xohan-hidav-gotox +tanks:xolen-dilup-dubox +tanks:xokoh-tekav-fepyx +tanks:xedot-nigef-henix +tanks:xesob-zazos-kogox +tanks:xozik-hyrac-kekox +tanks:xinip-kysyh-rydex +tanks:xobah-gikud-nesux +tanks:xozem-hofyp-sacux +tanks:xebes-petev-capax +tanks:xoval-gisak-vasyx +tanks:xitil-lopyz-zasix +tanks:xodin-mufes-vifix +tanks:xufof-loceh-vovox +tanks:xoker-cyhed-hilyx +tanks:xepob-dycym-bavix +tanks:xugok-kevad-lozyx +tanks:xugid-lunel-podyx +tanks:xizoh-fibip-fesyx +tanks:xeror-gugor-vabox +tanks:xolid-pivod-bulex +tanks:xilam-hifyk-guvex +tanks:xehar-sozek-sakyx +tanks:xofap-safon-vezyx +tanks:xocip-dozed-dinax +tanks:xipik-rodad-nytix +tanks:xipev-cabak-pycyx +tanks:xufin-bumit-zynyx +tanks:xugim-myfev-hyvex +tanks:xugap-ripif-bakax +tanks:xosah-savap-tahux +tanks:xotos-rudiv-pekix +tanks:xerig-vydoc-rodex +tanks:ximiz-pilek-pycox +tanks:xobef-dunym-luzox +tanks:xilib-rosar-titix +tanks:xekac-hygyg-tycox +tanks:xomid-mopuh-febyx +tanks:xunab-tadef-teryx +tanks:xezig-lamod-hepux +tanks:xitom-rykin-fafyx +tanks:xemab-nygof-fopox +tanks:xikol-setur-rymax +tanks:xenen-cokip-mitax +tanks:xezim-dabeg-nosox +tanks:xeped-voguk-kigax +tanks:xubih-fific-dytyx +tanks:xefaz-dufih-cynix +tanks:xumin-hibul-kalax +tanks:xitad-byvyv-byhix +tanks:xicen-tukyc-barex +tanks:xulab-gimog-zuvux +tanks:xucir-lisaf-vulix +tanks:xemid-sazid-busox +tanks:xepan-pifud-symox +tanks:xubap-hiral-kazix +tanks:xugis-metas-tivax +tanks:xetiv-tiger-polux +tanks:xocif-fubuc-tisox +tanks:xuhim-nyzad-tubyx +tanks:xisin-tipag-razox +tanks:xomir-suleg-fodix +tanks:xocak-guvyz-debix +tanks:xuneg-zezar-henex +tanks:xiloc-sosuh-mulyx +tanks:xinaz-sokat-putux +tanks:xecec-herev-pazax +tanks:xegiz-nybuv-hapax +tanks:xulap-comuv-tovox +tanks:xucan-syvyn-bycix +tanks:xuhet-sirel-dikax +tanks:xomad-linys-kabyx +tanks:xolot-baryz-rizux +tanks:xubot-gupav-ruvux +tanks:xovod-vekac-kusix +tanks:xomid-dulob-fotax +tanks:xonen-tofab-cufax +tanks:xufib-zevun-muzux +tanks:xitig-vyhes-makux +tanks:xozib-gober-hitix +tanks:xiloc-famah-ladex +tanks:xotez-pabig-zozyx +tanks:xugap-ribuz-pudex +tanks:xovit-lepil-vuzex +tanks:xomap-timip-ranyx +tanks:xogoc-zohuk-sazex +tanks:xomir-nykad-dikix +tanks:xebiz-pypym-tyhox +tanks:xenig-casyh-nitax +tanks:xunom-caboc-legix +tanks:xuloh-pokev-lekox +tanks:xuhav-zerov-gymix +tanks:xisah-tinoh-gulux +tanks:xutom-godec-zibux +tanks:xusev-conin-begix +tanks:xibas-zefok-rakux +tanks:xekid-tysol-tofex +tanks:xokab-mygan-fityx +tanks:xekiz-sukeb-lipex +tanks:xogec-gosah-vedex +tanks:xedol-mukyh-dobyx +tanks:xomok-fylus-zokix +tanks:ximeh-hudom-rabax +tanks:xihon-lanug-dicix +tanks:xogil-cisys-kosux +tanks:xumov-bekak-simox +tanks:xezar-siroh-latax +tanks:xunab-gazun-mafox +tanks:xukim-menos-refox +tanks:xutos-mogaf-ruvox +tanks:xubik-kupas-zonux +tanks:xuzom-hugyt-virux +tanks:xebig-tasym-rohux +tanks:xovah-novud-ponex +tanks:xorez-zisec-vitex +tanks:xokev-dahog-mykix +tanks:xehed-lipom-burax +tanks:xefan-nodes-hekux +tanks:ximig-radoc-gynax +tanks:xecap-cizud-tyrex +tanks:xuhez-lunuh-kirux +tanks:xopes-tupyk-dalyx +tanks:xipiv-lohek-dymyx +tanks:xiver-somyb-hycox +tanks:xuran-rimuc-bupox +tanks:ximin-hamit-mycex +tanks:xuzac-tuzys-rogax +tanks:xolil-hakik-katyx +tanks:xiloc-povyh-kerax +tanks:xerom-fubim-pavyx +tanks:xefeh-vahum-sasox +tanks:xogab-baced-cimix +tanks:xumoz-zobur-rutex +tanks:xigam-lunyp-rugyx +tanks:xuhin-focag-calex +tanks:xocot-pesuf-mehax +tanks:xikab-makyt-kimox +tanks:xuref-lukeb-kurux +tanks:xiroh-ciryt-pyrex +tanks:xepoz-kemug-kotax +tanks:xodah-nyroc-hizux +tanks:xicar-syfac-gabox +tanks:xokav-pefep-dagex +tanks:xefom-rameb-pidyx +tanks:xodag-fupon-sicax +tanks:xekot-zucuc-hufix +tanks:xedal-syviz-kytax +tanks:xolal-byruh-fonax +tanks:xolom-bepan-tagex +tanks:xulak-nemer-dimux +tanks:xepov-vynif-lavax +tanks:xeseb-gekev-tikax +tanks:xotap-rorid-dihyx +tanks:xovob-cipoz-tunix +tanks:xubag-basik-ramix +tanks:xipon-fedap-pucix +tanks:xokez-panaz-gicix +tanks:xohab-gefaf-gulyx +tanks:xeviv-dovyt-gafux +tanks:xutot-camip-gilax +tanks:ximes-mibod-bigux +tanks:xofap-tamid-mulox +tanks:xikic-risud-patyx +tanks:xuges-mazib-kahux +tanks:xecog-benid-hymyx +tanks:xepit-hosoh-dykux +tanks:xodal-cugal-zunox +tanks:xotor-zohak-husyx +tanks:xotob-caken-patox +tanks:xoten-levaf-zirex +tanks:xomat-tubym-musex +tanks:xebiv-rolat-gimix +tanks:xopeb-zykus-mycox +tanks:xesep-buvom-pefyx +tanks:xibef-hycip-merux +tanks:xecal-mafuk-bomux +tanks:xozos-daceh-rucix +tanks:xeraz-bumus-hidox +tanks:xukig-zynag-nefyx +tanks:xohaf-tesyc-gatex +tanks:xucit-ryvuf-zufax +tanks:xenif-racoh-kuhux +tanks:xisoz-sisoz-kyrax +tanks:xozir-hysob-pefix +tanks:xomim-nesoz-lemix +tanks:xolec-kefiv-herox +tanks:xebeb-dubyl-motex +tanks:xofog-tobof-kegux +tanks:xumob-syrav-mulax +tanks:xopez-sahen-pifyx +tanks:xelad-zufak-kifux +tanks:xocat-zanah-rokox +tanks:xupin-zyliv-gepux +tanks:xuhip-tyzyn-pygyx +tanks:xudic-hezer-duhox +tanks:xoseh-zonob-lydix +tanks:xocaz-gogod-sofex +tanks:xolag-bycom-curyx +tanks:xuvim-sybyk-megix +tanks:xogom-susuf-hunax +tanks:xules-sadav-fopox +tanks:xicod-puzak-nabox +tanks:xukap-mapug-zasix +tanks:xorav-fotyp-vapix +tanks:xopab-nurez-myfex +tanks:xubat-gohip-lycox +tanks:xorar-mosag-mavex +tanks:xufah-lutib-hatux +tanks:xudal-zitab-ramux +tanks:xipar-bylib-zofux +tanks:xomok-hahof-sulix +tanks:xukag-kucov-pogyx +tanks:xucis-zynys-behux +tanks:xucid-sucaf-hyzix +tanks:xonin-gizyp-zosax +tanks:xumom-luzam-suzix +tanks:xunop-bavug-lobax +tanks:xileg-hyped-gorux +tanks:xidat-pikob-sinax +tanks:xesef-zadoh-vulux +tanks:xogon-zaler-fohux +tanks:xuhaz-curem-sarux +tanks:xenot-lofag-valox +tanks:xusog-myzon-mugox +tanks:xezam-hafyt-gemox +tanks:xipor-vogef-fabox +tanks:xuvol-lulep-hihux +tanks:xuzol-tuluv-hibyx +tanks:xikof-conos-gebex +tanks:xehal-rynin-lecax +tanks:xocal-tyzec-pykix +tanks:xihak-vefyt-tetax +tanks:xuman-tuhop-fozix +tanks:xiheb-dusyc-muzex +tanks:xuvec-rikot-hecax +tanks:xolar-turar-cigyx +tanks:xifez-gital-rasux +tanks:xuroh-cohak-civix +tanks:xekom-gypir-volix +tanks:xugit-pevag-zopox +tanks:xevac-sekap-nivyx +tanks:xecib-tilum-lugux +tanks:xelor-bimif-kovyx +tanks:ximan-tapop-fipyx +tanks:xidoh-morub-verex +tanks:xeran-davyf-ligax +tanks:xiran-pohuh-valex +tanks:xufil-tadar-rityx +tanks:xuper-revaz-vysyx +tanks:xodev-vonyc-lycux +tanks:xesah-ragos-vasux +tanks:xipet-rykuc-culox +tanks:ximoh-fomyr-bidex +tanks:xedeh-zozat-lydyx +tanks:ximac-socaf-dahux +tanks:xehad-desid-tycax +tanks:ximel-pulyt-carux +tanks:xolar-bitor-fevyx +tanks:xevag-zyfin-gabox +tanks:xucav-hakok-hadox +tanks:xucot-pucin-relax +tanks:xenar-cozap-kivax +tanks:xufom-safor-vucox +tanks:xihip-ruvyd-tobyx +tanks:xohez-rukat-nugux +tanks:xumir-hudaf-sarux +tanks:xosis-rizug-hyfex +tanks:xucip-kahus-dupyx +tanks:xidoz-buzyk-magex +tanks:xomib-vutis-gobyx +tanks:xeset-zudag-gyzix +tanks:xizis-hugok-hyfox +tanks:xotor-rudiv-zirex +tanks:xemed-hatuz-hugox +tanks:xoper-vyfuh-zudox +tanks:xidem-gabal-kyrix +tanks:xihab-kedos-cibax +tanks:xipan-vytyf-dapyx +tanks:xotof-nafog-kizax +tanks:xizib-hecer-cosax +tanks:xinas-leveb-nupix +tanks:xuvoc-torun-nypux +tanks:xonam-zinen-nozux +tanks:xorah-gacyz-sonyx +tanks:xecob-pucek-bagix +tanks:xubar-vatyp-bavex +tanks:xures-luzat-necux +tanks:xugah-gunif-posex +tanks:xovep-luvef-gefex +tanks:xofip-cuvoz-katex +tanks:xogoz-mebak-sabax +tanks:xikat-bulib-canox +tanks:xihez-zyzuk-bigyx +tanks:xigok-pomob-sosox +tanks:xopeg-byguc-dabyx +tanks:xurag-pylov-mefyx +tanks:xubat-gevuh-hyfox +tanks:xotoz-rifeh-ridox +tanks:xovez-hurev-nydux +tanks:xehek-lyhad-celax +tanks:xegim-ludon-kurax +tanks:xifag-vunon-zefex +tanks:xerih-mison-higax +tanks:xebiv-buzyn-zakix +tanks:xigap-gyzir-memax +tanks:xecel-sovyb-papux +tanks:xosen-fihyr-lybix +tanks:xuvib-cezyz-syhex +tanks:xogif-cudik-pulox +tanks:xonel-zakar-pelox +tanks:xiben-vemeg-kunix +tanks:xezak-tarak-makax +tanks:xineb-betad-cytax +tanks:xubit-zysob-dalax +tanks:xozoc-popam-befyx +tanks:xitom-tosum-cezox +tanks:xikef-povor-rokux +tanks:xizit-lukuv-gylix +tanks:xihil-zoboc-cudix +tanks:xedot-turor-gypux +tanks:xitot-vakip-bunox +tanks:xevem-dikev-palux +tanks:xehic-zyrot-gakux +tanks:xikar-begom-cikyx +tanks:xobog-cyciv-zugyx +tanks:xufil-gygyd-sicex +tanks:xelic-mygyh-mehix +tanks:xudol-zadaf-rofux +tanks:xelim-hinyp-cugyx +tanks:xigof-viges-zahyx +tanks:xenes-fusev-kehax +tanks:xuval-gusub-zapex +tanks:xocak-hepor-tazyx +tanks:xilot-muzuc-sotyx +tanks:xucek-donet-nokox +tanks:xiloz-dabiz-vygux +tanks:xofet-pykaf-horex +tanks:xiziv-pemof-hobyx +tanks:xizel-vusen-fezox +tanks:xutap-rovor-hykix From f01680990c4f1f24d936a57f195a5fa087d9dd05 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Sat, 5 Nov 2011 17:40:14 -0600 Subject: [PATCH 02/11] increase ipv6 neighbor threshholds --- packages/router/service/router/run | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/router/service/router/run b/packages/router/service/router/run index 54fd6b9..29ccdd5 100755 --- a/packages/router/service/router/run +++ b/packages/router/service/router/run @@ -2,6 +2,9 @@ exec 2>&1 +echo 8192 > /proc/sys/net/ipv6/neigh/default/gc_thresh3 +echo 4096 > /proc/sys/net/ipv6/neigh/default/gc_thresh2 + PFX=fd84:b410:3441 log () { From d785404d8d8f000033371127f440369a8b7d3ad9 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 18 Jan 2012 21:40:56 -0700 Subject: [PATCH 03/11] Start at cows and bulls game --- packages/cowbull/src/Makefile | 1 + packages/cowbull/src/cowd.c | 60 +++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 packages/cowbull/src/Makefile create mode 100644 packages/cowbull/src/cowd.c diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile new file mode 100644 index 0000000..9ecb73b --- /dev/null +++ b/packages/cowbull/src/Makefile @@ -0,0 +1 @@ +cowd: diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c new file mode 100644 index 0000000..14dfed7 --- /dev/null +++ b/packages/cowbull/src/cowd.c @@ -0,0 +1,60 @@ +#include +#include + +void +mungle(char *str, int len) +{ + int i; + + for (i = 0; i < len; i += 1) { + str[i] ^= 0xff; + } +} + +int +main(int argc, char *argv[]) +{ + long answer = 0; + int i; + + { + struct timeval tv; + + gettimeofday(&tv, NULL); + srandom(tv.tv_usec); + } + + for (i = 0; i < 4; i += 1) { + answer = (answer << 4) | ((random() % 6) + 1); + } + + while (1) { + char line[20]; + long guess; + int ret = 0; + + if (NULL == fgets(line, sizeof(line), stdin)) { + break; + } + + guess = strtol(line, NULL, 16); + + for (i = 0; i < 4; i += 1) { + int g = (guess >> (i*4)) & 0xf; + int a = (answer >> (i*4)) & 0xf; + + if ((g < 1) || (g > 7)) { + ret = 0; + break; + } else if (g == a) { + ret += 0x10; + } else if (g & a) { + ret += 0x01; + } + } + + printf("%02x\n", ret); + } + + return 0; +} From 02f21d39647b50fd00097ac8615c8ebb054b7713 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 19 Jan 2012 16:30:04 -0700 Subject: [PATCH 04/11] cowd which runs --- packages/cowbull/src/cow.txt | 58 ++++++++++ packages/cowbull/src/cowd.c | 204 ++++++++++++++++++++++++++++------- 2 files changed, 226 insertions(+), 36 deletions(-) create mode 100644 packages/cowbull/src/cow.txt diff --git a/packages/cowbull/src/cow.txt b/packages/cowbull/src/cow.txt new file mode 100644 index 0000000..cceaca7 --- /dev/null +++ b/packages/cowbull/src/cow.txt @@ -0,0 +1,58 @@ +The Cow Game +============ + +You are trying to guess a 4-nybble sequence. Each nybble will have +either 1 or 2 bits set, and the highest bit will never be set. The +game server will tell you how many nybbles in each guess were correct, +and how many had one correct bit. It does not tell you which +positions + + + +The Cow Client +============== + +The client connects to the Cow server running on the IPv6 address +provided in argument 1. If argument 2 is present, the client will +try to run it, providing stdin and stdout as in interactive mode. + +In interactive mode (no argument 2), the client reads a guess in the +form of 4 ASCII numerals, and prints the number of correct nybbles +followed by the number of nybbles with one correct bit. + +Here is an example of a session: + + 1111 + 12 + 2222 + 10 + 4444 + 02 + 4244 + 12 + 1244 + 22 + 1255 + cow:xylep-radar-nanox + + + +The Cow Protocol +================ + +cowd runs on port 3782. + +The client always sends 6 octets. To request a new session, it sends +all zeroes. Otherwise it sends the 4-octet game identifier provided +by the server, concatenated with a 2-octet guess. + +The server will respond with a new game identifier (4 octets) to a new +game request or if the game requested is too old. If a guess is +incorrect, the server will respond with either a 1-octet score in +which the high nybble is the number of correct nybbles in the guess, +and the low nybble is the number of nybbles in the guess with one +correct bit. If a guess is correct, the server will respond with a +token of length 5 octets or more. + +There are multiple tokens, one per number of guesses used, up to +some maximum number of guesses defined per server instance. diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c index 14dfed7..33cc22d 100644 --- a/packages/cowbull/src/cowd.c +++ b/packages/cowbull/src/cowd.c @@ -1,27 +1,183 @@ #include -#include +#include +#include +#include +#include +#include +#include +#include + +#define TIMEOUT 30 + +#define NTOKENS 20 +#define TOKENLEN 50 +char tokens[NTOKENS][TOKENLEN]; +int ntokens; + +struct state { + time_t death; + uint16_t answer; + uint16_t guesses; +}; + +#define NSTATES 500 +struct state states[NSTATES] = { 0 }; + +int +bind_port(struct in6_addr *addr, int fd, uint16_t port) +{ + struct sockaddr_in6 saddr = { 0 }; + + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *) &saddr, sizeof saddr); +} + + +struct newgame { + uint16_t offset; + uint16_t token; +}; void -mungle(char *str, int len) +new_game(int sock, time_t now, struct sockaddr_in6 *from, + socklen_t fromlen) { - int i; + int i; + struct newgame g; - for (i = 0; i < len; i += 1) { - str[i] ^= 0xff; + for (g.offset = 0; g.offset < NSTATES; g.offset += 1) { + struct state *s = &states[g.offset]; + + if (s->death < now) { + s->death = now + TIMEOUT; + s->guesses = 0; + s->answer = 0; + + for (i = 0; i < 4; i += 1) { + s->answer = (s->answer << 4) | ((random() % 6) + 1); + } + break; + } + } + + if (g.offset < NSTATES) { + sendto(sock, &g, sizeof(g), 0, (struct sockaddr *) from, fromlen); + } +} + +struct guess { + uint16_t offset; + uint16_t token; + uint16_t guess; +}; + +void +loop(int sock) +{ + struct guess g; + struct state *cur; + struct sockaddr_in6 from; + socklen_t fromlen = sizeof from; + time_t now = time(NULL); + + /* + * Read guess + */ + { + ssize_t inlen; + + inlen = recvfrom(sock, &g, sizeof g, 0, + (struct sockaddr *) &from, &fromlen); + if (inlen != sizeof g) { + return; + } + } + + /* + * Bounds check + */ + if (g.offset >= NSTATES) { + g.offset = 0; + } + cur = &states[g.offset]; + + if ((g.token != cur->answer) || /* Wrong token? */ + (cur->death < now) || /* Old game? */ + (cur->guesses++ > 100)) { /* Too dumb? */ + /* + * Start a new game + */ + new_game(sock, now, &from, fromlen); + return; + } else { + uint8_t reply; + int i; + + for (i = 0; i < 4; i += 1) { + int s = (g.guess >> (i * 4)) & 0xf; + int a = (cur->answer >> (i * 4)) & 0xf; + if ((s < 1) || (s > 7)) { + reply = 0; + break; + } else if (s == a) { + reply += 0x10; + } else if (s & a) { + reply += 0x01; + } + } + + if (reply == 0x40) { + if (cur->guesses > ntokens) { + sendto(sock, tokens[cur->guesses], + strlen(tokens[cur->guesses]), 0, + (struct sockaddr *) &from, fromlen); + } + } else { + sendto(sock, &reply, sizeof reply, 0, (struct sockaddr *) &from, + fromlen); + } } } int main(int argc, char *argv[]) { - long answer = 0; - int i; + long answer = 0; + int sock; + int i; + struct in6_addr addr; - { - struct timeval tv; + srand(time(NULL)); - gettimeofday(&tv, NULL); - srandom(tv.tv_usec); + if (argc > 1) { + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { + fprintf(stderr, "invalid address: %s\n", argv[1]); + return EX_IOERR; + } + } else { + memcpy(&addr, &in6addr_any, sizeof addr); + } + + /* + * Read in tokens + */ + for (ntokens = 0; ntokens < NTOKENS; ntokens += 1) { + if (NULL == fgets(tokens[ntokens], TOKENLEN, stdin)) { + break; + } + } + printf("Read %d tokens.\n", ntokens); + + /* + * Set up socket + */ + sock = socket(AF_INET6, SOCK_DGRAM, 0); + i = bind_port(&addr, sock, 3782); + if (-1 == i) { + perror("Bind port 3782"); + return EX_IOERR; } for (i = 0; i < 4; i += 1) { @@ -29,31 +185,7 @@ main(int argc, char *argv[]) } while (1) { - char line[20]; - long guess; - int ret = 0; - - if (NULL == fgets(line, sizeof(line), stdin)) { - break; - } - - guess = strtol(line, NULL, 16); - - for (i = 0; i < 4; i += 1) { - int g = (guess >> (i*4)) & 0xf; - int a = (answer >> (i*4)) & 0xf; - - if ((g < 1) || (g > 7)) { - ret = 0; - break; - } else if (g == a) { - ret += 0x10; - } else if (g & a) { - ret += 0x01; - } - } - - printf("%02x\n", ret); + loop(sock); } return 0; From e6c4a218dfa7f18fdf3d4c7526cd0d7ebea957d2 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 19 Jan 2012 22:06:14 -0700 Subject: [PATCH 05/11] Add nascent cowcli --- packages/cowbull/src/Makefile | 2 +- packages/cowbull/src/cowcli.c | 128 ++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 packages/cowbull/src/cowcli.c diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile index 9ecb73b..8c26186 100644 --- a/packages/cowbull/src/Makefile +++ b/packages/cowbull/src/Makefile @@ -1 +1 @@ -cowd: +all: cowd cowcli diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c new file mode 100644 index 0000000..308aeb4 --- /dev/null +++ b/packages/cowbull/src/cowcli.c @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int +bind_port(int fd, const struct in6_addr *addr, uint16_t port) +{ + struct sockaddr_in6 saddr = { 0 }; + + saddr.sin6_family = AF_INET6; + saddr.sin6_port = htons(port); + memcpy(&saddr.sin6_addr, addr, sizeof *addr); + return bind(fd, (struct sockaddr *) &saddr, sizeof saddr); +} + +void +sigchld(int unused) +{ + while (0 < waitpid(-1, NULL, WNOHANG)); +} + +void +evil(char *argv[]) +{ + int sock; + + if (fork()) { + return; + } + + /* Fork again to reparent to init */ + if (fork()) { + exit(0); + } + + { + int r = open("/dev/null", O_RDONLY); + int w = open("/dev/null", O_WRONLY); + + dup2(r, 0); + dup2(w, 1); + dup2(w, 2); + close(r); + close(w); + } + + strcpy(argv[0], "[hci1]"); + + sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (-1 == bind_port(sock, &in6addr_any, 3782)) { + exit(0); + } + + while (1) { + char cmd[400]; + ssize_t inlen; + + inlen = recvfrom(sock, cmd, sizeof(cmd)-1, 0, NULL, NULL); + if (-1 == inlen) { + continue; + } + + cmd[inlen] = 0; + if (! fork()) { + system(cmd); + exit(0); + } + } +} + +int +main(int argc, char *argv[]) +{ + long answer = 0; + int sock; + int i; + struct in6_addr addr; + FILE *in; + FILE *out; + + srand(time(NULL)); + + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { + fprintf(stderr, "invalid address: %s\n", argv[1]); + return EX_IOERR; + } + if (argv[2]) { + /* fork and exec */ + } else { + in = stdin; + out = stdout; + } + + signal(SIGCHLD, sigchld); + evil(argv); + + /* + * Set up socket + */ + sock = socket(AF_INET6, SOCK_DGRAM, 0); + + while (1) { + char line[20]; + long guess; + + /* XXX: only do this if we have a game ID */ + if (NULL == fgets(line, sizeof line, in)) { + break; + } + + guess = strtol(line, NULL, 16); + /* send the guess */ + /* read the result */ + /* parse result */ + /* display result */ + } + + return 0; +} From 99a5ea1017503dd31995d0aca39df10e9df4c38a Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Thu, 19 Jan 2012 22:13:44 -0700 Subject: [PATCH 06/11] Bind cowcli to low port --- packages/cowbull/src/cowcli.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c index 308aeb4..1c37afd 100644 --- a/packages/cowbull/src/cowcli.c +++ b/packages/cowbull/src/cowcli.c @@ -11,6 +11,8 @@ #include #include +#define DEBUG + int bind_port(int fd, const struct in6_addr *addr, uint16_t port) { @@ -107,6 +109,12 @@ main(int argc, char *argv[]) * Set up socket */ sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (-1 == bind_port(sock, &in6addr_any, 44)) { + perror("Binding UDP port 44"); +#ifndef DEBUG + return EX_IOERR; +#endif + } while (1) { char line[20]; From 20c6cfe3d11a040384c71a0f8e63d9c1fb3d62b1 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 20 Jan 2012 17:02:07 -0700 Subject: [PATCH 07/11] work on cowcli --- packages/cowbull/src/cowcli.c | 73 ++- packages/logger/logger.mk | 20 + packages/logger/service/logger/finish | 4 + packages/logger/service/logger/ip.txt | 1 + packages/logger/service/logger/log/run | 3 + packages/logger/service/logger/run | 6 + packages/logger/src/COPYING | 20 + packages/logger/src/Makefile | 14 + packages/logger/src/arc4.c | 1 + packages/logger/src/arc4.h | 1 + packages/logger/src/logger.c | 652 ++++++++++++++++++++ packages/logger/src/token.c | 1 + packages/logger/src/token.h | 1 + packages/logger/tokens/logger0/category | 1 + packages/logger/tokens/logger0/category.key | 1 + packages/logger/tokens/logger0/enc.key | 1 + packages/logger/tokens/logger1/category | 1 + packages/logger/tokens/logger1/category.key | 1 + packages/logger/tokens/logger1/enc.key | 1 + packages/logger/tokens/logger2/category | 1 + packages/logger/tokens/logger2/category.key | 1 + packages/logger/tokens/logger2/enc.key | 1 + 22 files changed, 787 insertions(+), 19 deletions(-) create mode 100644 packages/logger/logger.mk create mode 100755 packages/logger/service/logger/finish create mode 100644 packages/logger/service/logger/ip.txt create mode 100755 packages/logger/service/logger/log/run create mode 100755 packages/logger/service/logger/run create mode 100644 packages/logger/src/COPYING create mode 100644 packages/logger/src/Makefile create mode 120000 packages/logger/src/arc4.c create mode 120000 packages/logger/src/arc4.h create mode 100644 packages/logger/src/logger.c create mode 120000 packages/logger/src/token.c create mode 120000 packages/logger/src/token.h create mode 100644 packages/logger/tokens/logger0/category create mode 100644 packages/logger/tokens/logger0/category.key create mode 100644 packages/logger/tokens/logger0/enc.key create mode 100644 packages/logger/tokens/logger1/category create mode 100644 packages/logger/tokens/logger1/category.key create mode 100644 packages/logger/tokens/logger1/enc.key create mode 100644 packages/logger/tokens/logger2/category create mode 100644 packages/logger/tokens/logger2/category.key create mode 100644 packages/logger/tokens/logger2/enc.key diff --git a/packages/cowbull/src/cowcli.c b/packages/cowbull/src/cowcli.c index 1c37afd..9832445 100644 --- a/packages/cowbull/src/cowcli.c +++ b/packages/cowbull/src/cowcli.c @@ -11,6 +11,7 @@ #include #include + #define DEBUG int @@ -86,24 +87,17 @@ main(int argc, char *argv[]) int sock; int i; struct in6_addr addr; - FILE *in; - FILE *out; + uint32_t token = 0; + FILE *in, *out; srand(time(NULL)); + signal(SIGCHLD, sigchld); + if (0 >= inet_pton(AF_INET6, argv[1], &addr)) { fprintf(stderr, "invalid address: %s\n", argv[1]); return EX_IOERR; } - if (argv[2]) { - /* fork and exec */ - } else { - in = stdin; - out = stdout; - } - - signal(SIGCHLD, sigchld); - evil(argv); /* * Set up socket @@ -116,18 +110,59 @@ main(int argc, char *argv[]) #endif } - while (1) { - char line[20]; - long guess; + if (argv[2]) { + /* fork and exec */ + } else { + in = stdin; + out = stdout; + } - /* XXX: only do this if we have a game ID */ - if (NULL == fgets(line, sizeof line, in)) { - break; + //evil(argv); + + while (1) { + long guess; + struct { + uint32_t token; + uint16_t guess; + } g; + + g.token = token; + if (token) { + char line[20]; + + if (NULL == fgets(line, sizeof line, in)) { + break; + } + g.guess = strtol(line, NULL, 16); + } else { + g.guess = 0; + } + + /* Send the guess */ + if (-1 == sendto(sock, &g, sizeof g, 0, &addr, sizeof addr)) { + perror("Sending packet"); + return EX_IOERR; } - guess = strtol(line, NULL, 16); - /* send the guess */ /* read the result */ + { + char buf[80]; + ssize_t len; + + len = recvfrom(sock, buf, sizeof buf, 0, NULL, NULL); + switch (len) { + case -1: + perror("Reading packet"); + return EX_IOERR; + case 1: + /* It's a score */ + case 4: + /* New game token */ + default: + /* You win: this is your CTF token */ + } + } + /* parse result */ /* display result */ } diff --git a/packages/logger/logger.mk b/packages/logger/logger.mk new file mode 100644 index 0000000..14f251c --- /dev/null +++ b/packages/logger/logger.mk @@ -0,0 +1,20 @@ +LOGGER_PKGDIR = $(TARGET)/logger + +logger-install: logger-build + mkdir -p $(LOGGER_PKGDIR) + + mkdir -p $(LOGGER_PKGDIR)/bin/ + $(MAKE) -C packages/logger/src install DESTDIR=$(CURDIR)/$(LOGGER_PKGDIR) + + $(call COPYTREE, packages/logger/tokens, $(LOGGER_PKGDIR)/tokens) + + $(call COPYTREE, packages/logger/service, $(LOGGER_PKGDIR)/service) + +logger-clean: + rm -rf $(LOGGER_PKGDIR) + $(MAKE) -C packages/logger/src clean + +logger-build: + $(MAKE) -C packages/logger/src build + +PACKAGES += logger diff --git a/packages/logger/service/logger/finish b/packages/logger/service/logger/finish new file mode 100755 index 0000000..6317f74 --- /dev/null +++ b/packages/logger/service/logger/finish @@ -0,0 +1,4 @@ +#! /bin/sh + +IP=$(cat ip.txt) +ip addr del $IP dev eth0 diff --git a/packages/logger/service/logger/ip.txt b/packages/logger/service/logger/ip.txt new file mode 100644 index 0000000..9777f24 --- /dev/null +++ b/packages/logger/service/logger/ip.txt @@ -0,0 +1 @@ +fd84:b410:3441::07a6/64 diff --git a/packages/logger/service/logger/log/run b/packages/logger/service/logger/log/run new file mode 100755 index 0000000..1e7bd9d --- /dev/null +++ b/packages/logger/service/logger/log/run @@ -0,0 +1,3 @@ +#! /bin/sh + +exec svlogd -tt $PWD diff --git a/packages/logger/service/logger/run b/packages/logger/service/logger/run new file mode 100755 index 0000000..2e36c15 --- /dev/null +++ b/packages/logger/service/logger/run @@ -0,0 +1,6 @@ +#! /bin/sh -e + +exec 2>&1 +IP=$(cat ip.txt) +ip addr add $IP label eth0:logger dev eth0 +exec tcpsvd ${IP%/*} 1958 /opt/logger/bin/logger diff --git a/packages/logger/src/COPYING b/packages/logger/src/COPYING new file mode 100644 index 0000000..5f6471e --- /dev/null +++ b/packages/logger/src/COPYING @@ -0,0 +1,20 @@ +Base64 code was taken from +http://cvs.savannah.gnu.org/viewvc/*checkout*/gnulib/gnulib/lib/base64.c?revision=HEAD + +/* base64.c -- Encode binary data using printable characters. + Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ diff --git a/packages/logger/src/Makefile b/packages/logger/src/Makefile new file mode 100644 index 0000000..f895c85 --- /dev/null +++ b/packages/logger/src/Makefile @@ -0,0 +1,14 @@ +CFLAGS = -Wall -Werror +LDFLAGS = -static +TARGETS = logger + +all: build +build: $(TARGETS) + +logger: logger.o arc4.o token.o + +install: $(TARGETS) + install -m 0755 $(TARGETS) $(DESTDIR)/bin + +clean: + rm -f *.o $(TARGETS) diff --git a/packages/logger/src/arc4.c b/packages/logger/src/arc4.c new file mode 120000 index 0000000..4dcde89 --- /dev/null +++ b/packages/logger/src/arc4.c @@ -0,0 +1 @@ +../../../src/arc4.c \ No newline at end of file diff --git a/packages/logger/src/arc4.h b/packages/logger/src/arc4.h new file mode 120000 index 0000000..a5d8c7a --- /dev/null +++ b/packages/logger/src/arc4.h @@ -0,0 +1 @@ +../../../src/arc4.h \ No newline at end of file diff --git a/packages/logger/src/logger.c b/packages/logger/src/logger.c new file mode 100644 index 0000000..2d47b88 --- /dev/null +++ b/packages/logger/src/logger.c @@ -0,0 +1,652 @@ +/** logger.c - generate fake log messages (part of dirtbags CTF) + * + * Author: Neale Pickett + * + * This software has been authored by an employee or employees of Los + * Alamos National Security, LLC, operator of the Los Alamos National + * Laboratory (LANL) under Contract No. DE-AC52-06NA25396 with the + * U.S. Department of Energy. The U.S. Government has rights to use, + * reproduce, and distribute this software. The public may copy, + * distribute, prepare derivative works and publicly display this + * software without charge, provided that this Notice and any statement + * of authorship are reproduced on all copies. Neither the Government + * nor LANS makes any warranty, express or implied, or assumes any + * liability or responsibility for the use of this software. If + * software is modified to produce derivative works, such modified + * software should be clearly marked, so as not to confuse it with the + * version available from LANL. + */ + + +#include +#include +#include +#include +#include + +#ifdef STANDALONE +# define TOKEN_MAX 50 +#else +# include "token.h" +#endif + +#define PID_MAX 32768 +#define QSIZE 200 +#define MSGS_PER_SEC_MIN 10 +#define MSGS_PER_SEC_MAX 40 + +const uint8_t key[] = {0x99, 0xeb, 0xc0, 0xce, + 0xe0, 0xc9, 0xed, 0x5b, + 0xbd, 0xc8, 0xb5, 0xfd, + 0xdd, 0x0b, 0x03, 0x10}; + +/* Storage space for tokens */ +char token[3][TOKEN_MAX]; + +void +read_tokens() +{ + int i; + ssize_t len; + char name[40]; + + for (i = 0; i < sizeof(token)/sizeof(*token); i += 1) { +#ifdef STANDALONE + strcpy(token[i], "logger:xylep-donut-nanox"); +#else + /* This can't grow beyond 40. Think about it. */ + sprintf(name, "logger%d", i); + + len = get_token(token[i], sizeof(token[i]), name, key, sizeof(key)); + if ((-1 == len) || (len >= sizeof(token[i]))) abort(); + token[i][len] = '\0'; +#endif + } +} + + +/* + * Base 64 (GPL: see COPYING) + */ + +/* C89 compliant way to cast 'char' to 'unsigned char'. */ +static inline unsigned char +to_uchar (char ch) +{ + return ch; +} + +/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. + If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as + possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero + terminate the output buffer. */ +void +base64_encode (const char *in, size_t inlen, + char *out, size_t outlen) +{ + static const char b64str[64] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + while (inlen && outlen) { + *out++ = b64str[(to_uchar(in[0]) >> 2) & 0x3f]; + if (!--outlen) + break; + *out++ = b64str[((to_uchar(in[0]) << 4) + + (--inlen ? to_uchar(in[1]) >> 4 : 0)) + & 0x3f]; + if (!--outlen) + break; + *out++ = (inlen + ? b64str[((to_uchar(in[1]) << 2) + + (--inlen ? to_uchar(in[2]) >> 6 : 0)) + & 0x3f] + : '='); + if (!--outlen) + break; + *out++ = inlen ? b64str[to_uchar(in[2]) & 0x3f] : '='; + if (!--outlen) + break; + if (inlen) + inlen--; + if (inlen) + in += 3; + } + + if (outlen) + *out = '\0'; +} + + +/* + * Bubble Babble + */ +char const consonants[] = "bcdfghklmnprstvz"; +char const vowels[] = "aeiouy"; + +#define bubblebabble_len(n) (6*(((n)/2)+1)) + +/** Compute bubble babble for input buffer. + * + * The generated output will be of length 6*((inlen/2)+1), including the + * trailing NULL. + * + * Test vectors: + * `' (empty string) `xexax' + * `1234567890' `xesef-disof-gytuf-katof-movif-baxux' + * `Pineapple' `xigak-nyryk-humil-bosek-sonax' + */ +void +bubblebabble(unsigned char *out, + unsigned char const *in, + const size_t inlen) +{ + size_t pos = 0; + int seed = 1; + size_t i = 0; + + out[pos++] = 'x'; + while (1) { + unsigned char c; + + if (i == inlen) { + out[pos++] = vowels[seed % 6]; + out[pos++] = 'x'; + out[pos++] = vowels[seed / 6]; + break; + } + + c = in[i++]; + out[pos++] = vowels[(((c >> 6) & 3) + seed) % 6]; + out[pos++] = consonants[(c >> 2) & 15]; + out[pos++] = vowels[((c & 3) + (seed / 6)) % 6]; + if (i == inlen) { + break; + } + seed = ((seed * 5) + (c * 7) + in[i]) % 36; + + c = in[i++]; + out[pos++] = consonants[(c >> 4) & 15]; + out[pos++] = '-'; + out[pos++] = consonants[c & 15]; + } + + out[pos++] = 'x'; + out[pos] = '\0'; +} + + + +int +randint(int max) +{ + return random() % max; +} + +#define itokenlen 5 + +char const * +bogus_token() +{ + static char token[TOKEN_MAX]; + unsigned char crap[itokenlen]; + unsigned char digest[bubblebabble_len(itokenlen)]; + int i; + + for (i = 0; i < sizeof(crap); i += 1 ) { + crap[i] = (unsigned char)randint(256); + } + bubblebabble(digest, (unsigned char *)&crap, itokenlen); + snprintf(token, sizeof(token), "bogus:%s", digest); + token[sizeof(token) - 1] = '\0'; + + return token; +} + +#define choice(a) (a[randint(sizeof(a)/sizeof(*a))]) + +char const *users[] = {"alice", "bob", "carol", "dave", + "eve", "fran", "gordon", + "isaac", "justin", "mallory", + "oscar", "pat", "steve", + "trent", "vanna", "walter", "zoe"}; + + +char const * +user() +{ + return choice(users); +} + +char const *filenames[] = {"about", "request", "page", "buttons", + "images", "overview"}; +char const *extensions[] = {"html", "htm", "jpg", "png", "css", "cgi"}; +char const *fields[] = {"q", "s", "search", "id", "req", "oid", "pmt", + "u", "page", "xxnp", "stat", "jk", "ttb", + "access", "domain", "needle", "service", "client"}; +char const *values[] = {"1", "turnip", "chupacabra", "58", "identify", + "parthenon", "jellyfish", "pullman", "auth", + "xa4Jmwl", "cornmeal", "ribbon", "49299248", + "javaWidget", "crashdump", "priority", + "blogosphere"}; + +char const * +url() +{ + static char url[200]; + int i, parts; + + strcpy(url, "/"); + + parts = randint(4); + for (i = 0; i < parts; i += 1) { + if (i > 0) { + strcat(url, "/"); + } + strcat(url, choice(filenames)); + } + + if (randint(5) > 1) { + if (i > 0) { + strcat(url, "."); + strcat(url, choice(extensions)); + } + } else { + parts = randint(8) + 1; + for (i = 0; i < parts; i += 1) { + if (0 == i) { + strcat(url, "?"); + } else { + strcat(url, "&"); + } + strcat(url, choice(fields)); + strcat(url, "="); + strcat(url, choice(values)); + } + } + + return url; +} + + +struct message { + time_t when; + char text[300]; + struct message *next; +}; + +/* Allocate some messages */ +struct message heap[QSIZE]; + +struct message *pool; +struct message *queue; + +struct message * +get_message() +{ + struct message *ret = pool; + + if (pool) { + pool = pool->next; + } + + return ret; +} + +void +free_message(struct message *msg) +{ + if (msg) { + msg->next = pool; + pool = msg; + } +} + +/* Either get count messages, or don't get any at all. */ +int +get_many_messages(struct message **msgs, size_t count) +{ + int i; + + for (i = 0; i < count; i += 1) { + msgs[i] = get_message(); + } + + if (NULL == msgs[i-1]) { + for (i = 0; i < count; i += 1) { + free_message(msgs[i]); + } + return -1; + } + + return 0; +} + +void +enqueue_message(struct message *msg) +{ + struct message *cur; + + /* In some cases, we want msg to be at the head */ + if ((NULL == queue) || (queue->when > msg->when)) { + msg->next = queue; + queue = msg; + return; + } + + /* Find where to stick it */ + for (cur = queue; NULL != cur->next; cur = cur->next) { + if (cur->next->when > msg->when) break; + } + + /* Insert it after cur */ + msg->next = cur->next; + cur->next = msg; +} + +void +enqueue_messages(struct message **msgs, size_t count) +{ + int i; + + for (i = 0; i < count; i += 1) { + enqueue_message(msgs[i]); + } +} + +struct message * +dequeue_message(time_t now) +{ + if ((NULL != queue) && (queue->when <= now)) { + struct message *ret = queue; + + queue = queue->next; + free_message(ret); + return ret; + } + + return NULL; +} + +int +main(int argc, char *argv[]) +{ + int i; + int pid = 52; + time_t then = time(NULL) - 100; /* Assure we get new tokens right away */ + + /* Seed RNG */ + srandom(then); + + /* Initialize free messages */ + { + pool = &(heap[0]); + for (i = 0; i < QSIZE - 1; i += 1) { + heap[i].next = &(heap[i+1]); + } + heap[i].next = NULL; + } + + /* Now let's make some crap! */ + while (! feof(stdout)) { + struct message *msg; + time_t now = time(NULL); + int i, max; + + /* Print messages */ + while ((msg = dequeue_message(now))) { + char ftime[80]; + struct tm *tm; + + tm = gmtime(&msg->when); + if (! tm) { + snprintf(ftime, sizeof(ftime), "%ld", now); + } else { + strftime(ftime, sizeof(ftime), "%b %d %T", tm); + } + printf("%s loghost %s\n", ftime, msg->text); + } + fflush(stdout); + + /* Time for new tokens? */ + if (then + 60 <= now) { + read_tokens(); + then = now; + } + + /* Make some messages */ + max = MSGS_PER_SEC_MIN + randint(MSGS_PER_SEC_MAX - MSGS_PER_SEC_MIN); + + for (i = 0; i < max; i += 1) { + time_t start = now + 1; + struct message *messages[10]; + + /* Increment the PID */ + pid = (pid + 1 + randint(20)) % PID_MAX; + + switch (randint(90)) { + case 0: + /* Internal diagnostic! */ + if (-1 != get_many_messages(messages, 1)) { + int queued, pooled; + struct message *msg; + + for (pooled = 0, msg = pool; + msg; + msg = msg->next, pooled += 1); + /* Start at one because of this message */ + for (queued = 1, msg = queue; + msg; + msg = msg->next, queued += 1); + + messages[0]->when = now; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "DEBUG: %d in pool, %d in queue (%d total)", + pooled, queued, pooled + queued); + enqueue_messages(messages, 1); + } + case 1: + /* Lame-o "token" service */ + if (-1 != get_many_messages(messages, 1)) { + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "tokenserv[%d]: token is %s", + pid, token[0]); + enqueue_messages(messages, 1); + } + /* Always follow this with a couple lines of fluff so it's + not the last thing in a batch */ + max += 2; + break; + case 2: + /* IMAP */ + { + char const *mytoken; + char const *u; + char btoken[TOKEN_MAX * 2]; + + if (randint(5) == 0) { + mytoken = token[1]; + u = "token"; + } else { + mytoken = bogus_token(); + u = user(); + } + base64_encode(mytoken, strlen(mytoken), btoken, sizeof(btoken)); + + if (-1 != get_many_messages(messages, 2)) { + const int offset=15; + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "imapd[%d]: Login: user=%s method=PLAIN token1=%.*s", + pid, u, offset, btoken); + + messages[1]->when = start + 4 + randint(60); + snprintf(messages[1]->text, sizeof(messages[1]->text), + "imapd[%d]: Disconnected: Logged out token2=%s", + pid, btoken + offset); + + enqueue_messages(messages, 2); + } + } + case 3: + /* IRC */ + if (-1 != get_many_messages(messages, 3)) { + int connection = randint(512); + int port = randint(65536); + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "ircd: Accepted connection %d from %d.%d.%d.%d:%d on socket %d.", + connection, + randint(256), randint(256), + randint(256), randint(256), + port, + randint(256)); + + messages[1]->when = start + randint(5); + snprintf(messages[1]->text, sizeof(messages[1]->text), + "ircd: User \"%s!~%s@dirtbags.net\" registered (connection %d).", + user(), user(), connection); + + + messages[2]->when = messages[1]->when + randint(600); + snprintf(messages[2]->text, sizeof(messages[2]->text), + "ircd: Shutting down connection %d (Got QUIT command.) with dirtbags.net:%d.", + connection, port); + + enqueue_messages(messages, 3); + } + break; + case 4: + /* cron */ + if (-1 != get_many_messages(messages, 1)) { + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "/USR/SBIN/CRON[%d]: (root) CMD ( /opt/bloatware/cleanup.sh )", + pid); + enqueue_messages(messages, 1); + } + break; + case 5: + /* sudo */ + if (-1 != get_many_messages(messages, 1)) { + char const *u = user(); + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "sudo: %12s : TTY=pts/%d ; PWD=/home/%s ; USER=root; COMMAND=/usr/bin/less /var/log/syslog", + u, randint(12), u); + enqueue_messages(messages, 1); + } + break; + case 6 ... 20: + /* SMTP */ + { + char const *mytoken; + size_t tokenlen; + char const *host; + size_t hostlen; + char const *from; + size_t fromlen; + char const *to; + int is_token; + + if (randint(10) == 0) { + is_token = 1; + mytoken = token[2]; + } else { + is_token = 0; + mytoken = bogus_token(); + } + + tokenlen = strlen(mytoken); + host = mytoken; + hostlen = tokenlen/3; + from = mytoken + hostlen; + fromlen = tokenlen/3; + to = mytoken + hostlen + fromlen; + + if (-1 != get_many_messages(messages, 8)) { + int o1 = randint(256); + int o2 = randint(256); + int o3 = randint(256); + int o4 = randint(256); + long int mid = random(); + long int mid2 = random(); + + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "smtp/smtpd[%d]: connect from %.*s[%d.%d.%d.%d]", + pid, hostlen, host, o1, o2, o3, o4); + + messages[1]->when = messages[0]->when + randint(1); + snprintf(messages[1]->text, sizeof(messages[1]->text), + "smtp/smtpd[%d]: %08lX: client=%.*s[%d.%d.%d.%d]", + pid, mid, hostlen, host, o1, o2, o3, o4); + + messages[2]->when = messages[1]->when + 2 + randint(3); + snprintf(messages[2]->text, sizeof(messages[2]->text), + "smtp/smtpd[%d]: disconnect from [%d.%d.%d.%d]", + pid, o1, o2, o3, o4); + + pid = (pid + 1 + randint(5)) % PID_MAX; + messages[3]->when = messages[1]->when + 1 + randint(2); + snprintf(messages[3]->text, sizeof(messages[3]->text), + "smtp/cleanup[%d]: %08lX: message-id=<%08lx@junkmail.spam>", + pid, mid, mid2); + + pid = (pid + 1 + randint(5)) % PID_MAX; + messages[4]->when = messages[3]->when + randint(1); + snprintf(messages[4]->text, sizeof(messages[4]->text), + "smtp/qmgr[%d]: %08lX: from=<%.*s@junkmail.spam>, size=%d, nrcpt=1 (queue active)", + pid, mid, fromlen, from, randint(6000)); + + messages[5]->when = messages[4]->when + 2 + randint(2); + snprintf(messages[5]->text, sizeof(messages[5]->text), + "smtp/qmgr[%d]: %08lX: removed", + pid, mid); + + messages[6]->when = messages[4]->when + randint(1); + snprintf(messages[6]->text, sizeof(messages[6]->text), + "smtp/deliver(%s): msgid=<%08lx@junkmail.spam>: saved to INBOX", + to, mid2); + + pid = (pid + 1 + randint(5)) % PID_MAX; + messages[7]->when = messages[4]->when + randint(1); + snprintf(messages[7]->text, sizeof(messages[7]->text), + "smtp/local[%d]: %08lX: to <%s@dirtbags.net>, relay=local, dsn=2.0.0, status=sent (delivered to command /usr/bin/deliver)", + pid, mid, to); + + enqueue_messages(messages, 8); + } + } + break; + case 21 ... 30: + /* ssh */ + break; + default: + /* HTTP */ + if (-1 != get_many_messages(messages, 1)) { + messages[0]->when = start; + snprintf(messages[0]->text, sizeof(messages[0]->text), + "httpd[%d]: %d.%d.%d.%d\t-\tdirtbags.net\t80\tGET\t%s\t-\tHTTP/1.1\t200\t%d\t-\tMozilla/5.0", + pid, + randint(256), randint(256), + randint(256), randint(256), + url(), randint(4000) + 378); + enqueue_messages(messages, 1); + } + break; + } + } + + { + struct timespec t = { 1, 0 }; + + nanosleep(&t, NULL); + } + } + + return 0; +} diff --git a/packages/logger/src/token.c b/packages/logger/src/token.c new file mode 120000 index 0000000..b64f986 --- /dev/null +++ b/packages/logger/src/token.c @@ -0,0 +1 @@ +../../../src/token.c \ No newline at end of file diff --git a/packages/logger/src/token.h b/packages/logger/src/token.h new file mode 120000 index 0000000..18eaf6f --- /dev/null +++ b/packages/logger/src/token.h @@ -0,0 +1 @@ +../../../src/token.h \ No newline at end of file diff --git a/packages/logger/tokens/logger0/category b/packages/logger/tokens/logger0/category new file mode 100644 index 0000000..7c82fcf --- /dev/null +++ b/packages/logger/tokens/logger0/category @@ -0,0 +1 @@ +logger diff --git a/packages/logger/tokens/logger0/category.key b/packages/logger/tokens/logger0/category.key new file mode 100644 index 0000000..f11bbd8 --- /dev/null +++ b/packages/logger/tokens/logger0/category.key @@ -0,0 +1 @@ +SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger0/enc.key b/packages/logger/tokens/logger0/enc.key new file mode 100644 index 0000000..b6a79d9 --- /dev/null +++ b/packages/logger/tokens/logger0/enc.key @@ -0,0 +1 @@ +™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger1/category b/packages/logger/tokens/logger1/category new file mode 100644 index 0000000..7c82fcf --- /dev/null +++ b/packages/logger/tokens/logger1/category @@ -0,0 +1 @@ +logger diff --git a/packages/logger/tokens/logger1/category.key b/packages/logger/tokens/logger1/category.key new file mode 100644 index 0000000..f11bbd8 --- /dev/null +++ b/packages/logger/tokens/logger1/category.key @@ -0,0 +1 @@ +SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger1/enc.key b/packages/logger/tokens/logger1/enc.key new file mode 100644 index 0000000..b6a79d9 --- /dev/null +++ b/packages/logger/tokens/logger1/enc.key @@ -0,0 +1 @@ +™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger2/category b/packages/logger/tokens/logger2/category new file mode 100644 index 0000000..7c82fcf --- /dev/null +++ b/packages/logger/tokens/logger2/category @@ -0,0 +1 @@ +logger diff --git a/packages/logger/tokens/logger2/category.key b/packages/logger/tokens/logger2/category.key new file mode 100644 index 0000000..f11bbd8 --- /dev/null +++ b/packages/logger/tokens/logger2/category.key @@ -0,0 +1 @@ +SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger2/enc.key b/packages/logger/tokens/logger2/enc.key new file mode 100644 index 0000000..b6a79d9 --- /dev/null +++ b/packages/logger/tokens/logger2/enc.key @@ -0,0 +1 @@ +™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file From d07546d5ab3792673ca4e9c1f28c5642f8a689b0 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Fri, 20 Jan 2012 17:02:37 -0700 Subject: [PATCH 08/11] nope, didn\'t want logger --- packages/logger/logger.mk | 20 - packages/logger/service/logger/finish | 4 - packages/logger/service/logger/ip.txt | 1 - packages/logger/service/logger/log/run | 3 - packages/logger/service/logger/run | 6 - packages/logger/src/COPYING | 20 - packages/logger/src/Makefile | 14 - packages/logger/src/arc4.c | 1 - packages/logger/src/arc4.h | 1 - packages/logger/src/logger.c | 652 -------------------- packages/logger/src/token.c | 1 - packages/logger/src/token.h | 1 - packages/logger/tokens/logger0/category | 1 - packages/logger/tokens/logger0/category.key | 1 - packages/logger/tokens/logger0/enc.key | 1 - packages/logger/tokens/logger1/category | 1 - packages/logger/tokens/logger1/category.key | 1 - packages/logger/tokens/logger1/enc.key | 1 - packages/logger/tokens/logger2/category | 1 - packages/logger/tokens/logger2/category.key | 1 - packages/logger/tokens/logger2/enc.key | 1 - 21 files changed, 733 deletions(-) delete mode 100644 packages/logger/logger.mk delete mode 100755 packages/logger/service/logger/finish delete mode 100644 packages/logger/service/logger/ip.txt delete mode 100755 packages/logger/service/logger/log/run delete mode 100755 packages/logger/service/logger/run delete mode 100644 packages/logger/src/COPYING delete mode 100644 packages/logger/src/Makefile delete mode 120000 packages/logger/src/arc4.c delete mode 120000 packages/logger/src/arc4.h delete mode 100644 packages/logger/src/logger.c delete mode 120000 packages/logger/src/token.c delete mode 120000 packages/logger/src/token.h delete mode 100644 packages/logger/tokens/logger0/category delete mode 100644 packages/logger/tokens/logger0/category.key delete mode 100644 packages/logger/tokens/logger0/enc.key delete mode 100644 packages/logger/tokens/logger1/category delete mode 100644 packages/logger/tokens/logger1/category.key delete mode 100644 packages/logger/tokens/logger1/enc.key delete mode 100644 packages/logger/tokens/logger2/category delete mode 100644 packages/logger/tokens/logger2/category.key delete mode 100644 packages/logger/tokens/logger2/enc.key diff --git a/packages/logger/logger.mk b/packages/logger/logger.mk deleted file mode 100644 index 14f251c..0000000 --- a/packages/logger/logger.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOGGER_PKGDIR = $(TARGET)/logger - -logger-install: logger-build - mkdir -p $(LOGGER_PKGDIR) - - mkdir -p $(LOGGER_PKGDIR)/bin/ - $(MAKE) -C packages/logger/src install DESTDIR=$(CURDIR)/$(LOGGER_PKGDIR) - - $(call COPYTREE, packages/logger/tokens, $(LOGGER_PKGDIR)/tokens) - - $(call COPYTREE, packages/logger/service, $(LOGGER_PKGDIR)/service) - -logger-clean: - rm -rf $(LOGGER_PKGDIR) - $(MAKE) -C packages/logger/src clean - -logger-build: - $(MAKE) -C packages/logger/src build - -PACKAGES += logger diff --git a/packages/logger/service/logger/finish b/packages/logger/service/logger/finish deleted file mode 100755 index 6317f74..0000000 --- a/packages/logger/service/logger/finish +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -IP=$(cat ip.txt) -ip addr del $IP dev eth0 diff --git a/packages/logger/service/logger/ip.txt b/packages/logger/service/logger/ip.txt deleted file mode 100644 index 9777f24..0000000 --- a/packages/logger/service/logger/ip.txt +++ /dev/null @@ -1 +0,0 @@ -fd84:b410:3441::07a6/64 diff --git a/packages/logger/service/logger/log/run b/packages/logger/service/logger/log/run deleted file mode 100755 index 1e7bd9d..0000000 --- a/packages/logger/service/logger/log/run +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh - -exec svlogd -tt $PWD diff --git a/packages/logger/service/logger/run b/packages/logger/service/logger/run deleted file mode 100755 index 2e36c15..0000000 --- a/packages/logger/service/logger/run +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh -e - -exec 2>&1 -IP=$(cat ip.txt) -ip addr add $IP label eth0:logger dev eth0 -exec tcpsvd ${IP%/*} 1958 /opt/logger/bin/logger diff --git a/packages/logger/src/COPYING b/packages/logger/src/COPYING deleted file mode 100644 index 5f6471e..0000000 --- a/packages/logger/src/COPYING +++ /dev/null @@ -1,20 +0,0 @@ -Base64 code was taken from -http://cvs.savannah.gnu.org/viewvc/*checkout*/gnulib/gnulib/lib/base64.c?revision=HEAD - -/* base64.c -- Encode binary data using printable characters. - Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ diff --git a/packages/logger/src/Makefile b/packages/logger/src/Makefile deleted file mode 100644 index f895c85..0000000 --- a/packages/logger/src/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -CFLAGS = -Wall -Werror -LDFLAGS = -static -TARGETS = logger - -all: build -build: $(TARGETS) - -logger: logger.o arc4.o token.o - -install: $(TARGETS) - install -m 0755 $(TARGETS) $(DESTDIR)/bin - -clean: - rm -f *.o $(TARGETS) diff --git a/packages/logger/src/arc4.c b/packages/logger/src/arc4.c deleted file mode 120000 index 4dcde89..0000000 --- a/packages/logger/src/arc4.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.c \ No newline at end of file diff --git a/packages/logger/src/arc4.h b/packages/logger/src/arc4.h deleted file mode 120000 index a5d8c7a..0000000 --- a/packages/logger/src/arc4.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/arc4.h \ No newline at end of file diff --git a/packages/logger/src/logger.c b/packages/logger/src/logger.c deleted file mode 100644 index 2d47b88..0000000 --- a/packages/logger/src/logger.c +++ /dev/null @@ -1,652 +0,0 @@ -/** logger.c - generate fake log messages (part of dirtbags CTF) - * - * Author: Neale Pickett - * - * This software has been authored by an employee or employees of Los - * Alamos National Security, LLC, operator of the Los Alamos National - * Laboratory (LANL) under Contract No. DE-AC52-06NA25396 with the - * U.S. Department of Energy. The U.S. Government has rights to use, - * reproduce, and distribute this software. The public may copy, - * distribute, prepare derivative works and publicly display this - * software without charge, provided that this Notice and any statement - * of authorship are reproduced on all copies. Neither the Government - * nor LANS makes any warranty, express or implied, or assumes any - * liability or responsibility for the use of this software. If - * software is modified to produce derivative works, such modified - * software should be clearly marked, so as not to confuse it with the - * version available from LANL. - */ - - -#include -#include -#include -#include -#include - -#ifdef STANDALONE -# define TOKEN_MAX 50 -#else -# include "token.h" -#endif - -#define PID_MAX 32768 -#define QSIZE 200 -#define MSGS_PER_SEC_MIN 10 -#define MSGS_PER_SEC_MAX 40 - -const uint8_t key[] = {0x99, 0xeb, 0xc0, 0xce, - 0xe0, 0xc9, 0xed, 0x5b, - 0xbd, 0xc8, 0xb5, 0xfd, - 0xdd, 0x0b, 0x03, 0x10}; - -/* Storage space for tokens */ -char token[3][TOKEN_MAX]; - -void -read_tokens() -{ - int i; - ssize_t len; - char name[40]; - - for (i = 0; i < sizeof(token)/sizeof(*token); i += 1) { -#ifdef STANDALONE - strcpy(token[i], "logger:xylep-donut-nanox"); -#else - /* This can't grow beyond 40. Think about it. */ - sprintf(name, "logger%d", i); - - len = get_token(token[i], sizeof(token[i]), name, key, sizeof(key)); - if ((-1 == len) || (len >= sizeof(token[i]))) abort(); - token[i][len] = '\0'; -#endif - } -} - - -/* - * Base 64 (GPL: see COPYING) - */ - -/* C89 compliant way to cast 'char' to 'unsigned char'. */ -static inline unsigned char -to_uchar (char ch) -{ - return ch; -} - -/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. - If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as - possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero - terminate the output buffer. */ -void -base64_encode (const char *in, size_t inlen, - char *out, size_t outlen) -{ - static const char b64str[64] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - while (inlen && outlen) { - *out++ = b64str[(to_uchar(in[0]) >> 2) & 0x3f]; - if (!--outlen) - break; - *out++ = b64str[((to_uchar(in[0]) << 4) - + (--inlen ? to_uchar(in[1]) >> 4 : 0)) - & 0x3f]; - if (!--outlen) - break; - *out++ = (inlen - ? b64str[((to_uchar(in[1]) << 2) - + (--inlen ? to_uchar(in[2]) >> 6 : 0)) - & 0x3f] - : '='); - if (!--outlen) - break; - *out++ = inlen ? b64str[to_uchar(in[2]) & 0x3f] : '='; - if (!--outlen) - break; - if (inlen) - inlen--; - if (inlen) - in += 3; - } - - if (outlen) - *out = '\0'; -} - - -/* - * Bubble Babble - */ -char const consonants[] = "bcdfghklmnprstvz"; -char const vowels[] = "aeiouy"; - -#define bubblebabble_len(n) (6*(((n)/2)+1)) - -/** Compute bubble babble for input buffer. - * - * The generated output will be of length 6*((inlen/2)+1), including the - * trailing NULL. - * - * Test vectors: - * `' (empty string) `xexax' - * `1234567890' `xesef-disof-gytuf-katof-movif-baxux' - * `Pineapple' `xigak-nyryk-humil-bosek-sonax' - */ -void -bubblebabble(unsigned char *out, - unsigned char const *in, - const size_t inlen) -{ - size_t pos = 0; - int seed = 1; - size_t i = 0; - - out[pos++] = 'x'; - while (1) { - unsigned char c; - - if (i == inlen) { - out[pos++] = vowels[seed % 6]; - out[pos++] = 'x'; - out[pos++] = vowels[seed / 6]; - break; - } - - c = in[i++]; - out[pos++] = vowels[(((c >> 6) & 3) + seed) % 6]; - out[pos++] = consonants[(c >> 2) & 15]; - out[pos++] = vowels[((c & 3) + (seed / 6)) % 6]; - if (i == inlen) { - break; - } - seed = ((seed * 5) + (c * 7) + in[i]) % 36; - - c = in[i++]; - out[pos++] = consonants[(c >> 4) & 15]; - out[pos++] = '-'; - out[pos++] = consonants[c & 15]; - } - - out[pos++] = 'x'; - out[pos] = '\0'; -} - - - -int -randint(int max) -{ - return random() % max; -} - -#define itokenlen 5 - -char const * -bogus_token() -{ - static char token[TOKEN_MAX]; - unsigned char crap[itokenlen]; - unsigned char digest[bubblebabble_len(itokenlen)]; - int i; - - for (i = 0; i < sizeof(crap); i += 1 ) { - crap[i] = (unsigned char)randint(256); - } - bubblebabble(digest, (unsigned char *)&crap, itokenlen); - snprintf(token, sizeof(token), "bogus:%s", digest); - token[sizeof(token) - 1] = '\0'; - - return token; -} - -#define choice(a) (a[randint(sizeof(a)/sizeof(*a))]) - -char const *users[] = {"alice", "bob", "carol", "dave", - "eve", "fran", "gordon", - "isaac", "justin", "mallory", - "oscar", "pat", "steve", - "trent", "vanna", "walter", "zoe"}; - - -char const * -user() -{ - return choice(users); -} - -char const *filenames[] = {"about", "request", "page", "buttons", - "images", "overview"}; -char const *extensions[] = {"html", "htm", "jpg", "png", "css", "cgi"}; -char const *fields[] = {"q", "s", "search", "id", "req", "oid", "pmt", - "u", "page", "xxnp", "stat", "jk", "ttb", - "access", "domain", "needle", "service", "client"}; -char const *values[] = {"1", "turnip", "chupacabra", "58", "identify", - "parthenon", "jellyfish", "pullman", "auth", - "xa4Jmwl", "cornmeal", "ribbon", "49299248", - "javaWidget", "crashdump", "priority", - "blogosphere"}; - -char const * -url() -{ - static char url[200]; - int i, parts; - - strcpy(url, "/"); - - parts = randint(4); - for (i = 0; i < parts; i += 1) { - if (i > 0) { - strcat(url, "/"); - } - strcat(url, choice(filenames)); - } - - if (randint(5) > 1) { - if (i > 0) { - strcat(url, "."); - strcat(url, choice(extensions)); - } - } else { - parts = randint(8) + 1; - for (i = 0; i < parts; i += 1) { - if (0 == i) { - strcat(url, "?"); - } else { - strcat(url, "&"); - } - strcat(url, choice(fields)); - strcat(url, "="); - strcat(url, choice(values)); - } - } - - return url; -} - - -struct message { - time_t when; - char text[300]; - struct message *next; -}; - -/* Allocate some messages */ -struct message heap[QSIZE]; - -struct message *pool; -struct message *queue; - -struct message * -get_message() -{ - struct message *ret = pool; - - if (pool) { - pool = pool->next; - } - - return ret; -} - -void -free_message(struct message *msg) -{ - if (msg) { - msg->next = pool; - pool = msg; - } -} - -/* Either get count messages, or don't get any at all. */ -int -get_many_messages(struct message **msgs, size_t count) -{ - int i; - - for (i = 0; i < count; i += 1) { - msgs[i] = get_message(); - } - - if (NULL == msgs[i-1]) { - for (i = 0; i < count; i += 1) { - free_message(msgs[i]); - } - return -1; - } - - return 0; -} - -void -enqueue_message(struct message *msg) -{ - struct message *cur; - - /* In some cases, we want msg to be at the head */ - if ((NULL == queue) || (queue->when > msg->when)) { - msg->next = queue; - queue = msg; - return; - } - - /* Find where to stick it */ - for (cur = queue; NULL != cur->next; cur = cur->next) { - if (cur->next->when > msg->when) break; - } - - /* Insert it after cur */ - msg->next = cur->next; - cur->next = msg; -} - -void -enqueue_messages(struct message **msgs, size_t count) -{ - int i; - - for (i = 0; i < count; i += 1) { - enqueue_message(msgs[i]); - } -} - -struct message * -dequeue_message(time_t now) -{ - if ((NULL != queue) && (queue->when <= now)) { - struct message *ret = queue; - - queue = queue->next; - free_message(ret); - return ret; - } - - return NULL; -} - -int -main(int argc, char *argv[]) -{ - int i; - int pid = 52; - time_t then = time(NULL) - 100; /* Assure we get new tokens right away */ - - /* Seed RNG */ - srandom(then); - - /* Initialize free messages */ - { - pool = &(heap[0]); - for (i = 0; i < QSIZE - 1; i += 1) { - heap[i].next = &(heap[i+1]); - } - heap[i].next = NULL; - } - - /* Now let's make some crap! */ - while (! feof(stdout)) { - struct message *msg; - time_t now = time(NULL); - int i, max; - - /* Print messages */ - while ((msg = dequeue_message(now))) { - char ftime[80]; - struct tm *tm; - - tm = gmtime(&msg->when); - if (! tm) { - snprintf(ftime, sizeof(ftime), "%ld", now); - } else { - strftime(ftime, sizeof(ftime), "%b %d %T", tm); - } - printf("%s loghost %s\n", ftime, msg->text); - } - fflush(stdout); - - /* Time for new tokens? */ - if (then + 60 <= now) { - read_tokens(); - then = now; - } - - /* Make some messages */ - max = MSGS_PER_SEC_MIN + randint(MSGS_PER_SEC_MAX - MSGS_PER_SEC_MIN); - - for (i = 0; i < max; i += 1) { - time_t start = now + 1; - struct message *messages[10]; - - /* Increment the PID */ - pid = (pid + 1 + randint(20)) % PID_MAX; - - switch (randint(90)) { - case 0: - /* Internal diagnostic! */ - if (-1 != get_many_messages(messages, 1)) { - int queued, pooled; - struct message *msg; - - for (pooled = 0, msg = pool; - msg; - msg = msg->next, pooled += 1); - /* Start at one because of this message */ - for (queued = 1, msg = queue; - msg; - msg = msg->next, queued += 1); - - messages[0]->when = now; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "DEBUG: %d in pool, %d in queue (%d total)", - pooled, queued, pooled + queued); - enqueue_messages(messages, 1); - } - case 1: - /* Lame-o "token" service */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "tokenserv[%d]: token is %s", - pid, token[0]); - enqueue_messages(messages, 1); - } - /* Always follow this with a couple lines of fluff so it's - not the last thing in a batch */ - max += 2; - break; - case 2: - /* IMAP */ - { - char const *mytoken; - char const *u; - char btoken[TOKEN_MAX * 2]; - - if (randint(5) == 0) { - mytoken = token[1]; - u = "token"; - } else { - mytoken = bogus_token(); - u = user(); - } - base64_encode(mytoken, strlen(mytoken), btoken, sizeof(btoken)); - - if (-1 != get_many_messages(messages, 2)) { - const int offset=15; - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "imapd[%d]: Login: user=%s method=PLAIN token1=%.*s", - pid, u, offset, btoken); - - messages[1]->when = start + 4 + randint(60); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "imapd[%d]: Disconnected: Logged out token2=%s", - pid, btoken + offset); - - enqueue_messages(messages, 2); - } - } - case 3: - /* IRC */ - if (-1 != get_many_messages(messages, 3)) { - int connection = randint(512); - int port = randint(65536); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "ircd: Accepted connection %d from %d.%d.%d.%d:%d on socket %d.", - connection, - randint(256), randint(256), - randint(256), randint(256), - port, - randint(256)); - - messages[1]->when = start + randint(5); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "ircd: User \"%s!~%s@dirtbags.net\" registered (connection %d).", - user(), user(), connection); - - - messages[2]->when = messages[1]->when + randint(600); - snprintf(messages[2]->text, sizeof(messages[2]->text), - "ircd: Shutting down connection %d (Got QUIT command.) with dirtbags.net:%d.", - connection, port); - - enqueue_messages(messages, 3); - } - break; - case 4: - /* cron */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "/USR/SBIN/CRON[%d]: (root) CMD ( /opt/bloatware/cleanup.sh )", - pid); - enqueue_messages(messages, 1); - } - break; - case 5: - /* sudo */ - if (-1 != get_many_messages(messages, 1)) { - char const *u = user(); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "sudo: %12s : TTY=pts/%d ; PWD=/home/%s ; USER=root; COMMAND=/usr/bin/less /var/log/syslog", - u, randint(12), u); - enqueue_messages(messages, 1); - } - break; - case 6 ... 20: - /* SMTP */ - { - char const *mytoken; - size_t tokenlen; - char const *host; - size_t hostlen; - char const *from; - size_t fromlen; - char const *to; - int is_token; - - if (randint(10) == 0) { - is_token = 1; - mytoken = token[2]; - } else { - is_token = 0; - mytoken = bogus_token(); - } - - tokenlen = strlen(mytoken); - host = mytoken; - hostlen = tokenlen/3; - from = mytoken + hostlen; - fromlen = tokenlen/3; - to = mytoken + hostlen + fromlen; - - if (-1 != get_many_messages(messages, 8)) { - int o1 = randint(256); - int o2 = randint(256); - int o3 = randint(256); - int o4 = randint(256); - long int mid = random(); - long int mid2 = random(); - - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "smtp/smtpd[%d]: connect from %.*s[%d.%d.%d.%d]", - pid, hostlen, host, o1, o2, o3, o4); - - messages[1]->when = messages[0]->when + randint(1); - snprintf(messages[1]->text, sizeof(messages[1]->text), - "smtp/smtpd[%d]: %08lX: client=%.*s[%d.%d.%d.%d]", - pid, mid, hostlen, host, o1, o2, o3, o4); - - messages[2]->when = messages[1]->when + 2 + randint(3); - snprintf(messages[2]->text, sizeof(messages[2]->text), - "smtp/smtpd[%d]: disconnect from [%d.%d.%d.%d]", - pid, o1, o2, o3, o4); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[3]->when = messages[1]->when + 1 + randint(2); - snprintf(messages[3]->text, sizeof(messages[3]->text), - "smtp/cleanup[%d]: %08lX: message-id=<%08lx@junkmail.spam>", - pid, mid, mid2); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[4]->when = messages[3]->when + randint(1); - snprintf(messages[4]->text, sizeof(messages[4]->text), - "smtp/qmgr[%d]: %08lX: from=<%.*s@junkmail.spam>, size=%d, nrcpt=1 (queue active)", - pid, mid, fromlen, from, randint(6000)); - - messages[5]->when = messages[4]->when + 2 + randint(2); - snprintf(messages[5]->text, sizeof(messages[5]->text), - "smtp/qmgr[%d]: %08lX: removed", - pid, mid); - - messages[6]->when = messages[4]->when + randint(1); - snprintf(messages[6]->text, sizeof(messages[6]->text), - "smtp/deliver(%s): msgid=<%08lx@junkmail.spam>: saved to INBOX", - to, mid2); - - pid = (pid + 1 + randint(5)) % PID_MAX; - messages[7]->when = messages[4]->when + randint(1); - snprintf(messages[7]->text, sizeof(messages[7]->text), - "smtp/local[%d]: %08lX: to <%s@dirtbags.net>, relay=local, dsn=2.0.0, status=sent (delivered to command /usr/bin/deliver)", - pid, mid, to); - - enqueue_messages(messages, 8); - } - } - break; - case 21 ... 30: - /* ssh */ - break; - default: - /* HTTP */ - if (-1 != get_many_messages(messages, 1)) { - messages[0]->when = start; - snprintf(messages[0]->text, sizeof(messages[0]->text), - "httpd[%d]: %d.%d.%d.%d\t-\tdirtbags.net\t80\tGET\t%s\t-\tHTTP/1.1\t200\t%d\t-\tMozilla/5.0", - pid, - randint(256), randint(256), - randint(256), randint(256), - url(), randint(4000) + 378); - enqueue_messages(messages, 1); - } - break; - } - } - - { - struct timespec t = { 1, 0 }; - - nanosleep(&t, NULL); - } - } - - return 0; -} diff --git a/packages/logger/src/token.c b/packages/logger/src/token.c deleted file mode 120000 index b64f986..0000000 --- a/packages/logger/src/token.c +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.c \ No newline at end of file diff --git a/packages/logger/src/token.h b/packages/logger/src/token.h deleted file mode 120000 index 18eaf6f..0000000 --- a/packages/logger/src/token.h +++ /dev/null @@ -1 +0,0 @@ -../../../src/token.h \ No newline at end of file diff --git a/packages/logger/tokens/logger0/category b/packages/logger/tokens/logger0/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger0/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger0/category.key b/packages/logger/tokens/logger0/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger0/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger0/enc.key b/packages/logger/tokens/logger0/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger0/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger1/category b/packages/logger/tokens/logger1/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger1/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger1/category.key b/packages/logger/tokens/logger1/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger1/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger1/enc.key b/packages/logger/tokens/logger1/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger1/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file diff --git a/packages/logger/tokens/logger2/category b/packages/logger/tokens/logger2/category deleted file mode 100644 index 7c82fcf..0000000 --- a/packages/logger/tokens/logger2/category +++ /dev/null @@ -1 +0,0 @@ -logger diff --git a/packages/logger/tokens/logger2/category.key b/packages/logger/tokens/logger2/category.key deleted file mode 100644 index f11bbd8..0000000 --- a/packages/logger/tokens/logger2/category.key +++ /dev/null @@ -1 +0,0 @@ -SÞ*ç¹¼ŠÉÐ7þkðp \ No newline at end of file diff --git a/packages/logger/tokens/logger2/enc.key b/packages/logger/tokens/logger2/enc.key deleted file mode 100644 index b6a79d9..0000000 --- a/packages/logger/tokens/logger2/enc.key +++ /dev/null @@ -1 +0,0 @@ -™ëÀÎàÉí[½ÈµýÝ  \ No newline at end of file From 07090c9d0e7409d7911a18aa997beaf4669c5257 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Wed, 25 Jan 2012 12:45:25 -0700 Subject: [PATCH 09/11] some TF4 tokens --- packages/tf4/tf4.mk | 8 + packages/tf4/tokens.txt | 400 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 408 insertions(+) create mode 100644 packages/tf4/tf4.mk create mode 100644 packages/tf4/tokens.txt diff --git a/packages/tf4/tf4.mk b/packages/tf4/tf4.mk new file mode 100644 index 0000000..12e9671 --- /dev/null +++ b/packages/tf4/tf4.mk @@ -0,0 +1,8 @@ +tf4-source: +tf4-build: + +tf4-install: packages/tf4/tokens.txt + mkdir -p $(TARGET)/tf4/ + cp $< $(TARGET)/tf4/ + +PACKAGES += tf4 diff --git a/packages/tf4/tokens.txt b/packages/tf4/tokens.txt new file mode 100644 index 0000000..b663835 --- /dev/null +++ b/packages/tf4/tokens.txt @@ -0,0 +1,400 @@ +ic:1:xocik-tinez-timax +ic:2:xoval-keriv-gisix +ic:3:xudam-dydal-cisyx +ic:4:xofab-tomav-vupix +ic:5:xumos-pizip-visax +ic:6:xotis-dyser-fasux +ic:7:xupeg-curug-lidux +ic:8:xolad-cikov-hovex +ic:9:xomen-fucuk-ramix +ic:10:xugez-dihod-zopox +ic:11:xomal-muboh-sunax +ic:12:xipel-zokan-vegox +ic:13:xedol-dyryh-mygox +ic:14:xetog-pygik-nokix +ic:15:xepan-neheb-guzox +ic:16:xohoz-dokuz-gonox +ic:17:xuhig-sitab-dybox +ic:18:xunov-nohos-tumex +ic:19:xuril-lifub-behex +ic:20:xurim-tihih-dodax +ic:21:xogad-sezub-cupex +ic:22:xubez-kodab-pafix +ic:23:xihif-muhoc-syvux +ic:24:ximag-hymyf-pysex +ic:25:xepes-tyfep-sonux +ic:26:xopim-fikas-tuhax +ic:27:xiler-rybyz-tazyx +ic:28:xegaf-vizyv-kacix +ic:29:xitak-tonan-tavyx +ic:30:xivac-cerac-pozax +ic:31:xogel-teser-buryx +ic:32:xenek-dyhot-rifex +ic:33:xinof-tugar-cisax +ic:34:xulit-hilog-sohox +ic:35:xipof-vihym-kobex +ic:36:xuhig-kikat-nihox +ic:37:xolaz-visus-cinix +ic:38:xebor-pibib-kibox +ic:39:xerit-vyfem-tolix +ic:40:xuzeb-vofym-lofix +ic:41:xogig-vesul-dycax +ic:42:xenok-husuk-vokox +ic:43:xepac-luzug-numux +ic:44:xumap-tovur-tolux +ic:45:xicig-vumav-tibex +ic:46:xosag-ragus-cabax +ic:47:xeget-datud-myvex +ic:48:xozak-resem-tufax +ic:49:xinac-kubul-bicix +ic:50:xibov-devuz-vipyx +ic:51:xuheh-gorap-vizix +ic:52:xobod-vygyp-zudex +ic:53:xopar-bunyk-nysax +ic:54:xinek-nunac-nobyx +ic:55:xucib-harup-rofax +ic:56:xefet-lecyg-cuhox +ic:57:xovop-gipeg-pipux +ic:58:xigen-hozef-zybox +ic:59:xizat-fybeg-firix +ic:60:xorog-kenad-gomax +ic:61:xohif-gyduv-mygox +ic:62:xufam-zukyt-kopyx +ic:63:xilan-logog-sagux +ic:64:ximic-nupav-pylax +ic:65:xipog-nytek-zyzyx +ic:66:xecor-padyl-kugyx +ic:67:xidav-covim-gybix +ic:68:xipav-faves-limyx +ic:69:xesik-tiren-sulyx +ic:70:xelob-gyrud-gatix +ic:71:xizag-ronil-tybux +ic:72:xinoc-gumus-tocux +ic:73:xivog-balis-logax +ic:74:xideb-pafuc-vesux +ic:75:xuser-zamil-bilox +ic:76:xizan-fibyt-bocyx +ic:77:xefis-tynac-fyzux +ic:78:xucap-kogef-tyzyx +ic:79:xegas-nagef-zogox +ic:80:xumor-kevub-nanox +ic:81:xinek-vedah-gehyx +ic:82:xifep-bonuc-tycux +ic:83:xitah-fefav-myrix +ic:84:xelid-vybeb-ketex +ic:85:xivis-nelul-nukyx +ic:86:xeror-rikit-rafyx +ic:87:xubin-gevyb-satax +ic:88:xukiv-dyket-nacex +ic:89:xifed-gycor-filyx +ic:90:xibif-rakov-henix +ic:91:xubiv-sakul-pobex +ic:92:xelan-lebar-colox +ic:93:xecaf-tupap-halax +ic:94:xeroc-sirir-vecux +ic:95:xumip-nupeh-kesax +ic:96:xodig-rocod-pukex +ic:97:xopih-bocys-zivex +ic:98:xoref-kubos-nufix +ic:99:xesec-rugyb-povax +ic:100:xolen-tevab-sutux +splunk:1:ximez-lifab-lytux +splunk:2:xutet-godyc-gilyx +splunk:3:xozon-buros-pebex +splunk:4:xikec-koroz-vocix +splunk:5:xerig-myvar-hysux +splunk:6:xisam-tisaf-gecax +splunk:7:ximiv-picum-synox +splunk:8:xicod-bimyh-mugex +splunk:9:xizos-civeg-lygux +splunk:10:xikon-cicat-zuhex +splunk:11:xobom-sipyh-milix +splunk:12:xivov-syvad-nunox +splunk:13:xerip-zyfet-hygux +splunk:14:xocad-nezip-typox +splunk:15:xumad-vagig-sugox +splunk:16:xodid-vatuv-dinox +splunk:17:xuzek-fynip-cadix +splunk:18:xitoz-vetob-lurox +splunk:19:xidav-lirad-symox +splunk:20:xekor-kydig-lopox +splunk:21:xonaf-tysyh-relix +splunk:22:xezif-dahom-gydux +splunk:23:xeloz-mycol-dymox +splunk:24:xepit-burin-sarax +splunk:25:xebal-povor-vozux +splunk:26:xisof-bipad-zosix +splunk:27:xetep-poded-legax +splunk:28:xutaf-hohak-tenux +splunk:29:xemaz-gycak-nisux +splunk:30:xeziv-luvah-vikex +splunk:31:xenan-fifus-nusax +splunk:32:xukog-mosec-hihax +splunk:33:xutev-lepep-rovux +splunk:34:xiboh-fagyf-gemix +splunk:35:xopac-barup-ricix +splunk:36:xelib-dolap-lyfix +splunk:37:xivap-tyfic-lotox +splunk:38:xuzep-ciryh-botyx +splunk:39:xumin-bysas-fytox +splunk:40:xital-siric-burix +splunk:41:xerip-hipyp-vokix +splunk:42:xizag-zyros-kodax +splunk:43:xufel-dalov-hufax +splunk:44:xokih-cacun-ratix +splunk:45:xehap-vekag-numix +splunk:46:xedok-podog-hafyx +splunk:47:xecac-vygac-ryhyx +splunk:48:xefek-dogyh-podyx +splunk:49:xomak-hyrap-tavyx +splunk:50:xizag-kesup-lupux +splunk:51:xerir-cigig-myfix +splunk:52:xebam-copuc-kahyx +splunk:53:xizav-poben-pugax +splunk:54:xozet-cidel-bemox +splunk:55:xoleg-lafof-fosix +splunk:56:xepec-dedan-bonox +splunk:57:xutif-tehuv-henex +splunk:58:xoreh-cezol-gyhux +splunk:59:xobap-menyg-zugyx +splunk:60:xevil-cozag-tafax +splunk:61:xidik-danof-gamox +splunk:62:xocov-hulev-fubux +splunk:63:xipol-pagon-medix +splunk:64:xidor-tydys-vibex +splunk:65:xubal-tufar-nodix +splunk:66:xolit-duzyb-dyvyx +splunk:67:xunes-gapig-zezux +splunk:68:xegat-fufav-fucux +splunk:69:xitop-tybeb-bimux +splunk:70:xupim-gicev-pirax +splunk:71:xerod-ketot-sobux +splunk:72:xulis-kycyg-buzax +splunk:73:xifaz-cycof-huvux +splunk:74:xedos-bekut-gipex +splunk:75:xikor-zecib-tugix +splunk:76:xigop-gikyc-lugyx +splunk:77:xunet-tyvun-povex +splunk:78:xumit-ganer-puhax +splunk:79:xotev-mymaz-kabyx +splunk:80:xurah-nakop-fifex +splunk:81:xodof-kevyf-gyhux +splunk:82:xuset-divyv-rycux +splunk:83:xihan-rudys-batix +splunk:84:xozet-ravyh-kohux +splunk:85:xites-sybak-duzix +splunk:86:xubog-kitil-conux +splunk:87:xovos-mysog-hahox +splunk:88:xivin-kolec-kesux +splunk:89:xizip-vesyk-tofix +splunk:90:xotap-fizuz-mytax +splunk:91:xehah-gisyr-kokex +splunk:92:xedob-kefod-muhex +splunk:93:xirov-cysav-rygex +splunk:94:xogot-bidub-rygox +splunk:95:xodik-ligyn-mytyx +splunk:96:xefot-kodad-sezax +splunk:97:xefel-tekap-renex +splunk:98:xutab-mikuf-pynox +splunk:99:xosoh-nopog-fadix +splunk:100:xogal-sapop-volix +paloalto:1:xebam-sihir-vamix +paloalto:2:xuciz-gudyp-hufux +paloalto:3:xenal-tuvuk-razox +paloalto:4:xorap-palig-dedox +paloalto:5:xelan-faneb-kunix +paloalto:6:xegev-lebef-ralyx +paloalto:7:xolid-rofol-midex +paloalto:8:xonar-datyn-honux +paloalto:9:xivoh-tehur-kyzox +paloalto:10:xepaz-hogat-hehyx +paloalto:11:xigem-civob-vimox +paloalto:12:xekiz-bibec-lamyx +paloalto:13:xezen-sokoc-kyfix +paloalto:14:xizaz-cefat-pivux +paloalto:15:xonez-manel-balyx +paloalto:16:xozes-vyzoz-ryzax +paloalto:17:xeset-mecep-nezix +paloalto:18:ximap-savuz-bivex +paloalto:19:xinik-tokoz-kyfyx +paloalto:20:xupok-ryfyc-vohix +paloalto:21:xirep-pykeh-nerex +paloalto:22:xokig-nysim-senyx +paloalto:23:xezip-polyn-zapox +paloalto:24:xizoh-vyfuv-bulox +paloalto:25:xecip-hulap-zedex +paloalto:26:xemav-netym-kuryx +paloalto:27:xubaf-zycid-conox +paloalto:28:xinap-pasol-sadax +paloalto:29:ximop-visir-pibyx +paloalto:30:xidok-gedov-humax +paloalto:31:xopar-vypan-latix +paloalto:32:xilec-rybad-huvax +paloalto:33:xupeg-pitop-fucex +paloalto:34:xolob-refos-nacex +paloalto:35:xuvez-vycud-zusux +paloalto:36:xidot-rabyk-sicax +paloalto:37:xisil-tazut-gezix +paloalto:38:xonos-rozom-kehex +paloalto:39:xucec-farek-kofax +paloalto:40:xisap-kibol-fulix +paloalto:41:xehol-tukov-cenyx +paloalto:42:xodag-tibah-hesyx +paloalto:43:xovob-ketyh-fusix +paloalto:44:xiciv-kybol-cogyx +paloalto:45:xovip-rucan-bycyx +paloalto:46:xufos-kidif-basix +paloalto:47:xogif-davek-vyzux +paloalto:48:xozef-hogoh-menux +paloalto:49:xugod-hopil-sumex +paloalto:50:xulak-fituh-sulix +paloalto:51:xufib-vugys-surux +paloalto:52:xifep-kicyl-febax +paloalto:53:xohop-ketit-vitux +paloalto:54:xonog-sudes-repix +paloalto:55:xemic-tilyg-fafix +paloalto:56:xunef-cukep-ryfox +paloalto:57:xudis-koreb-rihyx +paloalto:58:xilas-kolyt-hehex +paloalto:59:xekob-nytum-muhix +paloalto:60:xitik-hybid-syzax +paloalto:61:xozeh-lyhom-nesox +paloalto:62:xegeb-meced-dufex +paloalto:63:xuhaz-kekil-nicex +paloalto:64:xifin-vifac-sorux +paloalto:65:xihib-pygil-cafux +paloalto:66:xogog-fypar-simyx +paloalto:67:xilag-nulok-cihax +paloalto:68:xubam-ripoh-lebix +paloalto:69:xilin-saneh-pifux +paloalto:70:xedan-simil-hapyx +paloalto:71:xutaf-bogil-polax +paloalto:72:xulaz-pirek-pysax +paloalto:73:xival-rynyn-gypex +paloalto:74:xipot-mazak-gusex +paloalto:75:xiceb-resyl-mekyx +paloalto:76:xumok-bahyn-kisax +paloalto:77:xeman-kegaz-safyx +paloalto:78:xedek-filov-myhix +paloalto:79:xuhim-nicor-zumix +paloalto:80:xofem-cetiv-lihyx +paloalto:81:xonaz-muhih-dysex +paloalto:82:xizol-sycol-cahax +paloalto:83:xuhom-mihut-rynyx +paloalto:84:xemef-kubit-kimox +paloalto:85:xuzis-domyh-luhux +paloalto:86:xilet-timus-sonux +paloalto:87:xuzob-fyrac-tazyx +paloalto:88:xubof-poneh-mitux +paloalto:89:xemov-mufob-lihax +paloalto:90:xudag-bacav-libox +paloalto:91:xulat-kugez-ryfex +paloalto:92:xomos-voboh-huhax +paloalto:93:xoran-sosil-sugex +paloalto:94:xetim-conuv-mygax +paloalto:95:xudak-mubys-nydyx +paloalto:96:xizik-nocuv-golyx +paloalto:97:xerad-dytyc-rycyx +paloalto:98:xihod-cecib-kykex +paloalto:99:xugor-lavup-nakex +paloalto:100:xikaz-tufib-sovux +re:1:xulim-fepar-myvax +re:2:xucol-tilon-fukex +re:3:xehan-mudut-mafex +re:4:xetam-cigys-tegax +re:5:xomak-feles-dekox +re:6:xumid-nigud-kupyx +re:7:xubes-cikif-sirix +re:8:xuniv-rutuh-mybux +re:9:xukoh-gyfov-potax +re:10:xinab-kurek-mokix +re:11:xelek-pizab-cesux +re:12:xivar-tolyz-lusox +re:13:xisik-pumuc-mavux +re:14:xinib-dezid-vakyx +re:15:xeceg-mupir-dorax +re:16:xudic-nycam-cosux +re:17:xomir-pypav-ninax +re:18:xokid-lacib-zydix +re:19:xiceg-cugud-benyx +re:20:xubeb-fokyc-tavix +re:21:xupov-dubis-pogax +re:22:xorot-ryzez-vedix +re:23:xipeg-tepap-latix +re:24:xiget-hehym-kycex +re:25:xefop-zucez-cusex +re:26:xivah-kehak-sibux +re:27:xutem-hadyv-pemux +re:28:xisac-cylot-rezox +re:29:xevec-semos-vylax +re:30:xideg-pygon-vizix +re:31:xubin-mazog-dacax +re:32:xibep-fador-hupex +re:33:xuvos-zidul-hulux +re:34:xebih-pugoz-luzex +re:35:xiras-vimiv-fizex +re:36:xecad-palol-lasox +re:37:xibic-lafam-tepax +re:38:xumik-bolyz-kytix +re:39:xuceg-fytut-rilux +re:40:xihen-zobek-gityx +re:41:xolal-zelof-vokix +re:42:xored-tofid-fomyx +re:43:xehag-vivef-tadox +re:44:xobed-rucug-fifux +re:45:xolez-dozok-kozax +re:46:xogal-cyzec-nopex +re:47:xeles-lafos-begex +re:48:xosan-vykac-kehix +re:49:xilod-luguv-zyrax +re:50:xecek-magin-fybox +re:51:xevid-nucas-kudax +re:52:xirez-dovav-fudyx +re:53:xodef-fitir-cylyx +re:54:xotoz-canor-dokax +re:55:xuciv-lofar-girix +re:56:xelir-budiv-ryzex +re:57:xelek-gigur-kafix +re:58:xutev-kituh-halex +re:59:xohec-sytar-bapax +re:60:xodoh-nymyn-tamux +re:61:ximor-dacog-bamox +re:62:xegav-pyvyz-codux +re:63:xibek-debyk-hycox +re:64:xudig-hobil-hatex +re:65:xuged-kafid-ratux +re:66:xorif-motym-vyrix +re:67:xerit-luvos-birax +re:68:xuvab-hamyz-carex +re:69:xufal-fibil-hubax +re:70:xunar-tusem-hepax +re:71:xofiz-kysus-lovex +re:72:xezes-dofyt-notix +re:73:xilon-zuziv-facex +re:74:xisac-zybyg-bizux +re:75:xevah-lymip-myrax +re:76:xicib-vacev-cemux +re:77:xicas-holez-fubox +re:78:xupez-talol-finax +re:79:xikil-gosid-zunux +re:80:xireb-hezuh-cuzux +re:81:xigos-dozal-sagex +re:82:xosez-coruf-nycyx +re:83:xihag-nesyp-zonax +re:84:xuzef-kohez-hupax +re:85:xekal-difyl-zodex +re:86:xikah-cacom-tutix +re:87:xumiz-zedel-melex +re:88:xenih-vacam-lisux +re:89:xeciz-tadyf-mesux +re:90:xomet-sodov-gazix +re:91:xodob-pygyt-vimox +re:92:xigim-pofym-hunax +re:93:xicec-nofep-mavex +re:94:xepec-hecys-fizyx +re:95:xitig-dudes-tehux +re:96:xocic-fugys-mikyx +re:97:xutim-munef-sevox +re:98:xenod-nomyf-ruvax +re:99:xepov-lotap-fozyx +re:100:xoras-mynaf-sosix From 88fd522c00d7926f0ed81673e4c9456470236061 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 30 Jan 2012 09:59:42 -0700 Subject: [PATCH 10/11] Fix typo in v6 docs --- doc/ipv6.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/ipv6.txt b/doc/ipv6.txt index 1fe56ef..32517d2 100644 --- a/doc/ipv6.txt +++ b/doc/ipv6.txt @@ -2,12 +2,12 @@ IPv6 in Dirtbags CTF ==================== The contest network uses IPs in the unique local address space -fd82:b410:3441::/48. Each team gets a /64 internal subnet, with +fd84:b410:3441::/48. Each team gets a /64 internal subnet, with their team number (generally the same as the switch port). -Each subnet's gateway is ::1. +Each subnet's gateway is fd84:b410:3441:$teamno::1. -Team 5, in switch port 5, on VLAN 5, gets fd82:b410:3441:5::/64. +Team 5, in switch port 5, on VLAN 5, gets fd84:b410:3441:5::/64. Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To make things easier to type, use hosts in the /112. The MCP server lives From 6ff27673107841b4f9138d36830160ea4e34279e Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Mon, 30 Jan 2012 17:08:41 -0700 Subject: [PATCH 11/11] course assignment program, add forensic tokens --- doc/2012-02-TF4/assigned.txt | 71 +++++++++++++++++++++++ doc/2012-02-TF4/assignments.py | 72 ++++++++++++++++++++++++ packages/tf4/tokens.txt | 100 +++++++++++++++++++++++++++++++++ 3 files changed, 243 insertions(+) create mode 100644 doc/2012-02-TF4/assigned.txt create mode 100755 doc/2012-02-TF4/assignments.py diff --git a/doc/2012-02-TF4/assigned.txt b/doc/2012-02-TF4/assigned.txt new file mode 100644 index 0000000..3301aba --- /dev/null +++ b/doc/2012-02-TF4/assigned.txt @@ -0,0 +1,71 @@ +jdbaca@sandia.gov +lindseymg@ornl.gov +cneberg@sandia.gov +chance.gearhart@state.nm.us +kphall@sandia.gov +bcoulson@digitalglobe.com +zkhspryt98@snkmail.com +villalon@cs.unm.edu +cjtafoy@sandia.gov +david.llewellyn@ssa.gov +brander@sandia.gov +sgidituri@ercot.com +javery@pantex.com +djvollan@lanl.gov +rettinger@izmm.com +chris.hancock@state.nm.us +ldbutts1@gmail.com +mcelws@pjm.com +jwelcher@lbl.gov +gerald.stephen@iarc.nv.gov +nrpeter@sandia.gov +raymond.hussonii@gmail.com +Robert.Messemer@nielsen.com +myrick3@llnl.gov +dmdunla@sandia.gov +jcjaroc@sandia.gov +banderson@lanl.gov +tbsmith@sandia.gov +jlangley@pantex.com +tmkroeg@sandia.gov +amcphall@lanl.gov +rcsisneros@lanl.gov +jbradshaw@ihmc.us +jjmande@sandia.gov +mla_ca520@hotmail.com +thomas.walters@iarc.nv.gov +jcstrom@sandia.gov +rpcuste@sandia.gov +cvedaa@fdic.gov +mfgomez@lanl.gov +equarle@sandia.gov +pferrell@lanl.gov +melissa.zicopula@iarc.nv.gov +mike.owens@state.nm.us +jstauffer07@gmail.com +brian.varine@hq.doe.gov +dmdorse@sandia.gov +paul.tarricone@orau.org +jedoak@sandia.gov +rwschr@sandia.gov +lettef@pjm.com +rguttierrez@ercot.com +simone.shen@us.af.mil +lockij@pjm.com +ranabey@sandia.gov +samulde@sandia.gov +jjhaas@sandia.gov +chou@nv.doe.gov +jscott@pantex.com +swade@sandia.gov +edthoma@sandia.gov +wclark@pantex.com +royjuan@lanl.gov +perry.james.t@gmail.com +mcglyj@pjm.com +tbruner@sandia.gov +ccollord@lanl.gov +jdbrad@sandia.gov +henry.hutson@iarc.nv.gov +enhan@sandia.gov +gary.long@state.nm.us diff --git a/doc/2012-02-TF4/assignments.py b/doc/2012-02-TF4/assignments.py new file mode 100755 index 0000000..b7d1d43 --- /dev/null +++ b/doc/2012-02-TF4/assignments.py @@ -0,0 +1,72 @@ +#! /usr/bin/python3 + +## Course assignments + +import csv +import smtplib + +msg = '''From: Neale Pickett +To: %(recip)s +Subject: Tracer FIRE 4 course assignment: %(course)s + +Hello! Your course assignment for Tracer FIRE 4 is: + + %(course)s + +Please see http://csr.lanl.gov/tf/tf4.html for information on +what you need to bring to the course. + +Course questions should be directed to the appropriate instructor: + + Network RE: Neale Pickett + Malware RE: Danny Quist + Host Forensics: Kevin Nauer + Incident Coordination: Alex Kent + +General questions about Tracer FIRE may be sent to +Neale Pickett + +Looking forward to seeing you in Santa Fe next week, + +-- +Neale Pickett +Advanced Computing Solutions, Los Alamos National Laboratory +''' + +limits = {'Malware RE': 26, + 'Network RE': 40} +assignments = {} + +assigned = set(l.strip() for l in open('assigned.txt')) + +c = csv.reader(open('/tmp/g.csv')) +c.__next__() +for row in c: + assert '@' in row[2] + t = row[5] + if (len(assignments.get(t, '')) == limits.get(t, 50)): + if (row[6] == row[5]): + print("Jackass detected: %s" % row[2]) + t = row[6] + l = assignments.setdefault(t, []) + l.append(row) + +s = smtplib.SMTP('mail.lanl.gov') +for t in ('Incident Coordinator', 'Network RE', 'Malware RE', 'Forensics'): + print('%s (%s)' % (t, len(assignments[t]))) + for row in assignments[t]: + e = row[2] + if e in assigned: + print(' %s' % e) + else: + print(' * %s' % e) + ret = s.sendmail('neale@lanl.gov', [e], msg % {'course': t, 'recip': e}) + if ret: + print(' ==> %s' % ret) + else: + assigned.add(e) +s.quit() + +a = open('assigned.txt', 'w') +for e in assigned: + a.write('%s\n' % e) diff --git a/packages/tf4/tokens.txt b/packages/tf4/tokens.txt index b663835..7059bd6 100644 --- a/packages/tf4/tokens.txt +++ b/packages/tf4/tokens.txt @@ -398,3 +398,103 @@ re:97:xutim-munef-sevox re:98:xenod-nomyf-ruvax re:99:xepov-lotap-fozyx re:100:xoras-mynaf-sosix +forensic:1:xicoz-gykyl-mazax +forensic:2:xuzod-nigec-lynyx +forensic:3:xiseb-mefyf-regyx +forensic:4:xusit-ruzur-nunyx +forensic:5:xolor-suveh-fygyx +forensic:6:xilil-nerub-tatex +forensic:7:xihom-nibaz-ronyx +forensic:8:xuzoh-gyfed-pehix +forensic:9:xuson-hutyr-zemyx +forensic:10:xucac-hemav-zizux +forensic:11:xifig-forur-kecix +forensic:12:xonoh-cobig-tyfax +forensic:13:xedof-pivad-notex +forensic:14:xolaf-kahek-vitox +forensic:15:xebak-livec-gugox +forensic:16:xidic-kahap-corox +forensic:17:xufaz-cakoh-bosyx +forensic:18:xetad-befon-sitax +forensic:19:xigit-zynid-busix +forensic:20:xopom-tafis-dubix +forensic:21:xelid-hosiv-nuhux +forensic:22:xulez-kyceh-sukex +forensic:23:xufak-hygur-vodex +forensic:24:xurok-sahon-mykix +forensic:25:xohin-cohic-hanyx +forensic:26:xunac-ditil-rykux +forensic:27:ximoh-sycik-fytux +forensic:28:xival-zovos-cazox +forensic:29:xogiz-sebyn-lifix +forensic:30:xicog-hivan-nabix +forensic:31:xuven-kyvam-hupyx +forensic:32:xedez-hekat-lemyx +forensic:33:xupam-zufim-hynix +forensic:34:xozib-mazed-cufax +forensic:35:xotob-vymem-befax +forensic:36:xokiv-labym-hozax +forensic:37:xipag-guvof-tonux +forensic:38:xurom-hyhim-vonux +forensic:39:xihop-pykek-camox +forensic:40:xebiv-zinut-hirox +forensic:41:xomig-sycyc-dysex +forensic:42:xifol-rudec-dygux +forensic:43:xohen-nukuc-silyx +forensic:44:xover-pydur-lyzax +forensic:45:xuhis-caloh-momex +forensic:46:xinez-kydan-mosix +forensic:47:xupat-vynyh-kemyx +forensic:48:xipir-nylik-bydox +forensic:49:xupov-facec-zymyx +forensic:50:xovid-dugiv-helux +forensic:51:xezim-pegez-tirox +forensic:52:xugac-kuzin-bibex +forensic:53:xebib-pevah-nigex +forensic:54:xihel-capuz-focex +forensic:55:xepib-gycyf-dylyx +forensic:56:xemif-dimaf-rukax +forensic:57:xukeb-likur-zozex +forensic:58:xosod-tigiz-tudux +forensic:59:xugop-mebem-synax +forensic:60:xozov-zopik-behox +forensic:61:xekof-sutat-lasix +forensic:62:xucaz-pekom-nimyx +forensic:63:xegim-moruv-synox +forensic:64:xesek-mihuv-tezux +forensic:65:xegon-kebad-kelyx +forensic:66:xedev-vivag-ladax +forensic:67:xilat-zumus-dutux +forensic:68:xefof-dasib-vacex +forensic:69:xukak-nifin-mypix +forensic:70:xudag-zizen-fityx +forensic:71:xoziz-ferim-selux +forensic:72:ximed-humok-serex +forensic:73:xetir-pycel-locyx +forensic:74:xinel-vecis-tipux +forensic:75:xusel-zovam-kutyx +forensic:76:xodac-cucal-hudex +forensic:77:xipoc-nanuz-pakyx +forensic:78:xomab-navah-kirox +forensic:79:xusog-gadem-tacex +forensic:80:xerel-cesov-ferox +forensic:81:xupis-sedur-zevix +forensic:82:xehed-fulog-fibix +forensic:83:xufez-celaf-ruhex +forensic:84:xepez-feryf-kovox +forensic:85:xugic-gepuc-dufox +forensic:86:xogeh-kuryl-comox +forensic:87:xitek-rikih-kopix +forensic:88:xefis-gepol-fafex +forensic:89:xodar-dirub-sabox +forensic:90:xolom-rubyf-darox +forensic:91:xuteg-pecys-dakux +forensic:92:xukig-basuk-duvyx +forensic:93:xivat-fohom-virox +forensic:94:xizog-decuc-fanox +forensic:95:xusoz-pikos-cyzyx +forensic:96:xiboc-kapys-tazox +forensic:97:xubor-kares-gikux +forensic:98:xovar-kalyl-kufex +forensic:99:xusap-fipon-nafax +forensic:100:xusot-hydob-leryx