|
quequero.org UIC
Forum
|
View
previous topic :: View
next topic |
Author |
Message |
DaGoN Guru
Joined:
30 Aug 2002 Posts: 209
|
Posted: Sat Dec 04, 2004
11:27 pm Post
subject: Chi riesce a uccidere questo tipo di Nag? |
|
|
|
Ho buttato 3 ore prima di
risolverlo... Mi era
capitato altre volte di trovare Nag così dannatamente ostinati
e ho sempre mollato, ma oggi dopo 3 ore l'ho killato! Il
target è 0-Code HTML Converter e si può scaricare a questo
indirizzo: h_tp://www.hixus.com/ E' un piccolo
programma che serve per convertire il linguaggio html in php,
cgi, jsp e altri linguaggi script, io lo uso principalmente
per il mio sito. Non scade mai e non può essere
registrato. Il solo fastidio è questo nag schifoso e qualche
commento nel codice generato che può essere facilmente rimosso
senza interventi di reverse. Prometto che posto per filo e
per segno la mia metodologia, se voi fate lo stesso con la
vostra. Allora chi vuole provare? E' solo un
passatempo...
Byez DaGoN | |
Back to
top |
|
|
LittleLuk Moderator
Joined:
15 Aug 2002 Posts: 851
|
Posted: Sun Dec 05, 2004
9:49 pm Post subject:
|
|
|
|
mi hai incuriosito, ora
controllo | |
Back to
top |
|
|
Zero_G Moderator
Joined:
20 May 2004 Posts: 886 Location: Dark Side of the
Moon
|
Posted: Mon Dec 06, 2004
1:19 am Post subject:
|
|
|
|
mi hai messo la pulce
nell'orecchio anche a me... vediamo cosa si tira fuori!
-=Zero_G=- _________________ "To see a
World in a grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
LittleLuk Moderator
Joined:
15 Aug 2002 Posts: 851
|
Posted: Mon Dec 06, 2004
2:11 am Post subject:
|
|
|
|
Come al solito, causa i
miei problemi ho reinstallato il sice e ora dopo la seconda
poppata non riesco a uscire dal sice e ho tastiera e mouse
bloccati, appena risolvo procedo. Ciao | |
Back to
top |
|
|
Zero_G Moderator
Joined:
20 May 2004 Posts: 886 Location: Dark Side of the
Moon
|
Posted: Mon Dec 06, 2004
2:33 am Post subject:
|
|
|
|
(mini-tutorial della
buonanotte)
1) PEiD per
individuare la protezione UPX
(la dimensione del file unpackato è la stessa, quindi
credo che sia stato usato colo come crypter e non packer...)
2) DeDe
per avere di tutto di più dal Delphi!
3)
IDA come supporto
morale...
4) in Olly
carico entrambi i file .map di IDA e di DeDe per avere i nomi
giusti delle funzioni...
5)
da DeDe si può vedere che lo FormShow() del TForm14 (il nag) è
all'indirizzo 004E2FD8, quindi, sotto con il breakpoint in
Olly!
6) arrivato lì, si incomincia a risalire la corrente e
dopo vari livelli (è qui che si perde un po' più di tempo...)
sono tornato fino all'inizio ed ho capito che, nonostante si
noppi il la chiamata a FormShow(), il nag esiste già da
prima... allora ho detto: qualcuno deve averlo già creato!
(furbo, eh!? )
7)
da olly, cliccando sulla W in alto, si può vedere l'elenco
delle finestre create dal programma, con tanto di gerarchia,
ID, e compagnia bella; se si riavvia tutto lasciando aperta
questa finestra, si può notare una cosa interessante: subito a
partire dall'entry point in 004E6EE4, il programma fa una
serie di 5 chiamate alla stessa funzione (00468104) usando uno
schema comune...
Code: |
MOV ECX, DWORD PTR DS:[4EAxxx] MOV
EAX, DWORD PTR DS:[EBX] MOV EDX, DWORD PTR
DS:[4E1xxx]
| se le steppate una per una, vedrete come
per magia che ognuna di esse alloca in memoria un Form! (le
vedete comparire nella lista delle windows ed infatti gli
indirizzi con le "x" corrispondono agli handle di ognuno di
essi...)
il passo è
breve: l'ultima call inizializza il nag screen (non per niente
c'ho messo la label initWindows... )
Code: |
004E6F5A MOV ECX,DWORD
PTR DS:[4EAAC0] 004E6F60 MOV
EAX,DWORD PTR DS:[EBX] 004E6F62 MOV
EDX,DWORD PTR DS:[4E2A2C] 004E6F68
CALL
<HTMLConv.initWindows()> | non resta che noppare queste 4, salvare e
far ripartire tutto...
9)
ovviamente, e ve lo dovevate aspettare, il programma, seppur
andando a dritto, dà un errore, perché vuole cmq usare un Form
che però non esiste in memoria! ma qui Windozz ci viene in
aiuto, perché ci dice proprio l'indirizzo che gli ha dato
problemi: 004E69AB bene, vediamo cosa c'è che non va...
10)
Code: |
004E69A4 MOV EAX,DWORD
PTR DS:[4EAAC0] 004E69A9 MOV
EAX,DWORD PTR DS:[EAX] 004E69AB MOV
EDX,DWORD PTR DS:[EAX] 004E69AD
CALL DWORD PTR
DS:[EDX+E8] | ci risiamo... 4EAAC0 contiene l'handle del
nag, ve lo ricordate? forza con i nop! salvare e
riavviare, prego...
11)
tenete il respiro... bang, il nag
non c'è più, evviva Gesù!
DaGoN, fondamentale è stato guardare la lista delle
Windows di Olly (Oleh
rules! ), quindi
la prossima volta potrebbe esserti d'aiuto...
grazie per il passatempo, mi hai fatto divertire
stasera, credo che cambierò il link del Solitario con uno di
questi programmi Delphi: è carino caricarne uno in IDA e DeDe
e vederli disassemblarlo contemporaneamente mentre lo debugghi
con Olly... ah, le piccole gioie di un reverser!
sogni d'oro...
-=Zero_G=- _________________ "To see a World in a
grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
DaGoN Guru
Joined:
30 Aug 2002 Posts: 209
|
Posted: Mon Dec 06, 2004
12:59 pm Post
subject: |
|
|
|
Complimenti a Zero_G per
l'impresa! Anche se devo dire che ti sei imbarcato in
un'odissea .
Come promesso ora vi mostro la mia metologia e soprattutto
le varie strade che, per una cosa o per l'altra, si sono
rivelate senza uscita.
Quote: |
1) PEiD per individuare la
protezione UPX (la dimensione del file unpackato è la
stessa, quindi credo che sia stato usato colo come
crypter e non packer...)
| Devo dire che qui la cosa è strana: il file
è grande 424,960 bytes e decompattato a me risulta grande
1,264,640 bytes Comunque
ho risolto con Pe Explorer, che con upx ottiene sempre ottimi
risultati
2)
Una volta decompattato l'ho caricato con Resource Hacker
(vecchio amico) ma ahimè, proprio con la form 14 si pianta,
manda il processore a 100% e ciao ciao. Qui ho capito che il
vecchio RH aveva fatto la sua storia, poteva essere
gloriosamente appeso nella mia mente, di fianco al ricordo di
Fravia. Ho trovato questo grazioso sostituto, che devo
dire svolge egreggiamente il suo lavoro: il nome è Restorator
(http://www.bome.com/Restorator/). Si può utilizzare anche
Pe Explorer. Sotto la voce RC Data troverete la famigerata
Form 14. Come hai fatto a sapere che era proprio quella?
Perchè è l'unica che ha il Caption = '0-Code HTML
Converter - UNREGISTERED TRIAL VERSION'. Questo ci dice
anche che il prog è scritto in Delphi e se andiamo giù vediamo
anche una cosa interessante:
Code: |
object dxButton2: TdxButton
Left = 306
Top = 9 Width = 93
Height = 25
Anchors = [akRight, akBottom]
OnClick = dxButton2Click
<----- Questo è l'action
performed Caption = 'Try'
TabOrder = 1
ps: il
pulsante try chiude il nag
| La mia idea è stata quella di posizionare
l'action performed del pulsante try sullo show della form:
Code: |
da così: FormStyle = fsStayOnTop
OldCreateOrder = False OnClose = FormClose
OnShow = FormShow a così: FormStyle =
fsStayOnTop OldCreateOrder = False OnClose =
FormClose OnShow = dxButton2Click
| Per
tutti i lumi di Leondardo Da Vinci, non funge! Ho provato
anche OnShow = FormClose. Se invece faccio lo stesso con
l'action performed del pulsante 'Register' il tutto funziona:
viene richiamato correttamente l'evento associato e si apre il
browser. Maledetta Form 14! L'idea non è malvagia e la
metto in atto: Delete Resource! Sì, niente di meglio che
cancellare l'intera form! Faccio partire il prog e si
chiude subito: capisco che è meglio lasciare la form 14 dove
si trova. Google, il miglior amico del netsurfer, mi darà
una mano! Trovo che per nascondere una finestra in delphi è
sufficiente la dicitura 'Visible = False'. Niente, sono in
mezzo al mare. Ricontrollo il pulsante Try e trovo che c'è una
simpatica variabile 'ModalResult = 2'. Dannazione, come ho
fatto a non arrivarci prima? La form 14 è modale: questo
significa che se la form non viene chiusa correttamente la
form 1 non avrà mai il fuoco! E' ora di abbandonare questa
metodologia, non possiamo fare più niente, tutto quello che
c'era da sapere è stato detto.
3) DeDe: carichiamo
tutti i symbols file e scopriamo che il prog è scritto in
delphi 6. Facciamolo analizzare a DeDe e clickiamo su
Procedures e Class Name TForm14. Cerchiamo l'action
FormShow e facciamo in modo di non farlo eseguire:
Code: |
004E2FD8 A140AF4E00
mov
eax, dword ptr [$004EAF40]
004E2FDD 8B00
mov
eax, [eax]
* Reference to control
TForm1.JvTrayIcon1 : TJvTrayIcon |
004E2FDF 8B80A0040000
mov eax,
[eax+$04A0] 004E2FE5 33D2
xor edx, edx
*
Reference to: JvTrayIcon.Proc_004DBE5C |
004E2FE7 E8708EFFFF
call 004DBE5C
004E2FEC C3
ret
mov eax, dword ptr
[$004EAF40] diventa ret diventa 004E2FD8
C390909090
RETN seguito da 4 nop
| Niente da fare, la Form 14 fa la sua
comparsa, ancora, e senza badare al nostro 'ritocco'. Il
mio client torrent finisce di scaricare il Greatest hits di
Chris Rea. Faccio partire 'The Road To Hell' (ci sta proprio
bene), tra l'altro è la prima canzone del cd. Mi domando:
<<Se la strada porta all'inferno, da qualche parte dovrà
pur cominciare?>>. Torno su dede e do un'occhiata
alla TForm1: sull'action FormShow non c'è niente di chè, ma
sull'action FormAttivate guardate un po' che c'è:
Code: |
* Reference to TForm14 instance |
004E69A4 A1C0AA4E00
mov eax,
dword ptr [$004EAAC0] 004E69A9
8B00
mov eax,
[eax] 004E69AB 8B10
mov edx, [eax]
*
Reference to method TForm14.ShowModal() |
004E69AD FF92E8000000
call dword ptr
[edx+$00E8] 004E69B3 C3
ret
| Bingo, è proprio il punto d'origine. E' ora
di mettere una transenna alla Strada per l'Inferno:
Code: |
004E69A4 A1C0AA4E00
mov
eax, dword ptr [$004EAAC0] diventa:
004E69A4 C390909090
RETN I nop non servono a
niente ma lasciano il codice pulito :)
| Faccio
partire il file e il nag è finito bello che all'inferno!
... adesso che ci penso Zero_G, anch'io con l'Odissea non
scherzo hehehe.
Tools usati: Restorator DeDe
WinHex Pe Explorer
Fine. DaGoN | |
Back to
top |
|
|
Zero_G Moderator
Joined:
20 May 2004 Posts: 886 Location: Dark Side of the
Moon
|
Posted: Mon Dec 06, 2004
5:11 pm Post subject:
|
|
|
|
DaGoN wrote: |
... adesso che ci penso Zero_G, anch'io
con l'Odissea non scherzo
hehehe. |
beh, strade diverse c'hanno portato
allo stesso punto, quindi vuol dire che c'avevamo visto
giusto!
carino Restorator, non l'avevo mai
usato...
per quanto riguarda il discorso della dimensione
diversa, anche se un po' di zen indurrebbe a pensare "chi se
ne frega, l'importante è che funzioni", ancora devo capire
perché scompattato con lo stesso UPX rimane grande uguale e
viene tranquillamente disassemblato e debuggato...
spero che questo mini tutorial possa essere
utile a qualcuno
-=Zero_G=- _________________ "To see a World in
a grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
Zero_G Moderator
Joined:
20 May 2004 Posts: 886 Location: Dark Side of the
Moon
|
Posted: Tue Dec 07, 2004
11:18 am Post
subject: |
|
|
|
non potevo dormire senza
capire questa cosa...
per unpackare l'eseguibile ho usato UPX 1.92b, (è
sempre sulla homepage di UPX (upx.sourceforge mi pare));
allora, ho riprovato la procedura ed effettivamente ho notato
un'anomalia: se si unpacka con UPX, lui dice in effetti
così
Code: |
1264640 <-
424960 33.60% win32/pe
HTMLConverter.exe Unpacked 1
file. |
ma
poi in pratica il file è rimasto della stessa dimensione, solo
che prima non si poteva debuggare, adesso sì...
è molto strano, perché in effetti la
dimensione dell'immagine in memoria è di circa 1,2 MB (l'ho verificato sia
con OllyDump che con
il plugin UPX Unpacker
di PEiD), come avete visto voi che l'avete unpackato
con PE Explorer; in ogni caso, entrambi i file, escluso quello
originale, presentano lo stesso codice, perché ne ho
confrontato il disassemblato (a me corrispondono anche gli
indirizzi!).
se ne deduce che questa discrepanza è
data dal fatto che probabilmente UPX ha cryptato il codice e
compresso o lasciate compresse le "resources" originali del
programma, e gli unpacker dumpano l'intero segmento del
programma in memoria, mentre l'unpacker nativo di UPX analizza
l'eseguibile e decide di lasciare compresso ciò che non è
codice.
strana la vita, a volte...
-=Zero_G=- _________________ "To see a
World in a grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
DaGoN Guru
Joined:
30 Aug 2002 Posts: 209
|
Posted: Tue Dec 07, 2004
3:31 pm Post subject:
|
|
|
|
Io ho fatto un'altra prova:
ho caricato l'exe su ollydbg, andando giù con il pulsante
Pagedown(5/6 volte) trovi questo codice:
Code: |
00541EFD . 8903
MOV DWORD PTR
DS:[EBX],EAX 00541EFF . 83C3 04
ADD EBX,4 00541F02
.^EB E1 JMP
SHORT HTMLConv.00541EE5 00541F04 >
FF96 98441400 CALL DWORD PTR DS:[ESI+144498]
00541F0A > 61
POPAD 00541F0B
.^E9 D44FFAFF JMP HTMLConv.004E6EE4
00541F10 281F5400
DD HTMLConv.00541F28 00541F14
381F5400 DD
HTMLConv.00541F38 00541F18
10B74E00 DD
HTMLConv.004EB710 00541F1C
00
DB 00 00541F1D 00
DB 00
00541F1E 00
DB 00 00541F1F
00
DB 00
| praticamente finchè finisce il codice.
Piazzi un breakpoint sull'evidentissimo OEP(Original Entry
Point) 'JMP HTMLConv.004E6EE4', premi f9 e dumpi con
ollydump(senza checkare il rebuild import). Fixi l'import
table mettendo l'oep corretto su ImportREC (IAT autoSearch e
getimports), correggi le poche import con un bel tasto destro
del mouse sull'invalid import e clicchi Trace Level1(Disam).
Fixi il dump aggiungendo una nuova sezione, sempre usando
ImportREC e hai finito con l'upx. Ottieni un file dumpato di
1.347.584 bytes con le resource incasinate ma FUNZIONANTE.
In questo modo però dede non è di grande aiuto: non si
vedono più le procedure e la cosa interessante è che, se
apriamo il nostro file dumpato a mano con Restorator e
visualiziamo la form 1, scopriremo che tutte le resource sono
sballate.
Comuque qui ho un'altra metodologia, basata
sulla prima, ma senza l'aiuto di dede.
1) Apri il file con Pe Explorer e lo decompatti 2)
Apri Restorator e cerchi nella form 1 questo:
Code: |
OldCreateOrder = False
OnActivate = FormActivate OnClose = FormClose
OnShow = FormShow
| Trovi
questo codice e cancelli l'action performed 'OnActivate =
FormActivate', salvi e ti sei sbarazzato del nag. Credo
che meglio di così non si possa fare!
La cosa che mi
manca sono le resource in chiaro, perchè se decompatto a
manovella l'upx le resource sono incasinate?
@Zero_G
A volte scrivo cose che possono essere sottintese(almeno
per noi ): questo
perchè penso che magari ci sono persone che leggono questo
post meno pratiche di noi e potrebbero smarrirsi con
ragionamenti troppo riassuntivi.
Ciauz,
DaGoN | |
Back to
top |
|
|
Piccinano Newbie
Joined: 29 Oct 2003 Posts: 17 Location:
Thrinakie
|
Posted: Tue Dec 07, 2004
9:55 pm Post subject:
|
|
|
|
DaGoN wrote: |
@Zero_G A volte scrivo cose che
possono essere sottintese(almeno per noi ):
questo perchè penso che magari ci sono persone che
leggono questo post meno pratiche di noi e potrebbero
smarrirsi con ragionamenti troppo riassuntivi.
DaGoN |
Direi che è esattamente il contrario,
spesso date troppe cose per sottintese.
Ricordatevi di noi newbie!
Piccinano | |
Back to
top |
|
|
Zero_G Moderator
Joined:
20 May 2004 Posts: 886 Location: Dark Side of the
Moon
|
Posted: Wed Dec 08, 2004
2:02 am Post subject:
|
|
|
|
Piccinano
wrote: |
DaGoN
wrote: |
@Zero_G A volte scrivo cose
che possono essere sottintese(almeno per noi ): questo perchè penso che magari ci sono
persone che leggono questo post meno pratiche di
noi e potrebbero smarrirsi con ragionamenti troppo
riassuntivi.
DaGoN |
Direi che è esattamente il
contrario, spesso date troppe cose per sottintese.
Ricordatevi di noi newbie!
Piccinano |
beh dai, noi due siamo stati abbastanza
comprensibili in fondo, vero DaGoN? se rileggi
quello che abbiamo scritto e lo provi, vedrai che non troverai
difficoltà a verificarlo...
[@Dagon:] te ne
dico anche un'altra: carica l'eseguibile in PEiD e lancia il
plugin UPX unpacker o PEiD Generic Unpacker; entrambi ti danno
l'eseguibile lungo 1.347.584 bytes, ma anche quello con le
funzioni sballate... (ho provato
anche con procdump, ma il risultato è lo stesso... )
il
saggio della montagna ha parlato: "se il file è compresso
con UPX, lasciatelo scompattare a chi l'ha creato..."
"stretta la foglia, lunga la via..."
-=Zero_G=- _________________ "To see a World in
a grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
Piccinano Newbie
Joined: 29 Oct 2003 Posts: 17 Location:
Thrinakie
|
Posted: Wed Dec 08, 2004
4:57 pm Post subject:
|
|
|
|
Zero_G wrote: |
beh dai, noi due siamo stati
abbastanza comprensibili in fondo, vero DaGoN? se rileggi quello che abbiamo scritto e lo
provi, vedrai che non troverai difficoltà a
verificarlo...
|
Si
è vero, in questo thread sieste stati entrambi molto
comprensibili (ma a dire in vero voi due, DaGoN e Zero_G, lo
siete sempre). Questo però dovrebbe valere anche per gli
altri frequentatori del forum! | |
Back to
top |
|
|
|
Watch
this topic for replies |
You can post new topics in this forum You
can reply to topics in this forum You can edit your
posts in this forum You can delete your posts in this
forum You can vote in polls in this forum You
can moderate
this forum |
|