<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Security News &#187; Programowanie</title> <atom:link href="http://www.secnews.pl/category/programowanie/feed/" rel="self" type="application/rss+xml" /><link>http://www.secnews.pl</link> <description>Reverse engineering, ochrona oprogramowania.</description> <lastBuildDate>Mon, 30 Jan 2012 14:41:10 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Kompresja aplikacji .NET</title><link>http://www.secnews.pl/2012/01/29/kompresja-aplikacji-net/</link> <comments>http://www.secnews.pl/2012/01/29/kompresja-aplikacji-net/#comments</comments> <pubDate>Sat, 28 Jan 2012 22:42:02 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Narzędzia]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[.netshrink]]></category> <category><![CDATA[dll binder]]></category> <category><![CDATA[dotnete]]></category> <category><![CDATA[exe-packer]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1232</guid> <description><![CDATA[.netshrink v2.2 .netshrink to kompresor (tzw. exe-packer) aplikacji .NET-owych, wykorzystujący kompresję LZMA, DLL binder pozwalający scalić aplikację oraz jej dodatkowe moduły DLL do jednego pliku EXE, .netshrink pozwala także na ochronę aplikacji na hasło przed uruchomieniem. W zaktualizowanej wersji poprawione zostało uruchamianie skompresowanych aplikacji ze ścieżek UNC (zasoby sieciowe) z linii komend i zachowywanie oryginalnej [...]]]></description> <content:encoded><![CDATA[<h1>.netshrink v2.2</h1><p><a href="http://www.pelock.com/products/netshrink">.netshrink</a> to kompresor (tzw. <em>exe-packer</em>) aplikacji .NET-owych, wykorzystujący kompresję LZMA, DLL binder pozwalający scalić aplikację oraz jej dodatkowe moduły DLL do jednego pliku EXE, .netshrink pozwala także na ochronę aplikacji na hasło przed uruchomieniem.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2012/01/netshrink_main1.png"><img class="alignnone size-full wp-image-1233" title="Okno główne .netshrink v2.2" src="http://www.secnews.pl/wp-content/uploads/2012/01/netshrink_main1.png" alt="" width="551" height="621" /></a></p><p>W zaktualizowanej wersji poprawione zostało uruchamianie skompresowanych aplikacji ze ścieżek UNC (zasoby sieciowe) z linii komend i zachowywanie oryginalnej architektury CPU dla skompresowanych plików.</p><p>Strona domowa:<br /> <a href="http://www.pelock.com/products/netshrink">http://www.pelock.com/products/netshrink</a></p><p>Wersje demonstracyjną można ściągnąć z:</p><p>Setup:<br /> <a href="http://www.pelock.com/download.php?f=netshrink.exe">http://www.pelock.com/download.php?f=netshrink.exe</a> (701 kB)</p><p>Archiwum zip:<br /> <a href="http://www.pelock.com/download.php?f=netshrink.exe">http://www.pelock.com/download.php?f=netshrink.exe</a> (415 kB)</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2012/01/29/kompresja-aplikacji-net/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>.netshrink v2.1 &#8211; kompresor i DLL binder dla aplikacji .NET</title><link>http://www.secnews.pl/2012/01/21/netshrink-v2-1-kompresor-i-dll-binder-dla-aplikacji-dotnet/</link> <comments>http://www.secnews.pl/2012/01/21/netshrink-v2-1-kompresor-i-dll-binder-dla-aplikacji-dotnet/#comments</comments> <pubDate>Sat, 21 Jan 2012 14:53:48 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Narzędzia]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[.netshrink]]></category> <category><![CDATA[dll binder]]></category> <category><![CDATA[dotnete]]></category> <category><![CDATA[exe-packer]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1201</guid> <description><![CDATA[.netshrink v2.1 Właśnie ukazała się nowa wersja mojego małego narzędzia do kompresji aplikacji .NET. .netshrink to kompresor (tzw. exe-packer)  aplikacji .NET-owych, wykorzystujący kompresję LZMA. DLL Binder W nowej wersji została dodana opcja dołączania bibliotek dynamicznych DLL do aplikacji, dzięki czemu można swoją aplikację i jej pomocnicze biblioteki skompresować do pojedynczego pliku wykonywalnego. Wykrywanie narzędzi do łamania [...]]]></description> <content:encoded><![CDATA[<h1>.netshrink v2.1</h1><p>Właśnie ukazała się nowa wersja mojego małego narzędzia do <strong>kompresji aplikacji .NET</strong>.</p><p><strong><a href="http://www.pelock.com/products/netshrink">.netshrink</a></strong> to kompresor (tzw. <em>exe-packer</em>)  aplikacji .NET-owych, wykorzystujący kompresję LZMA.</p><h2>DLL Binder</h2><p>W nowej wersji została dodana opcja <strong>dołączania bibliotek dynamicznych DLL</strong> do aplikacji, dzięki czemu można swoją aplikację i jej pomocnicze biblioteki <strong>skompresować do pojedynczego pliku wykonywalnego</strong>.</p><p><img title="Scalanie aplikacji i jej bibliotek do jednego pliku" src="http://www.secnews.pl/wp-content/uploads/2012/01/netshrink_dll_binder.png" alt="" width="357" height="324" /></p><h2>Wykrywanie narzędzi do łamania aplikacji</h2><p>Zaktualizowana wersja pozwala również skompresowanym aplikacjom na <strong>wykrywanie popularnych narzędzi do łamania i rozpakowywania</strong> oprogramowania poprzez stałe monitorowanie systemu na ich obecność, w razie ich wykrycia, <strong>skompresowana aplikacja zostanie zamknięta</strong>.</p><h2>Ochrona na hasło</h2><p>.netshrink pozwala także na zaszyfrowanie aplikacji hasłem, bez poprawnego hasła nie można uruchomić skompresowanej aplikacji. Zabezpieczenie na hasło wykorzystuje weryfikację bazującą na funkcji skrótu <strong>SHA256</strong> i szyfrowanie danych algorytmem <strong>AES / Rijndael</strong> z kluczem 256 bitowym bazującym na wartości hash z hasła.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2012/01/netshrink_main.png"><img class="alignright size-full wp-image-1202" title=".netshrink kompresor i DLL binder dla aplikacji .NET" src="http://www.secnews.pl/wp-content/uploads/2012/01/netshrink_main.png" alt=".netshrink kompresor i DLL binder dla aplikacji .NET" width="541" height="618" /></a></p><p>Nowości obejmują także:</p><ul><li>tworzenie <strong>kopii zapasowej</strong> kompresowanych aplikacji</li><li>tworzenie skryptu wsadowego .BAT pozwalającego na <strong>szybkie przywrócenie</strong> oryginalnego pliku z kopii zapasowej</li><li><strong>zachowywanie oryginalnych atrybutów</strong> kompresowanego assembly (nazwa aplikacji, dane firmy etc.)</li></ul><p>Strona domowa:<br /> <a href="http://www.pelock.com/products/netshrink">http://www.pelock.com/products/netshrink</a></p><p>Wersje demonstracyjną można ściągnąć z:</p><p>Setup:<br /> <a href="http://www.pelock.com/download.php?f=netshrink.exe">http://www.pelock.com/download.php?f=netshrink.exe</a> (692 kB)</p><p>Archiwum zip:<br /> <a href="http://www.pelock.com/download.php?f=netshrink.exe">http://www.pelock.com/download.php?f=netshrink.exe</a> (405 kB)</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2012/01/21/netshrink-v2-1-kompresor-i-dll-binder-dla-aplikacji-dotnet/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Patcher dla C#</title><link>http://www.secnews.pl/2012/01/12/patcher-dla-c-sharp/</link> <comments>http://www.secnews.pl/2012/01/12/patcher-dla-c-sharp/#comments</comments> <pubDate>Thu, 12 Jan 2012 13:23:01 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[c++]]></category> <category><![CDATA[patcher]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1194</guid> <description><![CDATA[Czekałem na koniec świata, ale jakoś go nie było, tymczasem mała klasa w C# do patchowania plików z paroma przydatnymi opcjami jak np. patchowanie stringow Delphi. using System; using System.IO; using System.Collections.Generic; using System.Text; &#160; namespace NetPatcher &#123; class Patcher &#123; public FileStream inputFile; &#160; public Patcher&#40;&#41; &#123; &#125; &#160; ~Patcher&#40;&#41; &#123; CloseFile&#40;&#41;; &#125; &#160; [...]]]></description> <content:encoded><![CDATA[<p>Czekałem na koniec świata, ale jakoś go nie było, tymczasem mała klasa w C# do patchowania plików z paroma przydatnymi opcjami jak np. patchowanie stringow Delphi.</p><div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> NetPatcher
<span style="color: #008000;">&#123;</span>
    <span style="color: #6666cc; font-weight: bold;">class</span> Patcher
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> FileStream inputFile<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> Patcher<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        ~Patcher<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            CloseFile<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> OpenFile<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> filePath<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                inputFile <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> FileStream<span style="color: #008000;">&#40;</span>filePath, FileMode<span style="color: #008000;">.</span><span style="color: #0000FF;">Open</span>, FileAccess<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadWrite</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">return</span> inputFile <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">?</span> <span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">:</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception e<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//return false;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> CloseFile<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>inputFile <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            inputFile <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">long</span> PatchArray<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">long</span> fileOffset, <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> patchBytes<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Seek</span><span style="color: #008000;">&#40;</span>fileOffset, SeekOrigin<span style="color: #008000;">.</span><span style="color: #0000FF;">Begin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Write</span><span style="color: #008000;">&#40;</span>patchBytes, <span style="color: #FF0000;">0</span>, patchBytes<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Position</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">long</span> PatchByte<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">long</span> fileOffset, <span style="color: #6666cc; font-weight: bold;">byte</span> patchByte<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Seek</span><span style="color: #008000;">&#40;</span>fileOffset, SeekOrigin<span style="color: #008000;">.</span><span style="color: #0000FF;">Begin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">WriteByte</span><span style="color: #008000;">&#40;</span>patchByte<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Position</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">long</span> PatchString<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">long</span> fileOffset, <span style="color: #6666cc; font-weight: bold;">string</span> patchString<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span> asciiEncoding <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ASCII</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> encodedPatchString <span style="color: #008000;">=</span> asciiEncoding<span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>patchString<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> PatchArray<span style="color: #008000;">&#40;</span>fileOffset, encodedPatchString<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">long</span> PatchDelphiString<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">long</span> fileOffset, <span style="color: #6666cc; font-weight: bold;">string</span> patchString<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span> asciiEncoding <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetEncoding</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1250</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> encodedPatchString <span style="color: #008000;">=</span> asciiEncoding<span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>patchString<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            PatchByte<span style="color: #008000;">&#40;</span>fileOffset, <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#41;</span>encodedPatchString<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            PatchArray<span style="color: #008000;">&#40;</span>fileOffset <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span>, encodedPatchString<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Position</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">long</span> PatchInt32<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">long</span> fileOffset, Int32 patchInt32<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> encodedInt32 <span style="color: #008000;">=</span> BitConverter<span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>patchInt32<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            PatchArray<span style="color: #008000;">&#40;</span>fileOffset, encodedInt32<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Position</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">long</span> PatchFill<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">long</span> fileOffset, <span style="color: #6666cc; font-weight: bold;">long</span> Length, <span style="color: #6666cc; font-weight: bold;">byte</span> patchByteFill<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>Length<span style="color: #008000;">--</span> <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                PatchByte<span style="color: #008000;">&#40;</span>fileOffset<span style="color: #008000;">++</span>, patchByteFill<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">return</span> inputFile<span style="color: #008000;">.</span><span style="color: #0000FF;">Position</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2012/01/12/patcher-dla-c-sharp/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Wykrywanie VMware w C#</title><link>http://www.secnews.pl/2011/12/01/wykrywanie-vmware-w-c-sharp/</link> <comments>http://www.secnews.pl/2011/12/01/wykrywanie-vmware-w-c-sharp/#comments</comments> <pubDate>Thu, 01 Dec 2011 00:42:28 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[detekcja]]></category> <category><![CDATA[vmware]]></category> <category><![CDATA[wykrywanie]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1149</guid> <description><![CDATA[Jak wykryć VMware VMware jest często wykorzystywane w celu uruchamiania złamanego oprogramowania lub aby ominąć zabezpieczenia autora oprogramowania. Często to wygląda tak, że kupujący po zakupie oprogramowania otrzymuje licencję zablokowaną na sprzętowy identyfikator jednego komputera, który okazuje się być obrazem VMware i tak później oprogramowanie jest dystrybuowane (czytaj sprzedawane) dalej. Wersji natywnych, wykorzystujących systemowe różnice w [...]]]></description> <content:encoded><![CDATA[<h1><a href="http://www.secnews.pl/wp-content/uploads/2011/12/vmware.png"><img class="alignright size-full wp-image-1155" title="VMware" src="http://www.secnews.pl/wp-content/uploads/2011/12/vmware.png" alt="" width="43" height="155" /></a>Jak wykryć VMware</h1><p><a href="http://www.vmware.com">VMware</a> jest często wykorzystywane w celu uruchamiania złamanego oprogramowania lub aby ominąć zabezpieczenia autora oprogramowania.</p><p>Często to wygląda tak, że kupujący po zakupie oprogramowania otrzymuje licencję zablokowaną na <a href="http://www.secnews.pl/2011/11/26/sprzetowy-identyfikator-w-c-sharp/">sprzętowy identyfikator jednego komputera</a>, który okazuje się być <strong>obrazem VMware</strong> i tak później oprogramowanie jest <em>dystrybuowane</em> (czytaj <strong><em>sprzedawane</em></strong>) dalej.</p><p>Wersji natywnych, wykorzystujących systemowe różnice w działaniu na wykrywanie VMware są dziesiątki, chciałem przedstawić krótki snippet w C# do wykrywania może nie samego VMware, ale narzędzi <strong>VMware Tools</strong>, które instaluje się na wirtualnej maszynie, aby zapewnić komfortową pracę między wirtualną maszyną, a maszyną użytkownika (np. zapewnić funkcje <em>drag&amp;drop</em> plików etc.), jest to zwykle jedna z pierwszych czynności jakie robi się po zainstalowaniu systemu na wirtualnej maszynie.</p><div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Runtime.InteropServices</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">// potrzebne importy</span>
<span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;KERNEL32.dll&quot;</span>, SetLastError<span style="color: #008000;">=</span><span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> IntPtr OpenEvent<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">uint</span> dwDesiredAccess, <span style="color: #6666cc; font-weight: bold;">bool</span> bInheritHandle, <span style="color: #6666cc; font-weight: bold;">string</span> lpName<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;KERNEL32.dll&quot;</span>, SetLastError<span style="color: #008000;">=</span><span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> IntPtr CreateMutex<span style="color: #008000;">&#40;</span>IntPtr lpMutexAttributes, <span style="color: #6666cc; font-weight: bold;">bool</span> bInitialOwner, <span style="color: #6666cc; font-weight: bold;">string</span> lpName<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;KERNEL32.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #0600FF; font-weight: bold;">static</span> Boolean CloseHandle<span style="color: #008000;">&#40;</span>IntPtr handle<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">int</span> ERROR_ALREADY_EXISTS <span style="color: #008000;">=</span> <span style="color: #FF0000;">183</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
<span style="color: #008080; font-style: italic;">/// wykrywanie obecności VMWare po zainstalowanych narzędziach VMWare Tools</span>
<span style="color: #008080; font-style: italic;">/// na wirtualnej maszynie</span>
<span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
<span style="color: #008080; font-style: italic;">/// &lt;returns&gt;true jeśli wykryto zainstalowane narzędzia VMWare Tools&lt;/returns&gt;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> IsVMWare<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// otwórz obiekt &quot;VMwareDnDManagerEvent&quot;</span>
    IntPtr eventHandle <span style="color: #008000;">=</span> OpenEvent<span style="color: #008000;">&#40;</span>0x001F0003, <span style="color: #0600FF; font-weight: bold;">false</span>, <span style="color: #666666;">&quot;VMwareDnDManagerEvent&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// jeśli udało się otworzyć event, to znaczy, że obecne są narzędzia VMWare Tools</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>eventHandle <span style="color: #008000;">!=</span> IntPtr<span style="color: #008000;">.</span><span style="color: #0000FF;">Zero</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        CloseHandle<span style="color: #008000;">&#40;</span>eventHandle<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// utwórz mutex o nazwie wykorzystywanej przez VMWare Tools</span>
    IntPtr mutexHandle <span style="color: #008000;">=</span> CreateMutex<span style="color: #008000;">&#40;</span>IntPtr<span style="color: #008000;">.</span><span style="color: #0000FF;">Zero</span>, <span style="color: #0600FF; font-weight: bold;">false</span>, <span style="color: #666666;">&quot;VMwareGuestDnDDataMutex&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// zamknij uchwyt mutexa</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>mutexHandle <span style="color: #008000;">!=</span> IntPtr<span style="color: #008000;">.</span><span style="color: #0000FF;">Zero</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        CloseHandle<span style="color: #008000;">&#40;</span>mutexHandle<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// jeśli mutex o tej nazwie istnieje, to znaczy, że są obecne narzędzia VMware Tools</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>Marshal<span style="color: #008000;">.</span><span style="color: #0000FF;">GetLastWin32Error</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> ERROR_ALREADY_EXISTS<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div><p>Wykrywanie dotyczy <strong>VMware w wersji 7</strong>, w wersji 8 należy już zastosować <strong>inne nazwy obiektów</strong> ze względu na zaktualizowane VMware Tools, jeśli ktoś jest zainteresowany wykrywaniem VMware w najnowszych wersjach (i nie tylko tego środowiska, np. <strong>VirtualBox</strong> etc.), <a href="http://www.secnews.pl/kontakt/">proszę o kontakt</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/12/01/wykrywanie-vmware-w-c-sharp/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Sprzętowy identyfikator w C#</title><link>http://www.secnews.pl/2011/11/26/sprzetowy-identyfikator-w-c-sharp/</link> <comments>http://www.secnews.pl/2011/11/26/sprzetowy-identyfikator-w-c-sharp/#comments</comments> <pubDate>Sat, 26 Nov 2011 14:09:20 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[hardware id]]></category> <category><![CDATA[sprzętowy identyfikator]]></category> <category><![CDATA[WMI]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1141</guid> <description><![CDATA[Sprzętowy identyfikator komputera Krótki snippet w C# dla .NET 4 (jak skorygowali mnie koledzy, zadziała także od .NET 2) pobierający sprzętowy identyfikator maszyny, wykorzystując interfejs WMI, podobne algorytmy stosowane są w aplikacjach, których klucze licencyjne przypisywane są do jednego komputera using System.Management; using System.Security.Cryptography; &#160; /// &#60;summary&#62; /// pobiera sprzętowy identyfikator maszyny korzystając z interfejsu [...]]]></description> <content:encoded><![CDATA[<h1>Sprzętowy identyfikator komputera</h1><p>Krótki snippet w C# dla .NET 4 (jak skorygowali mnie koledzy, zadziała także od .NET 2) pobierający <strong>sprzętowy identyfikator maszyny</strong>, wykorzystując interfejs <a href="http://msdn.microsoft.com/en-us/library/aa394582.aspx">WMI</a>, podobne algorytmy stosowane są w aplikacjach, których klucze licencyjne przypisywane są do jednego komputera</p><div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Management</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Security.Cryptography</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
<span style="color: #008080; font-style: italic;">/// pobiera sprzętowy identyfikator maszyny korzystając z interfejsu WMI</span>
<span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
<span style="color: #008080; font-style: italic;">/// &lt;returns&gt;identyfikator sprzętowy w formie hasha SHA1&lt;/returns&gt;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">String</span> hardwareId<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// tymczasowy string</span>
    <span style="color: #6666cc; font-weight: bold;">String</span> tempString <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// &quot;baza danych&quot;, z której pobieramy informacje o systemie</span>
    <span style="color: #6666cc; font-weight: bold;">String</span> wmiScope <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;root\CIMV2&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// tabela zapytań WMI i pobieranych elementów</span>
    <span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">&#91;</span>,<span style="color: #008000;">&#93;</span> wmiQueries <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">&#91;</span>,<span style="color: #008000;">&#93;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #008000;">&#123;</span> <span style="color: #666666;">&quot;SELECT ProcessorId FROM Win32_Processor&quot;</span>, <span style="color: #666666;">&quot;ProcessorId&quot;</span> <span style="color: #008000;">&#125;</span>,
        <span style="color: #008000;">&#123;</span> <span style="color: #666666;">&quot;SELECT Caption FROM Win32_Processor&quot;</span>, <span style="color: #666666;">&quot;Caption&quot;</span> <span style="color: #008000;">&#125;</span>,
        <span style="color: #008000;">&#123;</span> <span style="color: #666666;">&quot;SELECT Manufacturer FROM Win32_Processor&quot;</span>, <span style="color: #666666;">&quot;Manufacturer&quot;</span> <span style="color: #008000;">&#125;</span>,
        <span style="color: #008000;">&#123;</span> <span style="color: #666666;">&quot;SELECT Caption FROM Win32_BIOS&quot;</span>, <span style="color: #666666;">&quot;Caption&quot;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// wywołujemy kolejne zapytania WMI</span>
    <span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> wmiQueries<span style="color: #008000;">.</span><span style="color: #0000FF;">GetLength</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">try</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// wykonaj zapytanie WMI</span>
            ManagementObjectSearcher searcher <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ManagementObjectSearcher<span style="color: #008000;">&#40;</span>wmiScope, wmiQueries<span style="color: #008000;">&#91;</span>i, <span style="color: #FF0000;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// zbuduj string z kolejnymi elementami odpowiedzi po zapytaniach WMI</span>
            <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>ManagementObject obj <span style="color: #0600FF; font-weight: bold;">in</span> searcher<span style="color: #008000;">.</span><span style="color: #0000FF;">Get</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                tempString <span style="color: #008000;">+=</span> obj<span style="color: #008000;">&#91;</span>wmiQueries<span style="color: #008000;">&#91;</span>i, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>ManagementException exception<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// loguj błąd odczytu danych z WMI</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// generuj hash SHA1 ze wszystkich zebranych danych WMI</span>
    SHA1 hash <span style="color: #008000;">=</span> SHA1CryptoServiceProvider<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// ciąg znaków zamień na tablicę bajtów</span>
    <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> plainTextBytes <span style="color: #008000;">=</span> Encoding<span style="color: #008000;">.</span><span style="color: #0000FF;">ASCII</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>tempString<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// oblicz hash SHA1</span>
    <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> hashBytes <span style="color: #008000;">=</span> hash<span style="color: #008000;">.</span><span style="color: #0000FF;">ComputeHash</span><span style="color: #008000;">&#40;</span>plainTextBytes<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// konwertuj hash SHA1 na postać tekstową (i usuń zbędne znaki &quot;-&quot;)</span>
    tempString <span style="color: #008000;">=</span> BitConverter<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span>hashBytes<span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;-&quot;</span>, <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">return</span> tempString<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div><p>Więcej o WMI na CodeProject:<br /> <a href="http://www.codeproject.com/KB/system/WQLByExample.aspx">http://www.codeproject.com/KB/system/WQLByExample.aspx</a></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/11/26/sprzetowy-identyfikator-w-c-sharp/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Exe protector za 50 PLN</title><link>http://www.secnews.pl/2011/11/18/exe-protector-za-50-pln/</link> <comments>http://www.secnews.pl/2011/11/18/exe-protector-za-50-pln/#comments</comments> <pubDate>Fri, 18 Nov 2011 11:11:50 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Assembler]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[Rozrywka]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1116</guid> <description><![CDATA[Czasami dostaje różne propozycje współpracy czy napisania jakiegoś programu, jednak głupota niektórych ludzi jest aż zabawna (przykro to stwierdzić, ale rodacy przodują w tego typu rzeczach), niedawno otrzymałem intratną propozycję stworzenia prostego exe-protectora w assemblerze, z komentarzami etc., do pracy inżynierskiej dla jednego czuczona. Jako, że nie chciało mu się szukać niczego w sieci, zaproponowałem mu [...]]]></description> <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-1124" title="50PLN" src="http://www.secnews.pl/wp-content/uploads/2011/11/50PLN.png" alt="" width="124" height="249" />Czasami dostaje różne propozycje współpracy czy napisania jakiegoś programu, jednak głupota niektórych ludzi jest aż <strong>zabawna</strong> (przykro to stwierdzić, ale rodacy przodują w tego typu rzeczach), niedawno otrzymałem <strong>intratną</strong> propozycję stworzenia <em>prostego</em> exe-protectora w assemblerze, z komentarzami etc., do pracy inżynierskiej dla jednego <strong>czuczona</strong>.</p><p>Jako, że nie chciało mu się szukać niczego w sieci, zaproponowałem mu 400 PLN, gdyż taki prosty template posiadam w swojej kolekcji, jest przetestowany, sprawny, kompatybilny i oto jak potoczyła się dalsza dyskusja:</p><blockquote><p><strong><span style="color: #000080;">Czuczon: Ty mi proponowałeś protektor za 400zł</span></strong><br /> <strong><span style="color: #000080;"> Czuczon: kolega mi proponuje za 50zł</span></strong><br /> <strong><span style="color: #000080;"> &#8230;</span></strong><br /> <strong><span style="color: #000080;"> Czuczon: ile byś za to chciał? z przekazaniem praw autorskich, zebym to mogl uzyc jako pracy inżynierskiej</span></strong><br /> <strong> <span style="color: #008080;">Ja: 400 PLN</span></strong><br /> <strong> <span style="color: #333399;">Czuczon: przesadzasz z tą ceną</span></strong><br /> <strong> <span style="color: #008080;">Ja: to napisz sam</span></strong><br /> <strong><span style="color: #008080;"> Ja: to proste</span></strong><br /> <strong> <span style="color: #333399;">Czuczon: kolega mi dał źródła protektora co szyfruje AES&#8217;em, ale to za trudne do ogarnięcia, nie rozumiem tego kodu :/</span></strong><br /> <strong><span style="color: #333399;"> Czuczon: a wiesz może jak trzeba przerobić kod, żeby nie był plagiatem?</span></strong><br /> <strong> <span style="color: #008080;">Ja: wiem</span></strong><br /> <strong><span style="color: #008080;"> Ja: trzeba go solidnie pozmieniac na tak samo dzialajace instrukcje i funkcje</span></strong><br /> <strong> <span style="color: #333399;">Czuczon: czyli np. przepisanie go na inny język programowania wystarczy?</span></strong><br /> <strong><span style="color: #333399;"> Czuczon: mówie o C++ -&gt; Asm</span></strong><br /> <strong> <span style="color: #008080;">Ja: no jak ci sie uda</span></strong><br /> <strong> <span style="color: #333399;">Czuczon: troche problem bo na klasach pisany, prawie 100% obiektowo</span></strong></p></blockquote><p>Dyskusja na tym się zakończyła, gdyż <strong>nie byłem</strong> w stanie zaproponować bardziej <strong>konkurencyjnej ceny</strong> do 50 PLN <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Tak szczerze mówiąc to nie wiem co tacy ludzie myślą, że takie rzeczy na drzewie rosną i że to pisze się z buta i jeszcze ma wszystko działać, a nie zdają sobie sprawy ile wiedzy w to zostało włożone, czasu na napisanie, na przetestowanie na różnych OS-ach, nawet takiego <strong>głupiego</strong> exe-protectora doh!</p><p>Jeśli mieliście podobne przypadki <strong>równie intratnych zleceń</strong>, napiszcie w komentach, pośmiejemy się razem <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/11/18/exe-protector-za-50-pln/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Nietypowy problem w drzewie genealogicznym</title><link>http://www.secnews.pl/2011/06/04/nietypowy-problem-w-drzewie-genealogicznym/</link> <comments>http://www.secnews.pl/2011/06/04/nietypowy-problem-w-drzewie-genealogicznym/#comments</comments> <pubDate>Sat, 04 Jun 2011 02:46:07 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Inne]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[Rozrywka]]></category> <category><![CDATA[drzewo genealogiczne]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1032</guid> <description><![CDATA[Wycieki pamięci, zawieszanie programu, problemy z kompatybilnością są niczym wobec prawdziwych, życiowych problemów, z którymi muszą borykać się programiści! Znalezione na StackOverflow.com: Jestem programistą pewnego oprogramowania do tworzenia drzew genealogicznych (napisany w C++ i Qt). Nie miałem żadnych problemów, aż jeden z moich klientów wysłał na skrzynkę pocztową raport z błędem. Problem polega na tym, [...]]]></description> <content:encoded><![CDATA[<p><a href="http://stackoverflow.com/"><img class="alignright size-full wp-image-1034" title="Stack Overflow" src="http://www.secnews.pl/wp-content/uploads/2011/06/stackoverflow.png" alt="" width="76" height="79" /></a>Wycieki pamięci, zawieszanie programu, problemy z kompatybilnością <strong>są niczym</strong> wobec prawdziwych, <strong>życiowych problemów</strong>, z którymi muszą borykać się programiści! Znalezione na <a href="http://stackoverflow.com/questions/6163683/cycles-in-family-tree-software">StackOverflow.com</a>:</p><p><em>Jestem programistą pewnego oprogramowania do tworzenia <strong>drzew genealogicznych</strong> (napisany w C++ i Qt). Nie miałem żadnych problemów, aż jeden z moich klientów wysłał na skrzynkę pocztową raport z błędem. Problem polega na tym, że <strong>ma dwoje dzieci z własną córką</strong> i nie może użyć mojego programu z powodu tego błędu.</em></p><p><em>Te błędy są wynikiem moich różnorakich założeń dotyczących funkcjonowania drzewa genealogicznego (przykładowo, po przejściu cyklu, program zakłada, że X <strong>nie może być jednocześnie ojcem i dziadkiem</strong> Y).</em></p><p><em>Jak mogą rozwiązać te problemy bez usuwania wszystkich założeń dotyczących funkcjonowania drzewa genealogicznego?</em></p><p>Jak wy byście rozwiązali ten problem?</p><div id="__ImgTipPopup__" style="position: fixed; z-index: 1000000; display: none; box-shadow: 2px 2px 15px; background-color: #ffffff; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; opacity: 0.5; padding: 0px; border: 1px solid #000000;"><img alt="" /></div> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/06/04/nietypowy-problem-w-drzewie-genealogicznym/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Jak oddać głos w PHP</title><link>http://www.secnews.pl/2011/01/06/jak-oddac-glos-w-php/</link> <comments>http://www.secnews.pl/2011/01/06/jak-oddac-glos-w-php/#comments</comments> <pubDate>Wed, 05 Jan 2011 23:18:48 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[ankieta]]></category> <category><![CDATA[curl]]></category> <category><![CDATA[głosowanie]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=885</guid> <description><![CDATA[Prosty skrypt, który zrobiłem dla znajomego, pozwalający automatycznie oddać głos w ankiecie (może to nie za bardzo etyczne, ale kogo to obchodzi). Przykładowa forma głosowania (update, dzięki Tomek) wygląda tak: &#60;html&#62;&#60;body&#62; &#160; &#60;form name=&#34;Poll&#34; action=&#34;vote.php&#34; method=&#34;post&#34;&#62; &#160; &#60;input type=&#34;hidden&#34; name=&#34;param1&#34; value=&#34;param 1 value&#34; /&#62; &#60;input type=&#34;hidden&#34; name=&#34;param2&#34; value=&#34;param 2 value&#34; /&#62; &#60;input type=&#34;hidden&#34; name=&#34;param3&#34; value=&#34;param [...]]]></description> <content:encoded><![CDATA[<p>Prosty skrypt, który zrobiłem dla znajomego, pozwalający automatycznie oddać głos w ankiecie (może to nie za bardzo etyczne, ale kogo to obchodzi).</p><p>Przykładowa forma głosowania (<em>update, dzięki Tomek</em>) wygląda tak:</p><div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Poll&quot;</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;vote.php&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;param1&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;param 1 value&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;param2&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;param 2 value&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;param3&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;param 3 value&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Submit&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></div></div><p>Forma zawiera 3 ukryte pola (może to być np. identyfikator głosowania) oraz button Submit, należy również zwrócić uwagę na sposób przesyłania danych, tzn. <em>POST</em> lub <em>GET</em>. Skrypt do głosowania:</p><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://www.example.com/vote.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// lista przegladarek</span>
<span style="color: #000088;">$agents</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">&quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">&quot;Opera/9.63 (Windows NT 6.0; U; ru) Presto/2.1.1&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">&quot;Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">&quot;Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.18) Gecko/20081203 Firefox/2.0.0.18&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">&quot;Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">&quot;Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1&quot;</span>
                <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// parametry</span>
<span style="color: #000088;">$fields</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'param1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'param 1 value'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">'param2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'param 2 value'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">'param3'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'param 3 value'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">'submit'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Submit vote'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// zbuduj poprawny ciag dla cURL</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fields</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$fields_string</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'='</span><span style="color: #339933;">.</span><span style="color: #000088;">$value</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #990000;">rtrim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fields_string</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&amp;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// adres strony</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// ilosc parametrow</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fields</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// parametry POST</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #000088;">$fields_string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// przegladarka</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_USERAGENT<span style="color: #339933;">,</span> <span style="color: #990000;">array_rand</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$agents</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// zwroc tylko wynik</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// wyswietl wynikowy kod html</span>
<span style="color: #666666; font-style: italic;">//echo $result;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div><p>Skrypt wymaga zainstalowanej biblioteki <em>cURL</em>.</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/01/06/jak-oddac-glos-w-php/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Ile kodu napisałeś?</title><link>http://www.secnews.pl/2010/04/28/ile-kodu-napisales/</link> <comments>http://www.secnews.pl/2010/04/28/ile-kodu-napisales/#comments</comments> <pubDate>Wed, 28 Apr 2010 17:03:31 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Programowanie]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=718</guid> <description><![CDATA[Jeśli jesteś ciekawy ile linijek kodu napisałeś, a ile jest w nich komentarzy, w twoim projekcie, który wydaje Ci się duży, możesz to łatwo sprawdzić i pozbyć się wszelkich złudzeń CLOC (Count Lines of Code) to program, który dokładnie analizuje pliki źródłowe w kilkudziesięciu językach programowania, pokazująć ile tak naprawdę jest samego kodu w kodzie [...]]]></description> <content:encoded><![CDATA[<p><a href="http://cloc.sourceforge.net/"><img class="alignright size-full wp-image-719" title="Source code" src="http://www.secnews.pl/wp-content/uploads/2010/04/source.png" alt="" width="128" height="128" /></a>Jeśli jesteś ciekawy ile <strong>linijek kodu</strong> napisałeś, a ile jest w nich komentarzy, w twoim projekcie, który wydaje Ci się duży, możesz to łatwo sprawdzić i pozbyć się wszelkich złudzeń <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p><strong>CLOC</strong> (Count Lines of Code) to program, który dokładnie analizuje pliki źródłowe w <a href="http://cloc.sourceforge.net/#Languages">kilkudziesięciu językach programowania</a>, pokazująć ile tak <strong>naprawdę</strong> jest samego kodu w kodzie <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><p><a href="http://cloc.sourceforge.net">http://cloc.sourceforge.net</a></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2010/04/28/ile-kodu-napisales/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Assembler x100</title><link>http://www.secnews.pl/2010/04/28/assembler-x100/</link> <comments>http://www.secnews.pl/2010/04/28/assembler-x100/#comments</comments> <pubDate>Tue, 27 Apr 2010 23:17:21 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Assembler]]></category> <category><![CDATA[Programowanie]]></category> <category><![CDATA[assembler]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=689</guid> <description><![CDATA[Chciałbym serdecznie Was zaprosić na stronę domową Wojtka Muły, który zebrał na niej sporą liczbę algorytmów oraz ciekawych snippetów napisanych w assemblerze z wykorzystaniem najnowszych rozszerzeń procesora (od x86 po SSE4). Najlepszym przykładem talentu Wojtka jest biblioteka sse2string, czyli najczęściej wykorzystywane funkcje znanej z języka C, biblioteki string.h, napisane w assemberze z wykorzystaniem rozszerzeń SSE2. [...]]]></description> <content:encoded><![CDATA[<p><a href="http://wm.ite.pl"><img class="alignright size-full wp-image-692" src="http://www.secnews.pl/wp-content/uploads/2010/04/Developer.png" alt="" width="128" height="128" /></a>Chciałbym serdecznie Was zaprosić na stronę domową <a href="http://wm.ite.pl">Wojtka Muły</a>, który zebrał na niej <strong>sporą</strong> liczbę algorytmów oraz ciekawych snippetów napisanych w <strong>assemblerze</strong> z wykorzystaniem najnowszych rozszerzeń procesora (od x86 po SSE4).</p><p>Najlepszym przykładem talentu Wojtka jest biblioteka <a href="http://wm.ite.pl/proj/sse2string/">sse2string</a>, czyli najczęściej wykorzystywane funkcje znanej z <em>języka C</em>, biblioteki <a href="http://en.wikipedia.org/wiki/String.h">string.h</a>, napisane w assemberze z wykorzystaniem rozszerzeń SSE2.</p><p>Wojtek prowadzi również <a href="http://wmula.blogspot.com">bloga</a>, gdzie można znaleźć ciekawe snippety w assemblerze, pierwszy z brzegu przykład warunkowej wymiany rejestrów:</p><div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">sbb</span> <span style="color: #00007f;">edx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">edx</span> <span style="color: #666666; font-style: italic;">; part of step 2. - edx = 0xffffff if CF=1, 0x000000 otherwise</span>
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ecx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">eax</span>
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">ecx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ebx</span> <span style="color: #666666; font-style: italic;">; step 1</span>
<span style="color: #00007f; font-weight: bold;">and</span> <span style="color: #00007f;">ecx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">edx</span> <span style="color: #666666; font-style: italic;">; completed step 2. - now C is 0 or (A xor B)</span>
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ecx</span> <span style="color: #666666; font-style: italic;">; step 3</span>
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ecx</span> <span style="color: #666666; font-style: italic;">; step 4</span></pre></div></div><p>Myślę, że każdy fanatyk assemblera znajdzie tam coś dla siebie.</p><p>Strona domowa — <a href="http://wm.ite.pl">wm.ite.pl</a><br /> Blog — <a href="http://wmula.blogspot.com">wmula.blogspot.com</a></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2010/04/28/assembler-x100/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
