home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 April / Chip_2003-04_cd1.bin / tema / krypta / articles.php@ID=238 < prev    next >
Text File  |  2003-02-02  |  24KB  |  486 lines

  1. <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4.  <title>Krypta.cz - MS Script Encoder: ukßzka bezpeΦnosti p°es obstrukce</title>
  5.  <link rel="StyleSheet" href="server/main.css" type="text/css">
  6.  <link rel="SHORTCUT ICON" href="server/favicon.ico">
  7.  <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  8.  <meta http-equiv="Cache-control" content="no-cache">
  9.  <meta http-equiv="Pragma" content="no-cache">
  10.  <meta http-equiv="Expires" content="0">
  11.  <meta name="robots" content="ALL,FOLLOW">
  12.  <meta http-equiv="Content-language" content="cs">
  13.  <meta name="description" content="Internetov² bezpeΦnostnφ portßl, zab²vajφcφ se kryptografiφ (Üifrovßnφm), ochranou dat, internetovou bezepeΦnostφ a poΦφtaΦov²mi viry">
  14.  <meta name="keywords" content="Üifrovßnφ cryptography pgp des aes rsa dss digital signatures pki linux free bezpeΦnost ochrana hacking cracking virus worm">
  15.  <meta name="copyright" content="Copyright (C) 2000-2002 Krypta.cz - <a href=mailto:michal.till@krypta.cz>Michal Till</a> a <a href=mailto:jan.kulveit@krypta.cz>Jan Kulveit</a>.">
  16.  <!-- No caching for this document.Trying to write to art238.html. ?> -->
  17.  
  18.  <!-- output.php -->
  19.  
  20.   <script language="JavaScript">
  21.   <!-- 
  22. //    if(top != self) { window.top.location.href=document.location; }  -->
  23.   </script>
  24.  
  25.  
  26. <!-- NAVRCHOLU.cz -->
  27. <script language="JavaScript" type="text/javascript">
  28. <!--
  29. pxDepth = screen.pixelDepth;
  30. if (!(pxDepth > 0))
  31.     pxDepth = screen.colorDepth;
  32. if (!(pxDepth > 0))
  33.     pxDepth = 0; 
  34. document.write("<img style=\"position:absolute; top:0px; left: 0px;\" src=\"../hit.navrcholu.cz/hit@id=00039669;n=1;screenx=" + screen.width + ";screeny=" + screen.height + ";cdepth=" + pxDepth + ";ref=" + escape(top.document.referrer) + "\" width=\"1\" height=\"1\" alt=\"\">");
  35. // -->
  36. </script>
  37. <noscript>
  38. <img style="position:absolute; top:0px; left: 0px;" src="../hit.navrcholu.cz/hit@id=00039669;n=1" width="1" height="1" alt="" border="0">
  39. </noscript>
  40. <!-- NAVRCHOLU.cz - konec -->
  41.  
  42. <STYLE Type=text/css>
  43.     BODY                { font-size:110%; background-color: #ffffff; color: #000000; margin: 0px;   background-image: url(images/backgr.gif); }
  44.  
  45.  
  46.  
  47.     .Copyright        { color: #000000; }
  48.     .Copyright A    { color: #000000; }
  49. </STYLE>
  50. </head>
  51. <SCRIPT>
  52. </SCRIPT><SCRIPT Src=charts.php@version=1621></SCRIPT><SCRIPT>
  53.  // Nalezeno  1 polozek. 
  54. var SectionTitles=new Array( "MS Script Encoder: ukßzka bezpeΦnosti p" , "    Jak to funguje?" , "    Zkusme si s tφm pohrßt" , "    Algoritmus" , "    Jak je vid∞t, znaky se opakujφ, tak₧e t" , "    Dek≤dovacφ tabulky" , "    Zßv∞r" , "    Dodatek" );
  55. var SectionURLs=new Array( "238" , "238#Title1" , "238#Title2" , "238#Title3" , "238#Title4" , "238#Title5" , "238#Title6" , "238#Title7" );
  56.  
  57. var BrothersNames = new Array("Secret sharing, secret splitting?","MS Script Encoder: ukßzka tzv. bezpeΦnosti p°es obstrukce","MS Script Encoder","MS Script Encoder: ukßzka bezpeΦnosti p°es obstrukce","");
  58. var BrothersIDs = new Array("225","236","237","238","");
  59. //=====INFO======
  60. ItemName='Article238';
  61.  
  62. InIFrame='No';
  63. TableNum=2; 
  64. ItemID=238; 
  65. ArticleType='1'; 
  66. Action='articles'
  67. ItemTitle='MS Script Encoder: ukßzka bezpeΦnosti p°es obstrukce';
  68. ItemComment='MS Script Encoder: ukßzka bezpeΦnosti p°es obstrukce';
  69. TabName='Articles'
  70. Parent1Title='Matematika' ;
  71. Parent2Title='Kryptografie v praxi' ;
  72. Parent1ID='28' ;
  73. Parent2ID='7' ;
  74. ParentTitle='Matematika' ;
  75. AuthorName='Mr Brownstone' ;
  76. AuthorDesc='' ;
  77. AuthorEMail='mrbrownstone@virtualconspiracy' ;
  78. AuthorID='26' ;
  79. ItemDate='10.1.2003';
  80. Views='282' ;
  81. Average='2.00' ;
  82. Grade='2' ;
  83. NumVotes='0' ;
  84. SourceName='' ;
  85. SourceURL='' ;
  86. SourceLink='' ;
  87. Ref1URL='' ;
  88. Ref2URL='' ;
  89. Ref3URL='' ;
  90. Ref4URL='' ;
  91. Ref5URL='' ;
  92. Ref1Link='' ;
  93. Ref2Link='' ;
  94. Ref3Link='' ;
  95. Ref4Link='' ;
  96. Ref5Link='' ;
  97. Ref1Desc='' ;
  98. Ref2Desc='' ;
  99. Ref3Desc='' ;
  100. Ref4Desc='' ;
  101. Ref5Desc='' ;
  102. Possible=1 ;
  103. Answer1='' ;
  104. Answer2='' ;
  105. Answer3='' ;
  106. Answer4='' ;
  107. Answer5='' ;
  108. Num1='';
  109. Num2='';
  110. Num3='';
  111. Num4='';
  112. Num5='';
  113. Type= ''; //def
  114. WebName='Krypta.cz';
  115. //====ENDINFO======
  116.  
  117. </SCRIPT>
  118.  
  119. <BODY>
  120. </SCRIPT>
  121. <SCRIPT Language=JavaScript Src="server/startfeatures.php@Rand=ddd "> </SCRIPT><SCRIPT Language=JavaScript Src="server/features.php"> </SCRIPT><!-- Rozdeleni na sloupce -->
  122.  
  123. <TABLE cellspacing="0" cellpadding="0" border="0" width="100%">
  124. <tr>
  125.  
  126. <!-- Levy sloupec -->
  127.  
  128.  
  129.  
  130. <td  width="161" align="center" valign="top">
  131.  
  132. <img src=space.gif height=1 width=161>
  133. <SCRIPT SRC=server/left_js.php@version=1621></SCRIPT></td>
  134.  
  135. <!-- /Levy sloupec -->
  136.  
  137. <!-- Mezera 1-->
  138. <td width=13 bgcolor="#006792" ><img src="images/spacer.gif" width="13" height="1" border="0" alt=""></td>
  139. <!-- /Mezera 1-->
  140.  
  141. <!-- Mezera 2 -->
  142. <td width=1 bgcolor=#1063A5><img src="images/spacer.gif" width="1" height="1" border="0" alt=""></td>
  143. <!-- /Mezera 2-->
  144.  
  145. <!-- Mezera 3 -->
  146. <td width=10><img src="images/spacer.gif" width="10" height="1" border="0" alt=""></td>
  147. <!-- /Mezera 3-->
  148.  
  149.  
  150. <!-- Prostredni sloupec -->
  151. <td align="center" valign="top">
  152.  
  153. <!-- Hlavicka -->
  154. <!-- Horni lista s reklamou -->
  155.  
  156. <TABLE cellspacing="0" cellpadding="0" border="0" width="100%" class="hrlista">
  157. <tr>
  158.  
  159. <!-- Logo-->
  160. <td VAlign=Top>
  161. <a href="default.htm"><img src="images/logo.gif"  style="z-index:100;" vspace=0 cwidth="222" cheight="48" border="0" alt="Krypta.cz - Magazφn o informaΦnφ bezpeΦnosti"></a>
  162. </td>
  163. <!-- /Logo -->
  164.  
  165. <td align=center>
  166. </td></tr></table>
  167. <!-- /Horni lista s reklamou-->
  168. <!-- /Hlavicka -->
  169.  
  170. <TABLE Width=100% Border=0><TD><SCRIPT>
  171. </SCRIPT><SCRIPT>
  172. ArticleHead('MS Script Encoder: ukßzka bezpeΦnosti p°es obstrukce', 'Mr Brownstone', 'mrbrownstone@virtualconspiracy', '10.1.2003', '15:45:04', '╚lßnek');
  173. Intro('The Windows Script Encoder (screnc.exe) je malß utilitka od Microsoftu, kterß umo₧≥uje zak≤dovat vaÜe skripty (tj. JScript, ASP a VBScript). Ano, zak≤dovat, nikoliv zaÜifrovat. Jejφm cφlem je ochrßnit k≤d nap°φklad WWW strßnek nejen p°ed kopφrovßnφm pro jinΘ ·Φely, ale i p°ed prost²m \"koukßnφm\" na zdrojov² text Φi p°ed jeho modifikacφ.  Microsoft <a href=../microsoft.com/Seminar/1033/20001010IISSecMH1/Seminar.htm>doporuΦuje</a> pou₧φvßnφ tohoto nßstroje pro \"zahalenφ\" skuteΦnΘho know-how strßnky. Progrßmek si m∙₧ete stßhnout <a href=../msdn.microsoft.com/scripting/default.htm@_2Fscripting_2Fvbscript_2Fdownload_2Fvbsdown.htm>zde</a>');
  174. ArticleBanner_smallres('margin-bottom:10px;margin-top:-3px;');
  175. </SCRIPT>
  176. <DIV Class=Article><SCRIPT>
  177. AuthorData();
  178. if (Type != 'Pure') if ((ArticleType!=19) && (ArticleType!=20)) ShowSections();
  179. ArticleBanner_bigres('margin-top:12px;margin-bottom:-3px;');
  180. </SCRIPT><FONT Size=2><DIV Align=Justify Class=Paragraph>
  181.     Jak ji₧ bylo °eΦeno: nejednß se o ₧ßdnΘ Üifrovßnφ ale o prost² neparametrick² k≤d. V tomto duchu se vyjad°uje i dokumentace : <i>Uv∞domte si, ₧e zak≤dovßnφ znemo₧nφ maximßln∞ p°eΦφst zdroj, ale pokroΦilΘmu hackerovi zjistit, co jste napsali, nezabrßnφ</i>. 
  182. </DIV></FONT></b></i>
  183. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  184.     Zak≤dovan² skript je takΘ chrßn∞n p°ed ·pravami.
  185. </DIV></FONT></b></i>
  186. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  187.     Algoritmus nebyl slo₧it². Psanφ tohoto Φlßnku mi ve skuteΦnosti zabralo vφce Φasu, ne₧ vlastnφ kryptoanal²za. Ale myslφm, ₧e n∞co podobnΘho m∙₧e b²t velmi hezkΘ cviΦenφ pro ty, kte°φ se analyzovßnφm takov²chto algoritm∙ zab²vajφ, nebo se jimi n∞kdy zab²vat cht∞jφ. Znßme otev°en² text, znßme zaÜifrovan² text, ale neznßme algoritmus. Pravda, deÜifrovßnφ zajiÜ¥uje COM objekt, kter² je s IE pochopiteln∞ dodßn, Φili disassemblovßnφ by dan² problΘm takΘ °eÜilo. TakΘ z toho plyne, ₧e takto zak≤dovanß strßnka bude funkΦnφ pouze v Internet Exploreru (navφc veze 5.0 a vyÜÜφ)
  188. </DIV></FONT></b></i>
  189. <A Name="Title1"><FONT Size=3><DIV Class=Headline>Jak to funguje?</DIV></font>
  190. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  191.     Srcenc.exe funguje velmi jednoduÜe. Jako parametry si bere jen nßzev vstupnφho a v²stupnφho souboru a co vÜechno se mß k≤dovat poznß podle p°φpony poznß, co vÜechno se bude k≤dovat.
  192. </DIV></FONT></b></i>
  193. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  194.     Uva₧me tedy nßsledujφcφ javascript, 
  195. </DIV></FONT></b></i>
  196. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  197.     <PRE><SPAN Class=CODE>
  198. <SCRIPT LANGUAGE="JScript">
  199. <!--//
  200. //**Start Encode**
  201.    alert ("this code should be kept secret!!!!");
  202. //-->
  203. </SCRIPT>
  204. </SPAN></PRE>
  205. </DIV></FONT></b></i>
  206. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  207.     kter² po prob∞hnutφ k≤dovacφm algoritmem vypadß takto: 
  208. </DIV></FONT></b></i>
  209. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  210.     <PRE><SPAN Class=CODE><SCRIPT LANGUAGE="JScript.Encode">
  211. **Start Encode**#@~^QwAAAA==@#@&P~,l^+DDPvEY4kdP1W[n,/tK;V9P4
  212. ~V+aY,/nm.nD"Z"eE#p@#@&&JOO@*@#@&qhAAAA==^#~@&
  213. <SCRIPT><PRE><SPAN Class=CODE>
  214. </DIV></FONT></b></i>
  215. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  216.     Jak vidφte, "jazyk" javascriptu se zm∞nil z <SPAN Class=CODE>JScript</SPAN> na <SPAN Class=CODE>JScript.Encode</SPAN>. Takto se volß zmi≥ovan² objekt <SPAN Class=CODE>Scripting.Encoder</SPAN>.
  217. </DIV></FONT></b></i>
  218. <A Name="Title2"><FONT Size=3><DIV Class=Headline>Zkusme si s tφm pohrßt</DIV></font>
  219. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  220.     <TABLE><TR>
  221. <TD>Zdroj</TD><TD>Zak≤dovßno</TD>
  222. <TR><TD><br>Hoi</TD>
  223. <TD><br><SPAN Class=CODE>#@~^FQAAAA==@#@&CGb@#@&zz O@*@#@&WwIAAA==^#~@/C-</TD></TR>
  224. <TR><TD><br>Hai</TD>        
  225. <TD><SPAN Class=CODE>#@~^FQAAAA==@#@&CCb@#@&zz O@*@#@&TQIAAA==^#~@/C-</TD></TR>
  226. <TR><TD><br>Hai<br>Hai</TD>         <TD><SPAN Class=CODE>#@~^IgAAAA==@#@&CCbCmk@#@&CmrCmk@#@&JzRR@*@#@&mgUAAA==^#~@/C-</TD></TR>
  227. </TABLE>
  228. </DIV></FONT></b></i>
  229. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  230.     Jak je vid∞t, znaky @#@& p°edstavujφ novou °ßdku (CRLF, @# = CR, @& = LF) a na v²sledek mß takΘ jist² vliv pozice znak∙. V prvnφm p°φpad∞ HaiHaj dalo CCbCmk, v druhΘm CmrCmk. Zkusme nynφ zak≤dovat °adu znak∙ "A".
  231. </DIV></FONT></b></i>
  232. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  233.     <SPAN Class=CODE>//**Start Encode**#@~^lgAAAA==@#@&b)zbzbbzbz)bzb)bzb))zbbz)bzbbz))bzbzb)b))zb)bz)bzb))zbb))zb)bz
  234. )zb)zbzbbzbz)bzb)bzb))zbbz)bzbbz))bzbzb)b))zb)bz)bzb))zbb))zb)bz)zb)zb@#@&zJO @*@#@&vyIAAA==^#~@</SPAN>
  235. </DIV></FONT></b></i>
  236. <A Name="Title3"><FONT Size=3><DIV Class=Headline>Algoritmus</DIV></font>
  237. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  238.     Jak je vid∞t, znaky se opakujφ, tak₧e to vypadß, ₧e pφsmeno A mß t°i reprezentace: b, z a ). Pokud si zak≤dujete °adu BΦek, dostanete jinß pφsmena, ale stejn² vzorek. ╪et∞zec se opakuje po 64 znacφch, co se pozice znaku t²Φe, roli hraje jen hodnota <SPAN Class=CODE>i mod 64</SPAN>. Algoritmus tedy bude vypadat p°ibli₧n∞ nßsledovn∞:
  239. </DIV></FONT></b></i>
  240. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  241.     <PRE><SPAN Class=CODE>int pick_encoding[64] = {....};
  242. int lookuptable[96][3] = {....};
  243.  
  244. char encode_char (char c, int pos)
  245. {
  246.    if (!specialchar (c))
  247.       return lookuptable [c-32][pick_encoding[pos%64]];   
  248.    else
  249.       return escapedchar (c);
  250. }</SPAN></PRE>
  251. </DIV></FONT></b></i>
  252. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  253.     Moje pozorovßnφ potvrdilo poΦßteΦnφ domn∞nku, ₧e se k≤dujφ jen ASCII znaky 32 a₧ 126 vΦetn∞ a 9 (TAB). Zbytek se vyescapuje podobn∞ jako CR a LF. Co zbylo je "vata" na zaΦßtku a konci zak≤dovanΘho textu. Obsahuje pravd∞podobn∞ n∞jk² kontrolnφ souΦet a ·daj o dΘlce skriptu.
  254. </DIV></FONT></b></i>
  255. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  256.     K≤dovacφ tabulky
  257. </DIV></FONT></b></i>
  258. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  259.     Nynφ musφme nalΘzt tabulky, kter²ma se text k≤duje. Zjistit obsah tabulky pick_encoding nenφ t∞₧kΘ, staΦφ se podφvat na vzor, kter² produkovala k≤dovacφ funkce na °ßdku ßΦek.
  260. </DIV></FONT></b></i>
  261. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  262.     <PRE><SPAN Class=CODE>int pick_encoding[64] = 
  263. {
  264.    1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, 
  265.    1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, 
  266.    1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2, 
  267.    1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2
  268. };</SPAN></PRE>
  269. </DIV></FONT></b></i>
  270. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  271.     V tom jsme m∞li znaky CR a LF na zaΦßtku, tedy po jejich vypuÜt∞nφ je vid∞t, ₧e 0, 1, 2, 0, 2, 0, 0, 2 p°esn∞ odpovφdß b, ), z, b, z, b, b, z , kde b=0, )=1 a z=2. Druhß tabulka (<SPAN Class=CODE>lookuptable</SPAN>) p°edstavuje matici, ve kterß jsou ulo₧eny v₧dy t°i reprezentace jednoho znaku. Kter² z nich bude pou₧it, zßvisφ na </SPAN>pick_encoding</SPAN>. Hodnoty tΘto tabulky zjistφme, pokud algoritmu do vstupu podstrΦφme text, ve kterΘm se ka₧d² znak zak≤duje prßv∞ t°ikrßt. Musφme vzφt ale v ·vahu jeho pozici, resp. musφme za°φdit, aby vÜechny tyto testovacφ znaky zaΦφnali na stejnΘm indexu <SPAN Class=CODE>i mod 64</SPAN>. Trojici tedy doplnφme vpravo ßΦky.
  272. </DIV></FONT></b></i>
  273. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  274.     <PRE><SPAN Class=CODE>   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  275. !!!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  276. """aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  277. ###aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  278. $$$aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  279. ...
  280. ...
  281. ...</SPAN></PRE>
  282. </DIV></FONT></b></i>
  283. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  284.     A tak dßle. Pokud vßs mate, ₧e v²pln∞ je jen 59 znak∙, musφte uvß₧it jeÜt∞ CR a LF znaΦφcφ konec °ßdky (59+2+3). PotΘ, co toto strΦφme do programu a z v²sledku vyma₧eme v²sledek ßΦek (stejn∞ tak @#@& zastupujφcφ CR a LF), obdr₧φme reprezentaci cht∞n²ch znak∙ v ASCII: 
  285. </DIV></FONT></b></i>
  286. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  287.     <SPAN Class=CODE>d7i P~, "Ze JEr a:[ ^yf ]Yu ['L BvE `cv #b* eMC _Q3 ~SB OR  R c z&J !TZ Fq8  +y &f2 c*W *Xl 
  288. v+ G{F %0R ,1O )l= iIp @!@!@! 'x{ @*@*@* g_Q @$@$@$ b)z A$~ Z/; f9G 23A sow M!V Cu_ q(& 9Bx |Fn SJd H\t 1Hg r6} nKh p}5 I]" ?j
  289. U KP: ji` .#j   q (po 5eI }t\ $,] -w' TDY 7?% {m| =|# lCm 48( m^1 N[9 +n 0W6 oLT t44 krb L%N 3V0 Vs^ :hs xU      WGK w2a ;5$ D
  290. .M /dk YOD E;! \-7 hAS 6aX XzH y".      `P uk- 8N) U=? </SPAN>
  291. </DIV></FONT></b></i>
  292. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  293.     Jak je vid∞t, znaky <, > a @ se vyescapovaly takΘ, a to na hodnoty @!, @* a @$ v tomto po°adφ. Pro p°φpadnou implementaci vypadß tabulka <SPAN Class=CODE>encoding</SPAN> v hexadecimßlnφm provedenφ takto: 
  294. </DIV></FONT></b></i>
  295. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  296.     <PRE><SPAN Class=CODE>unsigned char encoding[288] = {
  297.         0x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72, 
  298.         0x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C, 
  299.         0x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43, 
  300.         0x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63, 
  301.         0x7A,0x26,0x4A, 0x21,0x54,0x5A, 0x46,0x71,0x38, 0x20,0x2B,0x79, 
  302.         0x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B, 
  303.         0x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D, 
  304.         0x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F, 
  305.         0x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E, 
  306.         0x5A,0x2F,0x3B, 0x66,0x39,0x47, 0x32,0x33,0x41, 0x73,0x6F,0x77, 
  307.         0x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78, 
  308.         0x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67, 
  309.         0x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22, 
  310.         0x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A, 
  311.         0x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C, 
  312.         0x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25, 
  313.         0x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28, 
  314.         0x6D,0x5E,0x31, 0x4E,0x5B,0x39, 0x2B,0x6E,0x7F, 0x30,0x57,0x36, 
  315.         0x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E, 
  316.         0x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09, 
  317.         0x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D, 
  318.         0x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37, 
  319.         0x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E, 
  320.         0x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F 
  321. }; </SPAN></PRE>
  322. </DIV></FONT></b></i>
  323. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  324.     Tedy, pokud chceme znak <SPAN Class=CODE>c</SPAN> na pozici <SPAN Class=CODE>i</SPAN> zak≤dovat, budeme postupovat podle nßsledujφcφho algoritmu.
  325. </DIV></FONT></b></i>
  326. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  327.     <UL STYLE="margin-right:50px;" Class=LinkItem><LI> Podφvßme se, jakou (prvnφ druhou, t°etφ) reprezentaci znaku mßme pou₧φt: <SPAN Class=CODE>pick_encoding[i mod 64]</UL>
  328. </DIV></FONT></b></i>
  329. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  330.     <UL STYLE="margin-right:50px;" Class=LinkItem><LI> Reprezentaci najdeme: <SPAN Class=CODE>encoding[c*3]</SPAN></UL>
  331. </DIV></FONT></b></i>
  332. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  333.     <UL STYLE="margin-right:50px;" Class=LinkItem><LI> V²slednß hodnot a je pak rovna <SPAN Class=CODE>encoding[c*3 + pick_encoding[i%64]];</SPAN> </UL>
  334. </DIV></FONT></b></i>
  335. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  336.     Jeliko₧ tabulka zaΦφnß na ASCII hodnot∞ 9 a pokraΦuje na 32, museli bychom v implementaci provΘst drobnΘ ·pravy.
  337. </DIV></FONT></b></i>
  338. <A Name="Title4"><FONT Size=3><DIV Class=Headline>Dek≤dovacφ tabulky</DIV></font>
  339. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  340.     Tabulka <SPAN Class=CODE>pick_encoding</SPAN> evidentn∞ z∙stane stejnß, nebo¥ ka₧d² znak (mimo ty vyescapovanΘ) z∙stane na svΘm mφst∞. Dßle staΦφ jen vyhledat inverznφ hodnoty, tj. reprezentace, kterΘ odpovφdajφ danΘmu znaku. Tak nap°φklad 'A' (hex <SPAN Class=CODE>0x41</SPAN>), se v tabulce <SPAN Class=CODE>encoding</SPAN> vyskytuje na t∞chto mφstech: 
  341. </DIV></FONT></b></i>
  342. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  343.     <UL STYLE="margin-right:50px;" Class=LinkItem><LI>  °ada 9, sloupec 4, reprezentace 1 = "F" </UL>
  344. </DIV></FONT></b></i>
  345. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  346.     <UL STYLE="margin-right:50px;" Class=LinkItem><LI>  °ada 10, sloupec 3, reprezentace 3 = "l"</UL>
  347. </DIV></FONT></b></i>
  348. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  349.     <UL STYLE="margin-right:50px;" Class=LinkItem><LI>  °ada 23, sloupec 1, reprezentace 2 = "{"</UL>
  350. </DIV></FONT></b></i>
  351. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  352.     Znak "A" se tedy k≤duje na jednu ze t°φ variant F, l nebo {. ╚φslo 0 v <SPAN Class=CODE>pick_encoding</SPAN> znaΦφ F, 1 p°edstavuje l a 2 {.
  353. </DIV></FONT></b></i>
  354. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  355.     Bylo by ale krajn∞ neÜikovnΘ tabulku poka₧dΘ prohledßvat, spφÜe si vytvo°φme inverznφ. 
  356. </DIV></FONT></b></i>
  357. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  358.     unsigned char transformed[3][126];
  359. </DIV></FONT></b></i>
  360. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  361.     <PRE><SPAN Class=CODE>void maketrans (void)
  362. {
  363.   int i, j;
  364.   for (i=31; i<=126; i++)
  365.     for (j=0; j<3; j++)
  366.       transformed[j][encoding[(i-31)*3 + j]] = (i==31) ? 9 : i;
  367. }</SPAN></PRE>
  368. </DIV></FONT></b></i>
  369. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  370.     V p°edposlednφm °ßdku je jasn∞ vid∞t v²jimka pro tabulßtor (9), stejn∞ tak jako odeΦtenφ hodnoty 31. S <SPAN Class=CODE>transformed</SPAN> pak jednoduÜe vyhledßme vÜechny hodnoty. Kdy₧ <SPAN Class=CODE>i</SPAN> je pozice znaku <SPAN Class=CODE>c</SPAN> tak
  371. </DIV></FONT></b></i>
  372. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  373.     <SPAN Class=CODE>decoded = transformed[pick_encoding[i%64]][c];</SPAN>
  374. </DIV></FONT></b></i>
  375. <A Name="Title5"><FONT Size=3><DIV Class=Headline>Zßv∞r</DIV></font>
  376. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  377.     Je jasnΘ, ₧e ji₧ idea k≤dovßnφ HTML Φi JS je sama o sob∞ bezpeΦnostn∞ spornß, nebo¥ v₧dy existuje cesta, jak se domoci originßlu. Vedle jin²ch, komerΦnφch produkt∙, kterΘ tuto slu₧bu nabφzejφ, mß vÜak Microsoft navrch, nebo¥ dek≤dovßnφ implementoval p°φmo do prohlφ₧eΦe a nikoliv v javascriptu, co₧ je jinak jedinß mo₧nß cesta. Pak Φasto ale staΦφ nahradit funkci <SPAN Class=CODE>eval()</SPAN> (vykonß parametr jako javascript) prost²m <SPAN Class=CODE>document.write</SPAN> a zdrojov² text je na sv∞t∞. Negativnφ strßnka je ale samoz°ejm∞ v omezenosti na platformu Exploreru. 
  378. </DIV></FONT></b></i>
  379. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  380.     Nehled∞ na to si ale p°iznejme, ₧e samotn² algoritmus je skuteΦn∞ trapn², na to, jak jednoduchß ·loha toto je. StaΦφ implementovat jakoukoliv znßmou Üifru a do k≤dovacφho a dek≤dovacφho algoritmu zadat stejn² symetrick² klφΦ. Jedin² problΘm m∙₧e b²t v "nehezk²ch" znacφch v "textovΘm" HTML/JS souboru, kterΘ je t°eba chyt°e p°evΘst na normßlnφ "klßvesnicovou" abecedu (vstup m∙₧eme p°ed p°edßnφm Üif°e zkomprimovat, tak₧e na druhΘ stran∞ si je mo₧nΘ jistΘ prodlou₧enφ).
  381. </DIV></FONT></b></i>
  382. <A Name="Title6"><FONT Size=3><DIV Class=Headline>Dodatek</DIV></font>
  383. <FONT Size=2><DIV Align=Justify Class=Paragraph>
  384.     Text (mimo dodatku redakce) byl p°evzat ze strßnky <a href=../www.klaphek.nl/nr6/scrdec.html>http://www.klaphek.nl/nr6/scrdec.html</a>, program si m∙₧ete stßhnou na adrese <a href=../www.virtualconspiracy.com/index.php@page=scrdec_2Fintro>http://www.virtualconspiracy.com/index.php?page=scrdec/intro</a>.</TEXTAREA>--> 
  385. </DIV></FONT></b></i>
  386. </DIV>
  387. <SCRIPT>
  388. TextEnd('')
  389. </SCRIPT><OL Class=None Type=Disc></OL><SCRIPT>
  390. nie('<br>');AdditionalTablesBegin();
  391.  
  392. CommentsBegin('MS Script Encoder: ukßzka bezpeΦnosti p°es obstrukce',0);
  393. NoComments()
  394. CommentsEnd();
  395. </SCRIPT><SCRIPT>
  396. ArticleEnd()
  397. </SCRIPT></TABLE>
  398. <!-- /Prostredni sloupec -->
  399.  
  400.  
  401. <!-- Mezera 3 -->
  402.  
  403. <td width=5><img src="images/spacer.gif" width="5" height="1" border="0" alt=""></td>
  404. <!-- /Mezera 3-->
  405.  
  406. <!-- Mezera 2 -->
  407. <td width=1 bgcolor=#1063A5><img src="images/spacer.gif" width="1" height="1" border="0" alt=""></td>
  408. <!-- /Mezera 2-->
  409.  
  410. <!-- Mezera 1-->
  411. <td width=13 bgcolor="#006792" ><img src="images/spacer.gif" width="13" height="1" border="0" alt=""></td>
  412. <!-- /Mezera 1-->
  413.  
  414. <!-- Pravy sloupec -->
  415. <td bgcolor=#006792 width="0" align="center" valign="top">
  416. <SCRIPT SRC=server/right_js.php@version=1621></SCRIPT><br>
  417. </td>
  418. <!-- /Pravy sloupec -->
  419.  
  420.  
  421. </tr>
  422.  
  423. <!-- Bilo -->
  424. <tr>
  425. <td bgcolor=#000000><img src=space.gif height=1 width=1></td>
  426. <td bgcolor=#000000></td>
  427. <td bgcolor=#000000></td>
  428. <td bgcolor=#FFFFFF></td>
  429. <td bgcolor=#FFFFFF></td>
  430. <td bgcolor=#FFFFFF></td>
  431. <td colspan=5 bgcolor=#000000></td>
  432. </tr>
  433. <tr  bgcolor=#FFFFFF>
  434. <td><img src=space.gif height=20 width=1></td>
  435. <td></td>
  436. <td></td>
  437. <td></td>
  438. <td></td>
  439. <td></td>
  440. <td colspan=5></td>
  441. </tr>
  442. <!-- /Bilo-->
  443.  
  444.  
  445.  
  446. </table>
  447. <!-- /Rozdeleni na sloupce -->
  448.  
  449. <SCRIPT>
  450.     Exec(ToExecute);
  451.     ToExecute="";
  452. </SCRIPT>
  453.  
  454. <!-- Dolni lista -->
  455.  
  456.  
  457. <!-- Paticka -->
  458. <TABLE cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor=#ffffff>
  459. <TR><td colspan=5 align="center" bgcolor=#000000><img src=space.gif height=1 width=1></td></TR>
  460. <TR bgcolor=#f0f0f0>
  461. <td align="center">
  462. <IMG Src=images/logo2.gif hspace=10 vspace=5>
  463. </td>
  464. <td>
  465. <DIV Style="margin-top:4px;margin-bottom:4px;" Class=Copyright><FONT Face=Arial Size=1>
  466.  
  467. <b><u>Krypta.cz</u></b> -  Magazφn o informaΦnφ bezpeΦnosti.<br>
  468. Copyright (C) 2000-2002 Krypta.cz - <a href=mailto:michal.till@krypta.cz>Michal Till</a> a <a href=mailto:jan.kulveit@krypta.cz>Jan Kulveit</a>. VÜechna prßva vyhrazena. <br>
  469. Tento server dodr₧uje prßvnφ p°edpisy o ochran∞ osobnφch ·daj∙, vΦetn∞ standardu P3P (<a href=server/policy.xml>policy</a>). </FONT></DIV>
  470. </td>
  471. <td>
  472. <IMG Src=geronimo.gif hspace=10 vspace=5>
  473. </td>
  474. <td>
  475. <DIV Style="margin-top:4px;margin-bottom:4px;" Class=Copyright><FONT Face=Arial Size=1>
  476. RedakΦnφ systΘm Geronimo<br>
  477. Copyright (C) 2001-2002 <a href=mailto:michal.till@krypta.cz>Michal Till</a>
  478. </FONT></DIV>
  479. </td>
  480. </td></tr></table>
  481. <!-- Paticka -->
  482.  
  483. <!-- /Dolni lista -->
  484.  
  485. </body>
  486. </html>