Mpeg Video Wizard
From UIC
Mpeg Video Wizard
Contents |
| Infos | |
|---|---|
| Author: | Johan Padan |
| Email: | |
| Website: | Home page |
| Date: | 10/04/2006 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | |
Introduzione
Mpeg Video Wizard MULTI DIMENSIONAL MPEG EDITOR.
A volte ci troviamo dei filmati (fatti da noi o scaricati dalla Rete) con un errore di sincronizzazione audio/video. Per correggere l'errore dobbiamo innanzitutto calcolare il ritardo dell'audio (in secondi) e poi usare un programma come Mpeg Video Wizard.
Tools & Files
URL o FTP del programma
Essay
Tramite PeId riesco a visualizzare che il programma è scritto in Microsoft Visual C++ 6.0, non è crittato e non è neppure packed !! E’ un buon inizio.
All’apertura del prg le buone notizie finiscono subito in quanto mi trovo davanti a questa videata:
le soluzioni possibili sono due:
o attivo il button “OK” in modo tale che possa predisporre dei breakpoint oppure riesco a trovare la sezione del programma che legge ogni carattere che l’utente digita nella casella di testo nel momento esatto in cui digita tramite breakpoint su messaggi del tipo VM_CHAR o VM_KEYDOWN. Opto per la prima soluzione mi sembra la più semplice. Purtroppo all’interno del programma non ci sono le chiamate classiche alle API per cui riesco, a tarda notte, a recuperare la sotto indicata chiamata come una delle responsabili del button “OK” disattivato:
questa rimanda a MFC42.#2642
Ecco la chiamata ad EnableWindow che impedisce l’attivazione del button “OK”.
La tecnica che voglio consolidare è scrivere una .dll che modifichi il comportamento del programma nel momento opportuno.
Se brekkate sulla call EnableWindow, vi accorgerete che appena mandate in esecuzione il programma effettua quattro chiamate a questa call per disattivare il button ad eccezione della terza che serve per mettere il flag a “Do not display this again “ sulla maschera “Software Registration” quindi per evitare che mi sparisca la maschera di registrazione devo scrivere un prg che mi renda sempre attivo il button ad eccezione del terzo passaggio.
La chiamata alla call EnableWindow verrà comunque sempre fatta a run time mentre digitate il serial per cui ho scritto queste quattro righe di assembly:
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data?
variab dd ?
.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax, TRUE
ret
DllEntry endp
Patch proc
add variab, 1
.IF variab !=3
MOV dword ptr [esp+8],1
.ELSE
MOV dword ptr [esp+8],0
ret
.ENDIF
ret
Patch endp
End DllEntry
Adesso linkate ed assemblate per ottenere la FirstDll.dll
Tramite iidKing create una nuova sezione all’interno dell’eseguibile e modificate le istruzioni all’interno della MFC42.dll tramite HexWorkShop come sotto riportato:
Fate ripartire il programma e a questo punto il button “OK” è attivo.
A questo punto dovrebbe essere più semplice mettere le trappole per vedere dove il programma verifica il mio serial. Tramite Olly (“All referenced text strings”) riesco ad individuare delle stringhe, che potrebbero essere dei serial, all’indirizzo 00403B06 e all’indirizzo 00403B31 ma non portano a nulla.
Devo ripiegare e fare del backtracing, questa routine ha delle local calls from 0040386E e 00403CDD, la prima a sua volta fa riferimento ad una local call from 004045A9 che a sua volta fa riferimento alla call a 004037D0 che a sua volta rimanda alla call all’indirizzo 004045A9. Siamo arrivati !!
Se modificate “brutalmente” il programma come sotto evidenziato parte senza nessuna verifica di serial e senza nessun controllo di evaluation period:
004045A9 CALL MPEGVIDE.004037D0 ...da noppare
004045B0 JE MPEGVIDE.004046CC ... da noppare
A lavoro ultimato mi sono accorto che se invece di recuperare il programma da un cd allegato ad una rivista avessi scaricato il prg direttamente dal sito avrei ottenuto un .exe perfettamente funzionante ma con una license key limitata a 30 giorni.
La procedura è esattamente quella sopra descritta evitando di creare una dll fittizia per attivare il button “OK”. Le modifiche sono le seguenti:
00405D3E JE .. da noppare
00405D58 JE.... da noppare
00405D5E JE .. modificare in JMP
Il risultato finale è sotto evidenziato:
Note Finali
Un bacio a N. moglie perfetta ed impareggiabile amante!!!!!
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 malevoli 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.




