quequero.org Forum Index quequero.org
UIC Forum
 
 UIC HomeUIC Home FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 
 ProfileProfile   You have no new messagesYou have no new messages   Log out [ Zero_G ]Log out [ Zero_G ]   

Chi riesce a uccidere questo tipo di Nag?

 
Post new topic   Reply to topic    quequero.org Forum Index -> Reverse Engineering
View previous topic :: View next topic  
Author Message
DaGoN
Guru
Guru


Joined: 30 Aug 2002
Posts: 209

PostPosted: Sat Dec 04, 2004 11:27 pm    Post subject: Chi riesce a uccidere questo tipo di Nag? Reply to topic Reply with quote Edit/Delete this post Delete this post

Ho buttato 3 ore prima di risolverlo... Wink
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... Smile

Byez
DaGoN
Back to top
View user's profile Send private message Send e-mail
LittleLuk
Moderator
Moderator


Joined: 15 Aug 2002
Posts: 851

PostPosted: Sun Dec 05, 2004 9:49 pm    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

mi hai incuriosito, ora controllo
Back to top
View user's profile Send private message Send e-mail
Zero_G
Moderator
Moderator


Joined: 20 May 2004
Posts: 886
Location: Dark Side of the Moon

PostPosted: Mon Dec 06, 2004 1:19 am    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

mi hai messo la pulce nell'orecchio anche a me... vediamo cosa si tira fuori! Twisted Evil

-=Zero_G=-
_________________
"To see a World in a grain of Sand,
Hold Infinity in palm of your Hand."
Back to top
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
LittleLuk
Moderator
Moderator


Joined: 15 Aug 2002
Posts: 851

PostPosted: Mon Dec 06, 2004 2:11 am    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

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
View user's profile Send private message Send e-mail
Zero_G
Moderator
Moderator


Joined: 20 May 2004
Posts: 886
Location: Dark Side of the Moon

PostPosted: Mon Dec 06, 2004 2:33 am    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

Mr. Green (mini-tutorial della buonanotte) Mr. Green

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...) Razz

2) DeDe per avere di tutto di più dal Delphi! Cool

3) IDA come supporto morale... Rolling Eyes

4) in Olly carico entrambi i file .map di IDA e di DeDe per avere i nomi giusti delle funzioni... Idea

5) da DeDe si può vedere che lo FormShow() del TForm14 (il nag) è all'indirizzo 004E2FD8, quindi, sotto con il breakpoint in Olly! Twisted Evil

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!? Wink )

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... Confused
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...)

Cool il passo è breve: l'ultima call inizializza il nag screen (non per niente c'ho messo la label initWindows... Smile )
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... Cool

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... Twisted Evil

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! Laughing salvare e riavviare, prego... Mega Ball

11) tenete il respiro... Shocked bang, il nag non c'è più, evviva Gesù! Evil

DaGoN, fondamentale è stato guardare la lista delle Windows di Olly (Oleh rules! Very Happy ), quindi la prossima volta potrebbe esserti d'aiuto... Angry

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!

Samurai Tired Samurai

sogni d'oro...
Angel
-=Zero_G=-
_________________
"To see a World in a grain of Sand,
Hold Infinity in palm of your Hand."
Back to top
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
DaGoN
Guru
Guru


Joined: 30 Aug 2002
Posts: 209

PostPosted: Mon Dec 06, 2004 12:59 pm    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

Complimenti a Zero_G per l'impresa!
Anche se devo dire che ti sei imbarcato in un'odissea Mr. Green .
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 Shocked
Comunque ho risolto con Pe Explorer, che con upx ottiene sempre ottimi risultati Wink

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
View user's profile Send private message Send e-mail
Zero_G
Moderator
Moderator


Joined: 20 May 2004
Posts: 886
Location: Dark Side of the Moon

PostPosted: Mon Dec 06, 2004 5:11 pm    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

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! Wink

carino Restorator, non l'avevo mai usato... Rolling Eyes

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... Embarassed

spero che questo mini tutorial possa essere utile a qualcuno Idea

-=Zero_G=-
_________________
"To see a World in a grain of Sand,
Hold Infinity in palm of your Hand."
Back to top
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
Zero_G
Moderator
Moderator


Joined: 20 May 2004
Posts: 886
Location: Dark Side of the Moon

PostPosted: Tue Dec 07, 2004 11:18 am    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

non potevo dormire senza capire questa cosa... Mr. Green

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ì... Confused

è 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... Rolling Eyes

-=Zero_G=-
_________________
"To see a World in a grain of Sand,
Hold Infinity in palm of your Hand."
Back to top
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
DaGoN
Guru
Guru


Joined: 30 Aug 2002
Posts: 209

PostPosted: Tue Dec 07, 2004 3:31 pm    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

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. Mr. Green

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 Smile): 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
View user's profile Send private message Send e-mail
Piccinano
Newbie
Newbie


Joined: 29 Oct 2003
Posts: 17
Location: Thrinakie

PostPosted: Tue Dec 07, 2004 9:55 pm    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

DaGoN wrote:
@Zero_G
A volte scrivo cose che possono essere sottintese(almeno per noi Smile): 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. Smile

Ricordatevi di noi newbie! Rolling Eyes

Piccinano
Back to top
View user's profile Send private message Send e-mail
Zero_G
Moderator
Moderator


Joined: 20 May 2004
Posts: 886
Location: Dark Side of the Moon

PostPosted: Wed Dec 08, 2004 2:02 am    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

Piccinano wrote:
DaGoN wrote:
@Zero_G
A volte scrivo cose che possono essere sottintese(almeno per noi Smile): 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. Smile

Ricordatevi di noi newbie! Rolling Eyes

Piccinano


beh dai, noi due siamo stati abbastanza comprensibili in fondo, vero DaGoN? Wink se rileggi quello che abbiamo scritto e lo provi, vedrai che non troverai difficoltà a verificarlo... Smile

[@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... Shocked (ho provato anche con procdump, ma il risultato è lo stesso... Crying or Very sad )

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..." Rotfl

-=Zero_G=-
_________________
"To see a World in a grain of Sand,
Hold Infinity in palm of your Hand."
Back to top
View user's profile Send private message Send e-mail Visit poster's website MSN Messenger
Piccinano
Newbie
Newbie


Joined: 29 Oct 2003
Posts: 17
Location: Thrinakie

PostPosted: Wed Dec 08, 2004 4:57 pm    Post subject: Reply to topic Reply with quote Edit/Delete this post Delete this post

Zero_G wrote:

beh dai, noi due siamo stati abbastanza comprensibili in fondo, vero DaGoN? Wink se rileggi quello che abbiamo scritto e lo provi, vedrai che non troverai difficoltà a verificarlo... Smile


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
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    quequero.org Forum Index -> Reverse Engineering All times are GMT + 1 Hour

Page 1 of 1
Watch this topic for replies
 
Delete this topic Move this topic Lock this topic Split this topic 
Jump to:  
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


Powered by -=Quequero=-