Domanda:
Come ottenere il corpo del virus decrittografato del virus Bolzano utilizzando il debug di Ollydbg 1.10 su sistema operativo Windows
user1744108
2013-07-15 05:59:04 UTC
view on stackexchange narkive permalink

Ho installato Windows NT 4.0 Service Pack 6 su vmware player. Quindi ho aggiunto Ollydbg 2 dalla cartella condivisa di vmware a Windows NT. Ho estratto lo zip ollydbg ed eseguito ollydbg.exe. Ricevo questo errore:

PSAPI.DLL non è stato trovato. Questa libreria contiene importanti funzioni orientate ai processi e ai moduli per i sistemi operativi basati sulla tecnologia NT. Il normale debugging è difficilmente possibile. Vuoi continuare?

E poi non sono in grado di eseguire il debug del programma.

Posso eseguire lo stesso file exe sul mio sistema operativo Windows 7 host senza errori. Su Windows NT, posso eseguire Ollydbg 1.10. Ma quando provo a eseguire il debug del file in Ollydbg 1.10, ricevo l'errore "prova a cambiare eip o passa un'eccezione al programma". Dopo la ricerca ho scoperto che dovrei installare Ollydbg 2.

Il motivo per cui sto usando Windows NT: sto eseguendo il debug di un malware e funziona solo su Windows NT. Ma sta dando l'errore "prova a cambiare eip o passa eccezione al programma" come menzionato sopra.

Hai provato a passare l'eccezione al programma? Il malware esce o continua come previsto?
Sì, anche io ho provato a passare l'eccezione in caso di Ollydbg 1.10. Ma poi il mio EIP punta all'indirizzo 00000000 e continuo a ricevere lo stesso errore "prova a cambiare eip o passa un'eccezione al programma". C'è un problema con la versione di Ollydbg? Dato che sto usando 1.10. Ho cercato questo errore e alcuni hanno suggerito di utilizzare 2.0. Ma in caso di 2.0 ricevo questa menzione di errore dll sopra
Hai provato a utilizzare strumenti di analisi dinamica senza un debugger per essere sicuro che il malware funzioni anche su Windows NT 4.0? Se funziona correttamente al di fuori di OllyDbg ma non funziona correttamente all'interno di OllyDbg, potrebbe essere dovuto al codice anti-debug nel malware, non a un errore in OllyDbg stesso.
Penso che il virus Bolzano non possa essere eseguito sulla versione Windows NT. Ho provato a eseguire direttamente il file malware eseguibile, ma stavo ricevendo un'eccezione di violazione di accesso.
Due risposte:
#1
+5
David Hoelzer
2013-07-15 07:00:04 UTC
view on stackexchange narkive permalink

Credo che la maggior parte della tua risposta possa essere trovata qui: http://www.ollydbg.de/download.htm

La parte rilevante è:

La distribuzione include i file PSAPI.DLL e DBGHELP.DLL che sono i file ridistribuibili Microsoft (R). Questi file devono essere installati solo nella directory in cui risiede il Software. Utilizzare PSAPI.DLL in dotazione solo su Windows NT (R) 4.0. Non sei autorizzato a distribuire PSAPI.DLL o DBGHELP.DLL separatamente dal software.

Mi aspetto che trovi correttamente PSAPI.DLL nella directory corrente in cui ti trovi l'esecuzione di Olly. Verifica che il file esista. Se lo fa e continua a non funzionare, suggerirei di copiarlo in C: \ WINNT \ SYSTEM e di riprovare.

Se questo non risolve, prendere in considerazione la condivisione del nome del malware. Sembra piuttosto vecchio quindi non può essere quel segreto! Potrebbe effettivamente consentirci di darti una risposta più specifica o persino di provarlo noi stessi per risolverlo.

Ho scoperto che il mio Windows NT non ha psapi.dll né nella cartella Ollydbg decompressa né nella cartella SYSTEM. Quindi ho provato e copiato dll dalla mia finestra host 7 a Windows NT (solo una prova) ollydbg e dopo quella cartella SYSTEM, ma ancora non funziona. Quindi c'è un problema con il mio sistema operativo Windows NT? A proposito, sto eseguendo il debug del malware polimorfico Bolzano. Puoi ottenere il suo campione da http://oc.gtisc.gatech.edu:8080/search.cgi?search=bolzano
No. C'è qualcosa che non va nell'archivio di Ollydebug che hai. PSAPI.dll dovrebbe essere nel file zip. Ti suggerisco di scaricare una nuova copia.
Ollydbg versione 1 viene fornito con psapi.dll. Tuttavia, la versione 2 no
Credo che abbia detto che sta usando Olly 1.10 che viene fornito con la DLL.
Sto usando Olly 1.10 che ha PSAPI.dll nel suo archivio, ma non è nel caso di Olly 2. Come suggerito da Jason, ci sono possibilità che il virus stia usando la tecnica anti-debug e che perché sto ottenendo "prova a cambiare eip o passare l'eccezione al programma "errore in caso di Olly 1.10. Oppure il virus stesso non può essere eseguito su Windows NT. Ma ho trovato un articolo sul virus http://spth.virii.lu/29a4/29A-4.505.txt, e dopo aver esaminato il codice assembly del virus penso che sia in esecuzione su Windows NT. Il mio obiettivo è ottenere il corpo del virus (codice che causa l'infezione effettiva) dopo che è stato decrittografato.
Possiamo supporre, tuttavia, che tu abbia eliminato con successo il problema PSAPI.DLL mancante che avevi?
Penso di si. Ora sto eseguendo il debug del virus Bolzano su Ollydbg 1.10. Quando avvio il debug dopo alcune istruzioni ottengo "prova a cambiare eip o passa un'eccezione al programma". Quando passo l'eccezione e continuo il debug, il mio processo viene interrotto. Sto usando un esempio di malware da qui http://oc.gtisc.gatech.edu:8080/search.cgi?search=bolzano.
A proposito, sto utilizzando la seguente versione del virus Bolzano MD5: f1835d569afd7b439ad41e5b97434043SHA1: ecc136810b48d747ac004611e7dffae4d9dac985SHA256: 134082310b60156117d6d720b6cbe7c70f4d747ac004611e7dffae4d9dac985SHA256: 134082310b60156117d6d720b6cbe7c70f4d747ac004611e7dffae4d9dac985SHA256: 134082310b60156117d6d720b6cbe7c70f4d8in748b6cbe7c70f4d6d720b6cbe7c70f4d6d720b6cbe7c70f4d8inFilm720b6cbe7c70f4d796.Originalb6cbe7c70f4d796.b
#2
+2
blabb
2013-07-16 03:29:26 UTC
view on stackexchange narkive permalink

Non ho NT4 vm
Inoltre il tuo link punta a diversi esempi
Fornire MD5 / SHA / un certo checksum verificabile del campione può eliminare le ambiguità durante la risposta

ecco una piccola guida all'uso dell'editor esadecimale di base e un disassemblatore di base del perché potrebbe essere possibile generare quell'eccezione.

  utilizzando winxp sp3 vm hxd hexeditor e ollydbg 1.10 in modalità dis-aaseembler di base  

scaricato il primo esempio in openmalware

  MD5: f40547d521818f7c34754710f8603d5aSHA1: f9e3c0e824dda984046b4eedeef06f938805983bSHA256: a9beda469c835abbf416ea8da5462170eafdef215b96ac68523045600883855bOCID: 245478739Original Nome file: Virus.Win32.Bolzano.5572  

trascinare sceso a VPC 2007 XP SP3 vm

decompresso utilizzando la password infetta

trascinamento rilasciato in hxd hexeditor e checksum verificati

  MD-5: F40547D521818F7C34754710F8603D5ASHA-1: F9E3C0E824DDA984046B4EEDEE80598BS -256: A9BEDA469C835ABBF416EA8DA5462170EAFDEF215B96AC68523045600883855B  

tutti e tre i checksum corrispondono ok

  WORD MajorSubsystemVersion WORD MinorSubsystemVersion Contiene la versione minima del sottosistema eseguibile richiesta per eseguire il sottosistema minimo. Un valore tipico per questo campo è 3.10 (ovvero Windows NT 3.1). 

http://msdn.microsoft.com/en-us/library/ms809762.aspx

utilizzando ollydbg come disassemblatore

  visualizza -> file -> malware.exe -> clic destro -> speacial -> intestazione pe  

ctrl + g 100

l'intestazione pe mostra

  00000148 0300 DW 0003; MajorSubsystemVersion = 30000014A 0A00 DW 000A; MinorSubsystemVersion = A (10.) 00000200 00100000 DD 00001000; VirtualSize = 1000 (4096.)
00000204 00100000 DD 00001000; VirtualAddress = 1000 < ----- 00000208 00020000 DD 00000200; SizeOfRawData = 200 (512.) 0000020C 00060000 DD 00000600; PointerToRawData = 600 00000228 00200000 DD 00002000; VirtualSize = 2000 (8192.) 0000022C 00200000 DD 00002000; VirtualAddress = 200000000230 00200000 DD 00002000; SizeOfRawData = 2000 (8192.) 00000234 00080000 DD 00000800; PointerToRawData = 800 < ------ 00000128 00100000 DD 00001000; AddressOfEntryPoint = 1000  

così possiamo iniziare lo smontaggio a 0x600

  ctrl + g 600 clic destro -> disassembla  

smontaggio

  1. 00000600 60 PUSHAD 2. 00000601 E9 FA0F0000 JMP 00001600  

la dimensione virtuale della sezione è 1000 come abbiamo visto in precedenza
quindi è passa alla sezione successiva
la sezione successiva inizia da 0x800 come abbiamo visto in precedenza

  ctrl + g 800 disassemble  

disassembly

  00000800 E8 D50E0000 CALL 000016DA (402eda) 400000 +2000 + (16da-800) 

seguente

  000016DA E8 00000000 CALL 000016DF $ + 5 (402edf) 400000+ 2000+ (16df-800) 000016DF 5D POP EBP ebp sarà 402edf 000016E0 81ED DF0E0000 SUB EBP, 0EDF ebp sarà 402000000016E6 C3 RETN tornerà a 805 o 402005  

ctrl + g 805 smonta

  00000805 BF 000C0100 MOV EDI, 10C000000 080A B9 00010000 MOV ECX, 1000000080F 33C0 XOR EAX, EAX00000811 F3: AE REPE SCAS BYTE PTR ES: [EDI] scansiona tutti i byte da 10c00 a 10d00 per 0 00000813 75 0C JNZ SHORT 00000821 se tutto diverso da zero vai a win95 / 9800000815 BE 2D11 MOV ESI, 112D win nt0000081A BF 0000F077 MOV EDI, 77F00000 k32 base
0000081F EB 0A JMP SHORT 0000082B00000821 BE 25110000 MOV ESI, 1125 win 95/9800000826 BF 0000F7BF MOV EDI, BFF70000 k32 base  

imposta la base di kernel32.dll su edi per le puproses di scansione dei byte
controlla se tutti i 100 byte a partire da 10c00 sono zero
se sono zero imposta kernel base su 77f00000 (win nt k32 base no aslr fisso)
else a bff70000 (win 95/98 kernel32 base senza aslr corretto)
esi a qualche offset

  (esi = 1125 o 112d) (ebp = 402000) 40312d / 25 1925 o 192d (800 + 1125 o 112d) 0000082B 03F5 ADD ESI, EBP (quindi esi sarà 403125 o 40312d) 0000082D 89BD C8170000 MOV DWORD PTR SS: [EBP + 17C8], EDI salva la base del kernel del puntatore indovina perché ?? 00000833 BA 00000400 MOV EDX, 4000000000838 FC CLD00000839 B9 08000000 MOV ECX, 80000083E 56 PUSH ESI0000083F 57 PUSH EDI00000840 F3: A6 REPE CMPS BYTE PTR ES: [EDI], BYTE PTR>000008000 POPre 5F 

confronta byte pattern in k32 dll

per 95/98 questo pattern

  00001925 C2 0400 RETN 400001928 57 PUSH EDI00001929 6A 22 PUSH 220000192B 2BD2 SUB EDX, EDX  

per win nt questo modello

  0000192D C2 0400 RETN 400001930 55 PUSH EBP00001931 8B4C24 0C MOV ECX, DWORD PTR SS: [ESP + C]  

passa a ok o no

  00000844 74 0A JE SHORT 00000850 `utente destro con salto del sistema operativo destro`00000846 47 I NC EDI00000847 4A DEC EDX00000848 0F84 CD000000 JE 0000091B `utente sbagliato con salto del sistema operativo sbagliato`
0000084E ^ EB E9 JMP SHORT 00000839  

se trova il pattern andrà a 850

altrimenti 91b

a 91b c'è

  0000091B E8 BA0D0000 CALL 000016DA  

così questo tornerà a 920 (vedi sopra retn a 402005)

  00000920 8B5424 20 MOV EDX, DWORD PTR SS: [ESP + 20] 00000924 B9 40000000 MOV ECX, 4000000929 83EA 05 SUB EDX, 50000092C BE 4F180000 MOV ESI, 184F  

questo ritornerà al kernel o uscirà dall'indirizzo del thread (pushad == 0x20)
tutto il resto è spazzatura
exe non contiene nulla da 204f a 224f uscirà semplicemente tramite retn
(184f + 800 ecx = 40 due lodsd = 80 dwords = 200 byte = 224f)

se la regione ha confrontato ok al valore retn - 5 (vedere sub edx, 5)
l'app si arresta in modo anomalo e ollydbg può emettere quell'avviso

  00000931 03F5 ADD ESI , EBP 00000933 AD LODS DWORD PTR DS: [ESI] 00000934 3BC2 CMP EAX, ED X00000936 AD LODS DWORD PTR DS: [ESI] 00000937 74 04 JE SHORT 0000093D00000939 ^ E2 F8 LOOPD SHORT 000009330000093B 61 POPAD0000093C C3 RETN0000093D 8985 47010000 MOV DWORD PTR 0000093D00000939 ^ E2 F8 LOOPD SHORT 000009330000093B 61 POPAD0000093C C3 RETN0000093D 8985 47010000 MOV DWORD 00000939 PTR SS: [EBP + 147], POP00009000 PTR SS: [EBP + 147], POP000009000 61 0 < ---- l'applicazione andrà in crash 0000094B C3 RETN eip non valido o 0  

ollydbg mostrerà non so come procedere perché la memoria all'indirizzo 0 non è leggibile prova a cambiare Eip o passa un'eccezione al programma se arriva qui

disassemblaggio a 850 o 402050

  00000850 83C7 03 ADD EDI, 3 aggiungi 3 all'indirizzo bytepattern 00000853 BE E70E0000 MOV ESI, 0EE7 00000858 03F5 AGGIUNGI ESI, EBP 402ee7 = 16e7 (ee7 -800 + 1000) 0000085A 8BC6 MOV EAX, ESI
0000085C 83C0 07 ADD EAX, 7 16e7 + 7 = 16ee  

pattern di byte su 16ee

  000016EE 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E CreateFileMappin000016FE 67 41 gA  

ulteriore smontaggio

  0000085F 50 PUSH EAX ** spinge la stringa CreateFileMapping ** 00000860 8B85 C8170000 MOV EAX, DWORD PTR SS: [EBP + 17C ** 8] 00000866 50 PUSH EAX ** spinge la base del kernel 00000867 FFD7 CALL NEAR EDI (puoi indovinare ?? quale api ??)  

prova a camminare avanti a bit :)

se si patcha l'indirizzo di base kernel32 per adattarlo a xp kernel32 base @ EBP + 17C8 (vale a dire 0x7c800000 invece dell'hardcoded 77f00000) è possibile forzare l'esecuzione dell'esempio sopra in xp vm senza bisogno di NT (se hai indovinato puoi modificare EDI per l'indirizzo corretto e infetta anche xp
ho appena notato l'articolo che hai citato nel tuo commento non parla del virus ma contiene il codice sorgente completo per il virus. anche se possibile, cambia il titolo della domanda in qualcosa come come eseguire il debug del virus bolzano usando ollydbg 1.10 in nt vm o simile
Penso che il virus Bolzano non possa essere eseguito sulla versione Windows NT. Ho provato a eseguire direttamente il file malware eseguibile, ma stavo ricevendo un'eccezione per violazione di accesso.
Sto usando sp 6 di Windows NT 4.0. Ho trovato http://www.liutilities.com/malware/computer-virus/w32-bolzano/ articolo. Qui viene menzionato che "Attacca anche il file system di Windows NT. Tuttavia, se hai una versione successiva di Windows NT come la versione 3.50 a 4.0 con i service pack, non devi preoccuparti dell'attacco di questo virus". Quindi è perché OS, ricevo l'errore?
Quando eseguo il debug del malware vado al "sistema operativo corretto con il salto utente corretto" perché quando imposto il punto di interruzione su 00000850 83C7 03 ADD EDI, 3, il debugger sta arrivando a questo passaggio. Ma poi quando il programma arriva a 00000867 FFD7 CALL NEAR EDI e api chiamato è "FindNextFileA" ricevo un errore relativo a EIP.
hai indovinato cosa dovrebbe trattenere edi dal tuo commento penso che tu non l'abbia indovinato correttamente ripubblica ciò che hai modificato edi quando lo esegui per la prima volta
Prima dell'esecuzione di ADD EDI, 3 puntava a 77F13FB0 quando viene eseguita l'istruzione ADD EDI = 77F13FB3 che è KERNEL32.GetProcAddress. Quindi qui EDI punta a KERNEL32.GetProcAddress
Bene, quindi ora se quella chiamata fallisce pensa ai motivi per cui fallisce, fornisci argomenti appropriati a quella chiamata quali argomenti accetta GetProcAddress ()? sono disponibili nello stack se sono corretti e se la chiamata fallisce ancora quando si fa STEPOVER alla chiamata, sei entrato nella chiamata e hai scoperto perché non è riuscita? puoi fornire l'esatto NTSTATUS del guasto riesci a trovare in cosa viene convertito NTSTATUS quando la chiamata ritorna al codice della modalità utente? viene chiamato ripetutamente se si quante volte e quali sono i parametri dello stack su ogni chiamata (limite di 500 caratteri :( raggiunto)


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...