<?xml version="1.0" encoding="windows-1252"?><rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Cantelmo Software</title><link>http://www.cantelmosoftware.com/dblog/</link>
<description>Cantelmo Software</description><language>it</language>
<item>
	<title><![CDATA[Social Network]]></title>
	<description><![CDATA[<p>...ultimi ritocchi al nuovo sito web! <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></p>
<p>Per chi, invece, segue le nuove tendenze del web (...e vuole informazioni brevi e concise) pu&ograve; seguire Cantelmo Software anche sui principali social network:</p>
<p>- <a href="http://www.facebook.com/pages/Cantelmo-Software/174048522664580">facebook</a>;</p>
<p>- <a href="http://www.twitter.com/cantelmosoftwar">twitter</a>;</p>
<p>- <a href="http://www.youtube.com/user/CantelmoSoftware">youtube</a>;</p>
<p><br />stay tuned! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" />&nbsp;</p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=67]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=67</guid>
	<dc:date>2011-08-07T17:06:23+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[NUOVA LINEA COMPONENTI '.NET EASY']]></title>
	<description><![CDATA[<p align="justify"><strong>Estate 2011 ricca di novit&agrave;!</strong> Cantelmo Software da il via ad una <strong>nuova linea di componenti</strong> per sviluppatori, denominata: <strong>.NET Easy... <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></strong></p>
<p align="justify">Tutti i componenti sono realizzati in puro codice managed (100% vb.net):</p>
<ul>
    <li>
    <div align="justify"><strong><a href="http://www.cantelmosoftware.com/ita/easydxf.html">DXF.IO</a></strong>: lettura/scrittura di file <a href="http://it.wikipedia.org/wiki/AutoCAD_DXF">.DXF</a> 2D/3D. Disponibile per tutte le tipologie di progetto: WinForms, WPF, ASP.NET, Silverlight,&nbsp;WP7;</div>
    </li>
    <li>
    <div align="justify"><strong><a href="http://www.cantelmosoftware.com/ita/palettebar.html">PaletteBar</a></strong>: creazione di <a href="http://it.wikipedia.org/wiki/Toolbar">toolbar</a>&nbsp;(anche fluttuanti)&nbsp;posizionabili a piacimento sullo schermo (utilissime in applicazioni grafiche).&nbsp;Al momento disponibile solo&nbsp;per WinForm.</div>
    </li>
</ul>
<p>stay tuned! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=66]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=66</guid>
	<dc:date>2011-07-16T17:20:57+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[UNPRINTABLE RENAMING? GIA' OBSOLETO!!!]]></title>
	<description><![CDATA[<p>Il vero pericolo per la sicurezza &egrave; provare un falso senso di sicurezza! <img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /></p>
<p align="justify">Il rilascio dei nuovi <a href="http://it.wikipedia.org/wiki/Decompilatore">decompilatori</a> per la piattaforma .NET (...gratuiti ed in formato sorgente cio&egrave;&nbsp;modificabile da chiunque!)&nbsp;espone, il ns codice, <strong>in modo esponenziale</strong>, al&nbsp;reverse-engineering e decompilazione da parte di hacker e competitors!</p>
<p align="justify">In questo post vedremo una&nbsp;modifica applicata al&nbsp;nuovo decompilatore <a href="http://www.ilspy.net"><strong>ilspy</strong></a>&nbsp;che&nbsp;bypassa una tecnica&nbsp;di offuscamento: <strong>il renaming a caratteri non stampabili</strong>!</p>
<p align="center"><img alt="" src="/public/unprintable.jpg" /></p>
<p align="justify">L'attuale&nbsp;modifica unitamente all'automatismo -gi&agrave; presente-&nbsp;per l'<strong>eliminazione&nbsp;del&nbsp;control-flow</strong> mette a serio rischio la tutela delle ns applicazioni!</p>
<p align="justify">Se il tuo obfuscator&nbsp;(...gratuito e non) usa <strong>ancora</strong> queste due tecniche obsolete...<strong>il tuo codice, purtroppo, appartiene gi&agrave; ad un altro!</strong>&nbsp;<img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /> </p>
<p align="justify">In breve:</p>
<p align="center"><img alt="" src="/public/hack_ilspy.jpg" /></p>
<p align="justify">la modifica&nbsp;esegue&nbsp;un <strong>banale check di validit&agrave; sul nome dei tipi <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></strong> In presenza di&nbsp;caratteri diversi da: &quot;<strong>_</strong>&quot;, &quot;<strong>.</strong>&quot;, &quot;<strong>a-z</strong>&quot;, &quot;<strong>A-Z</strong>&quot;, &quot;<strong>0-9</strong>&quot;&nbsp;si&nbsp;identifica il nuovo nome con:&nbsp;&quot;Type_&quot;, &quot;Method_&quot;, &quot;Field_&quot;, &quot;Event_&quot;, ect. unitamente&nbsp;al valore del metadata-token (<strong>che &egrave; unico!</strong>).</p>
<p align="justify"><strong>N.B.: Con tale tecnica si bypassa completamente l'overloads dei simboli! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></strong></p>
<p align="justify">La fasi da implementare sono:</p>
<p align="justify">- nell'assembly Mono.Cecil referenziare: System;<br />- nel file AssemblyReader -&gt; classe MetadataReader inserire il seguente metodo:</p>
<p><font size="2" face="Consolas"><font size="2" face="Consolas">// check unprintable name<br />public static bool IsValidName(string name)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp; byte[] arr = Encoding.UTF8.GetBytes(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int size = arr.Length - 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int ik = 0; ik &lt;= size; ik++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int chkvalue = arr[ik];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((((((chkvalue == 0x2e) || (chkvalue == 0x5f)) ? 1 : 0) == 0) &amp;&amp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((((chkvalue &gt;= 0x41) &amp;&amp; (chkvalue &lt;= 0x5a)) ? 1 : 0) == 0)) &amp;&amp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((((chkvalue &gt;= 0x61) &amp;&amp; (chkvalue &lt;= 0x7a)) ? 1 : 0) == 0))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</font></font></p>
<p><font size="2" face="Consolas"><font size="2" face="Consolas">e modificare, ad esempio, il&nbsp;metodo: <strong>ReadMethod</strong> in questo modo:</font></font></p>
<p><strong><font size="2" face="Consolas"><font size="2" face="Consolas">ReadMethod (</font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">uint</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"> method_rid, </font></font><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">Collection</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas">&lt;</font></font><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">MethodDefinition</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas">&gt; methods)</font></font></strong></p>
<p align="center"><font size="2" face="Consolas"><img alt="" src="/public/add_code.jpg" /></font></p>
<p align="justify"><font size="2" face="Consolas">e cos&igrave; via per i metodi: <strong>ReadType</strong>, <strong>ReadTypeReference</strong>, <strong>ReadField</strong>, <strong>ReadEvent</strong>, <strong>ReadProperty</strong>, <strong>ReadParameter</strong>, <strong>ReadMemberReferences</strong></font></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=65]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=65</guid>
	<dc:date>2011-07-07T16:44:14+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[EFFETTO BOOMERANG SUGLI OBFUSCATOR]]></title>
	<description><![CDATA[<p align="justify"><font face="Tahoma" size="2">Quando una determinata tecnica &egrave; obsoleta, vulnerabile e/o non funziona con tutti i decompilatori si verifica il cosiddetto <strong>effetto-boomerang sugli obfuscator</strong>! </font></p>
<p align="justify"><font face="Tahoma" size="2">quando si protegge un assembly .NET con uno dei&nbsp;seguenti prodotti:<br /><br />- bab** obfuscator;<br />- cryp** obfuscator;<br />- deeps** obfuscator</font></p>
<p align="justify"><font size="2"><font face="Tahoma"><strong>si scopre una <u>tecnica uguale</u> <img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /> ma ormai, da tempo, obsoleta!</strong> dato&nbsp;il semplice metodo con un argomento stringa, ed il suo&nbsp;codice in assembler-IL: </font></font></p>
<p align="left"><font face="Tahoma" size="2">.namespace <strong>MyNamespace</strong><br />{<br />&nbsp;&nbsp; .class private abstract auto ansi beforefieldinit <strong>MyClass</strong>&nbsp;<br />&nbsp;&nbsp; extends [mscorlib]System.Object <br />&nbsp;&nbsp; { .method assembly hidebysig instance void <strong>MyMethod</strong>(string s) cil managed <br />&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L_000x: ldtoken instance void <strong>MyNamespace</strong>.<strong>MyClass</strong>::<strong>MyMethod</strong>(string) // D0????????<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L_00xx: pop // 26 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... <br />&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp; } <br />} </font></p>
<p align="left"><font face="Tahoma" size="2">si nota la presenza delle&nbsp;seguenti istruzioni: <strong>ldtoken</strong>, <strong>pop</strong> </font></p>
<p align="justify"><font face="Tahoma" size="2">il token passato (sia esso MethodInfo, FieldInfo o Type) viene convertito in RuntimeHandle e pushato sullo stack per poi essere immediatamente poppato! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" />&nbsp;...in pratica <strong>nessuna modifica</strong>&nbsp;al codice!<img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /></font></p>
<p align="justify"><strong><font face="Tahoma" size="2">tale strategia &quot;blocca&quot;&nbsp;solo .NET Reflector (per un banale bug e/o funzionalit&agrave; non implementata<img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" />) e getta&nbsp;&quot;fumo negli occhi&quot;&nbsp;a chi deve valutare realmente le potenzialit&agrave; di un obfuscator! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></font></strong></p>
<p align="justify"><font size="2"><font face="Tahoma">basta spiare il codice con un altro decompilatore (</font><a href="http://www.ilspy.net"><font face="Tahoma">ilspy</font></a><font face="Tahoma">, ect.) per capire il fallimento totale di tale tecnica...ed il codice &quot;ritenuto sicuro&quot; appartiene gi&agrave; ad un altro!!!<img alt=": - D" src="/dblog/template/standard/gfx/smile_risatona.gif" /></font></font></p>
<p align="justify"><font face="Tahoma" size="2">modificando la sequenza di byte: <strong>D0 ?? ?? ?? ?? 26</strong> in <strong>00 00 00 00 00 00</strong> il codice torna visibile anche sotto reflector! dato che la signature (i 4 valori dopo <strong>DO</strong>) non &egrave;&nbsp;sempre uguale, &egrave; necessario, automatizzare lo sostituzione. Si utilizzer&agrave; il noto </font><a href="http://www.ntcore.com/exsuite.php"><font face="Tahoma" size="2">CFF&nbsp;explorer</font></a><font face="Tahoma" size="2"> a cui passeremo&nbsp;questo semplice script (ldtoken_pop.cff):</font></p>
<p align="justify"><strong><font face="Tahoma" size="2">-- ldtoken/pop patch (c) Cantelmo Software</font></strong></p>
<p align="justify"><font face="Tahoma" size="2">filename = GetOpenFile()</font></p>
<p align="justify"><font face="Tahoma" size="2">if filename == null then<br />&nbsp;&nbsp; return<br />end</font></p>
<p align="justify"><font face="Tahoma" size="2">-- &quot;<strong>ND</strong>&quot; elements are wildcards</font></p>
<p align="justify"><font face="Tahoma" size="2">data = { <strong>0xD0</strong>, <strong>ND</strong>, <strong>ND</strong>, <strong>ND</strong>, <strong>ND</strong>, <strong>0x26</strong> }<br /><br /></font><font face="Tahoma" size="2">--&nbsp;0x00 = <strong>nop</strong> -&gt; nothing instruction! <img alt="; - )" src="http://www.cantelmosoftware.com/dblog/template/standard/gfx/smile_occhiolino.gif" /><br />cr4ck = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } <br /></font><br /><font face="Tahoma" size="2">filehandle = OpenFile(filename)</font></p>
<p align="justify"><font face="Tahoma" size="2">if filehandle == null then<br />&nbsp;&nbsp; return<br />end</font></p>
<p align="justify"><font face="Tahoma" size="2">offset = SearchBytes(filehandle, 0, data)</font></p>
<p align="justify"><font face="Tahoma" size="2">while offset != null do&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp; WriteBytes(filehandle, offset, cr4ck)<br />&nbsp;&nbsp; offset = SearchBytes(filehandle, offset + 1, data)<br />end</font></p>
<p align="justify"><font face="Tahoma" size="2">if SaveFile(filehandle)== true then&nbsp;&nbsp; <br />&nbsp;&nbsp; MsgBox(&quot;deprotected!&quot;)<br />end</font></p>
<p align="justify"><font face="Tahoma" size="2">enjoy! <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></font></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=64]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=64</guid>
	<dc:date>2011-06-28T15:28:46+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[ANCORA UN NUOVO DECOMPILATORE! ]]></title>
	<description><![CDATA[<p>grazie alle vulnerabilit&agrave; del codice .NET ...tutti, ormai, riescono a fare tutto! <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></p>
<p>ultimamente sto&nbsp;riscontrando una situazione davvero divertente:</p>
<ul>
    <li>
    <div align="justify">i &quot;piccoli&quot; clonano le&nbsp;tecniche&nbsp;di protezione di altri&nbsp;obfuscator&nbsp;che&nbsp;poi&nbsp;re-implementano&nbsp;in&nbsp;prodotti gratuiti o,&nbsp;comunque, a prezzo minore dei rispettivi competitors e&nbsp;riuscire, in qualche modo,&nbsp;ad&nbsp;entrare e sopravvivere nel mondo del business del software;</div>
    </li>
    <li>
    <div align="justify">i &quot;grandi&quot; (produttori di componenti)&nbsp;invece rilasciano&nbsp;gratuitamente nuovi decompilatori per la piattaforma .NET</div>
    </li>
</ul>
<p align="justify">il riscontro immediato &egrave; che&nbsp;dopo, &quot;Jetbrains&quot; ora anche&nbsp;&quot;Telerik&quot; ha rilasciato&nbsp;il suo&nbsp;decompilatore: JustDecompile! (...la nota simpatica &egrave; che viene rilasciato un tool che danneggia tutti ma poi viene precisato che tale tool non&nbsp;dev'essere utilizzato per il&nbsp;reverse-engineering dello stesso) <img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /></p>
<p align="center"><img src="/public/justdec.jpg" alt="" /></p>
<p align="justify">nell'offuscazione del ns codice, quindi, non basta &quot;testare&quot; un obfuscator solo con il&nbsp;noto &quot;reflector&quot; ma i test di validazione devono essere fatti anche su tutti questi altri prodotti! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>
<p align="justify"><strong>[Update]&nbsp;20-giu-2011 (17:27)</strong>: tale tool &egrave; stato&nbsp;&quot;offuscato&quot; (...purtroppo la concorrenza &egrave; a tutti i livelli <img src="/dblog/template/standard/gfx/smile_lingua.gif" alt=": - P" />)&nbsp;con&nbsp;un obfuscator&nbsp;commerciale che&nbsp;fallisce miseramente all'analisi con &quot;ilspy.net&quot; (altro decompiler).</p>
<p align="justify">c'&egrave; ora da chiedersi: &quot;chi sar&agrave; il prossimo&quot;? <img alt=": - D" src="http://www.cantelmosoftware.com/dblog/template/standard/gfx/smile_risatona.gif" />&nbsp;</p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=63]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=63</guid>
	<dc:date>2011-06-20T11:20:17+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[ARRAY OBFUSCATION]]></title>
	<description><![CDATA[<p align="justify"><strong>Goliath .NET Obfuscator &egrave; in continua evoluzione con tecniche di protezione sempre uniche ed originali!</strong></p>
<p align="center"><img src="/public/arr_obf.jpg" alt="" /></p>
<p align="justify">Nell'attuale versione 5.5.x &egrave; stato inserito un ulteriore parametro di protezione (<strong>/array</strong>) che consente l'<strong>offuscazione automatica degli "array" di byte</strong> (nelle successive release anche di tutti gli altri tipi). In abbinamento a tale parametro &egrave; anche possibile usare il parametro <strong>/proxy</strong> (per usare, cio&egrave;, i "delegate-invoke" anzich&egrave; le "call-dirette")</p>
<p align="justify"><strong>N.B.: come sempre, tale parametro di protezione &egrave; disponibile, indipendentemente dalla tipologia di progetto usata: winforms, web, wpf, wp7, silverlight, ect.<br /></strong></p>
<p>enjoy! <img src="/dblog/template/standard/gfx/smile_occhiolino.gif" alt="; - )" /></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=62]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=62</guid>
	<dc:date>2011-06-15T11:52:32+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[GOLIATH .NET OBFUSCATOR vs WPF-MVVM]]></title>
	<description><![CDATA[<p align="justify">Ancora un test sulle potenzialit&agrave;&nbsp;del Goliath .NET Obfuscator 5.5.x su progetti WPF-MVVM (notoriamente ostici all'offuscazione del codice) <img src="/dblog/template/standard/gfx/smile_occhiolino.gif" alt="; - )" /></p>
<p align="justify"><a href="http://www.cantelmosoftware.com/download/wpf_mvvm.zip">Link</a></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=61]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=61</guid>
	<dc:date>2011-06-11T15:26:17+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[GOLIATH .NET OBFUSCATOR vs WPF BROWSER]]></title>
	<description><![CDATA[<p>Come pi&ugrave; volte ribadito &egrave;&nbsp;possibile sfruttare le molteplici tecniche di protezione presenti in Goliath .NET Obfuscator rel. 5.5.x qualunque sia il tipo di progetto&nbsp;sviluppato! <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></p>
<p>Oggetto di questo post &egrave; la protezione di&nbsp;una semplice applicazione &quot;<strong>WPF-Browser</strong>&quot;:</p>
<p align="center"><img alt="" src="/public/tictactoe.jpg" />&nbsp;</p>
<p align="justify">A questo <a href="http://www.cantelmosoftware.com/test/tictactoe.xbap">link</a> &egrave; disponibile l'applicazione demo; mentre, invece,&nbsp;da questo <a href="http://www.cantelmosoftware.com/test/tictactoe.exe">link</a> &egrave; possibile scaricare il solo eseguibile da decompilare! <img alt=": - P" src="/dblog/template/standard/gfx/smile_lingua.gif" /></p>
<p align="left">I parametri utilizzati per la protezione sono:</p>
<p align="left">/main:C:\testv55\tictactoe.exe /nonusercode /nopublic /cg /e:s /var /call /values /proxy /r /namespaces /stack</p>
<p align="left">enjoy! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=60]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=60</guid>
	<dc:date>2011-05-31T22:40:03+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[GOLIATH .NET OBFUSCATOR vs WP7]]></title>
	<description><![CDATA[<p align="justify">Alcune delle molteplici tecniche di protezione presenti in&nbsp;<strong>Goliath .NET Obfuscator rel. 5.5.x&nbsp;</strong>applicate ad un semplice&nbsp;progetto WP7:</p>
<p align="center"><img alt="" src="/public/calendar.jpg" /></p>
<p>I parametri utilizzati sono: </p>
<p>/main:C:\testv55CalendarControl.dll /nonusercode /nopublic /cg /e:s /var /call /values /proxy /r /xap:C:\testv55\CalendarControl.xap /namespaces</p>
<p>L'esempio, invece,&nbsp;&egrave; disponibile a questo <a href="http://www.cantelmosoftware.com/download/cc_obf.zip"><strong>link</strong></a> </p>
<p>enjoy! <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>
<p>Ulteriori Aggiornamenti:</p>
<ul>
    <li>
    <div><strong>01-giu-2011</strong>: inserito nel processo di protezione il parametro <strong>/math </strong>per l'offuscamento delle operazioni matematiche: +, -, *, /, And, Not, Or, Xor <img src="/dblog/template/standard/gfx/smile_risatona.gif" alt=": - D" /></div>
    </li>
</ul>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=59]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=59</guid>
	<dc:date>2011-05-30T09:58:34+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[PROTEZIONE PER OGNI TIPOLOGIA DI PROGETTO]]></title>
	<description><![CDATA[<p align="justify">Le tecniche di protezione implementate nel nuovo&nbsp;Goliath .NET Obfuscator rel. 5.5 sono sempre disponibili indipendentemente dal tipo di progetto utilizzato: winform, web, silverlight, ect. </p>
<p align="justify">Un esempio di protezione su un progetto <strong>Silverlight4&nbsp;</strong>&egrave; disponibile a questo <a href="http://www.cantelmosoftware.com/test/testsl.html"><strong>link</strong></a> </p>
<p align="justify">I parametri utilizzati&nbsp;sono: </p>
<p align="left"><strong>goliath /main:C:\g_test_v5\testSL.dll /e:s /values /nopublic /xap:C:\g_test_v5\TestSL.xap /snk:C:\g_test_v5\goliath.snk /proxy /r /var /namespaces /call </strong></p>
<p align="justify"><strong>/main:</strong> assembly principale;<br /><strong>/e:s</strong> encryption statico delle stringhe;<br /><strong>/values</strong> encryption statico dei valori numerici (integer);<br /><strong>/nopublic</strong> esclusione dei tipi pubblici dal renaming;<br /><strong>/xap:</strong> il file .xap che deve essere aggiornato con gli assembly offuscati;<br /><strong>/snk:</strong> file strong-name da utilizzarsi per rifirmare gli assembly (ed automaticamente viene inserito un check anti-tampering);<br /><strong>/proxy</strong> utilizzare proxy-call anzich&egrave; call dirette ai metodi (in questo esempio applicato solo all'encryption delle stringhe e dei valori numerici);<br /><strong>/r</strong> renaming dei simboli;<br /><strong>/var</strong> offuscazione delle variabili nei metodi /namespaces renaming dei namespaces;<br /><strong>/call</strong> camuffamento delle call ai costruttori e metodi</p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=58]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=58</guid>
	<dc:date>2011-05-08T19:36:28+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[SCEGLIERE IL GIUSTO LIVELLO DI PROTEZIONE]]></title>
	<description><![CDATA[<p>Un grafico &egrave; sempre meglio di tante&nbsp;parole!</p>
<p align="center"><img alt="" src="/public/flow.jpg" /></p>
<p align="justify">Goliath .NET Obfuscator -grazie ad un uso combinato dei vari parametri di protezione- consente di raggiungere un elevato livello&nbsp;di sicurezza<img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>
<p align="left"><a href="http://www.cantelmosoftware.com/download/flowgraph.zip"><strong>Link</strong></a></p>
<p align="left">&nbsp;</p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=57]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=57</guid>
	<dc:date>2011-03-11T11:17:00+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[CODICE METAMORFICO &amp; POLIMORFICO - PARTE 2]]></title>
	<description><![CDATA[<p align="justify">Per rendere difficoltoso l'analisi del ns codice, non basta solo &quot;camuffare&quot; i <strong>valori numerici</strong>. E'&nbsp;necessario applicare &quot;<em>complesse trasformazioni al codice</em>&quot;. Tali trasformazioni consentono di creare <strong>codice metamorfico</strong>&nbsp;<img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>
<p align="left">Dato l'esempio vb.net<br /></p>
<p align="center"><img alt="" src="/public/metamorphic_0.jpg" /></p>
<font color="#0000ff"><font color="#0000ff"></font></font>
<p><font size="2"><font face="Courier New"><font size="1"><font color="#0000ff"><font color="#0000ff"><font color="#000000" size="2"><font face="Arial">ed il relativo codice assembler-IL:</font><br />
<p align="center"><img alt="" src="/public/metamorphic_1.jpg" /></p>
</font></font></font></font></font></font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&egrave; possibile applicare una&nbsp;trasformazione al codice che esegue la&nbsp;<strong>somma del valore 1</strong>:</p>
<p><strong>ij += 1</strong>&nbsp;&nbsp; ...diventa:</p>
<font size="2">
<p><strong>ij = -(</strong><font color="#0000ff" size="2"><font color="#0000ff" size="2"><strong>Not</strong></font></font><font size="2"><strong> ij)<br /></strong>
<p align="center"><strong><img alt="" src="/public/metamorphic_2.jpg" /></strong></p>
<p align="left">invece, <strong>invertendo l'ordine</strong> del &quot;<font color="#0000ff"><strong>Not</strong></font>&quot; e del &quot;<font color="#0000ff"><strong>Neg</strong></font>&quot; si ottiene invece la <strong>sottrazione di 1</strong>:</p>
<p><strong>ij -= 1</strong>&nbsp;&nbsp; ...diventa:</p>
<font size="2">
<p><strong>ij = (<font color="#0000ff" size="2"><font color="#0000ff" size="2">Not</font></font></strong><font size="2"><strong> -ij)</strong> <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></font></p>
</font></font></p>
</font>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=56]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=56</guid>
	<dc:date>2011-03-04T15:41:46+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[CODICE METAMORFICO  &amp; POLIMORFICO - PARTE 1]]></title>
	<description><![CDATA[<p align="justify"><font face="Tahoma">Fino ad ora &egrave; stato abbastanza semplice <strong>bloccare</strong> tutti i decompilatori .NET <img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /> </font></p>
<p align="justify"><font face="Tahoma">Ma dato che gli stessi quest'ultimi&nbsp;si stanno evolvendo -imho-&nbsp;servono nuove idee! Eccovi, quindi, le mie idee<img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></font></p>
<p align="justify"><font face="Tahoma">L'aggressore (con un decompilatore) vuole a tutti i costi spiare il ns codice? ...Bene! Perch&egrave;, allora,&nbsp;non fargli&nbsp;spiare,&nbsp;analizzare e&nbsp;<strong>far perdere tempo</strong> con quello&nbsp;che vogliamo noi?<img alt=": - D" src="/dblog/template/standard/gfx/smile_risatona.gif" /></font></p>
<p align="justify"><font face="Tahoma">Questo &egrave; il primo di una serie di post in cui&nbsp;si illustra come Goliath .NET Obfuscator applica alcune <strong>trasformazioni metamorfiche e/o polimorfiche</strong> al codice (alcune delle quali gi&agrave; usate sin dalla release 2.x) <strong>usando le stesse -efficaci-&nbsp;tecniche dei virus</strong> al fine di &quot;diversificare&quot; il risultato&nbsp;finale.</font></p>
<p align="justify"><font face="Tahoma"><strong>Tale tecniche risultano valide (come gi&agrave; detto in precedenza) anche per l'eventuale watermarked del codice stesso</strong>.</font></p>
<p align="justify"><font face="Tahoma">Il rovescio della medaglia &egrave; che&nbsp;rendere il codice &quot;<strong>troppo duro da analizzare</strong>&quot; porta&nbsp;lo svantaggio nell'analisi di eventuali malware protetti con le stesse tecniche e/o programma (...ma non siamo&nbsp;produttori di AV).<img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /></font></p>
<p align="justify"><font face="Tahoma">Iniziamo ora, per&ograve;,&nbsp;con la parte pi&ugrave; semplice:&nbsp;la &quot;<em>p3rv3rs!0n3</em>&quot; dei valori numerici: &quot;<strong>-1</strong>&quot; e &quot;<strong>0</strong>&quot; <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></font></p>
<p align="justify"><strong><font face="Tahoma">Valore &quot;-1&quot;: </font></strong></p>
<font color="#0000ff" size="2"><font color="#0000ff" size="2">
<p><font color="#000000"><strong><font face="Tahoma">Dim<font size="2"> a </font><font size="2"><font size="2">As</font></font><font size="2"> Int32 = -1 (vb.net)</font></font></strong></font></p>
</font></font>
<p><font face="Tahoma" size="2">che tradotto in assembler IL diventa:</font></p>
<p align="justify"><font face="Tahoma" color="#000000">.locals init ([0] </font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp; L_0000: </font><a title="ldc.i4.m1 (0x0015): Pushes the integer value of -1 onto the evaluation stack as an int32."><font face="Tahoma" color="#000000">ldc.i4.m1</font></a><font face="Tahoma" color="#000000"> <br />&nbsp;&nbsp;&nbsp; L_0001: </font><a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."><font face="Tahoma" color="#000000">stloc.0</font></a><font face="Tahoma" color="#000000">&nbsp;</font></p>
<p align="justify"><font face="Tahoma"><strong>quindi la prima idea &egrave; quella di ottenere il valore &quot;-1&quot; coinvolgendo qualche altro valore</strong>.&nbsp;Esempio:</font></p>
<font color="#0000ff" size="2"><font color="#0000ff" size="2">
<p><strong><font color="#000000"><font face="Tahoma">Dim<font size="2"> a </font><font size="2"><font size="2">As</font></font><font size="2"> Int32 = 123 </font><font size="2"><font size="2">Or</font></font></font></font></strong><font size="2"><strong><font face="Tahoma" color="#000000"> -1 </font></strong>
<p><font face="Tahoma" color="#000000">.locals init ([0] </font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp; L_0000: </font><a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."><font face="Tahoma" color="#000000">ldc.i4.s</font></a><font face="Tahoma" color="#000000"> 123 // random value<br />&nbsp;&nbsp;&nbsp; L_0002: </font><a title="ldc.i4.m1 (0x0015): Pushes the integer value of -1 onto the evaluation stack as an int32."><font face="Tahoma" color="#000000">ldc.i4.m1</font></a><font face="Tahoma" color="#000000"> <br />&nbsp;&nbsp;&nbsp; L_0003: </font><a title="or (0x0060): Compute the bitwise complement of the two integer values on top of the stack and pushes the result onto the evaluation stack."><font face="Tahoma" color="#000000">or</font></a><font face="Tahoma" color="#000000"> <br />&nbsp;&nbsp;&nbsp; L_0004: </font><a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."><font face="Tahoma" color="#000000">stloc.0</font></a><font face="Tahoma" color="#000000"> <br /></font></p>
<p><strong><font face="Tahoma" color="#000000">Valore: &quot;0&quot;: </font></strong></p>
<p><font color="#000000"><strong><font face="Tahoma">Dim<font size="2"> a </font><font size="2"><font size="2">As</font></font><font size="2"> Int32 =&nbsp;0 (vb.net)</font></font></strong></font></p>
<p><font face="Tahoma" color="#000000" size="2">che tradotto in assembler IL diventa:</font></p>
<p align="justify"><font face="Tahoma" color="#000000">.locals init ([0] </font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp; L_0000: ldc.i4.0<br />&nbsp;&nbsp;&nbsp; L_0001: </font><a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."><font face="Tahoma" color="#000000">stloc.0</font></a><font face="Tahoma" color="#000000">&nbsp;</font></p>
</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Tahoma"></font></p>
<p><strong><font face="Tahoma"><font color="#000000">si pu&ograve;&nbsp;&quot;manipolare&quot; in questo modo:</font>&nbsp;</font></strong></p>
</font></font>
<p><strong><font color="#000000"><font face="Tahoma">Dim<font size="2"> a </font><font size="2"><font size="2">As</font></font><font size="2"> Int32 = 123 </font><font size="2"><font size="2">Xor</font></font></font></font></strong><font size="2"><font color="#000000"><font face="Tahoma"><strong> 123 </strong>...oppure:<br /><strong>Dim<font size="2"> a </font><font size="2"><font size="2">As</font></font><font size="2"> Int32 = 123 </font><font size="2"><font size="2">And 0</font></font></strong><font size="2"> </font></font></font></font></p>
<font size="2"><font size="2">
<p><font face="Tahoma"><font color="#1000a0">.</font><font color="#000000">locals init ([0] </font></font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp; L_0000: </font><a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."><font face="Tahoma" color="#000000">ldc.i4.s</font></a><font face="Tahoma" color="#000000"> 123 // random value<br />&nbsp;&nbsp;&nbsp; L_0002: </font><a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."><font face="Tahoma" color="#000000">ldc.i4.s</font></a><font face="Tahoma" color="#000000"> 123 //&nbsp;equal first value<br />&nbsp;&nbsp;&nbsp; L_0004: x</font><a title="or (0x0060): Compute the bitwise complement of the two integer values on top of the stack and pushes the result onto the evaluation stack."><font face="Tahoma" color="#000000">or</font></a><font face="Tahoma" color="#000000"> <br />&nbsp;&nbsp;&nbsp; L_0005: </font><a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."><font face="Tahoma" color="#000000">stloc.0</font></a><font face="Tahoma" color="#000000"> </font></p>
<p><font face="Tahoma" color="#000000">.locals init ([0] </font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp; L_0000: </font><a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."><font face="Tahoma" color="#000000">ldc.i4.s</font></a><font face="Tahoma" color="#000000"> 123 // random value<br />&nbsp;&nbsp;&nbsp; L_0002: </font><a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."><font face="Tahoma" color="#000000">ldc.i4.0</font></a><br /><font face="Tahoma" color="#000000">&nbsp;&nbsp;&nbsp; L_0003: and&nbsp;<br />&nbsp;&nbsp;&nbsp; L_0004: </font><a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."><font face="Tahoma" color="#000000">stloc.0</font></a><font face="Tahoma" color="#000000"> <br /></font></p>
<p><font face="Tahoma">Per la restituzione di questi due valori &egrave; possibile anche sfruttare una <strong>variante di un check &quot;If-Then-Else&quot;</strong>:&nbsp;</font><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font face="Tahoma"> </font>
<p><font face="Tahoma">If<font size="2"> (a &lt; b) </font></font><font color="#0000ff" size="2"><font face="Tahoma" color="#0000ff" size="2">Then<br /></font></font><font face="Tahoma" size="2">&nbsp;&nbsp;&nbsp;&nbsp; c = -1<br /></font><font color="#0000ff" size="2"><font face="Tahoma" color="#0000ff" size="2">Else<br />&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font face="Tahoma"><font size="2">c = 0<br /></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">End</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">If</font></font></font></p>
<p><font face="Tahoma" color="#000000"><strong>quindi per produrre il valore &quot;-1&quot;:</strong></font></p>
<p><font face="Tahoma">&nbsp;&nbsp;&nbsp;&nbsp; <strong>(</strong><font size="2"><strong>a - b ) &gt;&gt; 31</strong> <font color="#000000">//&nbsp;(sizeof(int) * CHAR_BIT) - </font><font color="#000000">1</font></font><font color="#000000">&nbsp;= (4 * 8) -1 = 31</font></font></p>
</font></font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Tahoma"></font></p>
<p><font face="Tahoma" color="#000000">.locals init ([0] </font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp;&nbsp;L_0000: ldc.i4.s 100 //&nbsp;il primo valore dev'essere&nbsp;<strong>minore</strong> del secondo<br />&nbsp;&nbsp;&nbsp; L_0002: ldc.i4.s 200 //&nbsp;secondo valore<br />&nbsp;&nbsp;&nbsp; L_0004: sub <br />&nbsp;&nbsp;&nbsp; L_0005: ldc.i4.s 31<br />&nbsp;&nbsp;&nbsp; L_0007: shr <br />&nbsp;&nbsp;&nbsp; L_0008: stloc.0 </font></p>
<font color="#0000ff" size="2"><font color="#0000ff" size="2">
<p><font face="Tahoma" color="#000000"><strong>mentre&nbsp;per produrre il valore &quot;0&quot;:</strong></font></p>
<p><font face="Tahoma" color="#000000">.locals init ([0] </font><a title="int32" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32"><font face="Tahoma" color="#000000">int32</font></a><font face="Tahoma" color="#000000"> <b>a</b>)<br />&nbsp;&nbsp;&nbsp;&nbsp;L_0000: ldc.i4.s 200 //&nbsp;primo valore dev'essere&nbsp;<strong>maggiore</strong>&nbsp;del secondo<br />&nbsp;&nbsp;&nbsp; L_0002: ldc.i4.s 100 //&nbsp;secondo valore<br />&nbsp;&nbsp;&nbsp; L_0004: sub <br />&nbsp;&nbsp;&nbsp; L_0005: ldc.i4.s 31<br />&nbsp;&nbsp;&nbsp; L_0007: shr <br />&nbsp;&nbsp;&nbsp; L_0008: stloc.0 </font></p>
<p><font face="Tahoma" color="#000000">giusto per iniziare!<img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></font></p>
<p><font face="Tahoma" color="#000000"><strong>Goliath .NET Obfuscator...molto pi&ugrave; di un semplice obfuscator!</strong></font></p>
</font></font></font></font>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=55]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=55</guid>
	<dc:date>2011-02-22T12:59:51+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[BYE-BYE TO .NET REFLECTOR]]></title>
	<description><![CDATA[<p align="justify">...c'&egrave; chi va e c'&egrave; chi viene! ...ed il problema -di sempre- comunque rimane: <strong>la decompilazione delle ns applicazioni .NET!</strong> <img src="/dblog/template/standard/gfx/smile_occhiolino.gif" alt="; - )" /></p>
<p align="justify"><em>&quot;From the end of February 2001 .NET Reflector will become a paid-for product, starting at $35&quot;</em> </p>
<p align="justify">Con questo annuncio l'azienda produttrice&nbsp;fa sapere che non ci sar&agrave; pi&ugrave; una versione gratuita del noto decompilatore! <img alt=": - o" src="/dblog/template/standard/gfx/smile_shockato.gif" /> </p>
<p align="justify">Le situazioni da me ipotizzate sono:<br />- la solita &quot;<strong>strategia d marketing</strong>&quot;: ti regalano una cosa per farti abituare e poi, quando non ne puoi pi&ugrave; fare a meno,...il prodotto diventa a pagamento!<br />- &quot;<strong>punizione</strong>&quot; per gli utenti: dato che circola in rete una versione completamente spacchettata e decompilata (con tanto di src code c#- pronto ad essere ricompilato con VS) si tenta, in qualche modo, di recuperare l'investimento fatto inizialmente (acquistando .NET Reflector da un&nbsp;dipendente MS)</p>
<p align="justify">Quale che sia la verit&agrave;, l'azienda&nbsp;sar&agrave; ora costretta a &quot;rimboccarsi le maniche&quot;...perch&egrave; ci sar&agrave; da competere (la concorrenza purtroppo &egrave; a tutti i livelli: decompilatori, offuscatori<img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" />, ect) con un nuovo prodotto open-source: <strong>ILSpy</strong> (assembly browser &amp; decompilatore)</p>
<p align="center"><img alt="" src="/public/ilspy.jpg" /></p>
<p align="justify">Il progetto &egrave; basato su <strong>Mono-Cecil &amp; .NET FW 4.0</strong>. Per ora il codice &quot;recuperato&quot; &egrave; solo in <strong>assembler-IL</strong> e <strong>c# </strong></p>
<p align="justify">L'impressione d'uso&nbsp;&egrave; buona e sembra promettere bene&nbsp;per il futuro. Da questo <a href="http://www.ilspy.net"><strong>link</strong></a> &egrave; possibile scaricare sia la&nbsp;versione compilata che i src&nbsp;code in c#<img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=54]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=54</guid>
	<dc:date>2011-02-19T11:13:57+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
<item>
	<title><![CDATA[GOLIATH .NET OBFUSCATOR 5.X: TRE NUOVE TECNICHE DI PROTEZIONE]]></title>
	<description><![CDATA[<p align="justify">Pur essendo solo un &quot;<em>geometra edile</em>&quot; Vi propongo nr. <strong>3&nbsp;nuove tecniche di protezione</strong>&nbsp;che, al momento, non sono state pensate/implementate da nessun &quot;architetto software&quot; e/o &quot;ingegnere informatico&quot; (...ogni riferimento a fatti o &quot;personaggi&quot; -che ultimamente cercano di screditare il mio operato- &egrave; puramente casuale! <img alt=": - D" src="/dblog/template/standard/gfx/smile_risatona.gif" />&nbsp;...<em>che tristezza dover copiare le tecniche da un &quot;edile&quot;</em> !) </p>
<p align="justify">Le nuove funzionalit&agrave;&nbsp;(gi&agrave; implementate&nbsp;in Goliath .NET Obfuscator 5.x) sono&nbsp;accessibili&nbsp;tramite&nbsp;i&nbsp;nuovi parametri: <strong>/fakevar</strong>, <strong>/fakemath</strong>, <strong>/fakejmp</strong>)</p>
<p align="center"><img alt="" src="/public/goliath5_features.jpg" /></p>
<p>L'idea di fondo &egrave; questa: se un aggressore riesce&nbsp;ad eliminare tutti gli strati di protezione di Goliath .NET Obfuscator, che tipo di codice&nbsp;si ritrova&nbsp;a dover analizzare? <img alt=": - )" src="/dblog/template/standard/gfx/smile_sorriso.gif" /></p>
<p align="justify">Nel documento allegato &egrave; possibile valutare la &quot;<strong>qualit&agrave; del codice offuscato</strong>&quot; ottenibile con alcune &quot;semplici&quot; tecniche:</p>
<p align="justify"><strong>/renaming</strong>: renaming dei simboli con overloads automatico;<br /><strong>/call</strong>: offuscazione delle call ai costruttori e metodi (nuova tecnica valida anche per progetti&nbsp;wp7);</p>
<p align="justify">ed i nuovi parametri:<br /><br /><strong>/fakevar</strong>: offuscamento delle variabili interne ai metodi (&quot;alias&quot;);<br /><strong>/fakemath</strong>: offuscazione&nbsp;dei calcoli matematici utilizzanti&nbsp;i 4 operatori: <strong>+</strong>,<strong> -</strong>,<strong> *</strong>,<strong> /</strong> e le funzioni booleane: &quot;<strong>And</strong>&quot;, &quot;<strong>Or</strong>&quot;, &quot;<strong>Xor</strong>&quot;, &quot;<strong>Not</strong>&quot;;<br /><strong>/fakejmp</strong>: offuscazione dei salti condizionali: &quot;<strong>&lt;</strong>&quot;,<strong> </strong>&quot;<strong>&lt;=</strong>&quot;,<strong> </strong>&quot;<strong>=&gt;</strong>&quot;,<strong> </strong>&quot;<strong>&gt;</strong>&quot; </p>
<p align="justify">Per far comprendere meglio le nuove tecniche utilizzate&nbsp;<strong>sono state&nbsp;escluse dal processo di protezione</strong>: <u>encryption delle stringhe</u>, <u>offuscazione dei valori numerici</u>, <u>offuscazione del controlflow</u> e l'<u>encryption dei metodi<img alt="; - )" src="/dblog/template/standard/gfx/smile_occhiolino.gif" /></u></p>
<p align="justify">Il documento (formato .pdf - dim. 487 kb) &egrave; disponibile a questo <a href="http://www.cantelmosoftware.com/download/goliath5_features.pdf"><strong>link</strong></a></p>]]></description>
	<link><![CDATA[http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=53]]></link>
	<guid isPermaLink="true">http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=53</guid>
	<dc:date>2011-02-17T13:16:35+01:00</dc:date>
	<dc:creator>Marcello Cantelmo</dc:creator>
</item>
	</channel></rss>
