Zoom Icon

Hotline Client

From UIC

Hotline Client Time Remove

Contents


Hotline Client
Author: Tin_Man
Email: None
Website: None
Date: 01/01/2001 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Flag Italian.gif
Comments:



Abstract

In questo tute Tin_Man ci insegnerà come depistare (hehe che bel termine) i crc check, prendete questo tute come esempio perché occasioni simili posso anche ricapitare più volte nella vita ;)))

Quequero


Tools


URL o FTP del programma

Hotline Software


Notizie sul programma

  • Time Expiration
  • CRC Check


Essay

Salve a tutti, è il primo tutorial che scrivo per la UIC, e quindi vi presento un software che sarebbe di difficoltà media, ma per un errore dei programmatori è di livello facilissimo :-). Iniziamo ad analizzare il target, all'avvio non chiede nessun seriale, e funziona perfettamente, proviamo ad andare avanti con la data, al riavvio il programma si blocca e chiama il browser dicendo che il programma è scaduto e bisogna scaricare la nuova versione, benissimo ci scriviamo (o memorizziamo) la scritta di avvertimento e iniziamo a disassemblarlo. Apriamo W32Dasm, carichiamo l'eseguibile e una volta disassemblato apriamo la finestra delle "String Reference", la scorriamo (consiglio il mouse con la rotella una comodita' fantastica) e troviamo la nostra bella stringa "This copy of Hotline 1.5 has" a questo punto cliccandoci sopra 2 volte ci ritroviamo al codice seguente,

00404AFF E8BC8C0800 call 0048D7C0
00404B04 3C00 cmp al, 00
00404B06 745D je 00404B65
00404B08 6A20 push 00000020
00404B0A 8D4588 lea eax, dword ptr [ebp-78]
00404B0D 50 push eax
00404B0E E8ADE00700 call 00482BC0
00404B13 59 pop ecx
00404B14 59 pop ecx
00404B15 C7459490154D00 mov [ebp-6C], 004D1590
00404B1C 66C74588E903 mov [ebp-78], 03E9

Possible StringData Ref from Data Obj ->"cThis copy of Hotline 1.5 has "
->"expired. See http://www.hotlinesw.com/download "
->" for a current version.I'm not "
->"able to respond right now. Please "
->"try later!"

Il codice è un classico, la call 0048d7c0 controlla la data, se è valida restitusce 0 in AL altrimenti lo setta a 1 ed il je successivo non viene eseguito, patchiamo il je e lo sostituiamo con un jmps, per far questo guardiamo nella riga in fondo a w32dasm e ci segniamo l'offset nel file "@offset 0003f06h in file:HLClient.exe" apriamo hlclient.exe con HIEW, premiamo 2 volte il tasto INVIO, premiamo F5 ed inseriamo 3f06, HIEW ci posiziona sul JE, premiamo F3, e cambiamo il codice 74 in EB, premiamo F9 ed ecco il nostro eseguibile patchato (logicamente è meglio farlo su una copia, anche perché se il target è ancora aperto da w32dasm non potete modificarlo). Perfetto, lanciamo il nostro bel eseguibile modificato, OPS! il programma si inchioda, restituendoci un errore strano, ummhh!!!! diamo un occhiata con Softice e vediamo il perché.

Carichiamo il target con il softice loader, lo lanciamo (con load), e vediamo la prima cosa strana, il SYMbol loader ci informa che non trova alcuni file .cp ?????????????????? Cosa succede, premiamo skip ed andiamo avanti, appare la finestra di softice, ed iniziamo a steppare il programma con F10 (F10 non entra nelle sotto-procedure) notiamo subito una cosa diversa dal solito, CI SONO I NOMI DELLE PROCEDURE!, i programmatori di HLClient si sono dimenticati di strippare le informazioni di debug, non ci credo (ma vi rendete conto che roba? NdQuequero), andiamo avanti, sulla

  • call main

Premiamo F8 per entrarvi, avanti con F10, fino alla

  • call CMyApplication::Startup

Dove entriamo con F8, andiamo ancora avanti con F10 e Tadah! guardate cosa spunta:

  • call CrashIfCorrupt

Dopo esserci asciugati gli occhi dalle lacrime dovute alle risate, ci segniamo l'indirizzo di questa misteriosissima call che è 004025E0, torniamo in W32Dasm, premiamo F12 ed inseriamo questo indirizzo, ci appare il codice seguente

004025D7 C1EA10 shr edx, 10
004025DA 899508FCFFFF mov dword ptr [ebp+FFFFFC08], edx
004025E0 E86BF0FFFF call 00401650
004025E5 A10C9C4C00 mov eax, dword ptr [004C9C0C]
004025EA 2503000000 and eax, 00000003

Adesso sappiamo che la call 00401650 in realtà è call CrashIfCorrupted ovvero il CRC check dell'applicazione, guardiamo in che offset è nel file @offset 0019E0h, riapriamo HIEW e patchamo i 5 Byte E8 6B F0 FF FF in 90 90 90 90 90, il CRC check non verrà più eseguito, salviamo con F9 le modifiche ed ecco un HLClient che funzionerà anche nel 2001 (alla faccia del millenium bug).

Logicamente non aspettatevi che tutti i programmatori siano così sprovveduti, oppure che in un eventuale nuova release ci siano ancora, oppure che li chiamino in modo così evidente, quindi studiatevi la routine a 00401650, per vedere come funziona una implementazione di un CRC check che crasha l'applicazione se diversa dall'originale.


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevole e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.