<?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>Icewall&#039;s blog</title>
	<atom:link href="http://www.icewall.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.icewall.pl</link>
	<description>IT Security</description>
	<lastBuildDate>Wed, 03 Feb 2010 11:09:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>VBox,Virtual PC,VMware i IDT Hooking</title>
		<link>http://www.icewall.pl/2009/10/27/vboxvirtual-pcvmware-i-idt-hooking/</link>
		<comments>http://www.icewall.pl/2009/10/27/vboxvirtual-pcvmware-i-idt-hooking/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 00:19:56 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Analiza]]></category>
		<category><![CDATA[idt]]></category>
		<category><![CDATA[idt hooking]]></category>
		<category><![CDATA[int 2e]]></category>
		<category><![CDATA[syscall]]></category>
		<category><![CDATA[sysenter]]></category>
		<category><![CDATA[vbox]]></category>
		<category><![CDATA[virtual pc crash]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.icewall.pl/?p=285</guid>
		<description><![CDATA[Będzie to dość stosunkowo lightowy post o “anomaliach”, które wystąpiły podczas moich testów z hookowaniem tablicy IDT pod wymienionymi w tytule post’a wirtualnymi maszynami. Dlaczego lightowy? Ponieważ żeby ustalić detale związane z sytuacjami, które później zaprezentuje, wymagało by to spooorego research’u odnośnie sposobu działania wewnętrznego mechanizmu poszczególnych wirtualnych maszyn (tak sądzę   ).
Także proponuje [...]]]></description>
			<content:encoded><![CDATA[<p>Będzie to dość stosunkowo lightowy post o <strong>“anomaliach”</strong>, które wystąpiły podczas moich testów z <strong>hookowaniem tablicy IDT</strong> pod wymienionymi w tytule post’a wirtualnymi maszynami. Dlaczego lightowy? Ponieważ żeby ustalić detale związane z sytuacjami, które później zaprezentuje, wymagało by to spooorego research’u odnośnie sposobu działania wewnętrznego mechanizmu poszczególnych wirtualnych maszyn (tak sądzę <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ).<br />
Także proponuje traktować niniejszy post jako ciekawostkę/(wektor do badań) niż jako rezultat głębszego researchu.</p>
<p>Cała historia zaczyna się od momentu kiedy chciałem przetestować najprostszy w życiu hook na procedure <strong>KiSystemService</strong> poprzez modyfikacje jej adresu w tablicy IDT. Oto fragment kodu zakładający hook:</p>
<pre class="brush: cpp">
void IDTHook()
{
IDTINFO idtInfo;
IDTENTRY *idt_entries;
IDTENTRY *int2e_entry;
DbgPrint(&quot;[+] IDTHook&quot;);
//pobranie IDTINFO
idtInfo = getIDTInfo();
//pobranie *tablicy IDT
idt_entries = getIDTEntries(&amp;amp;idtInfo);

//zapisanie oryginalnego IDTENTRY_2E
orgIDTEntry_2e = idt_entries[KiSystemService_INDEX];
//zapisanie DWORD&#039;a na potrzeby funkcji hookujacej
orgKiSystemService = MAKELONG(orgIDTEntry_2e.LowOffset,orgIDTEntry_2e.HiOffset);
__asm cli;//wylacz obsluge maskowalnych przerwan
idt_entries[KiSystemService_INDEX].LowOffset = (unsigned short)(&amp;amp;MySystemService);
idt_entries[KiSystemService_INDEX].HiOffset  = (unsigned short)(((unsigned long)(&amp;amp;MySystemService))&lt;&lt;16);
__asm lidt idtInfo;
__asm sti;//wlacz obsluge maskowalnych przerwan

}
</pre>
<p>‘kod MySystemService przepisany w calosci z „Subverting Windows Kernel”‘</p>
<pre class="brush: cpp">
__declspec(naked) MySystemService()
{

__asm{
pushad
pushfd
push fs
mov bx,0x30
mov fs,bx
push ds
push es
//do something

//Finish:
pop es
pop ds
pop fs
popfd
popad

jmp	orgKiSystemService;
}
}
</pre>
<pre class="brush: cpp">
/* __asm { sysenter VPC } */
</pre>
<p>Bez większego wachania i namysłow postanowiłem przetestować wynikowy driver pod <strong>Virtual PC(ver. 6.0.192.0 + additions)[OS: Windows XP SP3 Eng]</strong>, z którego zwykłem korzystać. Ku mojemu zaskoczeniu (bo liczyłem co najwyżej na <strong>BSOD’a</strong> <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) przy próbie założenia hook’a wystąpił wewnętrzny błąd vpc:<br />
<img src="http://www.icewall.pl/wp-content/uploads/2009/10/vpc_crash_error1.JPG" alt="vpc_crash_error" title="vpc_crash_error" width="827" height="452" class="alignnone size-full wp-image-297" /><br />
Hym&#8230;dziwna kwestia pomyślałem. Między czasie przypomniałem sobie, że przecież system może w ogóle nie korzystać z <strong>IDT</strong> jeżeli posiadany przez nas procesor dysponuje obsługą instrukcji <strong>sysenter/syscall</strong>. Rzut okiem pod vpc na wywolanie jednego z najbardziej popularnych <strong>native api:<br />
ZwOpenFile</strong>, rozwiało moje wątpliwości:<br />
<img src="http://www.icewall.pl/wp-content/uploads/2009/10/vpc_syscalls_handler.JPG" alt="vpc_syscalls_handler" title="vpc_syscalls_handler" width="779" height="144" class="alignnone size-full wp-image-287" /></p>
<p>Sam error „wywalony” przez vpc wskazywał na to, że to nic stricte związanego z samym systemem, a raczej z vm, a teraz dodatkowo wiemy, że sens zakładania hook’a na IDT pod vpc jest raczej nie wielki <strong>(przez co POWINIEN być nie szkodliwy)</strong> <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Postanowiłem wykonać test jeszcze raz po odinstalowaniu z systemu additions. Tu ponownie zaskoczenie, bo system zachował się tak jak powinien, czyli:<br />
udało się zainstalować hook’a<br />
oraz  żaden z breakpoint’ów(po dłuższej chwili), które założyłem na MySystemService nie został wywołany.<br />
Zobaczmy teraz jak się sprawy maja pod VirtualBoxem.</p>
<pre class="brush: cpp">
/* __asm { INT VirtualBox } */
</pre>
<p><strong>Ver. 3.0.8 r53138 + additions<br />
OS pozostaje bez zmian pod każdą maszynką.</strong><br />
Pierwszą kwestią, którą tutaj sprawdziłem jest sposób przejścia procesu z <strong>r3 do r0.</strong><br />
<img src="http://www.icewall.pl/wp-content/uploads/2009/10/vbox_syscalls_handler.JPG" alt="vbox_syscalls_handler" title="vbox_syscalls_handler" width="807" height="159" class="alignnone size-full wp-image-289" /></p>
<p>Wyśmienicie! Jak widać na załączonym obrazku pod VBoxem możemy śmiało testować hooki na IDT. Tak mi się bynajmniej wydawało…<br />
Ładuje driver,przekazuje odpowiedni <strong>IOCL_code</strong> do moje driver’a, który wywoła instalacje hook’a i … :<br />
<img src="http://www.icewall.pl/wp-content/uploads/2009/10/vbox_crash.JPG" alt="vbox_crash" title="vbox_crash" width="942" height="605" class="alignnone size-full wp-image-290" /><br />
cała akcja kończy się nie oczekiwanem crash’em VBox’a.<br />
Długo nie myśląc odinstalowalem dodatki z systemu i ponowiłem próbę.<br />
Udało się!Instalacja hook’a przebiegła bez problemowo, ale podczas paru kolejnych prób zdarzał mi się <strong>BSOD’nąć</strong> system z komunikatem, który jedno znacznie wskazywał, że nastąpiła próba dostępu do stronnicowanego obszaru pamięci.Windbg wskazywał następującą linijke kodu jako przyczyne zła:</p>
<pre class="brush: cpp">
idt_entries[KiSystemService_INDEX].LowOffset = (unsigned short)(&amp;amp;amp;MySystemService);
</pre>
<p>Eeee delikatnie dziwne,,,IDT w obszarze stronnicowanej pamięci o_0?<br />
Delikatnie zmodyfikowałem więc kod instalujący hook, po przez zmapowanie tablicy IDT pod NIEstronnicowany obszar pamieci. Kod prezentuje się teraz następująco:</p>
<pre class="brush: cpp">
void IDTHook()
{
IDTINFO idtInfo;
IDTENTRY *idt_entries;
IDTENTRY *int2e_entry;
DbgPrint(&quot;[+] IDTHook&quot;);
//pobranie IDTINFO
idtInfo = getIDTInfo();
//pobranie *tablicy IDT
idt_entries = getIDTEntries(&amp;amp;idtInfo);

//try to map it
idt_entries = mapMemory(idt_entries,idtInfo.IDTLimit);// NOWA LINIA
//update idtinfo struct
idtInfo.HiIDTbase  = HIWORD(idt_entries);
idtInfo.LowIDTbase = LOWORD(idt_entries);

//zapisanie oryginalnego IDTENTRY_2E
orgIDTEntry_2e = idt_entries[KiSystemService_INDEX];
//zapisanie DWORD&#039;a na potrzeby funkcji hookujacej
orgKiSystemService = MAKELONG(orgIDTEntry_2e.LowOffset,orgIDTEntry_2e.HiOffset);
__asm cli;//wylacz obsluge maskowalnych przerwan
idt_entries[KiSystemService_INDEX].LowOffset = (unsigned short)(&amp;amp;amp;MySystemService);
idt_entries[KiSystemService_INDEX].HiOffset  = (unsigned short)(((unsigned long)(&amp;amp;MySystemService))&amp;gt;&amp;gt;16);
__asm lidt idtInfo;
__asm sti;//wlacz obsluge maskowalnych przerwan

}
</pre>
<p>Ten prosty zabieg wyeliminował pojawianie się BSOD’ów.</p>
<pre class="brush: cpp">
/* __asm { VMware sysenter } */
</pre>
<p><strong><br />
VMware Workstation<br />
6.5.3 build-185404<br />
</strong><br />
Rzut oka na przejście <strong>r3 &#8211; > r0:</strong><br />
<img src="http://www.icewall.pl/wp-content/uploads/2009/10/vmware_syscalls_handler-1024x332.jpg" alt="vmware_syscalls_handler" title="vmware_syscalls_handler" width="1024" height="332" class="alignnone size-large wp-image-291" /><br />
Jak widać użyty jest tu sysenter. Nie będę się rozpisywał przy vmware i od razu powiem, że instalacja hooka przebiega tutaj bez problemowo czy to z zainstalowanymi dodatkami czy bez.</p>
<p>Na podsumowanie sporządziłem następującą tabelkę:<br />
<img src="http://www.icewall.pl/wp-content/uploads/2009/10/table.JPG" alt="table" title="table" width="827" height="180" class="alignnone size-full wp-image-292" /></p>
<p>Jak zwykle komentarze i wszelkiego rodzaju sugestie mile widziane <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/10/27/vboxvirtual-pcvmware-i-idt-hooking/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SecDay 2009 – Video</title>
		<link>http://www.icewall.pl/2009/10/14/secday-2009-%e2%80%93-video/</link>
		<comments>http://www.icewall.pl/2009/10/14/secday-2009-%e2%80%93-video/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 21:07:56 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Konferencje]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[RE]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[bugbear]]></category>
		<category><![CDATA[bugs in malware]]></category>
		<category><![CDATA[błedy w malwarze]]></category>
		<category><![CDATA[delephant]]></category>
		<category><![CDATA[GetCodec]]></category>
		<category><![CDATA[icewall]]></category>
		<category><![CDATA[secday]]></category>
		<category><![CDATA[secday 2009]]></category>
		<category><![CDATA[zbot]]></category>
		<category><![CDATA[zeus panel]]></category>

		<guid isPermaLink="false">http://www.icewall.pl/?p=276</guid>
		<description><![CDATA[Po paru tygodniach oczekiwań i kilku złożonych obietnicach, w końcu mogę przedstawić wam nagranie video z mojej prelekcji, która miała miejsce na konferencji SecDay 2009.
Wszelkiego rodzaju feedback związany ze sposobem prowadzenia prezentacji jest mile widziany;).
Miłego oglądania i ………… czekam na wasze komentarze;).

Bugs in Malware
]]></description>
			<content:encoded><![CDATA[<p>Po paru tygodniach oczekiwań i kilku złożonych obietnicach, w końcu mogę przedstawić wam nagranie video z mojej prelekcji, która miała miejsce na konferencji <a href="http://www.icewall.pl/2009/09/24/secday-2009/">SecDay 2009.</a><br />
Wszelkiego rodzaju feedback związany ze sposobem prowadzenia prezentacji jest mile widziany;).<br />
Miłego oglądania i ………… czekam na wasze komentarze;).</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7055140&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7055140&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/7055140">Bugs in Malware</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/10/14/secday-2009-%e2%80%93-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nowa odsłona</title>
		<link>http://www.icewall.pl/2009/10/01/nowa-odslona/</link>
		<comments>http://www.icewall.pl/2009/10/01/nowa-odslona/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 17:46:28 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[icewall]]></category>

		<guid isPermaLink="false">http://www.icewall.pl/2009/10/01/nowa-odslona/</guid>
		<description><![CDATA[Witam wszystkich w nowej odsłonie mojego bloga!
Z jakich powodów przeniosłem blog na nowy server? Powodów jest kilka, a główny jest to, że posiadanie pełnego dostępu do plików na serwerze daje mi większe możliwości:
- darmowa instalacja dodatkowych pluginów do wordpress&#8217;u
napewno tutaj  odczuwalnym dyskomfortem był brak pluginu do wyświetlania fragmentów kodu.

#include &#60;iostream&#62;
int main()
{
  std::cout&#60;&#60;&#34;Hello world!&#34;;
  [...]]]></description>
			<content:encoded><![CDATA[<p>Witam wszystkich w nowej odsłonie mojego bloga!</p>
<p>Z jakich powodów przeniosłem blog na nowy server? Powodów jest kilka, a główny jest to, że posiadanie pełnego dostępu do plików na serwerze daje mi większe możliwości:<br />
- darmowa instalacja dodatkowych pluginów do wordpress&#8217;u<br />
napewno tutaj  odczuwalnym dyskomfortem był brak pluginu do wyświetlania fragmentów kodu.</p>
<pre class="brush: cpp">
#include &lt;iostream&gt;
int main()
{
  std::cout&lt;&lt;&quot;Hello world!&quot;;
  return 0;
}
</pre>
<p><em>Nie mogłem się powstrzymać:P</em></p>
<p>Jeżeli chodzi o jakieś gruntowne zmiany to takowych raczej nie przewiduje,  jedyną kwestią która być może niektórym osobą (a pewnej grupie ludzie zdecydowanie) przypadnie do gustu jest publikowanie postów, które uznam za ciekawe lub tych które będą cieszyły się dużą popularnością , w dwóch wersjach językowych: <strong>Polskiej jak i Angielskiej.</strong><br />
Chyba tyle jężeli chodzi o zmiany i &#8220;innowacje&#8221; <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
     <strong>BTW</strong>:Rozpoczyna się delikatnie burzliwy okres: &#8220;Rozpoczęcie roku akademickiego&#8221; , także będe musiał poświęcić trochę czasu na dogranie pracy z uczelnią i paroma dodatkowymi zajęciami, ale oczywiście jestem przekonany o tym, że znajdzie się również czas na wrzucenie nowego posta <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
W najbliższym czasie myślę, że można się spodziewać nagrań <strong>video z SecDay2009</strong> jaki i kolejnego postu z cyklu<br />
<strong>&#8220;Algorytmy (de)szyfrowania wykorzystywane przez twórców trojanów bankowych&#8221;.</strong><br />
Stay tuned <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/10/01/nowa-odslona/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SecDay 2009</title>
		<link>http://www.icewall.pl/2009/09/24/secday-2009/</link>
		<comments>http://www.icewall.pl/2009/09/24/secday-2009/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 14:23:18 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Analiza]]></category>
		<category><![CDATA[Konferencje]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[RE]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[bugbear]]></category>
		<category><![CDATA[bugs in malware]]></category>
		<category><![CDATA[błędy w złośliwym oprogramowaniu]]></category>
		<category><![CDATA[GetCodec]]></category>
		<category><![CDATA[lfi zeus]]></category>
		<category><![CDATA[rfi zeus]]></category>
		<category><![CDATA[secday]]></category>
		<category><![CDATA[secday 2009]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=262</guid>
		<description><![CDATA[Wczoraj, to jest 22.09.2009r zakończyła się dwu dniowa konferencja SecDay 2009 organizowana przez Lukasz Błażys’a, która odbyła się we Wrocławiu, a jak nie trudno się domyślić była ona związana z ogólno pojętym bezpieczeństwem w IT. Z wielką przyjemnością muszę przyznać, że pierwszy raz  ….UWAGA…….UWAGA  miałem okazję:
brać czynny udział == być prelegentem!
na tego typu [...]]]></description>
			<content:encoded><![CDATA[<p>Wczoraj, to jest <strong>22.09.2009r</strong> zakończyła się dwu dniowa konferencja <a href="http://secday.pl/">SecDay 2009</a> organizowana przez <a href="http://sekme.pl/">Lukasz Błażys’a</a>, która odbyła się we Wrocławiu, a jak nie trudno się domyślić była ona związana z ogólno pojętym bezpieczeństwem w IT. Z wielką przyjemnością muszę przyznać, że pierwszy raz  <strong>….UWAGA…….UWAGA</strong>  miałem okazję:<br />
<font color="green">brać czynny udział == być prelegentem!</font><br />
na tego typu event’e.<br />
<a href="http://icewall.files.wordpress.com/2009/09/lgim0042.jpg"><img src="http://icewall.files.wordpress.com/2009/09/lgim0042.jpg" alt="LGIM0042" title="LGIM0042" width="497" height="372" class="aligncenter size-full wp-image-265" /></a></p>
<p>Emocje były wielkie …… ale jak dokładnie było możecie przeczytać poniżej:<br />
Na wstępie powiem, że nie będę w żaden sposób komentował prezentacji <strong>Team’u HSPL</strong> w składzie (chronologicznie względem kolejności wystąpień):<br />
<font color="blue"><br />
Mateusz &#8220;j00ru&#8221; Jurczyk<br />
Adam &#8220;pi3&#8243; Zabrocki<br />
Gynvael Coldwind<br />
</font><br />
Żeby nikt nie zarzucał mi, że cukruje kolegą z pracy to tylko powiem, że każda prezentacja była petardą i warto na nie rzucić okiem <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ..Heheh.<br />
More details below…</p>
<p><font color="green">/* SecDay 2009 dzień pierwszy */</font><br />
Jako, że obecnie mieszkam we Wrocławiu to kwestie dotarcia na konferencje pominę ponieważ nie było w niej nic nadzwyczajnego(15min taxi)….taaa to nie to samo co 5h spędzonych w pociągu w drodze na confidence <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Konferencje  rozpoczął :<br />
<font color="orange">Dariusz Puchalak</font><br />
prezentując temat:<br />
<font color="red">„Bezpieczeństwo czy wydajność pracy?”</font><br />
Niestety muszę się przyznać, że delikatnie się spóźniłem na ten wykład(sorry Darek <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).<br />
Już parę razy miałem okazje słuchać prezentacji Darka i także tym razem była ona prowadzona na wysokim poziomie. Ze względu na porę dnia długo nie zastanawiałem się<br />
nad propozycją jaką Dariusz umieścił w swoim temacie i wybrałem …..NIEBEZPIECZEŃSTWO.:D.</p>
<p><font color="orange">Przemysław Świercz</font><br />
<font color="red">Bezpieczeństwo Bluetooth</font><br />
Na wstępie trzeba wspomnieć, że był to debiut Przemka co moim zdaniem po wysłuchaniu jego prelekcji jest jak najbardziej na plus. Temat myślę, że jak najbardziej na czasie, bo przecież bluetooth można spotkać teraz praktycznie w każdym telefonie komórkowym, większości nowych TV,itd. Prezentacja była mocno techniczna (a takie właśnie uwielbiam)  + zabawne anegdoty prowadzącego działające silnie na wyobraźnie <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
Jeżeli ktoś jest zainteresowany bezpieczeństwo Bluetooth to myślę, że warto prześledzić tą prezentacje.</p>
<p><font color="green">/* Przerwa na kafkę i po niej …*/</font></p>
<p><font color="orange">Mateusz Jurczyk</font><br />
<font color="red">Bootkit vs Windows</font><br />
Jako, że j00ru prowadzi własny blog to zachęcam do przeczytania jego relacji z konferencji jak i pobrania materiałów -&gt; <a href="http://j00ru.vexillium.org/?lang=pl">j00ru’s blog</a></p>
<p><font color="green">/* Przerwa obiadowa */</font><br />
Mówiąc krótko i kolokwialnie „obiad był bez szału”, także nie mogę tutaj przyznać ani plusa ani minusa, ale na pewno wypadł o wiele lepiej niż tegoroczny podawany na confidence’e.<br />
Małego minusa dam za to, że dwa dni była ta sama potrawa:P,,,,gdzie kucharz „zostawił” fantazję!?</p>
<p>wracamy do prelekcji:</p>
<p><font color="orange">Krzysztof Maćkowiak</font><br />
<font color="red">„Zarządzanie ryzykiem podstawą profesjonalnego podejścia do bezpieczeństwa informacji i ciągłości działania.”</font><br />
Prezentacja jak najbardziej wykonana jak i poprowadzona w sposób profesjonalny, chociaż nie interesująca mnie zbytnio ze względu na obszar działań jakie poruszała. Dlatego też 3/4 jej czasu przegadałem z <a href="http://pentester.jogger.pl/">carstein</a>’em o niuansach związanych z pentestingiem <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p><font color="orange">Grzegorz Błoński</font><br />
<font color="red">Problem ulotu elektromagnetycznego.</font><br />
Bardzo interesująca prezentacja, mocno techniczna podczas, której mogliśmy zobaczyć parę narzędzi do monitorowania ulotu elektromagnetycznego stworzonych przez autora przy wykorzystaniu popularnych kart telewizyjnych <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Jeżeli byłeś/jesteś fanem serialu MacGyver masz zbędną kartę TV to nie czekaj tylko przeanalizuj powyższą prezentacje i rozpocznij własne badania!</p>
<p><font color="orange">Michał Melewski</font><br />
<a href="http://pentester.jogger.pl/2009/09/23/secday-2009-prezentacja/">Metodyka testów penetracjnych</a>.<br />
Moim zdaniem elegancko wykonana prezentacja, przejrzysta, przedstawiona na luzie, dająca do myślenia jeżeli chodzi o podejście do pentestów. Dzięki za źródło do refleksji <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><font color="orange">Leszek Miś</font><br />
<font color="red">Rootkity w systemie Linux.</font><br />
Niestety prelegent nie dotarł na konferencje, a szkoda bo z chęcią posłuchałbym jak wygląda kwestia związana z rootkit’ami na linuxach.</p>
<p><font color="orange">Janusz Żmudziński</font><br />
<font color="red">Monitorowanie bezpieczeństwa jako istotny element skutecznego zarządzania bezpieczeństwem informacji</font><br />
?</p>
<p><font color="green">/* SecDay 2009 dzień drugi */</font><br />
Jako, że miałem przyjemność rozpocząć dzień drugi to przejdę od razu do drugiej prezentacji, a o własnej wspomnę na końcu relacji.</p>
<p><font color="orange">Konrad Zuwała</font><br />
<font color="red">Solaris jako bezpieczna platforma serwerowa.</font><br />
Od strony technicznej prezentacja jak najbardziej poprowadzona bardzo dobrze. Przeznaczona raczej dla administratorów i w tym kręgu znalazła ona grono słuchaczy jak i wywołała burzliwą dyskusję.</p>
<p><font color="orange">Błażej Miga</font><br />
<font color="red">Zagrożenia w Internecie – DNS</font><br />
Muszę powiedzieć, że na opublikowanie tej prezentacji czekam ponieważ pojawiło się w niej parę smaczków, które z chęcią bym przetestował. Hehe no i pojawił się w niej kod python’owy z wykorzystaniem modułu scapy.. jak widać prelegent wie co dobre;).</p>
<p><font color="green">/* Dinner */</font></p>
<p><font color="orange">Jakub Bryl</font><br />
<font color="red">Testowanie planów ciągłości działania</font><br />
?</p>
<p><font color="orange">Adam Zabrocki</font><br />
<font color="red">Unusual bugs</font><br />
Adam obiecał wystartować z nową stroną/blogiem, a wtedy na pewno będziecie mieli okazje przejrzeć jego materiały <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><font color="orange">Gynvael Coldwind</font><br />
<font color="red">PHP Internals (not another RFI/SQLI)</font><br />
Relacja Gyn’a + jego materiały. -&gt; <a href="http://gynvael.coldwind.pl/?id=231">LINK</a></p>
<p><font color="orange">Robert Dąbrowski</font><br />
<font color="red">Monitoring bezpiecznej sieci &#8211; praktyczne wykorzystanie logów.</font><br />
Przepraszam, ale prezentacje komercyjnych produktów mnie nie interesują. Tu chodzi o research w dobrym klimacie tzw „piwnicznym klimacie”:D!</p>
<p>I tak kończy się lista prelegentów wraz ich tematami, których miałem przyjemność w większości wysłuchać.</p>
<p>Jeżeli chodzi o mój temat to brzmi on następująco:<br />
<font color="orange">Bugs in malware</font><br />
Moim główny zamiarem było uświadomienie słuchaczy o tym, że w wieluuuuu przypadkach tworzony malware NIE jest doskonały, bardzo często tworzą go ludzie, którzy nie mają nawet średnich umiejętności programistycznych, a  gruntowne testowanie swojego tworu jest dla nich abstrakcją. Często zdarza mi się spoglądając w kod malware’u pomyśleć o wyrażeniu : <strong>tragizm połączony z idiotyzmem</strong>.  Czy taki obraz złośliwego oprogramowania przedstawiany jest w prasie i mediach? NIE. Oczywiście głównymi hasłami jakie pojawiają się są następujące:<br />
<strong>„nowy błyskawicznie rozprzestrzeniający się worm”<br />
„bardzo trudny do usunięcia trojan”<br />
„trudno wykrywalny wirus”<br />
„maszynka do wykradania poufnych danych”<br />
itp.</strong></p>
<p>Taki obraz, będący totalną generalizacją na temat malware’u, który rzekomo jest absolutnie genialny, trudny do usunięcia, napisany przez pr0 cod3r0w miałem na zamiarze usunąć z mapy rzeczywistości słuchaczy, a przynajmniej wzbogacić ją o informacje, które pokazują „troszeczke” inny obraz tych „złośliwych” aplikacji <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Czy mi się udało ?;]. Mam taką nadzieję;).</p>
<p>Jeżeli chodzi o moje materiały to możecie je pobrać stąd:<br />
(Pliki sa oczywiscie w formacie ZIP.Przepraszam za utrudnienia w pobieraniu, ale takie są uroki korzystania z wordpress&#8217;a.)<br />
Prezentacja   -&gt; <a href="http://icewall.files.wordpress.com/2009/09/prezentacja_icewall_secday_2009.jpg">prezentacja_Icewall_SecDay_2009.zip</a>(ODP&amp;PDF)<br />
Pełna paczka(prezentacja + filmiki) -&gt; <a href="http://hotfile.com/dl/13380514/1871a1c/Icewall_SecDay_2009.zip.html">Icewall_SecDay_2009.zip</a></p>
<p><font color="yellow">W kwestii wyjaśnienia: Jeden z filmików zbudził delikatne kontrowersje dlatego też został odpowiednio ocenzurowany.</font></p>
<p>Hiperlinki w <strong>ODP</strong> jak i w <strong>PDF’e </strong>są ustawione w sposób relatywny, także można na nie klikać dowoli jeżeli zachowacie następująco strukturę katalogów:</p>
<p><strong>Delephant<br />
GetCodec<br />
Zeus<br />
prezentacja.odp<br />
prezentacja.pdf</strong></p>
<p><font color="red"><br />
PS: Możliwe, że nawet do końca tygodnia pojawi się photo jaki i video relacja z konferencji dla której myśle stworze osobny post. Na video relacji będziecie mogli obejrzeć wszystkie prelekcje ludzi zarówno z HSPL jak i Vexillium. Także bądźcie czujni;),będzie co oglądać.</font></p>
<p>Pozdrawiam i zapraszam na kolejną edycje SecDay już we wrzesniu, bo warto;).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/09/24/secday-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Algorytmy (de)szyfrowania wykorzystywane przez twórców trojanów bankowych – PART II</title>
		<link>http://www.icewall.pl/2009/08/29/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych-%e2%80%93-part-ii/</link>
		<comments>http://www.icewall.pl/2009/08/29/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych-%e2%80%93-part-ii/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 13:17:02 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Analiza]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[RE]]></category>
		<category><![CDATA[decryption]]></category>
		<category><![CDATA[deszyfrowanie]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[szyfrowanie]]></category>
		<category><![CDATA[trojan]]></category>
		<category><![CDATA[trojan bankowy]]></category>
		<category><![CDATA[trojan delphi]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=250</guid>
		<description><![CDATA[Tak jak wspominałem w poprzednim poście niniejszy będzie o sposobach (de)szyfrowania stosowanych w pewnej rodzinie trojanów bankowych pisanych w delphi.
Oczywiście tradycyjnie zaczniemy od przedstawienia naszego bohatera:
[=]Dane[=]

Antivirus	Version	Last Update	Result
a-squared	4.5.0.24	2009.08.28	Trojan-Spy.Win32.Bancos!IK
AhnLab-V3	5.0.0.2	2009.08.28	-
AntiVir	7.9.1.7	2009.08.28	TR/Spy.Banker.DS.5102592
Antiy-AVL	2.0.3.7	2009.08.24	-
Authentium	5.1.2.4	2009.08.28	-
Avast	4.8.1335.0	2009.08.28	Win32:Spyware-gen
AVG	8.5.0.406	2009.08.28	PSW.Banker5.IQR
BitDefender	7.2	2009.08.28	DeepScan:Generic.Banker.OT.4CC5D1C8
CAT-QuickHeal	10.00	2009.08.28	-
ClamAV	0.94.1	2009.08.28	Trojan.Agent-119128
Comodo	2125	2009.08.28	-
DrWeb	5.0.0.12182	2009.08.28	Trojan.PWS.Banker.based
eSafe	7.0.17.0	2009.08.27	-
eTrust-Vet	31.6.6706	2009.08.28	-
F-Prot	4.5.1.85	2009.08.27	-
F-Secure	8.0.14470.0	2009.08.28	-
Fortinet	3.120.0.0	2009.08.28	W32/Banker.B!tr.pws
GData	19	2009.08.28	DeepScan:Generic.Banker.OT.4CC5D1C8
Ikarus	T3.1.1.68.0	2009.08.28	Trojan-Spy.Win32.Bancos
Jiangmin	11.0.800	2009.08.28	-
K7AntiVirus	7.10.830	2009.08.28	-
Kaspersky	7.0.0.125	2009.08.28	-
McAfee	5723	2009.08.28	PWS-Banker.gen.b
McAfee+Artemis	5723	2009.08.28	Artemis!504F1C591479
McAfee-GW-Edition	6.8.5	2009.08.28	Trojan.Spy.Banker.DS.5102592
Microsoft	1.5005	2009.08.28	TrojanSpy:Win32/Bancos.gen!C
NOD32	4378	2009.08.28	probably a variant of Win32/Spy.Banker.QEO
Norman		2009.08.28	W32/Banker.EKFF
nProtect	2009.1.8.0	2009.08.28	-
Panda	10.0.2.2	2009.08.28	Trj/CI.A
PCTools	4.4.2.0	2009.08.28	-
Prevx	3.0	2009.08.28	-
Rising	21.44.40.00	2009.08.28	Trojan.PSW.Win32.Banker.dnl
Sophos	4.45.0	2009.08.28	Mal/Generic-A
Sunbelt	3.2.1858.2	2009.08.28	-
Symantec	1.4.4.12	2009.08.28	Infostealer.Bancos
TheHacker	6.3.4.3.389	2009.08.27	-
TrendMicro	8.950.0.1094	2009.08.28	-
VBA32	3.12.10.10	2009.08.28	-
ViRobot	2009.8.28.1907	2009.08.28	-
VirusBuster	4.6.5.0	2009.08.28	TrojanSpy.Banker.CDVF
Additional information
File size: 5102592 bytes
MD5   : 504f1c5914799e5122c69620c0b892e2
SHA1  : 32980745998151bda4a9e3bab767201ebc52fc0a
SHA256: 54d974192dd53aba186d56803087224ff8f8b0aba9687604332891842bb5ef58

[=]Prolog[=]
Tak jak pewnie udało wam się zauważyć w poprzednim poście malware ten posiada [...]]]></description>
			<content:encoded><![CDATA[<p>Tak jak wspominałem w poprzednim poście niniejszy będzie o sposobach (de)szyfrowania stosowanych w pewnej rodzinie trojanów bankowych pisanych w delphi.</p>
<p>Oczywiście tradycyjnie zaczniemy od przedstawienia naszego bohatera:<br />
<font color="blue"><b>[=]Dane[=]</b></font></p>
<pre>
Antivirus	Version	Last Update	Result
a-squared	4.5.0.24	2009.08.28	Trojan-Spy.Win32.Bancos!IK
AhnLab-V3	5.0.0.2	2009.08.28	-
AntiVir	7.9.1.7	2009.08.28	TR/Spy.Banker.DS.5102592
Antiy-AVL	2.0.3.7	2009.08.24	-
Authentium	5.1.2.4	2009.08.28	-
Avast	4.8.1335.0	2009.08.28	Win32:Spyware-gen
AVG	8.5.0.406	2009.08.28	PSW.Banker5.IQR
BitDefender	7.2	2009.08.28	DeepScan:Generic.Banker.OT.4CC5D1C8
CAT-QuickHeal	10.00	2009.08.28	-
ClamAV	0.94.1	2009.08.28	Trojan.Agent-119128
Comodo	2125	2009.08.28	-
DrWeb	5.0.0.12182	2009.08.28	Trojan.PWS.Banker.based
eSafe	7.0.17.0	2009.08.27	-
eTrust-Vet	31.6.6706	2009.08.28	-
F-Prot	4.5.1.85	2009.08.27	-
F-Secure	8.0.14470.0	2009.08.28	-
Fortinet	3.120.0.0	2009.08.28	W32/Banker.B!tr.pws
GData	19	2009.08.28	DeepScan:Generic.Banker.OT.4CC5D1C8
Ikarus	T3.1.1.68.0	2009.08.28	Trojan-Spy.Win32.Bancos
Jiangmin	11.0.800	2009.08.28	-
K7AntiVirus	7.10.830	2009.08.28	-
Kaspersky	7.0.0.125	2009.08.28	-
McAfee	5723	2009.08.28	PWS-Banker.gen.b
McAfee+Artemis	5723	2009.08.28	Artemis!504F1C591479
McAfee-GW-Edition	6.8.5	2009.08.28	Trojan.Spy.Banker.DS.5102592
Microsoft	1.5005	2009.08.28	TrojanSpy:Win32/Bancos.gen!C
NOD32	4378	2009.08.28	probably a variant of Win32/Spy.Banker.QEO
Norman		2009.08.28	W32/Banker.EKFF
nProtect	2009.1.8.0	2009.08.28	-
Panda	10.0.2.2	2009.08.28	Trj/CI.A
PCTools	4.4.2.0	2009.08.28	-
Prevx	3.0	2009.08.28	-
Rising	21.44.40.00	2009.08.28	Trojan.PSW.Win32.Banker.dnl
Sophos	4.45.0	2009.08.28	Mal/Generic-A
Sunbelt	3.2.1858.2	2009.08.28	-
Symantec	1.4.4.12	2009.08.28	Infostealer.Bancos
TheHacker	6.3.4.3.389	2009.08.27	-
TrendMicro	8.950.0.1094	2009.08.28	-
VBA32	3.12.10.10	2009.08.28	-
ViRobot	2009.8.28.1907	2009.08.28	-
VirusBuster	4.6.5.0	2009.08.28	TrojanSpy.Banker.CDVF
Additional information
File size: 5102592 bytes
MD5   : 504f1c5914799e5122c69620c0b892e2
SHA1  : 32980745998151bda4a9e3bab767201ebc52fc0a
SHA256: 54d974192dd53aba186d56803087224ff8f8b0aba9687604332891842bb5ef58
</pre>
<p><font color="blue"><b>[=]Prolog[=]</b></font><br />
Tak jak pewnie udało wam się zauważyć w poprzednim poście malware ten posiada np. zaszyfrowane ścieżki, do których zostaną wykonana jego kopie. Przykładowy zaszyfrowany ciąg wygląda tak:<br />
<strong>GpfSH6zZTMrbRdHp865kP21JPNHqQMvdSrn1R6mWLNDbSdDSJMLkTI19RcbZQM5oN51oRsToOMrXSrn9RcbZQM5iQNfXSbnNQMvaRtTpCp8kPNXb</strong></p>
<p>gdzie po deszyfrowaniu otrzymujemy łańcuch:<br />
<strong>C:\Documents and Settings\All Users\Menu Iniciar\Programas\Inicializar\Windows32.exe</strong></p>
<p>W jaki  sposób funkcjonuje ten algorytm ? Tego dowiemy się już za chwilę.<br />
Wcześniej jednak sprecyzuje  „elementy”, które w tym malware’e wymagają deszyfrowania:</p>
<p><strong>- ścieżki, do który kopiowany jest malware<br />
- tytuły okien IE(malware używa tytułów okien do rozpoznania czy user znajduje się obecnie na stronie,  dla której trojan ma przygotowany np. fałszywy panel logowania)<br />
- treść fałszywych komunikatów mówiących o tym, że np. Internet Explorer wykonał<br />
nieprawidłową operacje i zostanie zamknięty.</strong></p>
<p>w niektórych wersjach także:<br />
<strong>- login&amp;hasło do serwera ftp/mysql używanego jako drop host<br />
- adresy email na które mają zostać przesłane skradzione dane</strong></p>
<p>Warto tutaj wspomnieć o różnicy, która występuje w podejściu autorów trojana obecnego i tego z poprzedniego postu. Jak pamiętamy tam autor nie dość, że stosował różnego rodzaju klucze xor’ujące to jeszcze zmieniały się w nieznacznym stopniu same procedury szyfrowania. Tutaj spoglądając na wygląd ciągów reprezentujących zaszyfrowane dane:<br />
<a href="http://icewall.files.wordpress.com/2009/08/encrypted_strings.jpg"><img src="http://icewall.files.wordpress.com/2009/08/encrypted_strings.jpg" alt="encrypted_strings" title="encrypted_strings" width="497" height="266" class="aligncenter size-full wp-image-251" /></a></p>
<p>Można zakładać, że procedura deszyfrująca jest jedna, globalna. Po dokładnej analizie okazuje się, że faktycznie tak jest i nadszedł czas żeby przyjrzeć się jej bliżej.<br />
Oczywiście jej lokalizację można w prosty sposób ustalić po przez przejście do kawałka kodu, który odwołuje się do jednego z zaszyfrowanych ciągów:<br />
<a href="http://icewall.files.wordpress.com/2009/08/decryption_routine_call.jpg"><img src="http://icewall.files.wordpress.com/2009/08/decryption_routine_call.jpg" alt="decryption_routine_call" title="decryption_routine_call" width="497" height="182" class="aligncenter size-full wp-image-253" /></a><br />
<em>Wywołanie funkcji deszyfrującej. Oczywiście argumenty, są przekazywane zgodnie z konwencja __fastcall typową dla Borlanda.</em></p>
<p><font color="blue"><b>[=]Analiza[=]</b></font><br />
Procka deszyfrująca przedstawia się następująco:<br />
<a href="http://icewall.files.wordpress.com/2009/08/decryption_routine.jpg"><img src="http://icewall.files.wordpress.com/2009/08/decryption_routine.jpg" alt="decryption_routine" title="decryption_routine" width="497" height="236" class="aligncenter size-full wp-image-252" /></a><br />
gdzie:<br />
<strong>ESI  &#8211; długość zaszyfrowanego ciągu<br />
Local.1 – pointer na zaszyfrowany ciąg</strong><br />
Jak widać procka jest o wiele pokaźniejsza od tych, które mogliśmy obserwować w poprzednim malware’e.<br />
<font color="blue"><b>[=]Deszyfrowanie[=]</b></font><br />
Bez większe zastanawiania się tworzymy decryptor, który w pythonie przedstawia się następująco:</p>
<pre class="brush: python">
import sys
#Delephant decryption script 

ascii_table = &quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/&quot;

def decrypt(encrypted):
    decrypted = []
    local_4 = 0
    edi     = 0
    for index in range(0,len(encrypted)):
        pos = ascii_table.find(encrypted[index])
        if pos &lt; 0:
            return &quot;Encrypted string is in unproper format&quot;
        pos = pos + (local_4 &lt;&lt; 6)
        local_4 = pos
        edi = edi + 6
        if edi &lt; 8:
            continue
        edi = edi - 8
        local_4 = local_4 % ( 1 &lt;&lt; (edi &amp; 0xff ) )
        pos = ( pos &gt;&gt; (edi &amp; 0xff) ) &amp; 0x800000ff
        if pos &lt; 0:
            pos = ( (pos - 1) &amp; 0xffffff00 ) + 1
        decrypted.append( chr(pos) )
    return &quot;&quot;.join(decrypted)

if __name__ == &quot;__main__&quot;:
    if len(sys.argv) &lt; 2:
        print &quot;Usage: %s encrypted_string&quot; % sys.argv[0]
        sys.exit(0)
    print decrypt(sys.argv[1])
</pre>
<p>Rezultat deszyfrowania losowo wybranych stringów:<br />
<a href="http://icewall.files.wordpress.com/2009/08/result_of_decryption.jpg"><img src="http://icewall.files.wordpress.com/2009/08/result_of_decryption.jpg" alt="result_of_decryption" title="result_of_decryption" width="496" height="244" class="aligncenter size-full wp-image-254" /></a></p>
<p>Warto tutaj zauważyć jedną znacząco różnice:<br />
<font color="gree"><b><br />
MOV EAX,[Local.5] ; kolejny znak z zaszyfrowanego ciagu<br />
MOV EDX,zloavgtr.00480BAC ;     ASCI „0123456789ABCD….”<br />
CALL StrPos<br />
MOV EBX,EAX<br />
DEC EBX<br />
</b></font><br />
i odpowiednik tego kodu w Python’e:<br />
<font color="gree"><b><br />
pos = ascii_table.find(encrypted[index])<br />
</b></font><br />
Trzeba być tutaj świadomym jednej rzeczy, a mianowicie tego ze <strong>StrPos Borlandowy</strong> indexuje pozycje znaków w stringu od 1 a <strong>find Pythonowy od 0</strong>. Dlatego też w kodzie pythona nie pojawia się dekrementacja wartości pozycji znaku do odszyfrowania.</p>
<p><font color="blue"><b>[=]Epilog[=]</b></font><br />
Jak można zauważyć, procedura deszyfrująca tego trojana jest objętościowa ok.3 razy większa od tych, z którymi mieliśmy do czynienie w poprzednim sampel’u co jednak nie przeszkodziło nam w stworzeniu python’ego decryptor’a.<br />
Jeżeli chodzi o algorytmy wykorzystywanego przez ten malware’u do „szyfrowania„ skradzionych danych to są to przeważnie:<br />
<strong>- URL Encode<br />
- Base64</strong><br />
ze względu na powszechność nie zostały one tutaj opisane.</p>
<p>Na sam koniec dla ciekawych, chcących przeanalizować krok po kroku działanie decryptor’a pare stringów do deszyfracji:<br />
<strong><br />
&#8220;IKLuS6nlScK&#8221;<br />
&#8220;IMvcRt9jOUVZRo1fRcDlSd9bT64X851oPMLkOsXX86DlSd9bT65jPMvqPI1l86DXRN1l84HfPsbqRou&#8221;<br />
&#8220;H65aRtCWIMvZRt9oPNHlSomWK6zo86PXTczo86HfPsbqPI1kRtPXRMLkT6Kk&#8221;<br />
&#8220;K6zo86PXTczoB21fRcPlScrb86baPMvqQMPfOs7dusyi865dPMvZQM4i86DlRdHX&#8221;<br />
&#8220;Kt8eOIak84PXTczo86HfPsbqON8WOI1pTM4WSsLkQ64WP64WT65YPMnX86DlSd9bT65jPMvqPIu&#8221;<br />
&#8220;LNDruN9fRoukBYukBYukBYukBZe&#8221;<br />
&#8220;K6zo86rlT6bsRo1aPI1JPMTrSc5kvs4WSsLr84D1KbJ3Jo14HI1JHKTLKa5Enq4WP6LsPI1pPN8WKcLZOMHXStHoOMHlB21JRsnfOsbqOMrlSo1nTMKWLczZwY18OM9fR6bqPI1pPNKWGs5oTEDl86Hb85DbPtLoOMxdOI1ERtPXRMLkT6Kk&#8221;<br />
&#8220;Gc5kOsyWINHX+Y0j84PbQNHl851XSc4WLczZwY0WBI1DQMDoRtDlPdGWIMvqPN9kPNGWHNXmR6zoPN8&#8243;<br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/08/29/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych-%e2%80%93-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reversowanie trojanów pisanych w Delphi/BCB.</title>
		<link>http://www.icewall.pl/2009/08/07/reversowanie-trojanow-pisanych-w-delphibcb/</link>
		<comments>http://www.icewall.pl/2009/08/07/reversowanie-trojanow-pisanych-w-delphibcb/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 01:10:07 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Analiza]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[RE]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DeDe]]></category>
		<category><![CDATA[delphi banker]]></category>
		<category><![CDATA[delphi trojan]]></category>
		<category><![CDATA[DFM Editor]]></category>
		<category><![CDATA[Fast IDB2Sig]]></category>
		<category><![CDATA[GoDup]]></category>
		<category><![CDATA[map file]]></category>
		<category><![CDATA[resource editor]]></category>
		<category><![CDATA[reversing bcb]]></category>
		<category><![CDATA[reversing delphi]]></category>
		<category><![CDATA[trojan bankowy]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=220</guid>
		<description><![CDATA[Jako, że kolejny post  z cyklu „Algorytmy (de)szyfrowania wykorzystywane przez twórców trojanów bankowych” , który mam w planach napisać, będzie o algorytmach szyfrowania wykorzystanych w trojanach napisanych w Delphi   (tak tak, poczekajcie jeszcze pare lat i będzie wysyp trojanów pisanych w .NET… using System.malwares.bankers; i go go go !!!  ) , [...]]]></description>
			<content:encoded><![CDATA[<p>Jako, że kolejny post  z cyklu <a href="http://icewall.wordpress.com/2009/07/23/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych/">„Algorytmy (de)szyfrowania wykorzystywane przez twórców trojanów bankowych”</a> , który mam w planach napisać, będzie o algorytmach szyfrowania wykorzystanych w trojanach napisanych w <strong>Delphi <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  (tak tak, poczekajcie jeszcze pare lat i będzie wysyp trojanów pisanych w .NET… using System.malwares.bankers; i go go go !!! <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</strong> , to postanowiłem wcześniej napisać co nie co o moim ogólnym podejściu do trojanów pisanych w tym właśnie języku oraz narzędzi ułatwiających ich analizę.</p>
<p>Nasz dzisiejszy „bohater” przedstawia się następująco:<br />
<font color="blue"><b>[=]Dane[=]</b></font></p>
<pre>
Antywirus	Wersja	Ostatnia aktualizacja	Wynik
a-squared	4.5.0.24	2009.08.02	Trojan-Banker.Win32.Banker!IK
AhnLab-V3	5.0.0.2	2009.08.01	Win-Trojan/Banker.7315456.D
AntiVir	7.9.0.238	2009.08.02	TR/Agent.GGO.1
Antiy-AVL	2.0.3.7	2009.07.31	-
Authentium	5.1.2.4	2009.08.02	W32/Trojan.BZCX
Avast	4.8.1335.0	2009.08.01	Win32:Banker-CXH
AVG	8.5.0.406	2009.08.02	PSW.Banker4.AJJ
BitDefender	7.2	2009.08.02	Generic.Spy.Bank.ZWQ.720719B9
CAT-QuickHeal	10.00	2009.07.30	-
ClamAV	0.94.1	2009.08.02	-
Comodo	1840	2009.08.02	TrojWare.Win32.Spy.Banker.OHT
DrWeb	5.0.0.12182	2009.08.02	Trojan.PWS.Banker.12795
eSafe	7.0.17.0	2009.07.30	Win32.Banker.cwo
eTrust-Vet	31.6.6650	2009.08.01	-
F-Prot	4.4.4.56	2009.08.02	W32/Trojan.BZCX
F-Secure	8.0.14470.0	2009.08.01	Trojan-Banker.Win32.Banker.fgw
Fortinet	3.120.0.0	2009.08.02	Spy/Banker
GData	19	2009.08.02	Generic.Spy.Bank.ZWQ.720719B9
Ikarus	T3.1.1.64.0	2009.08.02	Trojan-Banker.Win32.Banker
Jiangmin	11.0.800	2009.08.02	-
K7AntiVirus	7.10.808	2009.08.01	-
Kaspersky	7.0.0.125	2009.08.02	Trojan-Banker.Win32.Banker.fgw
McAfee	5695	2009.08.01	PWS-Banker.gen.cb
McAfee+Artemis	5695	2009.08.01	PWS-Banker.gen.cb
McAfee-GW-Edition	6.8.5	2009.08.02	Heuristic.BehavesLike.Win32.Spyware.K
Microsoft	1.4903	2009.08.02	TrojanSpy:Win32/Banker.USW
NOD32	4299	2009.08.02	Win32/Spy.Banker.OHJ
Norman	6.01.09	2009.07.31	W32/Banker.BQZT
nProtect	2009.1.8.0	2009.08.02	-
Panda	10.0.0.14	2009.08.02	Trj/Banker.gen
PCTools	4.4.2.0	2009.08.02	TrojanSpy.Banker.ARXE
Rising	21.40.62.00	2009.08.02	Trojan.Spy.Win32.Banker.c
Sophos	4.44.0	2009.08.02	Mal/DelpBanc-A
Sunbelt	3.2.1858.2	2009.08.02	Bulk Trojan
Symantec	1.4.4.12	2009.08.02	Infostealer.Bancos
TheHacker	6.3.4.3.375	2009.08.01	Trojan/Spy.Banker.cwo
TrendMicro	8.950.0.1094	2009.07.31	-
VBA32	3.12.10.9	2009.08.02	Trojan-Spy.Win32.Banker.cwo
ViRobot	2009.7.31.1863	2009.07.31	-
VirusBuster	4.6.5.0	2009.08.02	TrojanSpy.Banker.ARXE

Dodatkowe informacje
File size: 7319552 bytes
MD5   : d9e6a8e34c8c6f33919c33889c23811c
SHA1  : 38bb2fbb82e419d044a2a9e9199eb948eb891679
SHA256: 9fe271dbe89dd60d072789f49197d217edf75d9ed5a46fc5e94e28c7522341d8
TrID  : File type identification65.9% (.EXE) InstallShield setup (43065/22/16)13.0% (.EXE) Win32 Executable Generic (8527/13/3)11.6% (.DLL) Win32 Dynamic Link Library (generic) (7583/30/2)3.1% (.EXE) Win16/32 Executable Delphi generic (2072/23)
3.0% (.EXE) Generic Win/DOS Executable (2002/3)
ssdeep: 98304:aVwdUDdAVtUSlUTE2PIEH4B4Yo1qIZtDxHw7SbrKD:anAUkQPIYA49m
PEiD  : -
RDS   : NSRL Reference Data Set
</pre>
<p>Ja kto przeważnie bywa sygnaturki, są bardzo ooooooogggggólne. Jeżeli nawet, któraś z nich wskazuje na jakiś bardziej konkretny typ trojana to analiza techniczna bardzoooooo mija się z rzeczywistością, weźmy chociażby :<br />
<a href="http://www.symantec.com/security_response/writeup.jsp?docid=2003-071710-2826-99&amp;tabid=2">Symantec &#8211;  Infostealer.Bancos</a><br />
Morał jest taki, że ludki pracujące nad tego typu malware’em, a m.in. są to osoby z brazylijskich slumsów oraz innych biednych krajów A.Pd, (polecam tutaj wystąpienie<br />
<a href="http://video.hackinthebox.org/HITBSecConf2007-Malaysia-Day-1.torrent">Mikko Hypponen : Online Crime and Crime Online</a><br />
) nie robią sobie urlopów <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p><font color="blue"><b>[=]Prolog[=]</b></font><br />
Jeżeli kiedykolwiek zdarzyło Ci  się pisać w <strong>BCB/Delphi aplikację z GUI</strong> (bo na takich będziemy się skupiać) to możesz podejrzewać, a jeżeli już je reversowałeś to jesteś świadom, że narzut kodu wygenerowanego przez kompilator, który nie specjalnie nas interesuje jest dość spory. Dodatkowo mamy tu do czynienia z budową silnie obiektową <strong>(masa metod wirtualnych, delegaty [tak tak, borland dostarcza do tego celu specyfikatora „__closure”],wielodziedziczenie,itp.)</strong> przez co nasza analiza jest nieco <strong>„utrudniona”(interpretuj. utrudniać: wydłużać czas zabawy <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</strong>. Dlatego też, pokarze parę narzędzi oraz plugin’ów do nich, które przyspieszą samą analizę kodu jak i pomogą nam na znalezienie tych fragmentów, które zastały napisane przez autora trojana.</p>
<p><font color="blue"><b>[=]Analiza[=]</b></font><br />
Na początku naszej analizy zastanówmy się jakie akcje są przeważnie wykonywane podczas początkowego uruchomienia trojana. Z mojego doświadczenia wynika, że są to przeważnie następujące działania :<br />
<strong>- kopiowanie własnej instancji do katalogu systemowego<br />
- dodanie wpisu w rejestrze pozwalającego na auto uruchomienie trojana po reboot’e systemu<br />
- rejestracja zainfekowanej maszyny</strong></p>
<p>Ok, na początek tyle ustaleń nam wystarczy teraz pojawia się kwestia jak zlokalizować ten kod?<br />
Oczywiście niektórzy z was mogli pomyśle, od razu o rozwiązaniu w stylu ustawianiu BP na api, które w jakiś sposób są powiązane z wyżej wymienionymi akcjami. Jest to na pewno jakiś sposób, ale w przypadku aplikacji Borlandowskich warto użyć paru dodatkowych narzędzi poza disassambler’em i debugger’em żeby osiągnąć naprawdę interesujące rezultaty, ale o tym za chwilę. Obejrzyjmy wstępnie kod trojana:<br />
<a href="http://icewall.files.wordpress.com/2009/08/ida_wstepny_kod.jpg"><img src="http://icewall.files.wordpress.com/2009/08/ida_wstepny_kod.jpg" alt="ida_wstepny_kod" title="ida_wstepny_kod" width="497" height="310" class="aligncenter size-full wp-image-225" /></a><br />
Na chwilę obecną powyższy kod nie daje nam zbyt wiele informacji, widać <strong>„rzetelne sprawdzanie błędów” <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </strong>, tworzenie mutex’a i wywołanie paru metod na globalnym obiekcie <strong>off_500864</strong>.Pierwszą rzeczą, która z pewnością ułatwi nam dalsze analizowanie kodu są <strong>FLIRT</strong>’y(więcej informacji <a href="http://www.hex-rays.com/idapro/flirt.htm">TU</a>), które dostarcza nam IDA Pro w wersji komercyjnej. Trudno mi powiedzieć jak wygląda kwestia z wersją Free, niestety nie testowałem, także jeżeli ktoś z was będzie testował lub już to zrobił to dajcie znać <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Załadujmy odpowiednie FLIRT’y i rzućmy okiem na kod po tym zabiegu:<br />
<a href="http://icewall.files.wordpress.com/2009/08/flirts.jpg"><img src="http://icewall.files.wordpress.com/2009/08/flirts.jpg" alt="flirts" title="flirts" width="497" height="331" class="aligncenter size-full wp-image-226" /></a><br />
<a href="http://icewall.files.wordpress.com/2009/08/code_after_flirts_load.jpg"><img src="http://icewall.files.wordpress.com/2009/08/code_after_flirts_load.jpg" alt="code_after_flirts_load" title="code_after_flirts_load" width="497" height="206" class="aligncenter size-full wp-image-227" /></a><br />
Ahhh….na mój gust kod wygląda już znacznie lepiej <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
<strong>Jak widać IDA zastąpiła większość wywołań VCL’owych metod sygnaturami</strong> przez co kod jest znacznie czytelniejszy. Warto jeszcze tutaj zastosować tryb:<br />
<strong>Options-&gt;Demangled names<br />
I przy wyborze „Show demangled C++ names  as” zaznaczyć radio box „Names” czego rezultatem będzie poniższy wynik:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/code_after_flirts_load_comments_as_funname.jpg"><img src="http://icewall.files.wordpress.com/2009/08/code_after_flirts_load_comments_as_funname.jpg" alt="code_after_flirts_load_comments_as_FunName" title="code_after_flirts_load_comments_as_FunName" width="497" height="261" class="aligncenter size-full wp-image-228" /></a><br />
Wracając do kodu, osoby, które miały styczność czy to z <strong>BCB czy Delphi</strong> już na pewno rozpoznają ten fragment.Tak tak jest to standardowy kod, którego główny cel możemy określić na:<br />
<strong>- automatyczne tworzenie form używanych w projekcie<br />
oraz  obsługę komunikatów do nich napływających. </strong></p>
<p>Porównamy teraz kod z pod IDA’y z kodem jednej z moich aplikacji pisanych w <strong>RAD Studio 2007( dawne wersje nazywane były Borland C++ Builder):</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/code_from_rad.jpg"><img src="http://icewall.files.wordpress.com/2009/08/code_from_rad.jpg" alt="code_from_RAD" title="code_from_RAD" width="497" height="427" class="aligncenter size-full wp-image-229" /></a><br />
Tak jak widać kod jest uderzająco podobny, z czego morał taki, że dzięki IDA’e i sygnaturką zaoszczędziliśmy czas na analizowaniu standardowych VCL’owych metod.</p>
<p>Ok, wszystko fajnie, ale dalej nie mamy żadnych szczegółów związanych z naszymi wcześniejszymi ustaleniami. Po listingu z IDA’y możemy stwierdzić, że przy uruchomieniu trojana tworzone są automatycznie 3 formy, co wiąże się z wywołaniem pewnych zdarzeń. Zanim jednak omówimy sobie te zdarzenia przyjrzyjmy się wszystkim formą. Do tego celu oczywiście posłużymy się resource editor’em. Wyróżnie tutaj dwa:</p>
<p><strong>Komercyjny:</strong><br />
<strong>PE Explorer:</strong> genialny edytor zasobów i nie tylko. Umożliwia podgląd form znajdujących się w zasobach, komponentów znajdujących się na nich (Timerów,Buttonów,Obrazów,&#8230;) oraz ich właściwości.</p>
<p><strong>Darmowy:</strong><br />
<strong>DFM Editor:</strong> autorstwa MiTeC’ka jest darmowym prawie że odpowiednikiem PE Explorer’a, jeżeli chodzi o samo edytowanie zasobów. Jedynym mankamentem tego narzędzia jest brak możliwości podglądu obrazków znajdujących się na formach co w  przypadku identyfikacji przeznaczenia formy(np. dzięki umieszczonym bannerą czy imitacją form przeznaczonych do logowania, możemy określić jakich banków klienci są narażeni na atak przez danego trojana już po samym analizowaniu zasobów) jest bardzo użyteczne.<br />
W naszych badaniach identyfikacja przeznaczania danej formy pod kątem konkretnego banku jest zbyteczna ( a nawet z paru względów zabroniona <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ). Rzućmy okiem do zasobów:<br />
<a href="http://icewall.files.wordpress.com/2009/08/resource_preview.jpg"><img src="http://icewall.files.wordpress.com/2009/08/resource_preview.jpg" alt="resource_preview" title="resource_preview" width="467" height="696" class="aligncenter size-full wp-image-230" /></a><br />
<em>(Niektóre nazwy form były zbyt oczywistymi skrótami nazw banków przez co musiałem je troszeczkę ocenzurować.)</em></p>
<p>Jak widzimy trojan ten posiada sporą dawkę fałszywych form imitujących panel’e do logowania, wirtualne klawiatury, a skończywszy na oknach prezentujących imitacje <strong>crash’u IE czy nawet BSOD’a</strong> <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .<br />
Jest jednak parę form. :<br />
<strong>TAup &#8211; Application update?<br />
TCMD – Commands ?<br />
TFUNC – Functions ?</strong></p>
<p>które nie posiadają charakterystycznych Bitmap, lecz np. komponenty takie jak :<br />
<strong>TTimer<br />
TIdSMTP<br />
TIdMessage</strong></p>
<p>i  tym formą się przyjrzymy.<br />
Przeglądając komponenty znajdujące się na wyżej wymienionych formach szybko dochodzimy do wniosku, że tak naprawdę tylko <strong>TCMD</strong> jest formą, która może nas zainteresować, ponieważ:<br />
<strong>TAup – co prawda posiada komponent TTimer lecz nie ma on podczepionego event handler’a.  </strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/aup.jpg"><img src="http://icewall.files.wordpress.com/2009/08/aup.jpg" alt="aup" title="aup" width="497" height="327" class="aligncenter size-full wp-image-231" /></a><br />
Czyżby autor trojana doznał chwilowego przebłysku oraz chęci dodania kolejnej funkcjonalności po czym, po krótkie chwili porzucił tą idee, oraz wszelkie elementy z nią związane? Tego się nigdy nie dowiemy.</p>
<p><strong>TFUNC &#8211;  ta forma jest kompletnie pusta.<br />
Nie mogę tego inaczej skomentować niż jako wyjątkowego przejawu nonszalancji <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/func.jpg"><img src="http://icewall.files.wordpress.com/2009/08/func.jpg" alt="func" title="func" width="497" height="337" class="aligncenter size-full wp-image-232" /></a><br />
<strong>TCMD</strong><br />
Rzućmy okiem na najbardziej interesujące nas komponenty oraz ich własności:</p>
<pre>
object CMD: TCMD
  OnActivate = FormActivate
  OnCreate = FormCreate
  object TPrincipal: TTimer
    OnTimer = TPrincipalTimer
    Left = 8
  end
  object Tcook: TTimer
    Interval = 100
    OnTimer = TcookTimer
    Left = 40
  end
  object Tsite: TTimer
    Enabled = False
    Interval = 50
    OnTimer = TsiteTimer
    Left = 72
  end
  object Tjanela: TTimer ;
            nie wierzcie, że event handler jest ustawiany dynamicznie:P
	To raczej kolejny przejaw wrodzonej rozrzutności autora malware’u.
    Left = 104
  end
  object Taup: TTimer
    Enabled = False
    Interval = 720000
    OnTimer = TaupTimer
    Left = 136
  end
end
</pre>
<p><a href="http://icewall.files.wordpress.com/2009/08/resource_preview_tcmd.jpg"><img src="http://icewall.files.wordpress.com/2009/08/resource_preview_tcmd.jpg" alt="resource_preview_TCMD" title="resource_preview_TCMD" width="497" height="244" class="aligncenter size-full wp-image-233" /></a><br />
Jak widać forma ta posiada obsłużone dwa zdarzenia:</p>
<pre>
  OnActivate = FormActivate
  OnCreate   = FormCreate
</pre>
<p>Oba, są idealne do tego żeby podpiąć w ich obsłudze wszystkie 3 wymienione przeze mnie początkowe działania wykonywane przez większość trojanów.<br />
<strong>W pozostałych event handler’ach: </strong></p>
<pre>
TaupTimer
TsiteTimer
TcookTimer
TPrincipalTimer
</pre>
<p>związanych z eventem <strong>OnTimer</strong>:<br />
można się raczej spodziewać akcji takich jak:<br />
<strong>- aktualizacji trojana<br />
- wysyłania skradzionych danych do twórcy malware’u<br />
- monitorowania aktualnych procesów w systemie (i cykliczne ubijanie np. firewall’a)<br />
czy monitorowania odwiedzanych stron.</strong></p>
<p>Ok., mamy więc ustalone parę procek, których kod chcielibyśmy prześledzić. Nasuwa się pytanie:<br />
<strong>W jaki sposób uzyskać ich VirtualAddress?</strong><br />
Odpowiedzią jest:<br />
<strong>DeDe</strong><br />
Wszystkie informacje o DeDe jak i sam tool znajdziecie tutaj <a href="http://www.woodmann.com/collaborative/tools/index.php/DeDe">RCE Tools</a>.</p>
<p>Ładujemy naszego trojana w <strong>DeDe</strong> i po parunastu sekundach otrzymujemy taki o to rezultat:<br />
<a href="http://icewall.files.wordpress.com/2009/08/preview_into_dede1.jpg"><img src="http://icewall.files.wordpress.com/2009/08/preview_into_dede1.jpg" alt="_preview_into_dede" title="_preview_into_dede" width="497" height="586" class="aligncenter size-full wp-image-247" /></a><br />
Wspaniale! Jak możemy zaobserwować na powyższym screen’e DeDe dostarczyło nam informacji o <strong>zdeklarowanych przez użytkownika klasach (np. TCMD), Event handler’ach oraz miejscach ich lokalizacji!</strong><br />
Podsumowując uzyskane informacje mamy:</p>
<p><strong>OnTime:</strong></p>
<pre>
TaupTimer         = 004FD5C8
TsiteTimer          = 004FD0A0
TcookTimer 	      = 004FC834
TPrincipalTimer = 004FACE4
</pre>
<p><strong>oraz eventy związane bezpośrednio z formą:</strong></p>
<pre>
OnActivate = FormActivate =  004F7C44
OnCreate   = FormCreate    =  004FAC44
</pre>
<p>Oczywiście teraz nasza analiza staje się o wiele wiele prostsza, ponieważ bezpośrednio możemy zająć się interesującymi nas fragmentami kodu bez przedzierania się przez standardowe procedury.<br />
Dla potwierdzenia wcześniejszych założeń związanych z operacjami wykonywanymi na starcie przez trojana, rzućmy okien na kod wykonywany przy <strong>event’e OnCreate</strong>, czyli:<br />
<strong>FormCreate  @  004FAC44:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/oncreate.jpg"><img src="http://icewall.files.wordpress.com/2009/08/oncreate.jpg" alt="oncreate" title="oncreate" width="497" height="306" class="aligncenter size-full wp-image-235" /></a><br />
Mhmm sporo <strong>call’i, których IDA</strong> nie rozpoznała jako standardowych wywołań, więc najprawdopodobniej, są to pomocnicze metody napisane przez <strong>„programistę”</strong>. Zanim jednak przejdziemy do ich przeglądania, skorzystamy ponownie z dobrodziejstwa informacji dostarczanych przez <strong>DeDe</strong>, a  mowa tutaj dokładnie o <strong>pliku MAP</strong>.<br />
<a href="http://icewall.files.wordpress.com/2009/08/map_export.jpg"><img src="http://icewall.files.wordpress.com/2009/08/map_export.jpg" alt="map_export" title="map_export" width="497" height="269" class="aligncenter size-full wp-image-236" /></a><br />
Dzięki wyexportowaniu informacji takich jak:</p>
<pre>
- event handlers
- control references
</pre>
<p>do pliku <strong>map</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/map_file_preview.jpg"><img src="http://icewall.files.wordpress.com/2009/08/map_file_preview.jpg" alt="map_file_preview" title="map_file_preview" width="497" height="481" class="aligncenter size-full wp-image-237" /></a><br />
oraz  załadowaniu go do IDA’y: (polecam plugin <a href="http://www.woodmann.com/collaborative/tools/index.php/Fast_IDB2Sig_and_LoadMap_IDA_plugins">Fast IDB2Sig and LoadMap</a>) disassemblowany przez nas kod staje się ponownie jeszcze bardziej czytelny:<br />
<a href="http://icewall.files.wordpress.com/2009/08/oncreate_with_map.jpg"><img src="http://icewall.files.wordpress.com/2009/08/oncreate_with_map.jpg" alt="oncreate_with_map" title="oncreate_with_map" width="497" height="415" class="aligncenter size-full wp-image-239" /></a><br />
To co najbardziej rzuca się w oczy to fakt zamiany nazwy call’a i jego komentarza z :</p>
<pre>
loc_4FACBD:
mov     dl, 1
mov     eax, [ebx+318h] ;
call    unknown_libname_172 ; Delphi2006/BDS2006 Visual Component Librar
</pre>
<p>na</p>
<pre>
loc_4FACBD:
mov     dl, 1
mov     eax, [ebx+318h] ; Taup:N.A.
call    SetEnabled      ; ExtCtrls.TTimer.SetEnabled(TTimer;Boolean)
</pre>
<p>odrazu widać, że jest to fragment kodu aktywujący <strong>Timer : Taup</strong>.<br />
Ok, przyjrzyjmy się którejś z metod, której sposób działania jest nam jeszcze nie znany. Sprawdźmy jako pierwszą :<br />
<strong>sub_483BE8</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/add_to_registry.jpg"><img src="http://icewall.files.wordpress.com/2009/08/add_to_registry.jpg" alt="add_to_registry" title="add_to_registry" width="497" height="449" class="aligncenter size-full wp-image-240" /></a><br />
Ahh jak widać metoda ta wykonuje operacje na rejestrze, a po głębszej analizie okazuje się, że dodaje ona do klucza :<br />
<strong>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</strong><br />
wartość : <strong>Windows32</strong> zawierającą scieżkę do kopi trojana, czyli<br />
<strong>sub_483BE8 możemy zaklasyfikować jako :<br />
- dodanie wpisu w rejestrze pozwalającego na auto uruchomienie trojana po reboot’e systemu</strong></p>
<p>Super!!! jedno z założeń odnalezione. Idźmy dalej:<br />
<strong>sub_483D78:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/instation_copy.jpg"><img src="http://icewall.files.wordpress.com/2009/08/instation_copy.jpg" alt="instation_copy" title="instation_copy" width="497" height="230" class="aligncenter size-full wp-image-241" /></a></p>
<p>Jak widać w najwyżej położonym bloku widocznym na screen’e,  zostaje sprawdzona wersja systemu operacyjnego <strong>( Windows XP/NT/98 itd.)</strong> i na tej podstawie podejmowane, są działanie takie jak:<br />
<strong>deskrypcja stringu<br />
pobranie parametru wywołania aplikacji<br />
oraz wykonanie kopi pliku gdzie parametrami, są rezultaty operacji dwóch poprzednich funkcji</strong>…czy coś wam to mówi <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ?,,,,,a teraz<br />
<strong>CopyFile(ParamStr(),Decrypt()) <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ?</strong><br />
Tak jest! Oczywiście widać tutaj bloki instrukcji odpowiedzialnych za kopiowanie instancji trojana do charakterystycznych katalogów uzależnionych od wersji systemu Windows.<br />
<strong>sub_483D78<br />
- kopiowanie własnej instancji do katalogu systemowego </strong></p>
<p>Na tym poprzestaniemy nasze dalsze dochodzenie, bo nie dokładna analiza techniczna była naszym celem, a jedynie przekonanie się o tym jaki potencjał niesie zastosowanie :<br />
<strong>- sygnatur IDA’y<br />
- informacji o adresach metod/obiektów uzyskanych dzięki DeDe<br />
oraz pliku MAP</strong></p>
<p><strong>A co z naszym ulubionym Olkiem <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ?</strong> Czyż  nie było by miło prowadzić dynamicznej analizy kodu mając do dyspozycji <strong>możliwości Olka ,sygnaturki IDA’y i możliwość załadowania pliku MAP</strong> ? Oczywiście byłoby, a najlepsze w tym jest to, że da się to osiągnąć!</p>
<p><font color="blue"><b>[=]Olly’s time[=]</b></font><br />
Żeby osiągnąć powyższe możliwości wystarczy tak naprawdę jeden plugin:<br />
<a href="http://www.openrce.org/downloads/details/103/GoDup">GoDup</a></p>
<p><a href="http://icewall.files.wordpress.com/2009/08/godup_preview.jpg"><img src="http://icewall.files.wordpress.com/2009/08/godup_preview.jpg" alt="GoDup_preview" title="GoDup_preview" width="497" height="168" class="aligncenter size-full wp-image-242" /></a><br />
Żeby dostrzec różnice po zastosowaniu kolejnych zabiegów w wykonaniu tego pluginu, ustawmy się na kod <strong>handler’a TPricipalTimer @ 004FACE4:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/pure_olly_code.jpg"><img src="http://icewall.files.wordpress.com/2009/08/pure_olly_code.jpg" alt="pure_olly_code" title="pure_olly_code" width="497" height="290" class="aligncenter size-full wp-image-243" /></a><br />
<strong>po zastosowaniu sygnatur:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/sig_olly_code.jpg"><img src="http://icewall.files.wordpress.com/2009/08/sig_olly_code.jpg" alt="sig_olly_code" title="sig_olly_code" width="496" height="293" class="aligncenter size-full wp-image-244" /></a><br />
<strong>dorzućmy jeszcze informacje z pliku MAP:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/08/map_olly_code.jpg"><img src="http://icewall.files.wordpress.com/2009/08/map_olly_code.jpg" alt="map_olly_code" title="map_olly_code" width="497" height="292" class="aligncenter size-full wp-image-245" /></a></p>
<p>Czyż kod nie wygląda piękniej? <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/08/07/reversowanie-trojanow-pisanych-w-delphibcb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Algorytmy (de)szyfrowania wykorzystywane przez twórców trojanów bankowych.</title>
		<link>http://www.icewall.pl/2009/07/23/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych/</link>
		<comments>http://www.icewall.pl/2009/07/23/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 16:12:16 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Analiza]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[RE]]></category>
		<category><![CDATA[bho]]></category>
		<category><![CDATA[decryption]]></category>
		<category><![CDATA[deszyfrowanie]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[szyfrowanie]]></category>
		<category><![CDATA[trojan]]></category>
		<category><![CDATA[trojan bankowy]]></category>
		<category><![CDATA[xor]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=197</guid>
		<description><![CDATA[Post otwierający serie postów traktujących o sposobie szyfrowania i deszyfrowania czy to:
- plików konfiguracyjnych
- skradzionych danych
- ciągów znaków reprezentujących np. nazwę winapi 
wykorzystywanym przez twórców trojanów bankowych.
	Przedstawiając kolejne rodziny trojanów  postaram się je ułożyć w kolejności zaczynając od tych stosujących najmniej skomplikowany sposób szyfrowania do tych prezentujących coraz to bardziej złożony rodzaj algorytmów ( [...]]]></description>
			<content:encoded><![CDATA[<p>Post otwierający serie postów traktujących o sposobie szyfrowania i deszyfrowania czy to:<br />
<strong>- plików konfiguracyjnych<br />
- skradzionych danych<br />
- ciągów znaków reprezentujących np. nazwę winapi </strong><br />
wykorzystywanym przez twórców trojanów bankowych.<br />
	Przedstawiając kolejne rodziny trojanów  postaram się je ułożyć w kolejności zaczynając od tych stosujących najmniej skomplikowany sposób szyfrowania do tych prezentujących coraz to bardziej złożony rodzaj algorytmów ( o ile ,którykolwiek z nich można tak określić <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).<br />
	Pierwszy twór, któremu się przyjrzymy na <strong>VirusTotal</strong> przedstawia się w sposób następujący: <a href="http://www.virustotal.com/analisis/7050369f20acdb4587872ff1eccf43f3cccddf5dc03c7cd6a936a383a6863aac-1240741483">7050369f20acdb4587872ff1eccf43f3cccddf5dc03c7cd6a936a383a6863aac</a><br />
<font color="blue"><b>[=]Dane[=]</b></font></p>
<pre>
Antivirus	Version	Last Update	Result
AhnLab-V3	5.0.0.2	2009.04.26	Dropper/Agent.61440.AF
AntiVir	7.9.0.156	2009.04.25	TR/BHO.gcw
Authentium	5.1.2.4	2009.04.25	W32/Dropper.AHBB
Avast	4.8.1335.0	2009.04.25	Win32:Trojan-gen {Other}
AVG	8.5.0.287	2009.04.26	Dropper.Agent.LCJ
BitDefender	7.2	2009.04.26	Trojan.Generic.1252968
CAT-QuickHeal	10.00	2009.04.25	TrojanDropper.Agent.abjf
Comodo	1130	2009.04.25	TrojWare.Win32.Trojan.Agent.Gen
DrWeb	4.44.0.09170	2009.04.26	Trojan.Fakealert.3764
F-Prot	4.4.4.56	2009.04.25	W32/Dropper.AHBB
F-Secure	8.0.14470.0	2009.04.25	Trojan-Dropper.Win32.Agent.abjf
Fortinet	3.117.0.0	2009.04.26	PossibleThreat
GData	19	2009.04.26	Trojan.Generic.1252968
Ikarus	T3.1.1.49.0	2009.04.26	Trojan-Dropper.Agent
K7AntiVirus	7.10.716	2009.04.25	Trojan-Dropper.Win32.Agent.abjn
Kaspersky	7.0.0.125	2009.04.26	Trojan-Dropper.Win32.Agent.abjf
McAfee	5596	2009.04.25	Generic.dx
McAfee+Artemis	5596	2009.04.25	Generic.dx
McAfee-GW-Edition	6.7.6	2009.04.26	Trojan.BHO.gcw
Microsoft	1.4602	2009.04.26	Trojan:Win32/Relbma.A
NOD32	4035	2009.04.25	Win32/BHO.NDB
Norman		2009.04.24	W32/Agent.KPCN
nProtect	2009.1.8.0	2009.04.26	Trojan-Dropper/W32.Agent.61440.AW
Panda	10.0.0.14	2009.04.26	Generic Trojan
Prevx1	3.0	2009.04.26	High Risk Worm
Sophos	4.41.0	2009.04.26	Mal/Generic-A
Sunbelt	3.2.1858.2	2009.04.24	Trojan-Downloader.Win32.FraudLoad.vdxo
Symantec	1.4.4.12	2009.04.26	Trojan Horse
TheHacker	6.3.4.1.314	2009.04.26	Trojan/Dropper.Agent.abjf
TrendMicro	8.700.0.1004	2009.04.25	TROJ_AGENT.PRPR
VBA32	3.12.10.3	2009.04.25	Trojan-Dropper.Win32.Agent.abjf
VirusBuster	4.6.5.0	2009.04.25	Trojan.DR.Agent.IMHD

Additional information
File size: 61440 bytes
MD5   : fa1faad9a5db4f33173ee0b439e410f6
SHA1  : 5aea25ef14f52930ebc3520a1bf43b1b74573899
SHA256: 7050369f20acdb4587872ff1eccf43f3cccddf5dc03c7cd6a936a383a6863aac
PEiD  : Armadillo v1.71
</pre>
<p>Jak widać nazwy sygnatur, są bardzo ogólne co może wskazywać jedynie na wieeeeele mutacji tej rodziny pojawiających się w sieci.</p>
<p><font color="blue"><b>[=]Prolog[=]</b></font><br />
Tak jak wspominałem wcześniej będziemy się przyglądać trojanom stosującym coraz to bardziej wyrafinowane metody szyfrowania, więc zgodnie z nasza konwencją niniejszy<br />
sampel, a dokładnie metody stosowane przez niego nie powinny szokować( no chyba, że prostotą <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).<br />
Jakie elementy będą „wymagały” tu deszyfrowania:<br />
<strong>- plik konfiguracyjny<br />
- dll’ka, która jest instalowana w systemie jako <a href="http://en.wikipedia.org/wiki/Browser_Helper_Object">BHO</a><br />
- adres url wskazujący na drop host</strong></p>
<p>Napisałem „wymagały” ,ponieważ tak na dobrą sprawę akurat w tym konkretnym samplu np.autor postanowił ułatwić badaczowi sprawę i plik konfiguracyjny jest dropowany do filesystem’u już po deszyfrowaniu <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Inna kwestią jest to, że zamiast deszyfrować konkretne elementy, można zrobić dump’a całego procesu i np. w przypadku kiedy config jest deszyfrowany przez trojana tylko i wyłącznie na czas użycia, liczyć na to, że w dump’e znajdziemy go już w <strong>plain-text</strong>’e. Podejść do sprawy jest wiele, ale  w naszych badaniach zależeć nam będzie na tym, żeby poznać algorytm szyfrowania i w miarę możliwości  go odwrócić. Oczywiście zdarzają się przypadki gdzie:<br />
<strong>- nie zależy nam na poznawaniu algorytmu używanego przez trojana, bo jest to sampel należący do rodziny, która widzimy pierwszy raz i nie koniecznie będzie dla nas użyteczny z różnych względów. Wtedy oczywiście idziemy po najmniejsze lini oporu.<br />
- procedura deszyfrująca jest na tyle duża, a my na tyle leniwi ;], lub mało zainteresowani jej odwracaniem nie podejmujemy się pisania dekryptora od zera, ale np. wykorzystujemy prockę używaną przez trojana w charakterze shellcode’u (o tym więcej w dalszych postach).</strong></p>
<p><font color="blue"><b>[=] Analiza [=]</b></font><br />
Ok., pora na analizę naszego celu. Jako, że zależy nam tylko na procedurach (de)szyfrującyh to bezpośrednio będę wskazywał elementy oraz ich lokalizacje, które będą wymagały naszej interwencji. Ewentualne pokaże sposoby na znalezienie interesujących nas części kodu procedur.<br />
Tak na dobrą sprawę wszystkich istotne elementy, które postaramy się deszyfrować znajdują się w zasobach(<strong>‘Resource Directory’</strong>) pliku wykonywalnego. Może podejrzeć zasoby używając do tego celu np.<br />
<strong>CFF Explorer’a:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/07/resource_dirview.jpg"><img src="http://icewall.files.wordpress.com/2009/07/resource_dirview.jpg" alt="resource_dirView" title="resource_dirView" width="497" height="130" class="aligncenter size-full wp-image-201" /></a></p>
<p>Jak widać na powyższym screen’e dane w takiej postaci niczego nam nie mówią, ale w miarę wykonywanej przez nas deszyfracji wszystko stanie się bardziej klarowne. Deszyfrować zwartość zasobów zaczniemy od końca czyli od „WFP”.Zanim zaczniemy, wykonajmy dump zasobu do plik np.<br />
<strong>C:\config i sprawdźmy jego entropię:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/07/config_entropy.jpg"><img src="http://icewall.files.wordpress.com/2009/07/config_entropy.jpg" alt="config_entropy" title="config_entropy" width="497" height="268" class="aligncenter size-full wp-image-202" /></a></p>
<p>Już spieszę z wyjaśnieniami. Skala, którą widać po prawej reprezentuje poziom entropii w zakresie od <strong>0-8</strong>. Tak jak obiecywałem algorytm(y) szyfrowania użyty w tym trojanie będzie prosty o czym już teraz możemy się przekonać analizując wykres. Wartości funkcji, są dość nie regularne i rozciągają się <strong>w zakresie od 4,2 do 5,4.</strong> Od razu wspomnę, że ciekawszych procek szyfrujących można się spodziewać w przypadku entropii na poziomie 7-8.<br />
Dla porównania wykres entropii dump’a traffic’u zawierającego dll’ki, ściągane przez <strong>Mebroot’a:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/07/cc_response_entropy.jpg"><img src="http://icewall.files.wordpress.com/2009/07/cc_response_entropy.jpg" alt="C&amp;C_response_entropy" title="C&amp;C_response_entropy" width="443" height="275" class="aligncenter size-full wp-image-203" /></a></p>
<p><font color="blue"><b>[=]Analiza procedur szyfrujących[=]</b></font><br />
Jak już wiemy interesujące nas bloki danych znajdują się w resource directory. Teraz rodzi się pytanie w jaki sposób odnaleźć funkcje (de)szyfrującą/e? Każdy kto pisał aplikacje z użyciem winapi, korzystającą z katalogu zasobów skojarzył od razu  funkcje <strong>„FindResourceA/W”,</strong> która zwraca uchwyt do zasobu, którego nazwę podamy jako jeden z parametrów tego api.<br />
Więc nasuwają się tutaj dwa podejścia, a tak naprawdę jedno chyba najbardziej logiczne ;].<br />
<strong>- wyszukać wszystkie referencje do wywołań api FindResourceA/W<br />
albo odnaleźć wszystkie referencje do stringu „WFP” .</strong></p>
<p>Oczywiście  posłużymy się tutaj podejściem drugim które najprawdopodobniej od razu wskaże nam okolice kodu zawierającego procedurę deszyfrującą.<br />
<a href="http://icewall.files.wordpress.com/2009/07/wfp_resource.jpg"><img src="http://icewall.files.wordpress.com/2009/07/wfp_resource.jpg" alt="wfp_resource" title="wfp_resource" width="497" height="294" class="aligncenter size-full wp-image-204" /></a></p>
<p>Ohoo…wygląda na strzał w dziesiątkę, co prawda na razie nie widać jakichkolwiek manipulacji na uzyskanym pointerze do zasobu, zerknijmy jednak do procedury :<br />
<strong>CALL zly_troj.0040155F</strong><br />
mając na uwadze, że argumentami tej procki są:<br />
<strong>arg1 : pointer do zasobu „WFP”<br />
arg2 : rozmiar zasobu „WFP”</strong></p>
<p><a href="http://icewall.files.wordpress.com/2009/07/wfp_decryption_proc.jpg"><img src="http://icewall.files.wordpress.com/2009/07/wfp_decryption_proc.jpg" alt="wfp_decryption_proc" title="wfp_decryption_proc" width="497" height="272" class="aligncenter size-full wp-image-205" /></a><br />
Ahhh udało nam się zlokalizować prockę deszyfrującą!(zielona ramka).<br />
Jak widać okazała się nią prosta operacja xorująca każdy bajt z kluczem o wartości:<br />
<strong>0&#215;13.</strong></p>
<p><font color="blue"><b>[=]Deszyfrowanie[=]</b></font><br />
Oczywiście po tym co właśnie zobaczyliśmy stworzenie własnego deszyfratora, który „sksoruje”, każdy bajt dumpu zasobu, który wcześniej wykonaliśmy z kluczem <strong>0&#215;13</strong>.<br />
Świetnie się do tego nada <strong>JEDNOLINIJKOWY</strong> skrypt w python’e:</p>
<pre class="brush: python">&quot;&quot;.join(map(lambda x: chr(ord(x)^0x13),file(r&#039;C:\config&#039;,&#039;rb&#039;).read()))</pre>
<p>, a oto rezultat:<br />
<a href="http://icewall.files.wordpress.com/2009/07/decrypted_wfp.jpg"><img src="http://icewall.files.wordpress.com/2009/07/decrypted_wfp.jpg" alt="decrypted_wfp" title="decrypted_wfp" width="497" height="532" class="aligncenter size-full wp-image-206" /></a><br />
widać teraz, że rzeczywiście jest to plik konfiguracyjny zapisany w <strong>xml’u.</strong></p>
<p>Przejdźmy do następnego zasobu.<br />
<strong>„REM”</strong><br />
Rzućmy okiem na entropię:<br />
<a href="http://icewall.files.wordpress.com/2009/07/rem_entropy.jpg"><img src="http://icewall.files.wordpress.com/2009/07/rem_entropy.jpg" alt="rem_entropy" title="rem_entropy" width="497" height="266" class="aligncenter size-full wp-image-207" /></a><br />
Mhmm…tutaj już entropia wygląda ciekawiej, więc z pewnością możemy się spodziewać czegoś więcej niż tylko prostego xor’owania.<br />
Oczywiście, miejsce z istotną dla nas procką znajdujemy analogicznie do poprzedniego przypadku, a naszym oczom ukazuje się taki o to kod:<br />
<a href="http://icewall.files.wordpress.com/2009/07/rem_decryption_routine1.jpg"><img src="http://icewall.files.wordpress.com/2009/07/rem_decryption_routine1.jpg" alt="rem_decryption_routine" title="rem_decryption_routine" width="497" height="415" class="aligncenter size-full wp-image-209" /></a></p>
<p>Jak widzimy, w tym przypadku klucz xor’ujący nie jest stały. Jego wartość będzie zmieniała się cyklicznie po każdej iteracji, stąd też widoczne na wykresie entropii zmiany w kierunku wyższego zbioru wartości.<br />
Warto zwrócić uwagę na dwie istotne kwestie, które są wykonywane przed wejściem do pętli:</p>
<pre>
ESI – pointer na zaalokowaną pamięć, która będzie zawierać deszyfrowane dane.
004013CD  |.  C606 4D       MOV BYTE PTR DS:[ESI],4D
004013D3  |.  C646 01 5A    MOV BYTE PTR DS:[ESI+1],5A
</pre>
<p><strong>4D5A</strong> ,czy coś wam to mówi ?:D. Oczywiście jest to magic number, który zawsze powinien znaleźć się na początku pliku <strong>PE</strong>.<br />
Jak widać autor trojana dodaje magic number dopiero w momencie deszyfrowania. Takie podejście może świadczyć jedynie o tym iż autor chciał utrudnić wykrycie potencjalnie niebezpiecznego zasobu antywirusą czy innym skanerą. Drugą kwestią jest wyliczenie stałej która będzie wykorzystywana do indexowania zaszyfrowanych danych. Jej wyliczenie wygląda następująco:</p>
<pre>
004013D9  |.  895D FC       MOV [LOCAL.1],EBX ; EBX = encrypted_data
004013DC  |.  2975 FC       SUB [LOCAL.1],ESI     ; ESI   = decrypted_data
</pre>
<p>następnie w pętli mamy: (stale wartości odpowiednie do pierwszej iteracji)</p>
<pre>
EDI = 2 ;
004013E5  |.  8D0C37        |LEA ECX,DWORD PTR DS:[EDI+ESI]
…
004013EA  |.  8B45 FC       |MOV EAX,[LOCAL.1]
…
004013EF  |.  321408        |XOR DL,BYTE PTR DS:[EAX+ECX]
</pre>
<p>widzimy, że w momencie xor’owania :<br />
<strong>DL – cyklicznie zmieniający się klucz</strong><br />
<strong>a na co wskazuje BYTE PTR DS:[EAX+ECX]?</strong><br />
Prosty zapis matematyczny wszystko wyjaśnia:</p>
<pre>
LOCAL.1 = encrypted_data - decrypted_data
ECX = decrypted_data + 2
EAX = LOCAL.1
I w momencie xor’owania:
XOR DL,BYTE PTR DS:[LOCAL.1+decrypted_data+2]
podstawiajac za LOCAL.1
XOR DL,BYTE PTR DS:[ encrypted_data - decrypted_data
+decrypted_data+2]
,więc w ostateczności mamy
XOR DL,BYTE PTR DS:[ encrypted_data + 2]
</pre>
<p>ot taki troszeczkę nie intuicyjny sposób indexowania <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
Przykładowy skrypt deszyfrujący:</p>
<pre class="brush: python">
def decrypt(encrypted):
    decrypted = []
    edi = 2
    decrypted.append(&#039;M&#039;)# 0x4d
    decrypted.append(&#039;Z&#039;)# 0x5a

    while edi != len(encrypted):
        edx = edi % 0x78
        edx = (edx &lt;&lt; 1) &amp; 0xFF
        decrypted.append(chr( (ord(encrypted[edi])^edx)&amp;0xFF ))
        edi = edi + 1
    return &quot;&quot;.join(decrypted)

if __name__ == &quot;__main__&quot;:

    f = file(r&quot;c:\evil_dll&quot;,&#039;rb&#039;)
    fw = file(r&quot;c:\decrypted_evil_dll&quot;,&#039;wb&#039;)
    fw.write(decrypt(f.read()))
    f.close()
    fw.close()
</pre>
<p><strong>i rezultat deszyfrowania:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/07/decrypted_dll.jpg"><img src="http://icewall.files.wordpress.com/2009/07/decrypted_dll.jpg" alt="decrypted_dll" title="decrypted_dll" width="497" height="376" class="aligncenter size-full wp-image-210" /></a><br />
Jak widać na screen’e w katalogu zasobów <strong>„REM”</strong> ukrywała się dll’ka.</p>
<p>Ostatni już katalog zasobów <strong>„CAS”</strong>. Jako, że danych w każdej pozycji katalogu <strong>CAS</strong> jest niewiele, trudno tutaj mówić/prezentować wykres rozkładu entropii. Przejdziemy więc od razu do sposobu ich deszyfrowania. Co prawda dane z tego zasobu, są ekstraktowane do systemu , (a dokładnie do rejestru )lecz w formie nie zmienionej. Dopiero dll’ka , która wcześniej mieliśmy przyjemność deszyfrować(a która jest dropowana do  <strong>C:\WINDOWS\system32\sxmg4.dll</strong> i rejestrowana jako <strong>BHO</strong>)<br />
będzie pobierała te dane i deszyfrowała tylko w momencie zaistniałem potrzeby.</p>
<p>Zaszyfrowane dane w rejestrze prezentują się w następujący sposób(i<strong>nteresują nas tylko wartości Ad i Ad2</strong>):<br />
<a href="http://icewall.files.wordpress.com/2009/07/cas_encrypted.jpg"><img src="http://icewall.files.wordpress.com/2009/07/cas_encrypted.jpg" alt="cas_encrypted" title="cas_encrypted" width="497" height="163" class="aligncenter size-full wp-image-211" /></a><br />
<em>HKEY_LOCAL_MACHINE\SOFTWARE\TSoft</em></p>
<p>Ok, weźmy pod lupę więc dll’ke: Stosując identyczne podejście jak w dwóch poprzednich przypadkach znajdujemy następujący kod:<br />
<a href="http://icewall.files.wordpress.com/2009/07/cas_decryption.jpg"><img src="http://icewall.files.wordpress.com/2009/07/cas_decryption.jpg" alt="cas_decryption" title="cas_decryption" width="465" height="380" class="aligncenter size-full wp-image-212" /></a><br />
Kolejna różna od pozostałych procedura bazująca wciąż na xor’owaniu, lecz tym razem użyto stałego klucza o długości <strong>3 bytów</strong>. Warto wspomnieć jakie konsekwencje niesie za sobą takie podejście oraz jak to rozwiązano w niniejszej implementacji:</p>
<pre>
ECX = ilość odczytanych(zaszyfrowanych) bajtów z wartości rejestru
100053B0  |.  6A 02         PUSH 2
100053B2  |.  33C0          XOR EAX,EAX
100053B4  |.  5A            POP EDX
100053B5  |.  889C0D F0FDFF&gt;MOV BYTE PTR SS:[EBP+ECX-210],BL
100053BC  |.  3BCA          CMP ECX,EDX
100053BE  |.  76 31         JBE SHORT sxmg4.100053F1
</pre>
<p>Jak widać sprawdzane jest tutaj czy ilość bajtów które mają być odszyfrowane przekracza 2, ponieważ przy mniejszej ilości, w pętli już po pierwszej iteracji dostalibyśmy błędne dane (<strong>akurat przy tej implementacji nie wystąpi ,ani BO ani Off-by-One</strong>). To jedna kwestia, kolejną jest to, że długość danych do rozszyfrowania może nie być wielokrotnością 3’ki.<br />
Więc należy tutaj zadbać o sprawdzanie czy w kolejnym kroku deszyfrowania mamy przynajmniej 3 bajt do przetworzenia. Jeśli nie, pętla powinna się zakończyć a pozostałe bajty(<strong> max 2</strong>) należy deszyfrować indywidualnie.<br />
Sprawdźmy jak to zostało tu zaimplementowane:<br />
Przed wejściem do pętli mamy :</p>
<pre>
EDX = 2
100053C0  |.  8DB5 F1FDFFFF LEA ESI,DWORD PTR SS:[EBP-20F]
100053C6  |.  2BD6                     SUB EDX,ESI
EBP – 210h = encrypted_data
,więc EBP – 20Fh == encrypted_data +1
</pre>
<p>w pętli:</p>
<pre>
…
100053E3  |.  8D3402        |LEA ESI,DWORD PTR DS:[EDX+EAX]
100053E6  |.  8DB435 F1FDFF&gt;|LEA ESI,DWORD PTR SS:[EBP+ESI-20F]
100053ED  |.  3BF1          |CMP ESI,ECX
100053EF  |.^ 72 D7         \JB SHORT sxmg4.100053C8
</pre>
<p>kiedy przyjrzymy się temu kawałkowi kodu mamy:</p>
<pre>
ECX = encrypted_data_length
EAX = index
EDX = 2 – (encrypted_data+1)
ESI = EDX + EAX
ESI &lt;-  EBP + ESI – 20F == EBP -20F + ESI ==
(encrypted_data+1) + 2 –(encrypted_data+1)+ index
czyli ostatecznie
ESI = 2+index
</pre>
<p>,więc co iteracje w pętli(<strong> a jest to pętla do while</strong>) sprawdzane jest czy<br />
<strong>index+2 &lt; encrypted_data_length</strong>, jeżeli tak to pętla jest kontynuowana.<br />
Po zakończeniu pętli możemy zauważyć to o czym wspominałem, a mianowicie indywidualne xor’owanie bajtów, które pozostały lub w przypadku kiedy długość zaszyfrowanych danych <strong>&lt; 3</strong>:</p>
<pre>
100053F1  |&gt; \3BC1          CMP EAX,ECX
100053F3  |.  73 08         JNB SHORT sxmg4.100053FD
100053F5  |.  80B405 F0FDFF&gt;XOR BYTE PTR SS:[EBP+EAX-210],0F
100053FD  |&gt;  8D50 01       LEA EDX,DWORD PTR DS:[EAX+1]
10005400  |.  3BD1          CMP EDX,ECX
10005402  |.  73 0F         JNB SHORT sxmg4.10005413
10005404  |.  80B405 F1FDFF&gt;XOR BYTE PTR SS:[EBP+EAX-20F],10
</pre>
<p><strong>Prosty kod który powinien działać <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />   przy dowolnej długości klucza:</strong></p>
<pre class="brush: python">
def decrypt(buffer,key):
    decrypted = []
    notAligned = len(buffer) % len(key)
    secureLen  = len(buffer) - notAligned
    for i in range(0,secureLen,len(key)):
        for j in range(0,len(key)):
            decrypted.append( chr( ord(buffer[i+j])^key[j] ) )
    #dekrypcja pozostalych NIE odszyfrowanych bajtow o ile takie istnieja
    if notAligned:
        for i in range(secureLen,len(buffer)):
            decrypted.append( chr( ord(buffer[i])^ key[-secureLen+i]) )

    return &quot;&quot;.join(decrypted)

if __name__ == &quot;__main__&quot;:
    key  = [0xf,0x10,0x11]
    print decrypt(file(&quot;c:\\evil_host1&quot;).read(),key)
    print decrypt(file(&quot;c:\\evil_host2&quot;).read(),key)
</pre>
<p>oto rezultat działania kodu:<br />
<strong>(evil_host1 i evil_host2 to oczywiście wartości z rejestru Ad1 i Ad2)</strong><br />
<a href="http://icewall.files.wordpress.com/2009/07/decrypted_hosts_cas.jpg"><img src="http://icewall.files.wordpress.com/2009/07/decrypted_hosts_cas.jpg" alt="decrypted_hosts_cas" title="decrypted_hosts_cas" width="497" height="344" class="aligncenter size-full wp-image-213" /></a><br />
Jak widać zaszyfrowane dane przedstawiają najprawdopodobniej adresy drop hostów, albo hostów z których mają być pobierane dodatkowe moduły, nowe plik konfiguracyjne ,etc.</p>
<p><font color="blue"><b>[=]Epilog[=]</b></font><br />
To już wszystko odnośnie tego trojana, jak mieliśmy okazje zobaczyć jego autor „nie ograniczał” swojej fantazji jeżeli chodzi o rożnego typu algorytmy szyfrowania choć bazowały one na prostym xor’owaniu to jednak zobaczyliśmy parę mutacji;]. Wspomnę jeszcze, że trojan ten zawiera jeszcze parę zaszyfrowanych bloków danych jednak ze względu na identyczne metody dekodowania ( zmienia się np. klucz xor’ujacy z 0&#215;13 na 0xc) postanowiłem je pominąć. W następnych postach (o ile czas w najbliższym okresie wakacyjnym pozwoli <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) zajmiemy się trochę bardziej złożonymi algorytmami, sposobami ustalania formatu pliku konfiguracyjnego ,etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/07/23/algorytmy-deszyfrowania-wykorzystywane-przez-tworcow-trojanow-bankowych/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Filtry</title>
		<link>http://www.icewall.pl/2009/05/30/filtry/</link>
		<comments>http://www.icewall.pl/2009/05/30/filtry/#comments</comments>
		<pubDate>Sat, 30 May 2009 19:18:49 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Aplikacja]]></category>
		<category><![CDATA[Grafika]]></category>
		<category><![CDATA[dexter]]></category>
		<category><![CDATA[filtr medianowy]]></category>
		<category><![CDATA[filtr okienkowy]]></category>
		<category><![CDATA[filtry]]></category>
		<category><![CDATA[filtry w grafice]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=162</guid>
		<description><![CDATA[Ostatnio miałem okazje trochę pobawić się w pisanie filtrów używanych w grafice, m.in. filtru okienkowego oraz medianowego co okazało się całkiem niezłym fun’em, szczególnie jeżeli chodzi o rezultat ich działania. Swoją implementacje filtrów wykonałem w C++ Builder’e i na koniec posta postaram się dołączyć co nieco kodu ,ale nie będzie to całość, z tego względu, [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio miałem okazje trochę pobawić się w pisanie filtrów używanych w grafice, m.in. filtru <strong>okienkowego oraz medianowego</strong> co okazało się całkiem niezłym fun’em, szczególnie jeżeli chodzi o rezultat ich działania. Swoją implementacje filtrów wykonałem w <strong>C++ Builder’e</strong> i na koniec posta postaram się dołączyć co nieco kodu ,ale nie będzie to całość, z tego względu, że imo całość nie jest tak dojrzała(co nie przeszkodziło im uzyskać max pkt. za to zadanie na uczelni <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) aby ujrzeć światło dzienne <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Cała filozofia filtru okienkowego polega na wybraniu rozmiaru okna (najpopularniejsza wartością jest 3&#215;3) czyli ilości pixeli branych pod uwagę podczas filtrowania oraz odpowiedniemu dobraniu dla nich współczynników.<br />
<a href="http://icewall.files.wordpress.com/2009/05/grid.jpg"><img src="http://icewall.files.wordpress.com/2009/05/grid.jpg" alt="Grid" title="Grid" width="497" height="328" class="aligncenter size-full wp-image-161" /></a><br />
<em>Tablica pixeli. Przykład okna filtrującego o rozmiarze 3&#215;3.</em></p>
<p>Powyższy rysunek prezentuje zastosowanie okna o rozmiarze <strong>3&#215;3 </strong>gdzie pixel zaznaczony na fieletowo jest pixelem wyróżnionym. Iterując po tablicy pixeli musimy sprawić, aby każdy pixel w pewnym momencie iteracji był pixelem wyróżnionym, czyli jest to nic innego jak poruszanie się po niej od pozycje<strong> x = 0,y =0 do x  = image_width -1 , y = image_height -1.</strong></p>
<p>Przenosząc te informacje na kod :</p>
<pre>	for(int x = 0;x &lt; bmp-&gt;Width;++x)
	{
	  for(int y = 0;y &lt; bmp-&gt;Height;++y)
	  {
	      //loopy odpowiedzialne za operowanie na oknie filtrujacym
	      for(int j = -(windowSize/2); j &lt; windowSize - 1; ++j)
	       {
		for(int i = -(windowSize/2); i &lt; windowSize - 1;++i)
		{
                         //pobranie pixela z uwzględnieniem
                        //wysokości i szerokości bitmap’y
		color = getProperPixel(bmp,x+i,y+j);
		( … )
</pre>
<p>Warto tutaj zauważyć , że indexy  <strong>“i”</strong> oraz <strong>„j”</strong> , są tak dobrane tak iż pixel wyróżniony znajduje się w środku okna, czyli od razu mamy wniosek taki, że aby móc wyznaczyć środek okna jego wielkość musi być liczbą nie parzystą  <strong>&gt;1 (bynajmniej nie spotkałem się z zastosowaniem innych wartości, jeżeli ktoś miał taka przyjemność to piszcie).</strong><br />
         No tak ,ale nie powiedzieliśmy sobie jeszcze co tak naprawdę oznacza to „wyróżnienie”. Oznacza ono tyle iż wartość tego pixela zostania zmieniona na podstawie banalnego algorytmu , o którym za chwilę. <font color="red">UWAGA!!! Nie zmieniamy wartości pixeli w obrazie źródłowym , a więc należy sobie przygotować kolejny obiekt reprezentujący nasz image po filtrowaniu, który będzie podlegał modyfikacją.</font> Ok., teraz jak przedstawia się sam algorytm wyliczający nową wartość dla pixela wyróżnionego.</p>
<p><strong>Zapis matematyczny dla okna o wymiarach 3&#215;3:</strong><br />
<a href="http://icewall.files.wordpress.com/2009/05/formulka_1.jpg"><img src="http://icewall.files.wordpress.com/2009/05/formulka_1.jpg" alt="formulka_1" title="formulka_1" width="497" height="179" class="aligncenter size-full wp-image-166" /></a><br />
<font color="red">oraz</font><br />
<a href="http://icewall.files.wordpress.com/2009/05/formulka_2.jpg"><img src="http://icewall.files.wordpress.com/2009/05/formulka_2.jpg" alt="formulka_2" title="formulka_2" width="497" height="179" class="aligncenter size-full wp-image-166" /></a><br />
<font color="red">oraz w przypadku kiedy suma współczynników równa się 0.</font></p>
<p>    Myślę, że sprostowania wymaga jedynie oznaczenie <strong>W(i,j) &#8211; jest to oczywiście tablica współczynników okna filtrującego.</strong><br />
Rzućmy teraz okiem jak ten zapis przedstawia się w kodzie(wielkość okna dowolna ze wspomnianego wyżej przedziału):</p>
<pre>
(   …   )
for(int j = -(windowSize/2); j &lt; windowSize - 1; ++j)
{
  for(int i = -(windowSize/2); i &lt; windowSize - 1;++i)
   {
      //pobierz odpowiedni pixel
      tmpColor = getProperPixel(SrcPixels, x+i , y+j );
      r =  GetRValue(tmpColor)  * window[index];
      g = GetGValue(tmpColor)  * window[index];
      b = GetBValue(tmpColor)  * window[index];

      totalR +=   r;
      totalG +=  g;
      totalB +=  b;
      index++;
      }
}

//zsumowanie wartości wszystkich współczynników
suma = accumulate(window.begin(),window.end(),0);
if(suma == 0)
    suma = 1;

totalR /= suma;
totalG /= suma;
totalB /= suma;

totalR = min(255, max(0, totalR));
totalG = min(255, max(0, totalG));
totalB = min(255, max(0, totalB));

//modyfikacja wartości pixela w obrazie docelowym
DstPixels-&gt;Canvas-&gt;Pixels[x][y] = (TColor)RGB(totalR,totalG,totalB);
//zeruj index pozycji w oknie współczynników
index = 0;
//zeruj wartości
totalR = 0;
totalG = 0;
totalB = 0;
</pre>
<p>To czego nie objął wzór matematyczny ,a co raczej jest oczywiste to wykonanie całego algorytmy dla każdego kanału <strong>RGB</strong> osobno. Oczywiście można zastosować np. konwersje z formatu <strong>RGB na YUV</strong> i tam jedynie manipulować wartości Y , a następnie już przy samej aktualizacji obrazu docelowego zamienić <strong>YUV na RGB</strong>, ale w tym zapisie chodziło mi o prostotę.<br />
Ok. czas na przykładowy interface aplikacji:<br />
<a href="http://icewall.files.wordpress.com/2009/05/interface.jpg"><img src="http://icewall.files.wordpress.com/2009/05/interface.jpg" alt="interface" title="interface" width="497" height="320" class="aligncenter size-full wp-image-169" /></a></p>
<p>,aż razi swoją prostotą ;].</p>
<p>        Teraz cała zabawa polega na tym, aby dobrać odpowiednie współczynniki dla okna filtrującego.<br />
Przyjrzyjmy się rezultatom działania filtrów z różnych kategorii (jako modela wybrałem myślę wszystkim dobrze znaną postać <strong>Dexter’a</strong> <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ):</p>
<p><strong>Filtr dolnoprzepustowy</strong><br />
<a href="http://icewall.files.wordpress.com/2009/05/dolno.jpg"><img src="http://icewall.files.wordpress.com/2009/05/dolno.jpg" alt="dolno" title="dolno" width="497" height="246" class="aligncenter size-full wp-image-170" /></a><br />
<strong>Filtr górnoprzepustowy</strong><br />
<a href="http://icewall.files.wordpress.com/2009/05/gorno.jpg"><img src="http://icewall.files.wordpress.com/2009/05/gorno.jpg" alt="gorno" title="gorno" width="485" height="252" class="aligncenter size-full wp-image-171" /></a><br />
<strong>Filtry krawędziowe</strong><br />
<a href="http://icewall.files.wordpress.com/2009/05/krawedziowe1.jpg"><img src="http://icewall.files.wordpress.com/2009/05/krawedziowe1.jpg" alt="krawedziowe1" title="krawedziowe1" width="486" height="253" class="aligncenter size-full wp-image-172" /></a><br />
<a href="http://icewall.files.wordpress.com/2009/05/krawedziowe2.jpg"><img src="http://icewall.files.wordpress.com/2009/05/krawedziowe2.jpg" alt="krawedziowe2" title="krawedziowe2" width="493" height="254" class="aligncenter size-full wp-image-173" /></a><br />
<strong>Filtr konturowy</strong><br />
<a href="http://icewall.files.wordpress.com/2009/05/konturowe.jpg"><img src="http://icewall.files.wordpress.com/2009/05/konturowe.jpg" alt="konturowe" title="konturowe" width="497" height="252" class="aligncenter size-full wp-image-174" /></a></p>
<p>Myślę, że efekty całkiem ciekawe;).</p>
<p>        Przejdźmy teraz do <strong>filtru medianowego</strong>. Jego zasada działania jest nieco odmienna choć nadal będziemy korzystać z okna lecz w tym wypadku nie definiujemy żadnych wartości współczynników. Myślę ,że kawałek kodu wyjaśni sprawę:</p>
<pre>
void CFilters::medianFilter(Graphics::TBitmap *bmp,
Graphics::TBitmap *bmpRez,
int windowSize)
{

	vector pixels;
	TColor color;
	//glowny loop dla siatki pixeli wyznaczajacy tzw pixel wyrozniony
	for(int x = 0;x &lt; bmp-&gt;Width;++x)
	{
	  for(int y = 0;y &lt; bmp-&gt;Height;++y)
	  {
		//loopy odpowiedzialne za operowanie na oknie filtrujacym
		for(int j = -(windowSize/2); j &lt; windowSize - 1; ++j)
		{
			for(int i = -(windowSize/2); i &lt; windowSize - 1;++i)
			{
				  color = getProperPixel(bmp,x+i,y+j);
				  pixels.push_back(color);
			}
		}

	sort(pixels.begin(),pixels.end());
	bmpRez-&gt;Canvas-&gt;Pixels[x][y] = (TColor)pixels[pixels.size()/2];
	pixels.clear();
	  }
	}

}</pre>
<p>     Tak ja wspomniałem powyżej nadal posługujemy się oknem lecz w tym wypadku tylko i wyłącznie w celu zgromadzenia wartości pixeli „pokrytych” przez okno. Wartość pixela wyróżnionego zastanie zastąpiona poprzez wartość środkową zgromadzonych pixeli , stąd widoczne sortowanie w kodzie:<br />
<strong>sort(pixels.begin(),pixels.end());</strong><br />
oraz wskazanie elementu środkowego:<br />
<strong>(TColor)pixels[pixels.size()/2];</strong><br />
<strong>(Np. dla filtru o rozmiarze okna 3&#215;3 elementem środkowym będzie element o indexe 5).</strong><br />
Oczywiście , żeby móc obserwować efekty działania filtra medianowego należy wcześniej dodać <strong>„szum„</strong>.Oto kod prostego <strong>„zaszumiacza” </strong> <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  :</p>
<pre>
 //glowny loop dla siatki pixeli wyznaczajacy tzw pixel wyrozniony
for(int x = 1;x Width - 5;++x)
{
  for(int y = 1;y Height - 5;++y)
  {
 bmp-&gt;Canvas-&gt;Pixels[x][y] = bmp-&gt;Canvas-&gt;Pixels[x+rand()%5][y+rand()%5];
  }
}</pre>
<p>i efekt jego działania:<br />
<a href="http://icewall.files.wordpress.com/2009/05/szum.jpg"><img src="http://icewall.files.wordpress.com/2009/05/szum.jpg" alt="szum" title="szum" width="185" height="254" class="aligncenter size-full wp-image-175" /></a></p>
<p>Czas na przyjrzenie się działaniu tego filtra:<br />
<em>wielkość okna 3&#215;3</em><br />
<a href="http://icewall.files.wordpress.com/2009/05/med11.jpg"><img src="http://icewall.files.wordpress.com/2009/05/med11.jpg" alt="med1" title="med1" width="369" height="253" class="aligncenter size-full wp-image-177" /></a></p>
<p><em>wielkość okna 9&#215;9</em><br />
<a href="http://icewall.files.wordpress.com/2009/05/med2.jpg"><img src="http://icewall.files.wordpress.com/2009/05/med2.jpg" alt="med2" title="med2" width="366" height="253" class="aligncenter size-full wp-image-178" /></a></p>
<p>W razie jakiś pytań ,ciekawie „przefiltrowanych fotek” ,sugestii piszcie <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
Obiecany kod &#8211; &gt; <a href="http://icewall.files.wordpress.com/2009/05/filters.pdf">Filters.zip</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/05/30/filtry/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Confidence 2009</title>
		<link>http://www.icewall.pl/2009/05/22/confidence-2009/</link>
		<comments>http://www.icewall.pl/2009/05/22/confidence-2009/#comments</comments>
		<pubDate>Fri, 22 May 2009 20:09:26 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Konferencje]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[confidence 2009]]></category>
		<category><![CDATA[hackers squad]]></category>
		<category><![CDATA[konferencja]]></category>
		<category><![CDATA[kraków]]></category>
		<category><![CDATA[wargame]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=146</guid>
		<description><![CDATA[
W ostatni weekend to jest 15-16 Maj 2k9 miałem przyjemność uczestniczyć( tak ja w zeszłym roku z resztą  ) w piątej już edycji konferencji traktującej o bezpieczeństwie IT Confidence 2009. Na wstępie powiem co mi się chyba już zdarzyło na tym blogu, że lepszej konferencji od Confidence w Polsce nie było i jak na [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://icewall.files.wordpress.com/2009/05/lgim0007.jpg"><img src="http://icewall.files.wordpress.com/2009/05/lgim0007.jpg?w=300" alt="LGIM0007" title="LGIM0007" width="300" height="224" class="aligncenter size-medium wp-image-147" /></a><br />
W ostatni weekend to jest <strong>15-16 Maj 2k9</strong> miałem przyjemność uczestniczyć( tak ja w zeszłym roku z resztą <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) w piątej już edycji konferencji traktującej o bezpieczeństwie <strong>IT Confidence 2009</strong>. Na wstępie powiem co mi się chyba już zdarzyło na tym blogu, że lepszej konferencji od Confidence w Polsce nie było i jak na razie nie widać „rywala” <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Postępując chronologicznie:</p>
<p><font color="green">/* Podróż */</font><br />
W tym roku bez żadnych dodatkowych kłopotów z PKP( tak tak ,warto o tym wspomnieć ,bo w tamtym roku czekaliśmy z Coldwind’em ok.3.5h na spóźniony pociąg, a jego delay time co 45min był sukcesywnie inkrementowany o kolejne 45 <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) w sielankowej atmosferze podziwiając krajobrazy ,przemierzaliśmy z Gyn’em kolejne setki kilometrów. Gdzieś po drodze do przedziału zainjectował się j00ru i już pełną tegoroczną ekipa zmierzaliśmy do celu.</p>
<p><font color="green">/* Camp place */</font><br />
Camp place tudzież miejsce noclegowania to dość nietuzinkowy tegoroczny pomysł organizatorów nazwany Hackers’ Squad.<br />
<a href="http://icewall.files.wordpress.com/2009/05/lgim0011.jpg"><img src="http://icewall.files.wordpress.com/2009/05/lgim0011.jpg?w=300" alt="LGIM0011" title="LGIM0011" width="300" height="286" class="aligncenter size-medium wp-image-148" /></a><br />
Pomysł polegał na umieszczenie uczestników we dwóch hostelach przy czym uczestniczy trafiali do pokojów  w sposób losowy <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Powiem szczerze, że na początku miałem mieszane uczucia co do tego pomysłu, ale ostatecznie muszę postawić wielkiego plusa za hostel/śniadania i ekipę jaką można tam było poznać <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Dodatkowym atutem<br />
hostelu była jego lokalizacja <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> , jakieś <strong>300m od Kina Kijów</strong> gdzie odbywała się konferencja<br />
Fotka z pokoju:<br />
<a href="http://icewall.files.wordpress.com/2009/05/hs3.jpg"><img src="http://icewall.files.wordpress.com/2009/05/hs3.jpg" alt="hs3" title="hs3" width="497" height="372" class="aligncenter size-full wp-image-149" /></a><br />
<em>j00ru &amp; me</em></p>
<p><font color="green">/* Before party */</font><br />
Kolejna innowacja <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Jako, że Kino Kijów ma własny klub to organizatorzy postanowili wykorzystać i tą możliwość do zagospodarowania nam pierwszego wieczoru poprzez projekcje następujących tytułów:</p>
<p><a href="http://www.imdb.com/title/tt0086567/">Gry Wojenne (Wargames) </a><br />
<a href="http://www.imdb.com/title/tt0017136/">Metropolis</a><br />
<a href="http://www.imdb.com/title/tt0138704/">PI</a><br />
<a href="http://www.imdb.com/title/tt0120660/">Wróg Publiczny (Enemy of the State)</a><br />
<a href="http://www.hackersarepeopletoo.com">H4ck3rs Are People Too</a><br />
<a href="http://icewall.files.wordpress.com/2009/05/lgim0004.jpg"><img src="http://icewall.files.wordpress.com/2009/05/lgim0004.jpg?w=300" alt="LGIM0004" title="LGIM0004" width="300" height="225" class="aligncenter size-medium wp-image-154" /></a><br />
<em>me &amp; Gynvael Coldwind na seansie w klubie Kijów</em></p>
<p>Napisałem <strong>„oglądając”</strong>, bo wytrwaliśmy do końca pierwszego filmu <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> , ale w sumie bez większych strat, bo widziałem wcześniej już:<br />
<strong>H4ck3rs Are People Too</strong> jak najbardziej polecam i jakby ktoś nie reflektował tego dokumentu to jest to video o społeczności związanej z security, a film ten został po raz pierwszy zaprezentowany na <strong>DefCon’e 200</strong>8.<br />
<strong>PI </strong>– bardzo klimatyczny film, polecam jeżeli lubisz nie przeciętne kino<br />
<strong>Gry Wojenne</strong> – ten film właśnie udało mi się obejrzeć w całości w klubie i powiem, że czasami był zabawny:D Najlepszy tekst z filmu:<br />
<em>Teacher: &#8220;Who first suggested the idea of reproduction without sex?&#8221;<br />
David: &#8220;Your wife?&#8221;</em><br />
I tak upłynął pierwszy wieczór.</p>
<p><font color="green">/* Dzień pierwszy */</font><br />
Kolejną delikatna zmianą, która pojawiła się w tym roku (można ją było odczuć rano)jest godzina rozpoczęcia się wykładów. Przesunięto ją z 9:00 na 10:00 <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  (imo bardziej ludzka godzina).<br />
Oczywiście jak to zwykło bywać na konferencjach po rejestracji zostaliśmy obdarzeni przez piękne hostessy torbą z gadgetami:<br />
<a href="http://icewall.files.wordpress.com/2009/05/lgim00081.jpg"><img src="http://icewall.files.wordpress.com/2009/05/lgim00081.jpg?w=254" alt="LGIM0008" title="LGIM0008" width="254" height="300" class="aligncenter size-medium wp-image-151" /></a><br />
	Konferencje rozpoczęła się prezentacja:<br />
 <strong>Bruce Schneier’a &#8211; „Reconceptualizing Security”</strong><br />
Mówił on o tym jak odczuwamy bezpieczeństwo ,kiedy czujemy się bezpieczni, a tak w ogóle nie jest oraz kiedy jesteśmy bezpieczni, a tego bezpieczeństwa nie odczuwamy. No&#8230;., moim zdaniem prezentacja nietuzinkowa ze szczyptą filozofii tak jak lubię, widać tu po prostu wieloletnie doświadczenie w branży oraz ogrom przemyśleń na temat security. Mistrzostwo po prostu;).</p>
<p><strong>Joanna Rutkowska – „Thoughts about Trusted Computing”</strong><br />
Bardzo dobra prezentacja (czego można się było z resztą spodziewać;)) ,m.in. omawiająca składniki<br />
Trusted Computing: takie jak : <strong>TPM,TXT,VT.</strong> W szczególności muszę wspomnieć, że forma samej prezentacji przypadła mi do gustu ponieważ slajdy były przejrzyste(bez zbędnego przerostu formy nad treścią oraz wodotrysków), czarne tło kilka bloków/schematów objaśniających bieżące zagadnienie i to wszystko. Co do ciekawostek to Joanna zapowiedziała opublikowanie najnowszych badań w najbliższe wakacje m.in. na temat Trusted Computing <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Czyżby wspomniane komponenty nie były tak bezpieczne jak zakładają ich twórcy ?Przekonamy się w wkrótce.</p>
<p><strong>Eddie Schwarz – „Understanding Social Networking Threats Using Live Threat Intelligence”</strong><br />
Prezentacja dość na czasie zważając na to, że niektórzy wydają się żyć portalami społecznościowymi.</p>
<p>no i nadszedł czas na …</p>
<p><font color="green">/* Lunch Break */</font></p>
<p>Jeżeli chodzi o same snacki, które są cały czas dostępne podczas konferencji to jest git, ale  niestety ja jako wielki smakosz musze niestety przyznać minusa za obiad, bo to były dania w stylu:<br />
<strong>„prawie zupa” oraz „prawie szaszłyk”</strong>. Także zdecydowanie to nie było to co misie lubią najbardziej. W swojej opinii nie byłem osamotniony ,bo moje zdanie podzieliło jeszcze parę osób, także coś w tym musi być <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Po wydłużonym lunch’u ,zdecydowałem się( tak tak ,sesje NIESTETY zostały podzielone po 3’im wykładzie) na prezentacje:</p>
<p><strong>Alexander Kornbrust – “Oracle SQL Injection in Webapps”</strong><br />
Dla mnie interesująca prezentacja z tego względu, że o ile przeprowadznie pentestów na bazach <strong>MSSQL czy MySQL</strong> to jest chleb powszedni to jednak bazy Oracle chodź tak powszechne i lubiane w świecie biznesu to widywane są przeze mnie rzadko, a wręcz wcale. Także miło było zobaczyć co do „zaoferowania” mają funkcjonalności w różnych wersjach baz <strong>Oracle podczas ataków np. SQL (Blind) Injection </strong> <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p><strong>Walter Belgers – „Lockpicking 101”</strong><br />
To był jeden z wyczekiwanych przeze mnie tematów ponieważ panowie zajmujący się Lockpicking’em mieli pojawić się na zeszłorocznej konferencji, a niestety się to nie udało. To co można było zobaczyć na prezentacji to masa różnego rodzaju zamków oraz metod, którymi można je otworzyć w sposób mniej lub bardziej inwazyjny. Widać było także wieloletnie doświadczenie prelegenta w tej branży.<br />
<strong>Zabawna historia związana z tym tematem, którą przytoczę wydarzyła się wieczorem podasz powrotu do hostelu kiedy to równocześnie doszliśmy do drzwi(ja,Gyn,j00ru) i cześć ekipy loockpickerów już w środku kamienicy. Chwila konsternacji ,każdy uderza się po kieszeni gdzie te klucze po czym ,któryś lockhackerów chciał się pochwalić skillem i zamierzając otworzyć zamek niczym szpieg z krainy deszczowców świecąc miniaturowa latarką zaczął wyciągać  picka ,ja nacisnąłem po prostu dzwonek do drzwi i ktoś otworzył je od wewnątrz <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  </strong>..hahah..byłem szybszy. Kolejny raz potwierdza się reguła, że najprostsze metody są najlepsze <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><strong>Michał Sajdak – „Zdalny root na ruterze klasy SOHO”</strong><br />
Prezentacja ok., bez jakiś większych rewelacji, ale ukazująca potencjał wykorzystania błędów w tanich powszechnie używanych router’ach .</p>
<p><strong>Martin Mocko &#8211; &#8220;Race to baremetal: UEFI and hypervisors&#8221;</strong><br />
Interesująca prezentacja oraz ciekawa dyskusja, która wywiązała się tuż po niej, pomiędzy Joanna( w tym temacie to było do przewidzenia <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) oraz prelegentem.<br />
. Tam trzeba było po prostu być.</p>
<p>… i tak minął pierwszy dzień prelekcji. Wieczorem w klubie kijów było o czym rozmyśla jak i dyskutować, także pozytywnie <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><font color="green">/* Dzień drugi */</font></p>
<p><strong>Rich Smith – „VAASeline: VNC Attack Automation Suite”</strong><br />
Rich jest członkiem firmy Immunity, myślę, że jest to firma, którą większość z was kojarzy m.in. przez takie projekty jak <strong>CANVAS czy Immunity Debugger.</strong> Rich stworzył bardzo użyteczną biblioteka dla pythona ułatwiającą proces automatyzacji ataków na VNC, której moim zdaniem warto się przyjrzeć;).</p>
<p><strong>Jacob Appelbaum – „Tor Network”</strong><br />
Było technicznie ,było filozoficznie czyli bardzo dobra mieszanka.<br />
Na tej prezentacji można było się dowiedzieć o tym jak działa sieć tor jak można stać się jej aktywnym węzłem , itd. , ale nie tylko. Jacob wspomniał także jaki jest sens tworzenia takiej sieci. Na szczęście  w Polsce nie mamy takich problemów jak np. w Chinach, że rządowi nie podoba się youtube no to trach!!! i nikt już nie zobaczy kolejnego odcinka <strong>Tiger Team’u,</strong> a dzięki Tor’wi można to ominąć. Prelegent wspominał także o takich krajach, w których anonimowość, jaką daje Tor np. dziennikarzom, którzy piszą otwarcie na swoich blogach o tym co nie podoba się im w ich kraju ,jest na wagę ich życia.<br />
<strong>Zabawną historią była opowieść o dwóch obozach FBI, które wzajemnie się kłócą czy Tor przynosi im więcej korzyści czy kłopotów <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</strong></p>
<p><strong>Alessio Pennasilico – „Bakeca.it DDoS: How evil forces have been defeated.”</strong><br />
Hehhe jeden z moich ulubionych prelegentów confidence. Niesamowity sposób opowiadania oraz zabawny akcent (wyrażenie brzmiące “eso hon” rozkminiałem sporo czasu w tamtym roku, aż udało mi się odganąć, że chodzi tu o „and so on” <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). Jeżeli chodzi o sprawy techniczne związane z prezentacja to tak jak w temacie Alessio opowiadał o ataku DDoS na firmę Bakeca.it ( coś ala allegro),<br />
która pozwoliła mu jak widać zresztą ( i brawa dla niej) na opisania i opowiedzenie całego zdarzenia.<br />
Genialnie opowiedziane kolejne kroki postępowania ataku oraz środków przeciw działania.</p>
<p><strong>Michael Kemp – „Rootkits are awesome: Insider Threat for Fun and Profit”</strong><br />
To wystąpienie było mega zabawne, a zarazem tragiczne <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . <font color="red">Inaczej skomentować tego nie mogę, bo jeżeli, ktoś pokazuje listing Dll’ek wykorzystywanych przez dwie aplikacje, porównuje je, dochodzi do wniosku że są one identyczne i na tej podstawie stwierdza, że obie aplikacje działają identycznie to sorry <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  </font>Po prostu po parunastu minutach słuchania zacząłem się obawiać o tego człowieka jak daleko posunie się on w swoich fantazjach i jak wiele osób naskoczy na niego po prezentacji <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .<br />
Tłumaczyć go może jedynie fakt, że tak jak wspomniał na samym wstępie był na dużym kacu i nie bardzo pamięta jak wrócił do hotelu:D…mam też nadzieje, że cała tą prezentacje tworzył w podobnym stanie wtedy jestem w stanie o tym zapomnieć. Oczywiście zgodnie z moimi oczekiwaniami po prezentacji znalazło się „parę” osób entuzjastycznie (tak to nazwijmy <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) wytykających prelegentowi pewne nieścisłości w jego rozumowaniu. No niestety, Michael chciał zareklamować swoją nową firmę,<br />
ale imo nie robi się tego w takim stylu <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><strong>Raoul Chiesa – „Corporate Security and Intelligence: the dark links”</strong><br />
Niestety obiecałem, że nic nie powiem <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Prezentacja naprawdę bardzo ciekawa, a fakty przerażające.</p>
<p>I tym sposobem dotarliśmy do końca konferencji……<br />
Podsumowując, wielki plus dla orgów za przygotowania i organizacje pozostaje mi tylko mieć nadzieję, że za rok znów się tam pojawię <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/05/22/confidence-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Esmeralda’s update</title>
		<link>http://www.icewall.pl/2009/05/22/esmeralda%e2%80%99s-update/</link>
		<comments>http://www.icewall.pl/2009/05/22/esmeralda%e2%80%99s-update/#comments</comments>
		<pubDate>Fri, 22 May 2009 17:35:45 +0000</pubDate>
		<dc:creator>Icewall</dc:creator>
				<category><![CDATA[Aplikacja]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[VTBot]]></category>
		<category><![CDATA[Esmeralda]]></category>
		<category><![CDATA[msnbot]]></category>
		<category><![CDATA[url scan]]></category>

		<guid isPermaLink="false">http://icewall.wordpress.com/?p=138</guid>
		<description><![CDATA[Będzie to króciutka notka o nowej funkcjonalności, która od niedawna oferuje Esmeralda.
[+]Url Scan,
bo tak w wielkim skrócie można przedstawić tą opcje, polegającą na przesłaniu Esmerald’e komendy  w formie !url http://evil_site.com/evil.file.
Esmeralda pobierze dla Was podejrzany plik ( obsługa przekierowań zapewniona ), uploaduje go do VirusTotal i odeśle Wam link do strony z rezultatem skanowania.
A tak [...]]]></description>
			<content:encoded><![CDATA[<p>Będzie to króciutka notka o nowej funkcjonalności, która od niedawna oferuje Esmeralda.<br />
<strong>[+]Url Scan,</strong><br />
bo tak w wielkim skrócie można przedstawić tą opcje, polegającą na przesłaniu Esmerald’e komendy  w formie <strong>!url http://evil_site.com/evil.file</strong>.</p>
<p>Esmeralda pobierze dla Was podejrzany plik ( obsługa przekierowań zapewniona ), uploaduje go do <strong>VirusTotal</strong> i odeśle Wam link do strony z rezultatem skanowania.<br />
A tak to wygląda w praktyce:<a href="http://icewall.files.wordpress.com/2009/05/urlscan.jpg"><img class="aligncenter size-full wp-image-137" title="urlScan" src="http://icewall.files.wordpress.com/2009/05/urlscan.jpg" alt="urlScan" width="497" height="163" /></a><br />
tyle <img src='http://www.icewall.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ,<br />
Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.icewall.pl/2009/05/22/esmeralda%e2%80%99s-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
