How to: unpacking di PC Guard 5.0 |
||
Data |
by "epokh" |
� |
08/03/2005 |
Published by Quequero |
|
Per il fatto che l'inchiostro è soprattutto acqua, la calligrafia cinese, nel suo controllare lo scorrere dell'acqua |
Ho colpito il tuo tsubo chiamato Seichi Nobok, da questo momemto in poi proverai una voglia irrefrenabile di ucciderti di seghe...... Scusa Que ma non c'è
lo fatta a resistere prima o poi dovevo dirla questa frase! |
con il pennello morbido in quanto distinto dalla penna dura, richiede che si segua la corrente. |
.... |
|
.... |
Difficolt� |
( )NewBies ()Intermedio (X)Avanzato ( )Master |
� |
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Essay |
Le modalità di protezione offerte da PC Guard 5.0 sono 4: remote, code, plain,network.
Modalità Remote
wrapping + encryption + anti-debugging + locking + activation keys
Il programma è cifrato e wrappato. Un codice di attivazione valido è richiesto per ogni computer che si vuole sbloccare.
Modalità Code
wrapping + encryption + anti-debugging + locking
Il programma è cifrato e wrappato. Il programma si sblocca dal codice ottenuto da un computer remoto.
Il programma è vincolato al target computer
Modalità Plain
wrapping + encryption + anti-debugging
Il programma è cifrato e wrappato. ll programma non è vincolato al target computer e non è richiesta nessuna chiave di attivazione.
Modalità Network
wrapping + encryption + anti-debugging + network licensing
Il programma è cifrato e wrappato. Solo un numero limitato di workstation su una rete possono accedere al programma protetto allo stesso tempo.
Le prove che ho fatto io sono state con la modalità Plain, anche se sembra funzionare anche con le altre modalità ma non ne sono certo al 100%.
|
0060E000 Program entry point IsDebugPresent hidden 0060E343 Access violation when writing to [657EAB6E] 0060E564 Access violation when writing to [B4E6507E] 0060E6D8 Single step event at <programma>.0060E6D8 0060EA0D Single step event at <programma>.0060EA0D 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 0061D999 Single step event at <programma>.0061D999 003A0000 Module C:\cartella\<programma>\<programma>.DLL 76610000 Module C:\WINDOWS\System32\SETUPAPI.dll 77BE0000 Module C:\WINDOWS\system32\msvcrt.dll 76340000 Module C:\WINDOWS\system32\comdlg32.dll 70A70000 Module C:\WINDOWS\system32\SHLWAPI.dll 78090000 Module C:\WINDOWS\WinSxS\...\COMCTL32.dll 77390000 Module C:\WINDOWS\system32\SHELL32.dll 0062198F Single step event at <programma>.0062198F 72F50000 Module C:\WINDOWS\System32\WINSPOOL.DRV 004475FC Memory breakpoint when executing [004475FC] <<--- OEP! |
00570000 Program entry point 00570349 Access violation when writing to [657EAB6E] <-- il blocco di eccezioni dell'eseguibile 0057056A Access violation when writing to [B4E6507E] 005706DE Single step event at <programma>.005706DE 00570A13 Single step event at <programma>.00570A13 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 00390000 Module C:\programma\<unaDllpackata>.dll <-- la dll viene caricata qui Code section extended to include self-extractor 00398343 Access violation when writing to [657EAB6E] <-- il blocco di eccezioni della DLL 00398564 Access violation when writing to [B4E6507E] 003986D8 Single step event at <unaDllpackata>.003986D8 00398A0D Single step event at <unaDllpackata>.00398A0D 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 003A79FD Single step event at <unaDllpackata>.003A79FD 77390000 Module C:\WINDOWS\system32\SHELL32.dll 77BE0000 Module C:\WINDOWS\system32\msvcrt.dll 70A70000 Module C:\WINDOWS\system32\SHLWAPI.dll 78090000 Module C:\WINDOWS\WinSxS\...\comctl32.dll 003AB9F3 Single step event at <unaDllpackata>.003AB9F3 77300000 Module C:\WINDOWS\system32\comctl32.dll 00AD0000 Module C:\Program Files\Windows Privacy Tools\WinPT\PTD.dll 5B090000 Module C:\WINDOWS\system32\uxtheme.dll 00C00000 Module C:\Program Files\Windows Privacy Tools\GPGOE\GPGOE.dll 00D30000 Module C:\blackbox\plugins\BBLeanSkin\bbLeanSkinEng.dll 00E20000 Module C:\Program Files\Apoint2K\EzAuto.dll 003AB9F3 Single step event at <unaDllpackata>.003AB9F3 00390000 Unload C:\programma\<unaDllpackata>.dll <-- la dll viene scaricata qui 77F65A58 INT3 command at ntdll.DbgBreakPoint 0057FABB Single step event at <programma>.0057FABB 00F40000 Module C:\WINDOWS\System32\PEGRP32C.dll 76340000 Module C:\WINDOWS\system32\comdlg32.dll 72F50000 Module C:\WINDOWS\System32\WINSPOOL.DRV 76310000 Module C:\WINDOWS\System32\msimg32.dll 74CA0000 Module C:\WINDOWS\System32\oledlg.dll 7CCC0000 Module C:\WINDOWS\system32\ole32.dll 5F140000 Module C:\WINDOWS\System32\OLEPRO32.DLL 00583B42 Single step event at <programma>.00583B42 <-- parte finale del blocco dell'eseguibile 770E0000 Module C:\WINDOWS\system32\OLEAUT32.dll 0049AD55 Memory breakpoint when executing [0049AD55] <<--- OEP ! |
0048A000 Program entry point IsDebugPresent hidden 0048A349 Access violation when writing to [657EAB6E] <-- 1' blocco di eccezioni 0048A56A Access violation when writing to [B4E6507E] 0048A6DE Single step event at <programma>.0048A6DE 0048AA23 Single step event at <programma>.0048AA23 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 0049A4F2 Single step event at <programma>.0049A4F2 0049E6BE Single step event at <programma>.0049E6BE 00474349 Access violation when writing to [657EAB6E] <-- 2' blocco di eccezioni 0047456A Access violation when writing to [B4E6507E] 004746DE Single step event at <programma>.004746DE 00474A23 Single step event at <programma>.00474A23 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 004844F2 Single step event at <programma>.004844F2 77300000 Module C:\WINDOWS\system32\COMCTL32.dll 76C40000 Module C:\WINDOWS\system32\IMAGEHLP.dll 77BE0000 Module C:\WINDOWS\system32\msvcrt.dll 76340000 Module C:\WINDOWS\system32\comdlg32.dll 70A70000 Module C:\WINDOWS\system32\SHLWAPI.dll 77390000 Module C:\WINDOWS\system32\SHELL32.dll 78090000 Module C:\WINDOWS\WinSxS\...\comctl32.dll 004886BE Single step event at <programma>.004886BE 77BD0000 Module C:\WINDOWS\system32\VERSION.dll 00428238 Memory breakpoint when executing [00428238] <<--- OEP ! |
Ora possono verificarsi 2 casi :
a) il caso fortunato: tutti i puntatori sono risolti allora basta fixare il dump del programma originale:
b) il caso sfortunato: ci sono alcuni puntatori irrisolti in genere ho notato che basta fixarli con le seguenti funzioni:
kernel32.ExitProcess,kernel32.ExitThread, msvcrt._exit
Come nel caso qui sotto,facendo ShowInvalid si notano tre puntatori non risolti:
Che fixiamo con le opportune ExitProcess di Kernel32.Se questo non dovesse funzionare, siamo abbastanza nella m***a perchè dovremmo andare a spulciare fra le altre librerie importate e vedere quale funzione manca basandosi sul proprio intuito o culo.
NOTA:
Vi ricordo, visto che accade spesso, che
quando fixiamo il dump dobbiamo selezionare il dump del processo originale e non l'exe packato!
A questo punto non ci resta che crackare il nostro bel programma unpackato come siamo soliti fare!
Unpacking di PC Guard 5.0
Vediamo di applicare le tecniche sopra esposte per unpackare un programma protetto con PC Guard 5.0. E quale programma ho scelto secondo voi?
Lo stesso PC Guard 5.0 che indovinate con cosa è packato? Eh si proprio con se stesso? (Mi chiedo come abbiano fatto: è uguale al problema dell'uovo e della gallina).
Infatti il nostro fido PEid ci segnala giustamente che:
Allora carichiamo PCGWIN32.EXE con Ollydbg e troviamo l'OEP con i metodi descritti in precedenza. In particolare bypassiamo tutte le eccezioni (Shift+F9) in modo da eseguirlo fino al suo caricamento e poi chiudiamo PC Guard. I Log di Ollydbg sono abbastanza eloquenti:
|
Cosa deduciamo? Dai log di esempio che avevo riportato sopra è ovvio che il programma PCGWIN32.EXE è stato packato 2 volte con PCGuard 5.0!
Il Memory Breakpoint on Access lo dobbiamo mettere dopo la penultima eccezione SingleStep del secondo blocco di eccezioni, come si può vedere nel log. Ed ecco come si presenta il log quando ho trovato l'OEP:
IsDebugPresent hidden 0048A349 Access violation when writing to [657EAB6E] 0048A56A Access violation when writing to [B4E6507E] 0048A6DE Single step event at PCGWIN32.0048A6DE 0048AA23 Single step event at PCGWIN32.0048AA23 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 0049A4F2 Single step event at PCGWIN32.0049A4F2 0049E6BE Single step event at PCGWIN32.0049E6BE 00474349 Access violation when writing to [657EAB6E] 0047456A Access violation when writing to [B4E6507E] 004746DE Single step event at PCGWIN32.004746DE 00474A23 Single step event at PCGWIN32.00474A23 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 77F65A58 INT3 command at ntdll.DbgBreakPoint 004844F2 Single step event at PCGWIN32.004844F2 77310000 Module C:\WINDOWS\system32\COMCTL32.dll 76C50000 Module C:\WINDOWS\system32\IMAGEHLP.dll 77BE0000 Module C:\WINDOWS\system32\msvcrt.dll 76360000 Module C:\WINDOWS\system32\comdlg32.dll 70A70000 Module C:\WINDOWS\system32\SHLWAPI.dll 7CCC0000 Module C:\WINDOWS\system32\SHELL32.dll 78090000 Module C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.1612_x-ww_7c379b08\comctl32.dll 00488B75 Memory breakpoint when reading [00401000] <<-- ecco l'OEP |
Ora facciamo il dump del nostro bel processo, in cui possiamo vedere che l'OEP è 88B75:
Poi con ImportRec controlliamo la IAT del dump del processo che ha solo un puntatore non risolto, che culo!
Fixiamo la IAT con la solita ExitProcess e abbiamo il nostro bel PC Guard unpackato!
Mi raccomando non unpackate troppo altrimenti diventate ciechi!
������������������������� ������������������������������������������������������������������������������� ...::: EPOKH :::...
Note finali |
Grazie ad Eloo (un cracker francese) per avermi concesso gentilmente i log particolari di OllyDbg. Per la cronaca: non gli ho chiesto il permesso visto che sono pubblici, però visto che si è rotto le palle a studiarsi PC Guard merita un ringraziamento lo stesso.
Mi sono interessato su PC Guard perchè c'è un programma di nome EGirl (un pornazzo virtuale lo so) che mi ha dato del filo da torcere per un pò.
Disclaimer |
Vorrei ricordare che il software va comprato e� non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento � stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo che ogni sviluppatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Reversiamo al solo scopo informativo e per migliorare la nostra conoscenza del linguaggio Assembly.�