Hotline Client Time Remove
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

Autore: Tin_Man

Livello
Principianti

TOOLS
Disassembler    W32Dasm (o IDA)
Debugger        Softice 3.x
Hex_Editor      Hiew (o altro)

Target
HotLine Client HLClient.exe
URL:
http://www.hotlinesw.com/download

Protezioni rimosse
Time Expiration
CRC Check

Salve a tutti, e' il primo tutorial che scrivo per la UIC, e quindi vi
presento un software che sarebbe di difficolta' media, ma per un
errore dei programmatori e' 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 chima il browser dicendo che il
programma e' 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 dell "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 e' un classico, la call 0048d7c0 controlla la data, se e'
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 e' meglio farlo su
una copia, anche perche' se il target e' ancora aperto da w32dasm
non potete modificarlo).
Perfetto, lanciamo il nostro bel eseguibile modificato, OPS! il
programma si inchioda, restituendoci un erorre strano, ummhh!!!!
diamo un occhiata con Softice e vediamo il perche'.

Carichiamo il target con il softice loader, lo lanciamo (con load), e
vediamo la prima cosa strana, il SYbol 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 sottoprocedure) 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 e'
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 realta' e' call
CrashIfCorrupted ovvero il CRC check dell'applicazione,
guardiamo in che offset e' 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 verra' piu' eseguito, salviamo con F9 le modifiche
ed ecco un HLClient che funzionera' anche nel 2001 (alla faccia del
millenium bug).

Logicamente non aspettatevi che tutti i programmatori siano cosi'
sprovveduti, oppure che in un eventuale nuova release ci siano
ancora, oppure che li chiamino in modo cosi' 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.