From dfc159c800473f381d5b51d15b650569dc701886 Mon Sep 17 00:00:00 2001 From: Florian Roth Date: Fri, 7 Oct 2016 08:30:25 +0200 Subject: [PATCH] v0.17.0 --- loki.exe | Bin 8456887 -> 8456977 bytes loki.py | 56 +++++++++++++++++++++++++++++++++---------------- signature-base | 2 +- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/loki.exe b/loki.exe index 8da8f84660b247727f7274f2851ac3b51f016031..5dab31cc7f18bc0f3d2b2641df3f3aa0d44d9622 100644 GIT binary patch delta 13957 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 F{{S$l+A#nC delta 13848 zcmYk?Wl-Hr8wOz9-KDs@yBBvTZpGc5VnGgWMGu8y#frNZx8m+riaQkd@4WxM%v^I% zvd<=eGP{}0CTD=)TGByqAs}cF32<2o;0|LI+`hFhN)#Y!D6z z7la4G2N8e>K|~;85DADB^Z`T$A_q}`C_z+>)DCKZi7%;8y?*W^ORd+36wBDB+S9tG ziirZcQJcyd<=LH_WUp^FxM}|Lr~5}P$CkGHxt^(|FR7yYbO*as>LV1(ukvNgP#cFA zCA3MMij5-lE9iJA5g&C5G#Evn`=4g-7a1}dCUZ!eTQRGROYh>Vf?9@Dd>w?qB2L8P zi<^IdRKu#zHA@&9jurfk`>5FsZzJTSS&=(#HM(mD&;qby-kEz1G27Qn;TOH>!$R4S z7yBQwGM_}6R&Aol^r3c_GjWSZEGs+omkG4djQRV0F@9Y;HdSFf&s?H4`wmW=#CwSI zd}lK9s~!oWVEJ`gix~;v>nwX7p!SD{EhPp3sQN_B)`sV^wt5<99!pN6G>%+a-w!!Yui-cTRTpXlgauU66Z<@CN^Q5(WclOJc8`#fRyK^Bqf#NpdZjUFS}G4tzwPmryfLDqJIdk#DZsp2++nM;H*W^u$}Et~9qgYcnZ`LZ7-W z!J*a_radO>H;yu5d5GevQ&FOoe~iFDqB&1Lcx%Yhx4p6Lr)9e&tfk9Of5htHwNo;) zd7J(};x(Cj`k_uY;!d9Cq`l*}`^)qCuUN(GRg&r42Xk3|c1Ed__$`Ez!nglANXE0Y zbok&}$3lKDvWAWNY$rPljdcinc2*u3-I7`9m-J)dJFKgPW|3@G?OAENzn-E18c)`` zxR-&)n@`@S!?vvbPxCw!GwL7nQ()x&Y{YRqFvPfvw0ug!Dyoal#icr8QYph2m&#Ok zSieHV-}R+8g{zdO=qYv{DjXun-Gi$Pj&3yX50Lod`RA5NKyrGWh?lTP2C9I^w==-z z2d`O&U{F;F@c@w8l|K6QD>lNo108MS9CnYX`S95`9}cP_n~(5I6O_$2!ru9y2$ zxXJlx*Y~@44NSN=K)|*<$rm&klqzm=t!8Eun?bOs64(y2ZXrD8II{!R9uN?FWGaU` zI`lkRNkRA*KCIxu!qs|f`|n!mMpF{`Uslui!B2Q?>Dn&_I05c-;`mqFT3#;4S;yDx z$M}JpD_u`%90YA=eH9(cI{7QrhwolY6s#`r=&rJLB0?F}G$cH>;26Zq!S=Lxu8nc$ z1Tr!)SsL+4X9Qpm>b(sSBJxM%4+3b%l=jI*_Nvpg%s$;16SaC7QAfCI7pU(xMsQ!_$By5p&dsz<;;H^(d!&>Lr zGb{zK!`DX@^E~gP%j5p7x5rHgtF=Mm8T>L2^Xnwf>#!5dOT8Iu6dHJqh0xG|s8=VB4;(U@ zg~KI~5&CiAbC|wNvwh6xkO}N&tWP|%w&SL5b72Lz-pH6UjLrN~Yr|6RENAp^rG~!i zAxA{f2)(SAVSaJ-iuFk0&+t*7O$=b6+)l|U) zjwru z5Tx`I87hU^O+mD*;uLdf_Hwhz;nAq=%35=BfJ3Mz)39eZtM+7wR*4}dDkA$1#i^Qg ziBIJd?88<{>_{p*;C>AmN&RopAV@R8oc$Q46p*xojNd23+RiKH!Zxa%TlDaZXZ!k~4 z94B7g(et&=Jm({NN+`74F@D<3L*Ff1XfEvjSIs)}%w~k=GGMf%o`vkr-mSI2I?QbQ zqOu0{(vG>3!qfL;Z$mDu{dV~$Q2r%nmy@N|Y~fZdWk^jL5B#OAc(GX735Q zA&n0zokoeCphxyfz?Pt;bbz<5wNUn5aNIHs%5Z2ez#pYBBTdV%Nhs0~@D-axeH7+! zV%K^!7g_&SEjWU$Z9*DS8mUgEonY7b;g2?rZO>}|8?QbW80pa9h6jldk*)Wc3x^4d+5LEq}Wv1*OU+%rS&V0zOZ_46>X9&I{VRhCtY5VL$(Kd0A zpZvEIwW@PGH<{ESy{mxBU|J-w)8RewqwCVl8%tlb?Y%ltech%kfyaEOk}A4{mjJ~g zf#GI_K%~#3bar^Vb+~UxhPa3?2GbeQBTX? z)d~bbs;OcI8;>xuu*mn&?7bcV;7eV|AR$#r72otz%vfK*FiR%^!_2%Hr6G&naQ(a7 zUWYMW0=$s3yEokYxtFk+D|FppTEYyT6U=#p`nVmLGz(?ztLPH?YCE~J{0kypE8pqK z{%qZJ-74*a^NmeF?#bET4z8dG;cDlO7BeK1=Z*me|0Js#w**=}mEUt#7DyRKUVw!) zS#U?5asBZHwrdZO<~-JxqCs&h^9iCx9%p&+=FTkaQ&^%KY|tgD8B|?gF}=#ab0cy8 zi4+~3qdBxxdRlwb$kU8~34(x7Ie==p-)w}40)^{;#3os} zQvY03tLDnH5z!r%GFIq9UBdbu00*!TY762pTFuHpeQ;OgP_m}MJ3zL!r%JXQ#D zYYRcxxlIxMa@dZ#uHpd(>v_o2E4o_SP)?M|kVyQ~wY6X)XxZ(O43&9SY`6d5h^Dk# zpW63BXI|}aZ-TXd!KezFf?yWG_W>8;ok{MUybB@E$p_M3Be0bHOiexI zDm*IF1adrmg19rh+x&`)xyDOW42%V_4A_e;{=q!OI*{4br+k=2%Uk9GVM%>s1`u>EEgB>rWMXZ1tO;euI}gkfkourG)#}sD!_)NW-iP z?(E^3a3o33+BSJ28%AFWd5oUk-zq!!9JX*MFk$i7(c>{BibE_EF_;KY|5VQMC=mN( z>sa|lofW6FOE@87{T8WFBsUMO-9SGZmOf9@qwF0=c7qupk`C{3WoGe8#g6Gg55l}a zIf^cpEi>!|rEQ|Se3t0(O|5{5V4-#aH&KGA(ckcg%;H-d! z(A+`qRHczsOptIeYt{=8%Y`2y)LJ`n2z;bA zNqd-uM?nQclVt|i-fAR3$6hkX*YS5KZCrx5XJPbPbuPuP4oo`$U4LrRJ6blD_WgIh zyLmBIy(sHOr($6Qmr#QR$}mZuw`fmm+s0^JB`S;(^GL6l{zQ1Sq;>>jU}6`g)DV*| ztGM&vo+-v&fIwvDz%6ULxQ8s|qwIh#2{P}Ez8xM)Y2H41vN}(*+*-YSn;;ocFxDAX z*rq#Yrur$ojqW#~-LgrCQD0$I3SNo7b0b>0>Ss-lcwV9ed0wD+^<1_c8>mUDg#L#G ziXMK^j3R}XbH|edwYBxEq&gVyfJd6Tz&0AK`S^)FTsNYEeLY|5=d+xdS;sWxnIN~- z_rS!0zr2WX#F#Yk;U6$DZsnHrd0`mDTOU}6jS?FL_ zcDz6jmd4Ftd+rGS6l$CPeCk)*q`M@w6OoEPx{X7pV|RlHLhPO66{5T;`Q3-0>A-J9 z>(Wnl%kNCQ&%7%|zvnQbMCB_yhzdDkc(Jdz6b{fn;hDV*T-$BYNoZ4D7t4!n5n?IA z<8&2p_ipS1HZeawHFMkP^Go3yvCQ}F#MDEF44nuEVTU*5R3*e=`2LpNX#MM(pi6qX z(H793WKw#PozZmB7U%a!z#@|%2TiA5XU>Mt#M>W-dLH*s`!8(X%|I%arJ`mp%KSHD zLkczZJ{l@M-vYhe+0VY>n{RQid0#8xZ^n7QB;J|E07BOV9c5jTus1rU*L-sdGW?8= z_@4Uy!{u%xupsm$y`xv=f5w#7V`G%XC`w{OD^&hIR?97sEr#Gv+0}z~haVCPbvQWK zRzzo3iC=s*KO5AG<5lBxB;QaexSm%}Gg);;-J-0C^aJJhsLEg;m4occgxv*U#9Q)p zv7Z6-fVl24bs9%{MKF}%J$DP$`thhqHuiI zs5b%B8J`{w0%Q6U_TZKKZODRYPHja2tjjM|z`T%J_SXE9AHh)~e}xsNOlcFj6DfX- zw)=NWK*)63qe-_uN^?PpgD+rD2q%6_FYX;BE~qVze|W;gi|Cq(G*~>J&&qlncoHqD zDqQXt^LvQiRQUo^IL?mGJ(}`?;*5yV-cc?I>ZXgEFXB~m{{x0Eh z7~wNy67+N{pHnmav8zAX__$s@uke=xgVT_tk%mKsG{Ub!hNR5k_<4wqgH4EVPa_^jxJw2cGGhw`2X`_Vb)=ryS ztkyZ`%lsn#ff8)GRjFZdj{f$~P3x_0!=QehBS1??VK2L)-8B&08Qeqex=RU|6|Q00 z-8@*$Z=LAad(shl)PLJFbK{;~|1IHzXtJ#$qo(-+=Bc|jeoW{3s3lD)U8?PaGLS2} z!LrUyRJWxvG?=W9@WXT&{)#1y@h^h{{!5CxeuNLgp_hBLMu}KU zF@P2khZtl_tTvTNZyV3Ll$B|FI7~@I_OvlTei0c|CFok0mkWzJwqdH9d8Da-uck0~ zSAOe`sK3ZS+^F>G<_9H7`=U1pMOJ|Wi<4L}kC+%zF6%h{u;p4+nS4H#HeI>L#`%vr zb%316Wz5y7N9oT+nB8n=aZDYyia%U=ZXlU!iayUv`3NR z-sV(6bwOzTB9FKQ4u+!8u5!C4@=C^r%N3knLTHD*k^2@I<&Rz^knmN8tnxE^@J?E^ zL+)Vy=QK9|CqEBGEOK2@@FKde(oD%;7Me;q!Xk4mc|FMvJN$r=+f^MOEbi< z3Hj8k%%Qm`hzqZUW)Utk2!EVL`&Dd70zE`BF!Rr^_U60xYhr>a!Gv%{3yu~ekf=UV zlwVa+2Uvb?tIc$GB|9H6klJbzxD&=q97So0MXd5Dchl04Dnk`^aBs%q2Pu=b_cFr zs-Ckj{G9|$goGScYJsw;9JCRMjsuN6fc- z;LY^idif+62P?M<=IfKe60ZGS2tI6HD?A7KF< zy@QPl0_+4lu#KvQE{C^&`pOLJ;Fe}-SF>hyKMh#tB|V*nL*vrBe>n1S@&1!T;72Wah&-kE{YMS)>_joU(Bpj@5WGN2O&}$?4-%aZCDlg1vyA`4? zdrW{CnizR`nDbIXR zFdm?NmE`Ma7B$8=p@_2WylpLv6rx2D8)rbbV_9kldnO_qEYvmtrct}1S#@OrtZdr; z%33A$GGjR@z&7-TU2arEWB*-f)Az>t`uqGO#haqc~1GQ=}0MhG@bI$Wg<#YHmyj<0L|htN#UCWS_;0f zlUVhI|Km(8o4u=6A-qzyl{u@4eyepu>V@ZqO}S81$#n@>4}R7%%;4DY#>R`Oe4SQZ zv|2)KL8VyD*$vrVG3XDzEQ{k^oLUB1K8Pq_&^gc93KZ*?=jAPFp3t})$1^;Kf07gV z@`P7VOr&o0U`6p5M6^p|pXRi(b1WIPr2i02e-b!68Q)~!duC>Nb~ebt(Gu*4HRxtk zGY0^H+=sxKcT}e?*N%M@^8DpAvDBJ(4bx8iR3t?}ROieH*Yomo^2iW;!L${&`>Wr) zS%ju4<}ofs36qdaDyao-PC?A!>$>Z728tx^?*rkmh9;fcLY|dv0Zb8Qt*hv9LP3($ z%bu8R_BAh-bG0zlx&|IwEd}>*j8^b6v{g; zBdu8lIO=>YeZzFNJBCd5Y*JFZg|65Ah5H%ISFh|`9O5&MSMT3wqihC2rAm?EUiV^ zT)gHFEUCJF%Y|gIN(%$0I>A@ttr->(6&KNXEL)&8gU0yDeQ?DdDsdZoX?47?;B>qcD;N7$Nnzu2h=Xrz1pq7X7)UHUT8QDJRP-v#OHNxOPe)U>g`5`#dA)vK0Yd`Ki+ITFrSUb56s0{e3y+|s zn}RsytuST5n~N&z^6Svu9zoTLB{7?1$lw+X$@bWHsA!Kq=ypkNr$9z?3G^d!xvmeZ zph=gQ$=J9of(dlVzuMp1rlged1H;sLcD)i&=_oB90 zihkvG`8VGK`l>5eaNZ|8!}P+w+7myZn_M|aD?m6IzgMiC=TF^-s{Th5e_h8{(#0kw z61tTuXK!!P6L*~PrTS5?t}$aXaD&Ra+yaz%B$ZbMK54Ht)u!hkVA3n*t%F-}6IApk zWq5K3>-U8Oet${##+S_e$$o}{#UQI?t;Y{R6_mXKIZhDsZ8z5SX9vnj`l7 zl8Xrk3znm5z>i~z7fkLovKtKlHu{H_&F55Bms#WH$=>>HoS#DBizbDzo3+W0FWAP! z7;7)|R^QRCC(=Dq04?SfGVGrxo&K9{~7PMr~t9w=t;w`%2lHaC`t zZr-~B?L#2(O`?3g9G9ma*=#c-_H2Pp&+Utgc?bE;Q!E@8`h zV`Cxw{CIsRGk1Nk1=?3jEsEdPGrL3N@ox^oDm>A;hV>KD1OKz9<^t@jaspC4CsU|m z_&kiMROdA4*1t}b2e&;IWI1p2@RS4O>rf77$-LBWAgC~tu|jiC@u$`(Pv`c}XAGhPY1i)LfS}calg}K4 zPCWuP=N)$$s##)fw;rXd<+Eto_(>+tONSPUgHhYS1_z%r5RM-9vkbH{_Nh}5}M;wv9V zW@dB$moR5%|hfT2pmm(DhANLqJjcxsJJ$+WB5yzokJc*GwCH3@cRDct5x>qp;}w$*j*d#Xw8f3m$oQ4qY#O#O~x|5 zl<5OHd|W z`(vzN$WI&W7!#Hj+g-)}RjO;U&A4;o@TIW*y^4{B;0_J-M6a zJ}I`gF(wK3y|zqD*tl3nkL&~q z{!#Ufg7Kd6{N%AQl=e}SY(g>)rJwl0628ajiEYRg1b*k-t>xUDev~K!%+Fej<{_hT zJXnPmvkZ+=jRt00h2iiSjE;ZVY1?rIACUVO-GdYf$qo%bmOt3EGKbX) z529~4nCJRgTiyi}ee_XwdL5WzSIm>)8VYs=aoBI4E~+^Ff70kKVwf5tGV6wb=bx@=CBhyRr>(oI+Cyk@>=Z*E98 z`Vr(TEahmc8XLsP=v0k{=maM(kwW<}e=-^sq1Lk&y_v1)3m6o*FMgD}G{$d42s8)6 z)vUO+C?}>!`x~Z-O~pT#^QlW72?+Us?u9>q$sOr3WyCNh%gQ~7JU60o2EO(k2R4uP@nbVB@V2rT0=3NY6sXMzoWZvy(g;!m;CsU$aZ+&Y%F*8JON4DMm ztK@pTDctO+vIkjwDbVYR;9tNX^_V;^POI9va-*1v3Rf{u`--@f)YftP&&Bd}y0dw4 z5c};`FZt_&jx_xbAK8+SvjwC~%t+j!k0dsFb zqu7Yap#Tq5i-*7p$V6ixnVBWZOM{wc+JuT4djbs)o^>~P<)La5`-!^YRd;_=JW{Ih z+oG&HUlhmLy-|PHWZ2@+SEk)b6IQO08s`DH3{y_9xEnPkF#d7Q4m_xf8io?BR8h&L z#N}tLTKb_xNbQL3k-AuVdZ$_H3sA|uKznf$8-eH}vu<|$*u5)CvBa|cVS!a$B@Q>M|c_Gf+A9;h1#;( zsg|sn`v}*wSR>mm?;|4UEbV`PW#r)Tk-fM+`R{Er1GGPeZU-6^7O- zF7`9L`FGwvkZrI&f32PxyEbT+HLR~wQqJI3?gG)^a+Mzr$gogGQl2gF9)9zmr$lYQ zY5f@Y@BQqocFSJpl5&nFCFkm;8YLDA`@Hy%^FWgmp9{AQ?^IC@G z*ZE2bcPV!(pN~a&!D2?qj3P=7>UrN3Jc2$e)UQcFbicWHKDRog z2m_SS;EgSrg1ipKmCS-}M}JV~*ZBTSfMPzXpQY@%!#)E4xG`1{O7_+58pdR=4s?)- zskBEP@ef&P9wq41FwRy(?{R5?U*)V|?uEk5!B%Z%oC)J>Wz61>t?=oa5Kx9YP#AVJ ze>~%q1RXHV>#8IN9C}TyyK}5;Og8a&SR)p%%gIZa<3{rT<>QvxmvtxpnX{F#HZc=v zd}!5AGSa~wt9!vqK3YcY`;YwBZ;mV?9H~&x$=zt1i`nJ?Y-uJ@;KCm7U!!>XUmj}r zchZ|lk0Bn3YXsMJJ5e9pdw{%>qF|VsD9~d{EunY<0U@N_t2N39>0%|=civjsm*CG) zWET0Jb$&k~O(*AHeH9)n;RQw>r_boV6o=qOfuL7n1%c2QZ!qjEP`N+B1z2%iz z7b~2dbV^`zeY=WP6{vi?$e&huv!Ado!J(jBs}C=TFMwlqVe*k*Ci|yzX|of%#dpJl zPb5dKDf$_W5Jg{T>mGlzk~#~#G&rL%rkcN8MZ1j`yG0+LG^~K{JUQ}>AjM=NdO4zp z=_=t0J962b+8v%bm2kN#7L$I~JJo$xz`>V(VTrKYUMOjK8_-w&62E~&RypA}`y|*@ zxY+}$yWrtC(-x~*aPYH2&$bR|-hNJM{iwWQW`*-%eVZVpf37%DB(fSC7Aj(d!XR}+ z7xRQ)TN)d@Cj{Z4FHg*5+3>#7r};mjuF%kkgjO z1gXs*KjBF_E&;{gtvg(Mn?%aF3;weJ0RnXh;~@@Uv`gotb9RBiP$7VaP2`MJ)u-%nu!p3}>A z&~pM?t-J23qWQR~UTp>ix14J-`E_&)6>cK|947gfS>W~`5bu5dB^|K6VeWfjS&mXN%37B4 zW!UtHc4FB6V)*5kzSP#j?n5&P3-EkRLwnJEB1Gk-_~QpfiJbYIYg<;G@oIV*5qFaN&9Q zW!$~W$MTTve1R9QOo2u}oW91k?P+@?I%Cvp5q!-WvrlQNLpc5#-N!R+9Sj2kwuxzz zlb_<_U|vzVMze?pQ|lDs3(pV-uas)Bxq(63aa4=wogcWy-{Z7dlC^j`iDVDBn-qP& zo>2Wu*oQ31mByKVZU!9rehWNGyI!8tj&TvYTcc4r8_MkZZSze|3UH8c{75|BSCcxp zR5L%#&T}XBLO6!G=GvhBweaR#>U|FOl{BOhJ}#IH=0ZDnCK{G{e~rTS+6hcO>IA;l zB&j3FZ}i(0q|6lhk_%KHp?!$Q{7gB7(0P8j>z8>XlV^71bpZLZclILuGQCj*w0!Q| zd`$nq-nl(lgZSD{{w6|{ICK&GVVhvDqbRCn>YU~#h(3G4yU~e)3d5w zLt$HE6(7C9=ks$@y2Rc-)RgO?MIU7kg}+@fpJX#Iq-wM`lq2=8NcmUjZzOXL{hS4n zyD4P}yWsa``0fV0V*ZGo<~SLm?!=?KtIV#1;hU;ML3M<9(`~?s>^QH##k*PDX2+BQ z3YM8~nC)TF48Y;kiwIrL>j!`nsFUwqRq=?)AF-s~ePuLvI_fJA%j!B_1-Lb$S-6v+; zB>eZ|Z|j7nUNY0!0c<`Yx{2Ghp`^yv=A0n=kpo;#xMqHSQ`_{1&;Y=TUxqR5>Ot;> zJZa9lq5R@LDj;g(P16->_I0jyxSi&1XQULm1k?Jz?V_C@)E3IV$!8DrmFY?+W06%k z^mTvw@W(;w^uDX87{(?yc5~kuyW&%oq136j+PJssnZeA$T8WgwAg7%^n~Fv3_>X$8 zpf=#5#lUjE4cNoTR09kc`cf#Hv}Co$q?5_y7{mE&v?>lsc6`^3Emm7HY1NOCqCzO* zI@{_Hi0t1uWX|v;M+;bzuFJpAW~Q}wrRLOm?QRtAg~X^`8gu3nRM=*yG;1$%*xm1C z)YS@Kd~rJz2DhR{#;9kH)UOh_V^D~WZA6^N)gJcbtnQAxN(1MO)^{Zu*EVkMr>l^B#ooG`u#+Sx_4?O|DamFdP2me_l$uvn=)Jo{Jr@iU z99=Chf=dq+x%cyMQm62X!9-t>nGzgl$yve`QR+&tQk=HRkyahCM3ZDcN9gbm<4w zWfl5ZbGC(MMrHVEd5KeTq(^Zdc`ck0-4j)zSm}k0gduywS$2}9!BpHV)VNU$KVBD= z6utp(s$3uYXc`4xr2KGyM}?%A3$98$@>)!^nSU-Yb=dw^t$0FSEf@S|APJ!Og2(>oPZ3=S<^)HVc~(HoZ2H7Bz<% zi_J#uXvUR`BR{e+;6AGVhH7eR%8k>+(>Lmjz5FiS-AWkgu+2vO9IN!t;)q*7 z6NoNc>pO2=GerGI4Bs~+5Y*MgCoM)BZPvBSZBkoH0NKLfp44Gbk*zNi&Dg5NqRdDs z^f@Ds?aY6sT$l&JBrKCSa|;TWj)QEw(M74mHMw^{$n6VML||1+W1lpcdcsrY;VXDzYxxK;_w{n)?l~|@KHv+7J{l7ou~E@| zom5?(X{=O5(G(;pnTG%aptS$QC)#YIQI?h+=5AVBFIRs5L~#4X4Xrl&M~CLMAfNhz zv*u~&sJx&kmWsz;P-tQDw&@^%Ex&RagP0Nye?lURguCgsU>xK&vuk>|wDH@V+Oe%) zybSrEwN9usi6j{voPp_GE>p;%irmx*+ER}w{EF0~QRJk%*j!1MvV79>2cO-Yk7RhQ zyk_hbiYo)LKP*`rm1P5-C=s=NgLgVh@uOO^{6oRtC;|{)_E|()$88z_$g|g6o=QP^ zCaJ&Y$Aq6M6*Y>otGTEL^%CwjLuY@Y^BG8=z|4q3)Pm_R$%Zv!-RxlB^i15v6h(!F zQD`8sKDs~diRCfIZ#_&()`49b9Mi8Bl9s?d$xTeV4zI5A?ulu||Q;YN!ah91yaNJW}c>nqmmyL>_( zh07DrPLcnypT(BZ;LAACmvdz!89BkU71Ghs=!k(aKKId!vV=C<^+Yzr@dJ80f;2%f zFYFWoXv4#>k?A!l)r=AZQ`zAm||&AQ&N-AebRoAXp*TAlM-|AUGko zAh;oTAb278Aow8!AOs6d4dDaf3*iUx1;QU903r|~2qG8) zXbB1nK?o=3>4bv1T7>p=a&@$a`u~FyihPs?TmT=+0UZRMfe)pCCIVmm7ZzY_1W0&; zx&Dh7uqHw%ISl#+*c~C19me1mTz~-SA_<=P?{acC`0Bqb*#=`HLYh-|!BYR_b`97a z5z;#eocv#W1lJ)#s^ELTGyi4B2Kef~l>P(8MuH^TK9~y$QpN|?{O{D{9qj(!sR}q5 z334yvCU7qjycCnH0uP{F;(kSZMT_J39M vZ(wK?NJgxJss78|UtlQ|NV7B890k%z=@Oib63UJ6sRb%X`5ioh5~}b&bX(GX diff --git a/loki.py b/loki.py index add6cc46..f07d3b33 100644 --- a/loki.py +++ b/loki.py @@ -24,7 +24,7 @@ DISCLAIMER - USE AT YOUR OWN RISK. """ -__version__ = '0.16.2' +__version__ = '0.17.0' import os import argparse @@ -899,7 +899,7 @@ def initialize_filename_iocs(self, ioc_directory): def initialize_yara_rules(self): - yaraRules = [] + yaraRules = "" dummy = "" try: @@ -921,29 +921,49 @@ def initialize_yara_rules(self): # Extension extension = os.path.splitext(file)[1].lower() + # Test Compile + try: + compiledRules = yara.compile(yaraRuleFile, externals={ + 'filename': dummy, + 'filepath': dummy, + 'extension': dummy, + 'filetype': dummy, + 'md5': dummy + }) + logger.log("INFO", "Initializing Yara rule %s" % file) + except Exception, e: + traceback.print_exc() + continue + # Encrypted if extension == ".yar": - try: - compiledRules = yara.compile(yaraRuleFile, externals= { - 'filename': dummy, - 'filepath': dummy, - 'extension': dummy, - 'filetype': dummy, - 'md5': dummy - }) - yaraRules.append(compiledRules) - logger.log("INFO", "Initialized Yara rules from %s" % file) - except Exception, e: - logger.log("ERROR", "Error in Yara file: %s" % file) - if args.debug: - traceback.print_exc() + with open(yaraRuleFile, 'r') as rulefile: + data = rulefile.read() + yaraRules += data except Exception, e: logger.log("ERROR", "Error reading signature file %s ERROR: %s" % yaraRuleFile) if args.debug: traceback.print_exc() - self.yara_rules = yaraRules + # Compile + try: + compiledRules = yara.compile(source=yaraRules, externals={ + 'filename': dummy, + 'filepath': dummy, + 'extension': dummy, + 'filetype': dummy, + 'md5': dummy + }) + logger.log("INFO", "Initialized all Yara rules at once") + except Exception, e: + traceback.print_exc() + logger.log("ERROR", "Error in Yara file: %s" % file) + if args.debug: + traceback.print_exc() + + # Add as Lokis YARA rules + self.yara_rules.append(compiledRules) except Exception, e: logger.log("ERROR", "Error reading signature folder /signatures/") @@ -1230,7 +1250,7 @@ def print_welcome(self): print Fore.WHITE print " (C) Florian Roth" - print " September 2016" + print " October 2016" print " Version %s" % __version__ print " " print " DISCLAIMER - USE AT YOUR OWN RISK" diff --git a/signature-base b/signature-base index cb0c06d4..2f4147b6 160000 --- a/signature-base +++ b/signature-base @@ -1 +1 @@ -Subproject commit cb0c06d4b54a9741c828417f6c50f47e89ca0f41 +Subproject commit 2f4147b6bbae7f4724fbb3dbf99a84066d8a72b9