<?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 &#187; DeDe</title>
	<atom:link href="http://www.icewall.pl/tag/dede/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.icewall.pl</link>
	<description>IT Security</description>
	<lastBuildDate>Thu, 29 Jul 2010 23:19:16 +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>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>
	</channel>
</rss>
