<?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; trojan delphi</title>
	<atom:link href="http://www.icewall.pl/tag/trojan-delphi/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>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>
	</channel>
</rss>
