<?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; Artykuły</title> <atom:link href="http://www.secnews.pl/category/reversing/artykuly/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>DataHASP</title><link>http://www.secnews.pl/2012/01/27/datahasp/</link> <comments>http://www.secnews.pl/2012/01/27/datahasp/#comments</comments> <pubDate>Fri, 27 Jan 2012 14:54:57 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[DataHASP]]></category> <category><![CDATA[hasp]]></category> <category><![CDATA[Sentinel HASP Envelope]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1225</guid> <description><![CDATA[DataHASP to system szyfrowania dowolnych plików aplikacji, dzięki któremu oryginalna treść takich zaszyfrowanych plików widoczna jest jedynie dla aplikacji, które zostały zabezpieczone przez Sentinel HASP Envelope (exe-protector HASPa). HASP pozwala na szyfrowanie pojedynczych plików jak i całych katalogów z danymi aplikacji poprzez dodatkowe narzędzie: W samym envelope określa się rodzaj plików, które zostały zaszyfrowane: Zaszyfrowane pliki [...]]]></description> <content:encoded><![CDATA[<p><strong>DataHASP</strong> to system szyfrowania dowolnych plików aplikacji, dzięki któremu oryginalna treść takich zaszyfrowanych plików widoczna jest <strong>jedynie</strong> dla aplikacji, które zostały zabezpieczone przez <a href="http://www.safenet-inc.com/products/software-rights-management/hasp-srm-envelope/">Sentinel HASP Envelope</a> (<em>exe-protector</em> HASPa).</p><p>HASP pozwala na szyfrowanie pojedynczych plików jak i całych katalogów z danymi aplikacji poprzez dodatkowe narzędzie:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2012/01/data_hasp.png"><img class="alignnone size-medium wp-image-1226" title="DataHASP" src="http://www.secnews.pl/wp-content/uploads/2012/01/data_hasp-300x202.png" alt="" width="300" height="202" /></a></p><p>W samym envelope określa się rodzaj plików, które zostały zaszyfrowane:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2012/01/sentinel_envelope.png"><img class="alignnone size-medium wp-image-1227" title="Sentinel HASP Envelope" src="http://www.secnews.pl/wp-content/uploads/2012/01/sentinel_envelope-300x231.png" alt="" width="300" height="231" /></a></p><p>Zaszyfrowane pliki aplikacji może odczytać <strong>jedynie zabezpieczona aplikacja</strong>, realizowane jest to poprzez system hooków na funkcje systemu plików na poziomie usera.</p><p>Jeśli aplikacja zostanie rozpakowana, dostęp do oryginalnej treści zaszyfrowanych plików będzie <strong>niemożliwy</strong> (brakuje tych hooków, które w locie deszyfrują dane).</p><p>Jak uzyskać zatem dostęp do oryginalnej treści zaszyfrowanych plików?</p><p>Należy do działającej i <strong>zabezpieczonej</strong> aplikacji wstrzyknąć kod, który wykorzysta jej funkcje systemu plików (na które nałożone są hooki HASPa) i po prostu zaemulować czytanie wybranych plików.</p><p>Najprościej można to zrealizować poprzez skrypt ODBScript:</p><div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; wolna przestrzen po sekcji kodu</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	dump_hasp<span style="color: #339933;">,</span>008864D5
&nbsp;
	<span style="color: #00007f; font-weight: bold;">mov</span>	eip<span style="color: #339933;">,</span>dump_hasp
	asmtxt	eip<span style="color: #339933;">,</span><span style="color: #7f007f;">&quot;dumper.asm&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; alokuj 2 bufory na nazwe pliku wyjsciowego i wejsciowego</span>
	alloc	<span style="color: #0000ff;">512</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	input_file<span style="color: #339933;">,</span>$RESULT
	alloc	<span style="color: #0000ff;">512</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	output_file<span style="color: #339933;">,</span>$RESULT
&nbsp;
<span style="color: #666666; font-style: italic;">; zrzuc 1 plik</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	x<span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;C:\PATH\APP\DATA.DAT&quot;</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	dump_file
&nbsp;
<span style="color: #666666; font-style: italic;">; zrzuc 2 plik</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	x<span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;C:\PATH\APP\CONFIG.DAT&quot;</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	dump_file
&nbsp;
	<span style="color: #00007f; font-weight: bold;">ret</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; funkcja do zrzucania zaszyfrowanych plikow</span>
dump_file<span style="color: #339933;">:</span>
&nbsp;
	fill	input_file<span style="color: #339933;">,</span> <span style="color: #0000ff;">512</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #009900; font-weight: bold;">&#91;</span>input_file<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> x
&nbsp;
<span style="color: #666666; font-style: italic;">; plik wyjsciowy bedzie posiadal rozszerzenie .x</span>
	<span style="color: #00007f; font-weight: bold;">add</span>	x<span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;.X&quot;</span>
	fill	output_file<span style="color: #339933;">,</span> <span style="color: #0000ff;">512</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #009900; font-weight: bold;">&#91;</span>output_file<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span>x
&nbsp;
<span style="color: #666666; font-style: italic;">; ESI -&gt; sciezka pliku wejsciowego</span>
<span style="color: #666666; font-style: italic;">; EDI -&gt; sciezka pliku wyjsciowego</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">esi</span><span style="color: #339933;">,</span>input_file
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">edi</span><span style="color: #339933;">,</span>output_file
&nbsp;
<span style="color: #666666; font-style: italic;">; ustaw EIP na adres procedury dumpujacej</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	eip<span style="color: #339933;">,</span>dump_hasp
&nbsp;
<span style="color: #666666; font-style: italic;">; exec ... ende za chiny nie dziala u mnie... inaczej bym tu dal call dump_hasp?</span>
<span style="color: #666666; font-style: italic;">; uruchom kod z biezacego EIP do napotkania instrukcji RET</span>
	rtr <span style="color: #666666; font-style: italic;">;run to return</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">mov</span>	x<span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;&quot;</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">ret</span></pre></div></div><p>Pomocniczy kod w assemblerze dla skryptu:</p><div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</span>
<span style="color: #666666; font-style: italic;">;</span>
<span style="color: #666666; font-style: italic;">; odczytaj plik wejsciowy</span>
<span style="color: #666666; font-style: italic;">;</span>
<span style="color: #666666; font-style: italic;">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zapamietaj na stosie nazwe pliku wyjsciowego</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">edi</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; otworz plik wejsciowy</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; hTemplate</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; attribs</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">3</span> <span style="color: #666666; font-style: italic;">;OPEN_EXISTING		; creation</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; security</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">1</span>				<span style="color: #666666; font-style: italic;">; share mode</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">80000000</span> <span style="color: #666666; font-style: italic;">;GENERIC_READ</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">esi</span>				<span style="color: #666666; font-style: italic;">; lpFileName</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	<span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0800004</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;CreateFileA</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">ebx</span>				<span style="color: #666666; font-style: italic;">; hFile</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	<span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0800008</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;GetFileSize</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">edi</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zaalokuj pamiec do odczytania danych pliku wejsciowego</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">4</span> <span style="color: #666666; font-style: italic;">;PAGE_READWRITE</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">3000</span> <span style="color: #666666; font-style: italic;">;MEM_RESERVE or MEM_COMMIT</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">edi</span>				<span style="color: #666666; font-style: italic;">; size</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	VirtualAlloc
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">esi</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; czytaj plik wejsciowy korzystajac z hookowanych API</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">eax</span><span style="color: #339933;">,</span><span style="color: #00007f;">esp</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; dwOverlapped</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">eax</span>				<span style="color: #666666; font-style: italic;">; &amp;dwRead</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">edi</span>				<span style="color: #666666; font-style: italic;">; dwSize</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">esi</span>				<span style="color: #666666; font-style: italic;">; lpBuffer</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">ebx</span>				<span style="color: #666666; font-style: italic;">; hFile</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	<span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0800024</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;adres funkcji ReadFile w zabezpieczonym pliku</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">pop</span>	<span style="color: #00007f;">edx</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zamknij plik wejsciowy</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">ebx</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	<span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">0800088</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;CloseHandle</span>
&nbsp;
<span style="color: #666666; font-style: italic;">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</span>
<span style="color: #666666; font-style: italic;">;</span>
<span style="color: #666666; font-style: italic;">; zapisz plik wyjsciowy</span>
<span style="color: #666666; font-style: italic;">;</span>
<span style="color: #666666; font-style: italic;">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zdejmij ze stosu nazwe pliku wyjsciowego (odszyfrowany)</span>
	<span style="color: #00007f; font-weight: bold;">pop</span>	<span style="color: #00007f;">eax</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; hTemplate</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; attribs</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">2</span> <span style="color: #666666; font-style: italic;">;CREATE_ALWAYS		; creation</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; security</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; share mode</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">40000000</span> <span style="color: #666666; font-style: italic;">;GENERIC_WRITE</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">eax</span>				<span style="color: #666666; font-style: italic;">; lpFileName</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	CreateFileA
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zapisz odczytana tresc pliku wejsciowego</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">mov</span>	<span style="color: #00007f;">eax</span><span style="color: #339933;">,</span><span style="color: #00007f;">esp</span>
&nbsp;
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>				<span style="color: #666666; font-style: italic;">; overlapped</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">eax</span>				<span style="color: #666666; font-style: italic;">; &amp;dwWritten</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">edi</span>				<span style="color: #666666; font-style: italic;">; size</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">esi</span>				<span style="color: #666666; font-style: italic;">; buffer</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">ebx</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	WriteFile
&nbsp;
	<span style="color: #00007f; font-weight: bold;">pop</span>	<span style="color: #00007f;">edx</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zamknij plik wyjsciowy</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">ebx</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	CloseHandle
&nbsp;
<span style="color: #666666; font-style: italic;">; zwolnij pamiec</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">8000</span> <span style="color: #666666; font-style: italic;">;MEM_RELEASE</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #0000ff;">0</span>
	<span style="color: #00007f; font-weight: bold;">push</span>	<span style="color: #00007f;">esi</span>
	<span style="color: #00007f; font-weight: bold;">call</span>	VirtualFree
&nbsp;
	<span style="color: #00007f; font-weight: bold;">ret</span></pre></div></div><p>Przedstawiona technika pozwala z łatwością odczytać wszystkie zaszyfrowane pliki.</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2012/01/27/datahasp/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Praca w ArcaBit</title><link>http://www.secnews.pl/2011/11/24/praca-w-arcabit/</link> <comments>http://www.secnews.pl/2011/11/24/praca-w-arcabit/#comments</comments> <pubDate>Thu, 24 Nov 2011 21:04:59 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Praca]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[antywirus]]></category> <category><![CDATA[ArcaBit]]></category> <category><![CDATA[ArcaVir]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1131</guid> <description><![CDATA[ArcaBit to polski producent oprogramowania antywirusowego ArcaVir, wywodzący się z MksVir-a. Całą smutną historię rozdzielenia się części pracowników i utworzenia ArcaVir oraz o późniejszych wielu sporach moża przeczytać na forach obu firm oraz na portalu DobreProgramy.pl. Dzisiaj ciekawe opinie o pracy w tej firmie znalazłem na forum 4programmers, a docelowo znajdują się na portalu o pracy [...]]]></description> <content:encoded><![CDATA[<p><strong><a href="http://www.arcabit.pl/"><img class="alignright size-full wp-image-1133" title="ArcaVir" src="http://www.secnews.pl/wp-content/uploads/2011/11/arcavir.png" alt="" width="48" height="219" /></a>ArcaBit</strong> to polski producent <strong>oprogramowania antywirusowego ArcaVir</strong>, wywodzący się z <strong>MksVir-a</strong>. Całą <em>smutną</em> historię rozdzielenia się części pracowników i utworzenia ArcaVir oraz o późniejszych wielu sporach moża przeczytać na forach obu firm oraz na portalu <a href="http://www.dobreprogramy.pl/MKS-vs-ArcaBit,Aktualnosc,2942.html">DobreProgramy.pl</a>.</p><p>Dzisiaj ciekawe opinie o pracy w tej firmie znalazłem na forum <a href="http://forum.4programmers.net/Off-Topic/182952-co_sie_dzieje_w_firmie_arcabit">4programmers</a>, a docelowo znajdują się na portalu o pracy GoWork, jeden z ciekawszych cytatów:</p><blockquote><p>Właściciele mają samochody za kilkaset tysięcy [każdy] a w biurze nie ma nawet sprzątaczki.<br /> Jest biuro na parterze i tam ludzie mają grafik, kto i kiedy sprząta [myje podłogi, odkurza i czyści kible - tak kible]. Biuro na piętrze jest sprzątane przez Panią W. [odkurzanie, mucie naczyń, kurze i kible]. Warto nadmienić że Pani W. jest szefową biura a mimo wszystko w godzinach pracy w elegandzkim stroju &#8211; sprząta.<br /> Najlepsza było przyjęcie wigilijne &#8211; było owszem ciasto i Cola i &#8230;.. no niestety nic więcej nie było.<br /> Okropne dziadostwo</p></blockquote><p>Oryginalny wpis:</p><p><a href="http://www.gowork.pl/opinie_czytaj2,33733,0,0">http://www.gowork.pl/opinie_czytaj2,33733,0,0</a></p><p><em>PS.<br /> Dzisiaj wyszedł news o upadłości firmy MKS, R.I.P gorszego <strong>dziadostwa</strong> antywirusowego nie widziałem, jeszcze w czasach wersji DOS-owej skasował mi połowę exeków z dysku, a w czasach Windowsa nie chcieli ze mną nawet rozmawiać o false-positivach w moich pierwszych exe-pakerach.</em></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/11/24/praca-w-arcabit/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Narzędzia do analizy aplikacji .NET</title><link>http://www.secnews.pl/2011/11/17/narzedzia-do-analizy-aplikacji-net/</link> <comments>http://www.secnews.pl/2011/11/17/narzedzia-do-analizy-aplikacji-net/#comments</comments> <pubDate>Thu, 17 Nov 2011 12:24:05 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Narzędzia]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[.net]]></category> <category><![CDATA[dotnet]]></category> <category><![CDATA[tools]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=1070</guid> <description><![CDATA[Analiza aplikacji .NET Zestaw narzędzi do analizy .NET-owych aplikacji znacznie różni się od klasycznych narzędzi dla zwykłych aplikacji x86 / x64, odmienna architektura kodu wymusiła utworzenie całej gamy dedykowanych narzędzi dla plików wykonywalnych .NET, spróbuję przedstawić kilka z nich, które mogą się przydać w reversingu. Dekompilacja kodu Pierwszym i podstawowym narzędziem, które chyba zna większość osób zajmujących [...]]]></description> <content:encoded><![CDATA[<h1>Analiza aplikacji .NET</h1><p><img class="alignright size-full wp-image-1111" title=".NET" src="http://www.secnews.pl/wp-content/uploads/2011/11/dotnet.png" alt="" width="75" height="72" />Zestaw narzędzi do analizy .NET-owych aplikacji znacznie <strong>różni się</strong> od klasycznych narzędzi dla zwykłych aplikacji x86 / x64, odmienna architektura kodu wymusiła utworzenie całej gamy <strong>dedykowanych narzędzi</strong> dla plików wykonywalnych .NET, spróbuję przedstawić kilka z nich, które mogą się przydać w reversingu.</p><h2>Dekompilacja kodu</h2><p>Pierwszym i <strong>podstawowym</strong> narzędziem, które chyba zna większość osób zajmujących się analizą oprogramowania i nie tylko jest dekompilator <strong>.NET Reflector</strong>.</p><h3>.NET Reflector</h3><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/reflector.png"><img class="alignnone size-medium wp-image-1073" title=".NET Reflector" src="http://www.secnews.pl/wp-content/uploads/2011/11/reflector-300x217.png" alt=".NET Reflector" width="300" height="217" /></a></p><p>Pozwala on na dekompilację plików wykonywalnych z formatu kodu przejściowego CIL (<a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language">Common Intermediate Language</a>) do kodu wysokiego poziomu w wybranym lub ulubionym przez nas języku np. C#, VB# etc.</p><p>Jest to <strong>najbardziej znany dekompilator</strong> i nie tylko, gdyż dzięki całej <strong>masie wtyczek</strong> umożliwia np. modyfikację plików binarnych (wtyczka <a href="http://reflexil.net/">Reflexil</a>), debugowanie aplikacji (wtyczka <a href="http://deblector.codeplex.com/">Deblector</a>) i wiele innych czynności związanych z analizą kodu.</p><p>Ostatnio .NET Reflector stracił na popularności, gdyż projekt od początku istnienia <strong>był darmowy</strong>, jednak po przejęciu go przez firmę <a href="http://www.red-gate.com/">Red Gate Software</a> (notabene twórców obfuscatora <em>SmartAssembly</em>, z czego można wysnuć teorię spiskową, że chcieli ograniczyć dostęp do jednego z najpopularniejszych narzędzi do analizy aplikacji) i początkowych zapewnień o utrzymaniu jego darmowego statusu, po jakimś czasie został przekształcony w komercyjną wersję, z najtańszą licencją za 35 USD. W Internecie można jednak znaleźć złamane kopie jak również całkowicie zrekompilowane (wraz ze źródłami), bardziej odporne na narzędzia zabezpieczające.</p><p>Strona domowa — <a href="http://www.reflector.net/">www.reflector.net</a></p><p>Lista wtyczek  — <a href="http://reflectoraddins.codeplex.com/">http://reflectoraddins.codeplex.com/</a></p><h3>IL DASM</h3><p>Warto wspomnieć również o tym narzędziu, chociaż z mojego doświadczenia wynika, że jest ono raczej <strong>mało używane</strong>, to deasembler dla .NET-owych binariów firmy Microsoft dołączany do SDK .NET-a oraz dostarczany wraz z Visual Studio.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/ildasm1.png"><img class="alignnone size-medium wp-image-1075" title="ID DASM" src="http://www.secnews.pl/wp-content/uploads/2011/11/ildasm1-300x209.png" alt="" width="300" height="209" /></a></p><p>Pozwala on na przeglądanie struktury pliku oraz deasembling do kodu przejściowego w związku z czym nie jest tak poręczny w analizie jak .NET Reflector.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/ildasm2.png"><img class="alignnone size-medium wp-image-1076" title="IL DASM" src="http://www.secnews.pl/wp-content/uploads/2011/11/ildasm2-300x187.png" alt="IL DASM" width="300" height="187" /></a></p><h3>Simple Assembly Explorer</h3><p>Jest to kolejny deasembler i edytor jednak już bardziej zaawansowany od IL DASM-a, posiadający <strong>masę opcji</strong>, pozwalających na łatwą modyfikację kodu IL, kopiowanie instrukcji, wycinanie, wszystko bardzo poręcznie skonstruowane, od jakiegoś czasu jest to mój faworyt jeśli chodzi o modyfikację .NET-owych plików binarnych.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/sae1.png"><img class="alignnone size-medium wp-image-1078" title="Simple Assembly Explorer" src="http://www.secnews.pl/wp-content/uploads/2011/11/sae1-300x225.png" alt="Simple Assembly Explorer" width="300" height="225" /></a></p><p>SAE posiada system wtyczek oraz wbudowany <strong>deobfuscator</strong>, który może przydać się w analizie zabezpieczonych aplikacji.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/sae2.png"><img class="alignnone size-medium wp-image-1079" title="Simple Assembly Explorer Deobfuscator" src="http://www.secnews.pl/wp-content/uploads/2011/11/sae2-300x186.png" alt="Simple Assembly Explorer Deobfuscator" width="300" height="186" /></a></p><p>Jeśli chcesz nauczyć się podstaw programowania w IL, zmodyfikować szybko i sprawnie binaria to jest to idealne narzędzie.</p><p>Strona domowa — <a href="http://code.google.com/p/simple-assembly-explorer/">http://code.google.com/p/simple-assembly-explorer/</a></p><h3>Dis#</h3><p>Dis# to stosunkowo mało znany dekompilator, być może ze względu na to, że to komercyjne narzędzie, projekt dawno nie był aktualizowany, ale może być traktowany jako ciekawostka, gdyż posiada kilka interesujących cech jak wbudowany deobfuscator, edytor kodu pozwalający w prosty sposób zamieniać nazwy funkcji, zmiennych etc.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/dis.png"><img class="alignnone size-medium wp-image-1093" title="Dekompilator Dis#" src="http://www.secnews.pl/wp-content/uploads/2011/11/dis-300x217.png" alt="Dekompilator Dis#" width="300" height="217" /></a></p><p>Strona domowa — <a href="http://netdecompiler.com">http://netdecompiler.com</a></p><h2>Debuggery</h2><p>Z moich obserwacji i doświadczeń wynika, że większość analiz związanych z .NET da się rozwiązać statycznie (w przeciwieństwie do natywnych aplikacji), jednak i tutaj może przydać się prześledzenie wykonywanego kodu.</p><h3>Dotnet IL Editor (DILE)</h3><p>Dile to prosty w obsłudze debugger dla .NET-owych aplikacji, troszkę przypomina debugger z Visual Studio.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/dile.png"><img class="alignnone size-medium wp-image-1107" title="DILE" src="http://www.secnews.pl/wp-content/uploads/2011/11/dile-300x186.png" alt="DILE" width="300" height="186" /></a></p><p>Strona domowa <a href="http://sourceforge.net/projects/dile/">http://sourceforge.net/projects/dile/</a></p><h2>Identyfikatory</h2><p>Dla aplikacji natywnych podstawowym identyfikatorem jest <a href="http://www.peid.info/">PEiD</a> oraz częściej uaktualniany <a href="http://pid.gamecopyworld.com/">Protection ID</a> (oraz kilka innych), dla .NET powstał odpowiednik PEiD o nazwie <strong>DNiD</strong>.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/dnid.png"><img class="alignnone size-medium wp-image-1081" title="Identyfikator DNiD" src="http://www.secnews.pl/wp-content/uploads/2011/11/dnid-300x130.png" alt="Identyfikator DNiD" width="300" height="130" /></a></p><p><span>Wykrywa on obecnie większość stosowanych zabezpieczeń stosowanych dla aplikacji .NET-owych.</span> <span>Do ściągnięcia lokalna kopia  — <a href="http://www.secnews.pl/wp-content/uploads/2011/11/DNiD.v0.11-Rue.rar">DNiD.v0.11-Rue.rar</a> (384 kB)</span></p><h2>Dumpery</h2><p>Aplikacje .NET-owe obecnie <strong>rzadko</strong> rozprowadzane są w <strong>czystej formie</strong> po kompilacji, gdyż dzięki narzędziom takim jak .NET Reflector jest to praktyczne równoznaczne z rozprowadzaniem <strong>open source</strong> i większości wypadków do zabezpieczania używane są <strong>obfuscatory</strong>.</p><p>Część obfuscatorów oprócz modyfikacji kodu IL, całość aplikacji <em>&#8220;opakowuje&#8221;</em> w kod ładujący (z ang. loader) w <strong>formacie natywnym</strong> (x86), który zwykle deszyfruje całe .NET-owe assembly i dopiero w odszyfrowanej formie <strong>ładuje je do pamięci</strong>.</p><p>Taka forma zabezpieczenia nie pozwala na używanie narzędzi .NET-owych i wymagane jest najpierw <strong>zrzucenie z pamięci</strong> załadowanych assembly .NET-owych w celu dalszej analizy.</p><h3>.NET Generic Unpacker</h3><p>Projekt autorstwa <strong>Daniela Pistelli</strong> (obecnie pracujący nad IDA w HexRays), generyczny jak nazwa wskazuje dumper, który potrafi wykryć w pamięci obraz pliku wykonywalnego .NET mimo zewnętrznego natywnego loadera.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/NETUnpack.jpg"><img class="alignnone size-medium wp-image-1084" title=".NET Generic Unpacker" src="http://www.secnews.pl/wp-content/uploads/2011/11/NETUnpack-300x148.jpg" alt=".NET Generic Unpacker" width="300" height="148" /></a></p><p>Strona domowa —  <a href="http://www.ntcore.com/netunpack.php">http://www.ntcore.com/netunpack.php</a></p><h3>DotNetDumper</h3><p>Prosty w użyciu dumper, który również posiada obsługę zrzucania z pamięci plików kilku rodzajów zabezpieczeń, generalnie z tymi dwoma dumperami można sobie poradzić z większością zabezpieczeń natywnych.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/dotnetdumper.png"><img class="alignnone size-medium wp-image-1086" title="DotNet Dumper" src="http://www.secnews.pl/wp-content/uploads/2011/11/dotnetdumper-300x92.png" alt="DotNet Dumper" width="300" height="92" /></a></p><p>Do ściągnięcia lokalna kopia  — <a href="http://www.secnews.pl/wp-content/uploads/2011/11/DotnetDumper.zip">DotnetDumper.zip</a> (66 kB)</p><p>Oprócz dedykowanych dumperów, równie dobrze działają klasyczne metody przeszukiwania pamięci np. w OllyDbg w poszukiwaniu sygnatur .NET-owych aplikacji (np. stringów <em>&#8220;_CorExeMain&#8221;</em>).</p><h2>Fixery</h2><p>Po zrzuceniu z pamięci obrazu pliku .NET jest on <strong>często niezdatny do analizy</strong> w narzędziach takich jak .NET Reflector, wynika to ze zmian jakie wprowadzają najczęściej obfuscatory, aby dodatkowo utrudnić analizę. Tak zrzucone obrazy plików należy naprawić.</p><h3>Universal Fixer</h3><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/universalfixer.png"><img class="alignnone size-medium wp-image-1103" title="Universal Fixer" src="http://www.secnews.pl/wp-content/uploads/2011/11/universalfixer-259x300.png" alt="Universal Fixer" width="259" height="300" /></a></p><p>Do ściągnięcia lokalna kopia  — <a href="http://www.secnews.pl/wp-content/uploads/2011/11/Universal_Fixer.zip">Universal_Fixer.zip</a> (31 kB)</p><p>Zawsze aktualna kopia — <a href="http://forum.tuts4you.com/topic/25376-universal-fixer/" class="broken_link">http://forum.tuts4you.com/topic/25376-universal-fixer/</a></p><h2>Deobfuscatory</h2><p>Liczba obfuscatorów dostępnych na rynku jest <strong>ogromna</strong>, mogę śmiało powiedzieć, że przebija ilość dostępnych narzędzi zabezpieczających dla natywnych aplikacji. W związku z tak zmasowanym atakiem, powstały deobfuscatory dla wielu narzędzi, często zintegrowane i obsługujące wiele rodzajów zabezpieczeń.</p><h3>de4dot</h3><p><a href="https://github.com/0xd4d/de4dot#readme">de4dot</a> to aktywnie rozwijany deobfuscator obsługujący sporą listę zabezpieczeń, podstawa jeśli ktoś myśli poważnie o analizie oprogramowania .NET</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/11/de4dot.png"><img class="alignnone size-medium wp-image-1097" title="Deobfuscator de4dot" src="http://www.secnews.pl/wp-content/uploads/2011/11/de4dot-300x288.png" alt="Deobfuscator de4dot" width="300" height="288" /></a></p><p>Do ściągnięcia ze strony —  <a href="https://github.com/0xd4d/de4dot/downloads">https://github.com/0xd4d/de4dot/downloads</a></p><h2>Podsumowanie</h2><p>Obecny stan zabezpieczeń .NET-owych może <strong>z początku przerazić</strong> i zniechęcić do dalszej analizy, ale jak widać istnieje wiele narzędzi, które potrafią <strong>ułatwić nam życie</strong>.</p><p>Celowo nie opisywałem tutaj gotowych unpakerów, które można z łatwością znaleźć samemu, gdyż nie zawsze sprawdzają się w działaniu i warto wtedy wiedzieć jak sobie poradzić bez ich pomocy.</p><p>Jeśli natknę się na jakieś ciekawe narzędzie to dopiszę je do artykułu, a jeśli wy <strong>znacie coś interesującego</strong> do analizy aplikacji .NET — opiszcie w komentarzach, a ja to przejrzę i z chęcią dodam opis do artykułu.</p><p>Na koniec jeszcze kilka linków, gdzie można znaleźć narzędzia do analizy .NET-owych aplikacji:</p><p>BlackStorm — <a href="http://portal.b-at-s.net/download.php?list.9">http://portal.b-at-s.net/download.php?list.9</a></p><p>RCE Tool Library — <a href="http://www.woodmann.com/collaborative/tools/index.php/Category:.NET_Tools">http://www.woodmann.com/collaborative/tools/index.php/Category:.NET_Tools</a></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/11/17/narzedzia-do-analizy-aplikacji-net/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Raport z CONFidence 2011</title><link>http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/</link> <comments>http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/#comments</comments> <pubDate>Tue, 31 May 2011 17:50:19 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[confidence 2011]]></category> <category><![CDATA[raport]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=990</guid> <description><![CDATA[W ramach konkursu Pimp My CrackMe wszyscy laureaci otrzymali wejściówki na konferencję CONFidence, poprosiłem ich, aby po konferencji napisali krótki raport co ciekawego się tam działo i oto przed wami trzy niezależne relacje. Mateusz “j00ru” Jurczyk W dniach 24-25 maja w Krakowie, odbyła się dziewiąta edycja jednej z najlepszych polskich konferencji, poświęconych ogólnopojętemu bezpieczeństwu IT. [...]]]></description> <content:encoded><![CDATA[<p>W ramach konkursu <a href="http://www.secnews.pl/2011/04/28/konkurs-pimp-my-crackme/">Pimp My CrackMe</a> wszyscy <a href="http://www.secnews.pl/2011/05/16/wyniki-konkursu-pimp-my-crackme/">laureaci</a> otrzymali wejściówki na konferencję <a href="http://2011.confidence.org.pl/">CONFidence</a>, poprosiłem ich, aby po konferencji napisali <strong>krótki raport</strong> co ciekawego się tam działo i oto przed wami trzy niezależne relacje.</p><h1>Mateusz “j00ru” Jurczyk</h1><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110525177.jpg"><img class="alignright size-thumbnail wp-image-1006" title="20110525177" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525177-150x150.jpg" alt="" width="150" height="150" /></a>W dniach 24-25 maja w Krakowie, odbyła się dziewiąta edycja jednej z <strong>najlepszych polskich konferencji</strong>, poświęconych ogólnopojętemu bezpieczeństwu IT.</p><p>W tym roku, organizatorzy zdecydowali się na wprowadzenie pewnej odmiany, gdyż impreza odbywała się w <strong>zabytkowej przepompowni wody</strong> na Bielanach (poprzednio, konferencja miała miejsce w krakowskim kinie Kijów). Moim zdaniem był to <strong>strzał w dziesiątkę</strong> &#8211; sprzyjająca pogoda oraz wolna przestrzeń sprzyjały rozmowom <em>&#8220;przy piwie&#8221;</em>, oraz dobrej zabawie uczestników.</p><p>Tradycyjnie, prelekcje prowadzone był w dwóch, równoległych sesjach, dzięki czemu każdy mógł w dowolnym momencie wybrać interesujący go temat. Niestety zdarzały się sytuacje, w których jedna z sal była przepełniona &#8211; na szczęście było to rzadkie zjawisko, najczęściej rozkład słuchaczy na obu torach był w miarę równomierny.</p><p>Do najciekawszych &#8211; moim zdaniem &#8211; wystąpień zaliczyć można:</p><ul><li>The Son of Stuxnet aka <em>&#8220;the very next scenarios&#8221;</em> &#8211; Raoula Chiesa</li><li>Building Custom Disassemblers &#8211; Feliksa &#8216;FX&#8217; Lindnera,</li><li>Modern Heap Exploitation using the Low Fragmentation Heap &#8211; Chrisa Valaseka</li><li>Defeating x64: The Evolution of the TDL Rootkit &#8211; Aleksandra Matrosova oraz Euegene Rodionova.</li></ul><p>Wszystkich zainteresowanych zachęcam do rzucenia okiem na slajdy z powyższych prelekcji.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110525168.jpg"><img class="alignright size-thumbnail wp-image-1001" title="20110525168" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525168-150x150.jpg" alt="" width="150" height="150" /></a>Oprócz części merytorycznej, organizatorzy zadbali również o możliwość zmierzenia się z różnego typu wyzwaniami, bezpośrednio związanymi z IT security. I tak, uczestnicy mogli wziąć udział w trzech niezależnych konkursach:</p><ul><li>CONFidence 2011 REVERSME</li><li>ESET Crackme</li><li>Gringo Warrior</li></ul><p>Głównym zadaniem uczestnika w poszczególnych zawodach, było kolejno: <strong>wykonać analizę</strong> oraz <strong>opisać działanie</strong> dostarczonego pliku wykonywalnego, znaleźć poprawne dane rejestracyjne dla <strong>CrackMe</strong> (lub stworzyć uniwersalny generator kluczy), oraz otworzyć jak największą ilość zamków (w kajdankach, drzwiach itp.), bez użycia oryginalnego klucza.</p><p>Ostatecznie, zwycięzcą pierwszego konkursu został <strong>Tomasz Smolarek</strong>, natomiast nikomu z uczestników w trakcie trwania konferencji nie udało się poradzić sobie z zabezpieczeniem zaimplementowanym przez firmę ESET; w związku z tym, konkurs został przedłużony o kolejny tydzień. W tym czasie owo CrackMe zostało rozwiązane przez kilka osób (m.in. mnie).</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110524157.jpg"><img class="alignleft size-thumbnail wp-image-998" title="20110524157" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110524157-150x150.jpg" alt="" width="150" height="150" /></a>Warto wspomnieć również o <strong>wyzwaniu rzuconym</strong> uczestnikom przez firmę TippingPoint. Tym razem, głównym celem zabawy była <strong>podmiana strony WWW</strong>, po uprzednim <strong>włamaniu się na lokalny serwer</strong> chroniony autorskim systemem IPS wspomnianej firmy. Co ciekawe, również w tym przypadku nikomu nie udało się wykonać oczekiwanego deface&#8217;a, NAWET po wyłączeniu dodatkowego poziomu ochrony (IPS), i bezpośrednim wystawieniu serwera na świat.</p><p>Oprócz turniejów ściśle technicznych istniała również możliwość wzięcia udziału w zabawie <em>&#8220;Tresure Hunt&#8221;</em>, polegającej na zbieraniu oraz dostarczaniu przeróżnych, dziwacznych przedmiotów (na przykład: <strong>pozytywnego testu ciążowego</strong>).</p><p>Ponadto, do dyspozycji uczestników pozostawał także <strong>kącik ATARI</strong>, gdzie można było zagrać w mniej lub bardziej popularne ośmiobitowce, oraz <strong>Lockpicking Village</strong>, gdzie prowadzono specjalne warsztaty poświęcone <em>pickowaniu</em> zamków, oraz każdy mógł na własną rękę pobawić się różnymi, ciekawymi zamknięciami / kłódkami.</p><p>Jak co roku, nie zabrakło również nieodzownej, wieczornej części konferencji &#8211; <em>&#8220;przedłużenia&#8221;</em> imprezy w postaci <strong>Before Party, After Party oraz Chill-out Party</strong>. Każde z nich odbywało się w innym lokalu, dzięki czemu przyjezdni mieli okazję poznać odrobinę pięknego miasta jakim jest Kraków.</p><p>Wieczornym rozmowom w kuluarach towarzyszyły <strong>wykłady nt. animacji oraz demosceny</strong>, a lokale były opuszczane najczęściej późną nocą lub nad ranem <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p>Podsumowując, uważam, że poziom organizacji konferencji poprawia się z roku na rok. Lokalizacja imprezy w miejscu nieco oddalonym od centrum sprzyjała intergracji uczestników, którzy byli <em>&#8220;zmuszeni&#8221;</em> do pozostania na miejscu podczas lunchu; ponadto natura budowli, która hostowała konferencję zdecydowanie sprzyjała <strong>undergroundowemu klimatowi</strong>. Uznaję konferencję za <strong>bardzo udaną</strong>, i z niecierpliwością czekam na kolejną edycję.</p><h1>hasherezade</h1><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110524151.jpg"><img class="alignright size-thumbnail wp-image-996" title="20110524151" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110524151-150x150.jpg" alt="" width="150" height="150" /></a>Tegoroczne <strong>CONfidence</strong> było dla mnie pierwszym, więc nie mam porównania jak plasowało się na tle wcześniejszych. Z tego co rozmawiałam z różnymi osobami, <strong>klimatem nawiązywało do początkowych edycji</strong> &#8211; w pozytywnym tego znaczeniu. Natomiast jeśli mogłabym porównać je z dwoma wcześniejszymi konferencjami na których byłam (SecDay i SEConference) to mogę tylko stwierdzić, że różnica jest diametralna.</p><p>CONfidence zorganizowane jest z <strong>imprezowym rozmachem</strong> i wykłady są tylko jednym (choć  oczywiście bardzo istotnym) z elementów całego wydarzenia. Jak zwykle przewidziano dwa równoległe tracki prezentacji, więc każdy mógł znaleźć coś dla siebie. Poziom i tematyka były zróżnicowane. Znalazły się zarówno pogadanki teoretyczne, jak i typowe techniczne <em>&#8220;proof of concept&#8221;</em>. Bardzo dużo miejsca poświęcono lockpickingowi.</p><p>Pierwszy wykład zaraz po otwarciu konferencji, stanowił wprowadzenie do tematu. Potem, przez całe dwa dni, można było spraktykować zdobytą wiedzę w <em>&#8220;locpicking village&#8221;</em> – gdzie udostępniono do zabawy różnego poziomu zamki i narzędzia.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110524157.jpg"><img class="alignleft size-thumbnail wp-image-998" title="20110524157" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110524157-150x150.jpg" alt="" width="150" height="150" /></a>Drugiego dnia imprezy odbył się też związany z zagadnieniem konkurs <em>&#8220;gringo warrior&#8221;</em> &#8211; podczas którego, w ciągu pięciu minut zawodnicy <strong>musieli otworzyć jak najwięcej różnego rodzaju kłódek i zamków</strong>. Myślę że na każdym, kto widział taką demonstrację po raz pierwszy, musiało to zrobić <strong>mocne wrażenie</strong>. Ja osobiście, po tym co zobaczyłam, czuję się w 100% przekonana do uwierzenia w przesłanie prezentacji, że <em>&#8220;bezpieczeństwo danych zaczyna się na poziomie zerowym&#8221;</em>. Już nigdy nie zostawię swojego laptopa samego w pokoju hotelowym <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> . Trochę pocieszający jest fakt, że z popularnym u nas zamkiem <em>&#8220;Gerda&#8221;</em> nie poszło tak łatwo &#8211; prezenter przyznał, że wciąż nie złamał najnowszego jej typu.</p><p>Nieco pesymistycznie nastroił mnie natomiast panel dyskusyjny <em>&#8220;David vs Goliat&#8221;</em>. Wynikało z niego bowiem, że osoba, która <strong>odkryła lukę</strong> w zabezpieczeniu i zdecydowała się skontaktować z właścicielem portalu, nigdy nie może być pewna, że nie obróci się to na jej <strong>niekorzyść</strong>. Szczególnie niepolecanym modelem zachowania było żądanie, a wręcz wyłudzanie zapłaty za wykrycie buga (to akurat dość łatwo przewidzieć). Jednak, nawet osoba o dobrych intencjach, jest tak naprawdę zdana na łut szczęścia &#8211; w zależności od tego na kogo trafi po drugiej stronie, jej zgłoszenie może być potraktowane bardzo przychylnie, bądź wręcz wrogo.</p><p>Sporo uwagi skupiło się na <strong>wirusie Stuxnet</strong> &#8211; temat ten pojawiał się niezależnie na wykładach kilku różnych osób (m. in. Rauol Chiesa, Piotr Linke, Felix Linder). Wykład Felixa (o budowie  dizasemblerów) &#8211; był moim zdaniem jednym z lepszych podczas pierwszego dnia konferencji. Mocno<br /> techniczny, ilustrujący wprowadzane koncepty przykładami.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110525166.jpg"><img class="alignright size-thumbnail wp-image-999" title="20110525166" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525166-150x150.jpg" alt="" width="150" height="150" /></a>W dniu drugim były dwa takie <em>&#8220;niskopoziomowe&#8221;</em> wykłady na wysokim poziomie <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Rano &#8211; <em>&#8220;Modern </em><em>Heap Exploitation using the Low Fragmentation Heap&#8221;</em> (przygotowany przez Chrisa Valaseka) i po południu <em>&#8220;Defeating x64: The Evolution of the TDL Rootkit&#8221;</em>. Panowie z ESET pokazali, w jaki sposób można <strong>oszukać system</strong> dodając do niego rootkita, gdzie i jak patchować, aby ingerencja <strong>nie została wykryta</strong>. Czekam z utęsknieniem ;P aż materiały pojawią się na stronie – dużo ciekawych wskazówek do eksperymentowania.</p><p>Poza tym &#8211; miła i ładna <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> prezentacja Michała Sajdaka zapadła mi w pamięć: <em>&#8220;Remote rootshell on Cisco router&#8221;</em>. Zdalne wykonywanie komend poprzez buga w oprogramowaniu routerów Cisco. Sprawa o tyle ciekawa, co bardzo świeża &#8211; release łatki był przewidziany <strong>dokładnie w dniu prezentacji</strong> (więc, admini, nie śpijcie i sprawdźcie czy waszego sprzętu problem nie dotyczy!).</p><p>Oprócz wykładów przygotowano wiele <strong>dodatkowych atrakcji</strong>. Konkursów było tym razem więcej niż na poprzednich edycjach. Obok propozycji ściśle związanych z bezpieczeństwem, takich jak ESET CrackMe, ReverseMe i serwera wystawionego do shackowania przez firmę HP, pojawiły się zawody w lockpickingu i totalnie wykręcony <em>&#8220;treasure hunt&#8221;</em>. <em>&#8220;Treasure hunt&#8221;</em> &#8211; polegał na drużynowym zaliczaniu wyzwań z listy. A wyzwania były <strong>godne prawdziwych śmiałków ;P</strong> (np. przebiegnięcie w samej bieliźnie przez salę konferencyjną). Nagrodą &#8211; niespodzianką dla zwycięskiej drużyny okazał się <strong>karton wódki</strong> &#8211; było więc o co walczyć <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><p>Ogólnie mówiąc, atmosfera była stymulująca dla obu półkul mózgowych, a zdobywanie wiedzy odbywało się w stanie relaksacji <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p><p>Po wykładach mogliśmy rozruszać zesztywniałe od siedzenia ;P mięśnie na <strong>afterparty</strong> zorganizowanym w klubie.</p><p>W tym miejscu chcę podziękować wszystkim, których miałam okazję poznać w ciągu tych dwóch dni &#8211; no i oczywiście tym którzy przyczynili się do przyznania mi darmowej wejściówki <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Było super i na pewno będę CONfidence mile wspominać i polecać.</p><h1>Grzegorz “haker500″ Jastrzębski</h1><p><a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110525173.jpg"><img class="alignright size-thumbnail wp-image-1005" title="20110525173" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525173-150x150.jpg" alt="" width="150" height="150" /></a>Konferencja bardzo mi się podobała, duże wrażenie zrobił na mnie wykład <em>&#8220;Bezpieczeństwo Twojej sieci zaczyna się na poziomie zero&#8221;</em> prowadzony przez Devianta Ollama i Babaka Javadi. Była to prezentacja i <strong>praktyczny pokaz lockpickingu</strong>. Po wykładzie oraz następnego dnia można było spróbować samemu opanować sztukę otwierania zamków i kłódek. Ja niestety nie spróbowałem.</p><p>Ciekawy był też wykład Felixa &#8220;FX&#8221; Lindnera dotyczący <strong>budowy własnego disasemblera</strong>. Wykład Chrisa Valaska mówił o nowoczesnej eksploatacji stosu przy użyciu małej fragmentacji.</p><p>Spodobały mi się wykłady Alexeya Sintsova <em>&#8220;DNS dla złych&#8221;</em> oraz Travisa Goodspeeda, którego prezentacja dotyczyła praktycznego ataku na urządzenie sprzętowe <strong>Freescale MC13224 ZigBee SoP</strong>. Ciekawy był również wykład prowadzony przez Alexandra Matrosova i Eugene&#8217;a Rodionova, mówiący o Ewolucji Rootkita TDL. Uczestniczyłem też w wykładzie prowadzonym przez Sandy &#8220;Mouse&#8221; Clark oraz Brada &#8220;RenderMana&#8221; Hainesa.</p><p>Widziałem również prezentacje: Michele Orru&#8217; a.k.a. antisnatchora, Andreasa Bogka, Gregora Knopfa, Michała Sajdaka i Piotra Linke oraz końcówkę panelu dyskusyjnego David vs Goliat &#8211; jak zgłosić podatność i nie zrobić sobie przy tym krzywdy.</p><p>Na konferencji panowała niepowtarzalna atmosfera, przekąski były bardzo dobre. Fajnie, że były konkursy takie jak: <strong>ESET Crackme</strong> i <strong>CONFidence 2011 REVERSME</strong>. Ja niestety nie mogłem w nich wziąć udziału, bo nie mam laptopa. Fajny był również konkurs <strong>Gringo Warrior</strong>, chociaż dokładnie nie widziałem, kto w nim uczestniczył i nie wiem kto wygrał.</p><p>Bardzo podobała mi się lokalizacja, w której odbywała się konferencja, ponieważ można było tam podziwiać przepiękny krajobraz, no i pogoda dopisała. Nie mogę również nie wspomnieć o ładnych i sympatycznych hostessach pracujących podczas konferencji. Fajnie wyglądały dwie hostessy grające w piłkę w spodenkach z szelkami i w białych koszulach.</p><p>Ogólnie wspomnienia z konferencji mam bardzo pozytywne. Cieszę się, że po raz pierwszy mogłem brać udział w tym wydarzeniu, które powinno być obowiązkowe dla każdego, kto pasjonuje się bezpieczeństwem komputerowym.</p><p>Poniżej galeria zdjęć wykorzystanych w całym raporcie, które <strong>wykonał Grzegorz Jastrzębski</strong> (oprócz dwóch ostatnich dostarczonych przez <strong>Geda</strong>).</p><a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525192/' title='20110525192'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525192-150x150.jpg" class="attachment-thumbnail" alt="20110525192" title="20110525192" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110524151/' title='20110524151'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110524151-150x150.jpg" class="attachment-thumbnail" alt="20110524151" title="20110524151" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110524155/' title='20110524155'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110524155-150x150.jpg" class="attachment-thumbnail" alt="20110524155" title="20110524155" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110524157/' title='20110524157'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110524157-150x150.jpg" class="attachment-thumbnail" alt="20110524157" title="20110524157" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525166/' title='20110525166'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525166-150x150.jpg" class="attachment-thumbnail" alt="20110525166" title="20110525166" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525167/' title='20110525167'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525167-150x150.jpg" class="attachment-thumbnail" alt="20110525167" title="20110525167" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525168/' title='20110525168'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525168-150x150.jpg" class="attachment-thumbnail" alt="20110525168" title="20110525168" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525170/' title='20110525170'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525170-150x150.jpg" class="attachment-thumbnail" alt="20110525170" title="20110525170" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525171/' title='20110525171'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525171-150x150.jpg" class="attachment-thumbnail" alt="20110525171" title="20110525171" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525172/' title='20110525172'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525172-150x150.jpg" class="attachment-thumbnail" alt="20110525172" title="20110525172" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525173/' title='20110525173'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525173-150x150.jpg" class="attachment-thumbnail" alt="20110525173" title="20110525173" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525177/' title='20110525177'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525177-150x150.jpg" class="attachment-thumbnail" alt="20110525177" title="20110525177" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525185/' title='20110525185'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525185-150x150.jpg" class="attachment-thumbnail" alt="20110525185" title="20110525185" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525186/' title='20110525186'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525186-150x150.jpg" class="attachment-thumbnail" alt="20110525186" title="20110525186" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525187/' title='20110525187'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525187-150x150.jpg" class="attachment-thumbnail" alt="20110525187" title="20110525187" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525188/' title='20110525188'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525188-150x150.jpg" class="attachment-thumbnail" alt="20110525188" title="20110525188" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525190/' title='20110525190'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525190-150x150.jpg" class="attachment-thumbnail" alt="20110525190" title="20110525190" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/attachment/20110525191/' title='20110525191'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/20110525191-150x150.jpg" class="attachment-thumbnail" alt="20110525191" title="20110525191" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/ged_i3yph/' title='ged_i3ypH'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/ged_i3ypH-150x150.jpg" class="attachment-thumbnail" alt="ged_i3ypH" title="ged_i3ypH" /></a> <a href='http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/ged_5gmw1/' title='ged_5GMw1'><img width="150" height="150" src="http://www.secnews.pl/wp-content/uploads/2011/05/ged_5GMw1-150x150.jpg" class="attachment-thumbnail" alt="ged_5GMw1" title="ged_5GMw1" /></a><p>Dodatkowo <a href="http://www.secnews.pl/wp-content/uploads/2011/05/20110524047.rar">filmik</a> nakręcony przez Grześka.</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/05/31/raport-z-confidence-2011/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Antydebugging</title><link>http://www.secnews.pl/2011/05/24/antydebugging/</link> <comments>http://www.secnews.pl/2011/05/24/antydebugging/#comments</comments> <pubDate>Tue, 24 May 2011 14:22:04 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[antidebug]]></category> <category><![CDATA[antydebug]]></category> <category><![CDATA[antydebugging]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=978</guid> <description><![CDATA[Znakomity artykuł Tylera Shieldsa opisujący mniej lub bardziej znane metody antydebug, jednak napisane w większości w języku C, co sprawia, że są one bardziej prostsze do wykorzystania w oprogramowaniu niż wstawki assemblerowe, całość dokładnie udokumentowana. Do ściągnięcia — whitepaper_antidebugging.pdf (207 kB)]]></description> <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-790" title="PDF" src="http://www.secnews.pl/wp-content/uploads/2010/10/file_pdf.png" alt="" width="48" height="48" />Znakomity artykuł <strong>Tylera Shieldsa</strong> opisujący mniej lub bardziej znane <strong>metody antydebug</strong>, jednak napisane w większości w języku C, co sprawia, że są one bardziej prostsze do wykorzystania w oprogramowaniu niż wstawki assemblerowe, całość dokładnie udokumentowana.</p><p>Do ściągnięcia — <a title="Anti-Debugging – A Developers View" href="http://www.secnews.pl/wp-content/uploads/2011/05/whitepaper_antidebugging.pdf">whitepaper_antidebugging.pdf</a> (207 kB)</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/05/24/antydebugging/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Stuxnet</title><link>http://www.secnews.pl/2011/01/17/stuxnet/</link> <comments>http://www.secnews.pl/2011/01/17/stuxnet/#comments</comments> <pubDate>Mon, 17 Jan 2011 21:54:56 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[stuxnet]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=898</guid> <description><![CDATA[Miażdząca krytyka jednego z najbardziej ciekawych wirusów komputerowych ostatnich lat, wytyka brak wykorzystania nowoczesnych metod obfukacji, wirtualizacji kodu czy ukrywania payloadu: Stuxnet is embarrassing, not amazing Jak się tak zastanowić, to sam mam wątpliwości czy istnieją jeszcze wirusy z polimorficznymi czy metamorficznymi silnikami?]]></description> <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-899" title="Virus" src="http://www.secnews.pl/wp-content/uploads/2011/01/virus.png" alt="" width="128" height="128" />Miażdząca krytyka jednego z najbardziej ciekawych wirusów komputerowych ostatnich lat, wytyka brak wykorzystania nowoczesnych metod obfukacji, wirtualizacji kodu czy ukrywania payloadu:</p><p><a href="http://rdist.root.org/2011/01/17/stuxnet-is-embarrassing-not-amazing/">Stuxnet is embarrassing, not amazing</a></p><p>Jak się tak zastanowić, to sam mam wątpliwości czy istnieją jeszcze wirusy z polimorficznymi czy metamorficznymi silnikami?</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/01/17/stuxnet/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Reversing Clipper</title><link>http://www.secnews.pl/2011/01/01/reversing-clipper/</link> <comments>http://www.secnews.pl/2011/01/01/reversing-clipper/#comments</comments> <pubDate>Sat, 01 Jan 2011 19:50:05 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[ca-clipper]]></category> <category><![CDATA[clipper]]></category> <category><![CDATA[dos]]></category> <category><![CDATA[valkyrie]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=864</guid> <description><![CDATA[Clipper &#8211; czyli czego się nie nauczyłem Clipper to język programowania z czasów DOS-a, ściśle związany z operowaniem na bazach danych, można powiedzieć, że to protoplasta Visual FoxPro. Piszę o tym, ponieważ przed świętami otrzymałem zlecenie na modyfikację starego programu napisanego w środowisku Clipper, modyfikacja miała polegać na zmianie stawki VAT z 22% na 23% [...]]]></description> <content:encoded><![CDATA[<h1>Clipper &#8211; czyli czego się nie nauczyłem</h1><p><a href="http://www.emsps.com/oldtools/clipperv.htm"><img class="alignright" title="Clipper v5.2" src="http://www.secnews.pl/wp-content/uploads/2011/01/52up.jpg" alt="" width="186" height="200" /></a><a href="http://en.wikipedia.org/wiki/Clipper_(programming_language)">Clipper</a> to język programowania z czasów <em>DOS-a</em>, ściśle związany z operowaniem na bazach danych, można powiedzieć, że to protoplasta <a href="http://www.secnews.pl/2010/03/29/hasp-i-visual-foxpro-9/">Visual FoxPro</a>.</p><p>Piszę o tym, ponieważ przed świętami otrzymałem zlecenie na modyfikację starego programu napisanego w środowisku <a href="http://www.grafxsoft.com/clipper.htm">Clipper</a>, modyfikacja miała polegać na zmianie stawki VAT z 22% na 23% i 7% na 8%, czyli popularny ostatnio temat, związany z noworoczną zmianą stawki podatkowej.</p><p>Opiszę jedynie jak zabrać się za tego typu oprogramowanie, ponieważ w sieci nie znalazłem praktycznie żadnych materiałów o analizie aplikacji Clippera.</p><h2>Rozpoznanie</h2><p>Po czym poznać, że stara aplikacja DOS jest utworzona w Clipperze? Ja poznałem po tym, że jak załadowałem ją do IDA to nic nie rozumiałem z kodu ani żadnych ciekawych tekstowych referencji nie znalazłem, po prostu <strong>syf w czystej postaci</strong>, nawet sobie pomyślałem, że to jakaś aplikacja z DOSowego piekła rodem.</p><p>Przeglądając binarkę pod <a href="http://www.hiew.ru/">HIEW</a> dostrzegłem jednak ciekawe informacje:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_main.png"><img class="alignnone size-medium wp-image-867" title="Hello, to ja - Clipper :)" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_main-300x152.png" alt="" width="300" height="152" /></a></p><p>A więc wiadomo, że to Clipper w wersji 5.2. Mamy jakiś punk zaczepny.</p><h2>Analiza</h2><p>Aplikacje w Clipperze kompilowane są do pseudokodu (p-code), więc jeszcze lepiej zapowiadała się analiza, nawet nie wiedziałem, że w czasach DOSu ludzie mieli taką fantazję, żeby już tworzyć podwaliny pod platformę .net <img src='http://www.secnews.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Jednak ku mojemu <strong>zaskoczeniu</strong> i długim wyszukiwaniu, udało mi się znaleźć działający dekompilator, co uznałem wręcz za cud (w końcu były święta), ponieważ wiek samego anailzowanego programu jak i dekompilatora był już dość spory.</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie.png"><img class="alignnone size-medium wp-image-868" title="Valkyrie 5" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie-300x152.png" alt="" width="300" height="152" /></a></p><p>Odnaleziony dekompilator to <a href="http://www.grafxsoft.com/2valkyrie.htm">Valkyrie 5</a>, stworzony przez tą samą firmę, która jest odpowiedzialna za środowisko CA-Clipper.</p><p>Po otworzeniu głównego pliku aplikacji w dekompilatorze, ukaże się nam okno z informacjami i statystykami dla aplikacji:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_stats.png"><img class="alignnone size-medium wp-image-869" title="Statystyki" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_stats-300x152.png" alt="" width="300" height="152" /></a></p><p>Co ważne i na co należy zwrócić uwagę, to że aplikacja w Clipperze oprócz funkcji samego Clippera posiada również funkcje napisane w <strong>C/Assemblerze</strong>, które nie zostaną zdekompilowane, a jedynie uzyskamy dostęp do informacji o ich położeniu w pliku binarnym.</p><p>Domyślnym oknem w dekompilatorze jest lista modułów, z których zbudowana jest aplikacja oraz <strong>ich funckje</strong>:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_funkcje.png"><img class="alignnone size-medium wp-image-870" title="Lista funkcji" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_funkcje-300x152.png" alt="" width="300" height="152" /></a></p><p><a href="http://www.itlnet.net/programming/program/Reference/c53g01c/menu.html">Składnia języka Clipper</a> nie jest zbyt skomplikowana (przypomina trochę Pascala) i można w miarę szybko ją zrozumieć, co ciekawe i co zwróciło moją uwagę to funkcja <a href="http://www.itlnet.net/programming/program/Reference/c53g01c/ng418f5.html">EVAL</a>, która pozwala wykonać podany blok kodu źródłowego (jak <a href="http://php.net/manual/en/function.eval.php">eval z PHP</a>).</p><p>Przykładowa zdekompilowana funkcja:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_kod.png"><img class="alignnone size-medium wp-image-871" title="Kod w języku Clipper" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_kod-300x152.png" alt="" width="300" height="152" /></a></p><p>Oprócz kodu w HLL, można samą funkcję obejrzeć w p-code (i jak się można domyśleć modyfikacje również muszą być dokonywane manipulując na p-code):</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_pcode.png"><img class="alignnone size-medium wp-image-872" title="Skompilowany kod Clippera w p-code" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_pcode-300x152.png" alt="" width="300" height="152" /></a></p><p>Oprócz funkcji napisanych w języku Clipper, wspominałem wyżej, że plik może również zawierać natywny kod, listę tych funkcji możemy podejrzeć po wybraniu <em>Menu -&gt; View -&gt; Externals</em>:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_externals.png"><img class="alignnone size-medium wp-image-874" title="Natywne funkcje w aplikacji Clipper" src="http://www.secnews.pl/wp-content/uploads/2011/01/clipper_valkyrie_externals-300x152.png" alt="" width="300" height="152" /></a></p><p>Do ich podglądu należy skorzystać już z <em>HIEW</em>.</p><h2>Bazy danych</h2><p>Aplikacje Clipper domyślnie są aplikacjami bazodanowymi, a format plików jakim operują to <strong>*.DBF</strong>, muszę przyznać, że trochę czasu mi zajęło znalezienie odpowiedniej aplikacji do podglądu tego typu plików i pierwsza z nich, którą polecam to <a href="http://www.dbf2002.com/">DBF Viewer 2000</a>, a jeśli posiadacie środowisko <strong>Visual FoxPro</strong> to również z jego poziomu można przeglądać bazy danych w tym formacie, co było małym zaskoczeniem, że obsługiwane są bazy w tak starym formacie.</p><h2>Uruchamianie</h2><p>Z aplikacją, z którą ja pracowałem, miałem problem, żeby w ogóle ją uruchomić, pod konsolą DOS w systemie Windows odmawiała posłuszeństwa, <a href="http://www.dosbox.com/">DOSBox 0.74</a> również niewiele pomógł, ratunkiem okazał sie po prostu natywny <strong>MS-DOS 6.22</strong> uruchamiany pod VMWare.</p><p>Przy okazji próbowałem dobrać się do tej aplikacji jakimś starym debuggerem jednak bez większych efektów, bo jak się okazało Clipper i <a href="http://www.woodmann.com/collaborative/tools/index.php/Category:16_bit_and_DOS_Debuggers">SoftICE</a> za bardzo się nie lubią, ale na pamiątkę strzeliłem screenshota:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2011/01/softice_dos.png"><img class="alignnone size-medium wp-image-875" title="SoftICE dla DOS" src="http://www.secnews.pl/wp-content/uploads/2011/01/softice_dos-300x166.png" alt="" width="300" height="166" /></a></p><h1>Czego się nie nauczyłem?</h1><p>Głównie tego jak poprawnie debugować tego typu aplikacje i jak modyfikować więcej niż kilka instrukcji, nie mówiąc o podmianie całych bloków kodu. Clipper należy już z zasadzie do przeszłości, ale mimo wszystko warto czasami zobaczyć jak zbudowane były i jak funkcjonowały stare aplikacje, bo wiele z tych technik (czy zamysłów) jest obecnie wykorzystywanych.</p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2011/01/01/reversing-clipper/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>x86 vs x64</title><link>http://www.secnews.pl/2010/10/04/x86-vs-x64/</link> <comments>http://www.secnews.pl/2010/10/04/x86-vs-x64/#comments</comments> <pubDate>Mon, 04 Oct 2010 09:12:02 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[j00ru]]></category> <category><![CDATA[x64]]></category> <category><![CDATA[x86]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=789</guid> <description><![CDATA[Mateusz „j00ru” Jurczyk opublikował na swoim blogu relację z konferencji SecDay 2010 oraz swoją prezentację, ukazującą różnicę pomiędzy architekturą x86 a x64 w kontekście exploitacji, polecam serdecznie! SecDay 2010 – materiały, relacja http://j00ru.vexillium.org/?p=632&#38;lang=pl Prezentacja http://j00ru.vexillium.org/blog/29_09_10/x86_vs_x64.pdf]]></description> <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-790" title="PDF" src="http://www.secnews.pl/wp-content/uploads/2010/10/file_pdf.png" alt="" width="48" height="48" />Mateusz <em>„j00ru”</em> Jurczyk opublikował na swoim <a href="http://j00ru.vexillium.org/?lang=pl">blogu</a> relację z konferencji <strong>SecDay 2010</strong> oraz swoją prezentację, ukazującą różnicę pomiędzy architekturą x86 a x64 w kontekście exploitacji, polecam serdecznie!</p><p><em>SecDay 2010 – materiały, relacja</em><br /> <a href="http://j00ru.vexillium.org/?p=632&amp;lang=pl">http://j00ru.vexillium.org/?p=632&amp;lang=pl</a></p><p><em>Prezentacja</em><br /> <a href="http://j00ru.vexillium.org/blog/29_09_10/x86_vs_x64.pdf">http://j00ru.vexillium.org/blog/29_09_10/x86_vs_x64.pdf</a></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2010/10/04/x86-vs-x64/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Luki bezpieczeństwa jądra Windows</title><link>http://www.secnews.pl/2010/04/12/luki-bezpieczenstwa-jadra-windows/</link> <comments>http://www.secnews.pl/2010/04/12/luki-bezpieczenstwa-jadra-windows/#comments</comments> <pubDate>Mon, 12 Apr 2010 10:32:48 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[bugs]]></category> <category><![CDATA[exploits]]></category> <category><![CDATA[kernel]]></category> <category><![CDATA[windows]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=665</guid> <description><![CDATA[Prezentacja z konferencji SEConference 2k10 autorstwa j00ru przedstawiająca techniczny opis luk związanych z jądrem systemu Windows. Prezentacja w formacie PDF i PPTX Więcej informacji na — http://j00ru.vexillium.org/?p=301&#38;lang=pl]]></description> <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-666" title="Blue Screen ;)" src="http://www.secnews.pl/wp-content/uploads/2010/04/screen_windows.png" alt="" width="48" height="48" />Prezentacja z konferencji <a href="http://2k10.seconference.pl/">SEConference 2k10</a> autorstwa <strong>j00ru</strong> przedstawiająca techniczny opis luk związanych z jądrem systemu Windows.</p><p>Prezentacja w formacie <a href="http://j00ru.vexillium.org/blog/10_04_10/Windows_kernel_bugs.pdf">PDF</a> i <a href="http://j00ru.vexillium.org/blog/10_04_10/Windows_kernel_bugs.pptx">PPTX</a></p><p>Więcej informacji na — <a href="http://j00ru.vexillium.org/?p=301&amp;lang=pl">http://j00ru.vexillium.org/?p=301&amp;lang=pl</a></p> ]]></content:encoded> <wfw:commentRss>http://www.secnews.pl/2010/04/12/luki-bezpieczenstwa-jadra-windows/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>HASP i Visual FoxPro 9</title><link>http://www.secnews.pl/2010/03/29/hasp-i-visual-foxpro-9/</link> <comments>http://www.secnews.pl/2010/03/29/hasp-i-visual-foxpro-9/#comments</comments> <pubDate>Mon, 29 Mar 2010 13:29:41 +0000</pubDate> <dc:creator>bartek</dc:creator> <category><![CDATA[Artykuły]]></category> <category><![CDATA[Reversing]]></category> <category><![CDATA[hasp]]></category> <category><![CDATA[refox]]></category> <category><![CDATA[visual foxpro]]></category><guid isPermaLink="false">http://www.secnews.pl/?p=629</guid> <description><![CDATA[Ostatnio natrafiłem na aplikację stworzoną w środowisku Visual FoxPro 9, zabezpieczona była kluczem sprzętowym HASP Hardlock, a sam plik wykonywalny aplikacji był zaszyfrowany (tzw. envelope). Struktura aplikacji Visual FoxPro Z nielicznych kontaktów z oprogramowaniem Visual FoxPro wiedziałem, że każda taka aplikacja składa się z prostego loadera (który uruchamia cały engine VFP znajdujący się w dodatkowych [...]]]></description> <content:encoded><![CDATA[<p><img class="alignright size-full wp-image-632" title="VFP9" src="http://www.secnews.pl/wp-content/uploads/2010/03/fox.png" alt="" width="116" height="120" />Ostatnio natrafiłem na aplikację stworzoną w środowisku <a href="http://en.wikipedia.org/wiki/Visual_FoxPro">Visual FoxPro 9</a>, zabezpieczona była kluczem sprzętowym <a href="http://www.aladdin.com/hasp/default.aspx">HASP Hardlock</a>, a sam plik wykonywalny aplikacji był zaszyfrowany (tzw. <em>envelope</em>).</p><h2>Struktura aplikacji Visual FoxPro</h2><p>Z nielicznych kontaktów z oprogramowaniem <strong>Visual FoxPro</strong> wiedziałem, że każda taka aplikacja składa się z <strong>prostego loadera</strong> (który uruchamia cały engine VFP znajdujący się w dodatkowych plikach DLL) oraz <strong>właściwej aplikacji</strong>, która znajduje się na końcu pliku wykonywalnego (zapisana jako <em>overlay</em>), całość jest więc w jednym pliku wykonywalnym. Tak jest w przypadku programów niezabezpieczonych:</p><p><img class="aligncenter size-full wp-image-634" title="Niezabezpieczona aplikacja VFP9" src="http://www.secnews.pl/wp-content/uploads/2010/03/vfp_clean.png" alt="" width="211" height="245" /></p><p>W przypadku zabezpieczenia HASP, na końcu zabezpieczonego pliku faktycznie znajdują się jakieś dane, ale nie są to dane aplikacji VFP, gdyż nie można jej zdekompilować oprogramowaniem <a href="http://www.refox.net/">ReFox</a>.</p><h2>Zabezpieczenia dla aplikacji z overlayami</h2><p>Dane <em>overlay</em> (tak zapisane dane są w aplikacjach Flash, Director, Shockwave etc.) nie są mapowane w pamięci procesu i muszą być odczytane bezpośrednio z dysku. Popularną metodą ochrony takich aplikacji jest szyfrowanie tych danych i <strong>hookowanie</strong> funkcji systemu plików (np. <em>CreateFile</em>, <em>ReadFile</em> etc.) w samej aplikacji, poprzez podstawienie adresów funkcji zastępczych w tabeli importów aplikacji. Jeśli aplikacja otworzy swój własny plik i będzie probowała czytać dane overlaya, nie zostanie odczytane to co jest na dysku, ale to co zostało wczesniej zaszyfrowane.</p><p>Takie rozwiązanie przez hookowanie tabeli importów działa jedynie w przypadku samodzielnych plików (bez dodatkowych bibliotek), w przypadku aplikacji VFP, dane z pliku wykonywalnego czytane są przez dodatkowe biblioteki, więc wymagany byłby system wide hook.</p><h2>Envelope HASP dla aplikacji VFP</h2><p>System zabezpieczeń HASP dla takich plików, działa w ten sposób, że sterownik systemowy HASP-a podpina się pod funkcje systemowe Windows odpowiedzialne za czytanie plików i obecność oryginalnego overlaya jest emulowana tylko dla zabezpieczonej aplikacji i jej bibliotek. Wygląda to mniej więcej tak:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2010/03/vfp_protected.png"><img class="aligncenter size-full wp-image-637" title="Zabezpieczona aplikacja VFP9" src="http://www.secnews.pl/wp-content/uploads/2010/03/vfp_protected.png" alt="" width="419" height="245" /></a></p><h2>Odczytanie overlaya</h2><p>Jak zatem uzyskać obraz całego overlaya? Z przeprowadzonych eksperymentów wynika, że dane nie są nigdzie czytane w całości, więc nie ma takiego punktu w programie (a grzebanie w engine VFP nie należy do najprzyjemniejszych), gdzie by można było zrzucić pamięć całego overlaya.</p><p>Jednak jeśli czytanie danych overlaya jest emulowane dla samej zabezpieczonej aplikacji, można <strong>wstrzyknąć kod</strong> czytający zawartość całego pliku do zabezpieczonej aplikacji i dzięki temu uzyskać dane odszyfrowanego overlaya.</p><p>Jest tutaj kilka problemów. Po pierwsze, aby wstrzyknąc kod należy dojść do <strong>OEP</strong> zabezpieczonej aplikacji, co może sprawić trochę problemów, ja skorzystałem z <strong>OllyDbg</strong> i pluginu <a href="http://tuts4you.com/download.php?view.1276">Phant0m</a>, ponieważ envelope HASP-a wykrywa popularne narzędzia do debuggowania, co można zobaczyć na zrzuconym obrazie zabepieczonego pliku:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2010/03/file_dumped.png"><img class="aligncenter size-medium wp-image-639" title="Wykrywane narzędzia" src="http://www.secnews.pl/wp-content/uploads/2010/03/file_dumped-300x152.png" alt="" width="300" height="152" /></a></p><p>Znalezienie OEP jest relatywnie proste, wersja dla leniwych — zrzucić działający program z pamięci i wyszukać standardowego entrypoint-a dla aplikacji skompilowanych pod Visual C++ (szukać funkcji <a href="http://msdn.microsoft.com/en-us/library/ms683230(VS.85).aspx">GetStartupInfoA</a>). Potem wgrać na nowo plik i ustawić hardware breakpoint na tym adresie.</p><p>Będąc na adresie OEP można teraz wstrzyknąć kod odpowiedzialny za czytanie pliku. Aby zaoszczedzić trochę kodu, ja wykorzystałem fakt, że plik aplikacji jest przez nią otwierany w pewnym momencie, dzięki czemu nie trzeba pobierać jego ścieżki i go otwierać, a od razu mamy jego uchwyt, który można wykorzystać do odczytania overlaya:</p><p><a href="http://www.secnews.pl/wp-content/uploads/2010/03/vfp_open.png"><img class="aligncenter size-full wp-image-643" title="Otwieranie swojego pliku" src="http://www.secnews.pl/wp-content/uploads/2010/03/vfp_open.png" alt="" width="382" height="400" /></a></p><p>Następnie skorzystałem ze skryptu ODBScript, żeby pod adresem 4015EE załadować kod, który odczyta zawartość pliku i zapisze go na dysku:</p><div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; usun wszystkie breakpointy</span>
        bphwcall
        bc
&nbsp;
<span style="color: #666666; font-style: italic;">; ustaw hardware bp na OEP</span>
        bphws   <span style="color: #0000ff;">401873</span><span style="color: #339933;">,</span><span style="color: #7f007f;">&quot;x&quot;</span>
&nbsp;
        run
&nbsp;
<span style="color: #666666; font-style: italic;">; ustaw hardware bp na kod po _lopen</span>
        bphws   4015F4<span style="color: #339933;">,</span><span style="color: #7f007f;">&quot;x&quot;</span>
&nbsp;
        run
&nbsp;
        bphwcall
&nbsp;
<span style="color: #666666; font-style: italic;">; kompiluj kod z pliku pod adres EIP</span>
        asmtxt  eip<span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;C:\fox_dumper.asm&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; pomocniczy bp</span>
        bphws   <span style="color: #0000ff;">401644</span><span style="color: #339933;">,</span><span style="color: #7f007f;">&quot;x&quot;</span>
&nbsp;
        run
&nbsp;
<span style="color: #666666; font-style: italic;">; zrzuc pamiec pod adresem ESI o rozmiarze EBX</span>
        dm <span style="color: #00007f;">esi</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;c:\dump.bin&quot;</span>
&nbsp;
        log <span style="color: #7f007f;">&quot;VFP dumper zrobione.&quot;</span>
&nbsp;
        pause</pre></div></div><p>Kod dumpera ładowany jest z zewnętrznego pliku, a nie jest wykorzystywana funkcja ODBScript wykonująca kod assemblera w przestrzeni adresowej aplikacji, ponieważ to po prostu nie działało (jakby ktoś pytał):</p><div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; w EAX jest uchwyt pliku</span>
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">edi</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>                 <span style="color: #666666; font-style: italic;">; hFile</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; nawiguj na koniec pliku (korzystajac z funkcji</span>
<span style="color: #666666; font-style: italic;">; z tabeli importow aplikacji)</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">2</span>                       <span style="color: #666666; font-style: italic;">; FILE_END</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">0</span>                       <span style="color: #666666; font-style: italic;">; offset</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">edi</span>                     <span style="color: #666666; font-style: italic;">; hFile</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    <span style="color: #009900; font-weight: bold;">&#91;</span>40203C<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;_llseek</span>
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">ebx</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>                 <span style="color: #666666; font-style: italic;">; eax = current offset = size</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; alokuj pamiec na rozmiar overlaya</span>
        <span style="color: #00007f; font-weight: bold;">lea</span>     <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">ebx</span><span style="color: #339933;">-</span><span style="color: #0000ff;">4</span><span style="color: #009900; font-weight: bold;">&#93;</span>             <span style="color: #666666; font-style: italic;">; na koncu overala zapisany jest DWORD</span>
                                        <span style="color: #666666; font-style: italic;">; ktory wskazuje offset poczatku overlaya</span>
                                        <span style="color: #666666; font-style: italic;">; w pliku</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">0</span>                       <span style="color: #666666; font-style: italic;">; FILE_BEGIN</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">eax</span>                     <span style="color: #666666; font-style: italic;">; offset</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">edi</span>                     <span style="color: #666666; font-style: italic;">; hFile</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    <span style="color: #009900; font-weight: bold;">&#91;</span>40203C<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;_llseek</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; odczytaj DWORD, ktory okresja polozenie overalaya w pliku</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">0</span>
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span><span style="color: #00007f;">esp</span>
&nbsp;
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">4</span>                       <span style="color: #666666; font-style: italic;">; size</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">eax</span>                     <span style="color: #666666; font-style: italic;">; &amp;amp;memory</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">edi</span>                     <span style="color: #666666; font-style: italic;">; hFile</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">402040</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;_lread</span>
&nbsp;
        <span style="color: #00007f; font-weight: bold;">pop</span>     <span style="color: #00007f;">eax</span>                     <span style="color: #666666; font-style: italic;">; esi - raw offset overlaya</span>
&nbsp;
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">0</span>                       <span style="color: #666666; font-style: italic;">; FILE_BEGIN</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">0</span>                       <span style="color: #666666; font-style: italic;">; offset</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">edi</span>                     <span style="color: #666666; font-style: italic;">; hFile</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    <span style="color: #009900; font-weight: bold;">&#91;</span>40203C<span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;_llseek</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; alokuj pamiec na calego overlaya</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">ebx</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">40</span>                      <span style="color: #666666; font-style: italic;">; GMEM_FIXED or GMEM_ZEROINIT</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    GlobalAlloc
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">esi</span><span style="color: #339933;">,</span><span style="color: #00007f;">eax</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; odczytaj calego overlaya do nowo zaalokowanej pamieci</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">ebx</span>                     <span style="color: #666666; font-style: italic;">; size</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">esi</span>                     <span style="color: #666666; font-style: italic;">; &amp;amp;memory</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">edi</span>                     <span style="color: #666666; font-style: italic;">; hFile</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">402040</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;_lread</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; zamknij oryginalny plik</span>
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #00007f;">edi</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #0000ff;">402038</span><span style="color: #009900; font-weight: bold;">&#93;</span> <span style="color: #666666; font-style: italic;">;_lclose</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; utworz nowy plik</span>
        <span style="color: #00007f; font-weight: bold;">sub</span>     <span style="color: #00007f;">esp</span><span style="color: #339933;">,</span><span style="color: #0000ff;">512</span>
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span><span style="color: #00007f;">esp</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; &quot;C:\x&quot;</span>
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">edx</span><span style="color: #339933;">,</span>785C3A43
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">eax</span><span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span><span style="color: #00007f;">edx</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;">ecx</span>
        <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">eax</span><span style="color: #339933;">+</span><span style="color: #0000ff;">4</span><span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span><span style="color: #00007f;">ecx</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; esi - ptr</span>
<span style="color: #666666; font-style: italic;">; ebx - size</span>
&nbsp;
        <span style="color: #00007f; font-weight: bold;">push</span>    <span style="color: #0000ff;">0</span>
        <span style="color: #00007f; font-weight: bold;">call</span>    ExitProcess</pre></div></div><p>Po wykonaniu skryptu, w pliku C:\x otrzymamy zrzut całego pliku (nie tylko overlaya).</p><h2>Odbudowa oryginalnego pliku wykonywalnego</h2><p>Posiadając zrzucony overlay (rozpoznamy jego bajty po sygnaturze FE F2 EE), należy go <em>dokleić</em> do odbudowanego loadera VFP. Sam loader po zabezpieczeniu i zrzuceniu wymaga odbudowy importów,  tutaj można trochę oszukać, wszystkie loadery VFP (danej wersji) są takie same, różnią się jedynie wersją językową, ikoną i zasobami z nazwą i numerem wersji aplikacji. Jeśli posiadacie środowisko Visual FoxPro 9, można stworzyć projekt w stylu Hello World, skompilować do pliku wykonywalnego, usunąć oryginalny overlay i wkleić nasz, a aplikacja będzie działała poprawnie (można potem w edytorze zasobów podmienić ikonę i wersję aplikacji).</p><h2>Wnioski</h2><p>Było trochę problemów z samą zabezpieczoną aplikacją i jej działaniem w OllyDbg z włączonym pluginem Phant0m (dużo restartów, nie dało się normalnie zamknąć aplikacji), jednak sama metoda jest dosyć szybka i uniwersalna, z późniejszych poszukiwań udało mi się jeszcze znaleźć doskonały artykuł prezentujący szereg innych zabezpieczeń stosowanych w aplikacjach VFP, polecam na koniec:</p><p>Security in FoxPro — <a href="http://www.foxpert.com/docs/security.en.htm">www.foxpert.com/docs/security.en.htm</a></p><p>PS. Pozdro dla wszystkich <em>burtoniarzy</em> <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/2010/03/29/hasp-i-visual-foxpro-9/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
